MetaSlider - Version 3.6.0

Version Description

  • 2017/Nov/14 =

  • FEATURE: Allow a slide to be restored after deletion

  • FEATURE: Allow the background image to be changed

  • FEATURE: Adds a guided tour

  • FIX: Loads inline JS properly

  • FIX: FlexSlider touch events respect pause on hover setting

  • FIX: Allow for https image URLs

  • TRANSLATIONS: Addresses spelling/localization issues

  • TWEAK: Accessibility enhancements

  • TWEAK: Adds links to activation page

  • TWEAK: Updates FlexSlider to latest

  • TWEAK: Change the label "Meta Slider" to "MetaSlider"

  • TWEAK: Add dashboard notices

Download this release

Release Info

Developer DavidAnderson
Plugin Icon 128x128 MetaSlider
Version 3.6.0
Comparing to
See all releases

Code changes from version 3.5.1 to 3.6.0

Files changed (140) hide show
  1. admin/Notices.php +638 -0
  2. admin/Pages.php +162 -0
  3. admin/Tour.php +143 -0
  4. admin/assets/css/admin.css +1529 -0
  5. assets/metaslider/global.css → admin/assets/css/icon.css +2 -1
  6. admin/assets/css/notices.css +97 -0
  7. admin/assets/css/upgrade.css +172 -0
  8. admin/assets/fonts/interface/Interface-Bold.woff +0 -0
  9. admin/assets/fonts/interface/Interface-Bold.woff2 +0 -0
  10. admin/assets/fonts/interface/Interface-BoldItalic.woff +0 -0
  11. admin/assets/fonts/interface/Interface-BoldItalic.woff2 +0 -0
  12. admin/assets/fonts/interface/Interface-Medium.woff +0 -0
  13. admin/assets/fonts/interface/Interface-Medium.woff2 +0 -0
  14. admin/assets/fonts/interface/Interface-MediumItalic.woff +0 -0
  15. admin/assets/fonts/interface/Interface-MediumItalic.woff2 +0 -0
  16. admin/assets/fonts/interface/Interface-Regular.woff +0 -0
  17. admin/assets/fonts/interface/Interface-Regular.woff2 +0 -0
  18. admin/assets/fonts/interface/Interface-RegularItalic.woff +0 -0
  19. admin/assets/fonts/interface/Interface-RegularItalic.woff2 +0 -0
  20. {assets → admin/assets}/fonts/metaslider.eot +0 -0
  21. {assets → admin/assets}/fonts/metaslider.svg +0 -0
  22. {assets → admin/assets}/fonts/metaslider.ttf +0 -0
  23. {assets → admin/assets}/fonts/metaslider.woff +0 -0
  24. admin/assets/js/admin.js +728 -0
  25. admin/assets/js/tour.js +261 -0
  26. admin/assets/tether-shepherd/LICENSE +8 -0
  27. admin/assets/tether-shepherd/shepherd-theme-arrows-fix.css +5 -0
  28. admin/assets/tether-shepherd/shepherd-theme-arrows-fix.min.css +1 -0
  29. admin/assets/tether-shepherd/shepherd-theme-arrows-plain-buttons.css +215 -0
  30. admin/assets/tether-shepherd/shepherd-theme-arrows-plain-buttons.min.css +1 -0
  31. admin/assets/tether-shepherd/shepherd-theme-arrows.css +229 -0
  32. admin/assets/tether-shepherd/shepherd-theme-arrows.min.css +1 -0
  33. admin/assets/tether-shepherd/shepherd-theme-dark.css +246 -0
  34. admin/assets/tether-shepherd/shepherd-theme-dark.min.css +1 -0
  35. admin/assets/tether-shepherd/shepherd-theme-default.css +246 -0
  36. admin/assets/tether-shepherd/shepherd-theme-default.min.css +1 -0
  37. admin/assets/tether-shepherd/shepherd-theme-square-dark.css +248 -0
  38. admin/assets/tether-shepherd/shepherd-theme-square-dark.min.css +1 -0
  39. admin/assets/tether-shepherd/shepherd-theme-square.css +248 -0
  40. admin/assets/tether-shepherd/shepherd-theme-square.min.css +1 -0
  41. admin/assets/tether-shepherd/shepherd.js +745 -0
  42. admin/assets/tether-shepherd/shepherd.min.js +1 -0
  43. admin/assets/tether-shepherd/tether.js +1443 -0
  44. admin/assets/tether/LICENSE +8 -0
  45. admin/assets/tether/tether.js +1811 -0
  46. admin/assets/tether/tether.min.js +1 -0
  47. {assets → admin/assets/vendor}/colorbox/colorbox.css +0 -0
  48. {assets → admin/assets/vendor}/colorbox/images/border.png +0 -0
  49. {assets → admin/assets/vendor}/colorbox/images/controls.png +0 -0
  50. {assets → admin/assets/vendor}/colorbox/images/ie6/borderBottomCenter.png +0 -0
  51. {assets → admin/assets/vendor}/colorbox/images/ie6/borderBottomLeft.png +0 -0
  52. {assets → admin/assets/vendor}/colorbox/images/ie6/borderBottomRight.png +0 -0
  53. {assets → admin/assets/vendor}/colorbox/images/ie6/borderMiddleLeft.png +0 -0
  54. {assets → admin/assets/vendor}/colorbox/images/ie6/borderMiddleRight.png +0 -0
  55. {assets → admin/assets/vendor}/colorbox/images/ie6/borderTopCenter.png +0 -0
  56. {assets → admin/assets/vendor}/colorbox/images/ie6/borderTopLeft.png +0 -0
  57. {assets → admin/assets/vendor}/colorbox/images/ie6/borderTopRight.png +0 -0
  58. {assets → admin/assets/vendor}/colorbox/images/loading.gif +0 -0
  59. {assets → admin/assets/vendor}/colorbox/images/loading_background.png +0 -0
  60. {assets → admin/assets/vendor}/colorbox/images/overlay.png +0 -0
  61. {assets → admin/assets/vendor}/colorbox/jquery.colorbox-min.js +0 -0
  62. {assets → admin/assets/vendor}/tipsy/jquery.tipsy.js +0 -0
  63. {assets → admin/assets/vendor}/tipsy/tipsy.css +0 -0
  64. admin/images/features/auto-optimize.png +0 -0
  65. admin/images/features/automatic-clean-ups.png +0 -0
  66. admin/images/features/automatically cleans.png +0 -0
  67. admin/images/features/choice-n-flexibility.png +0 -0
  68. admin/images/features/displays-database-table-sta.png +0 -0
  69. admin/images/features/enables-disables-trackbacks.png +0 -0
  70. admin/images/features/enhanced-robustness.png +0 -0
  71. admin/images/features/keyy_logo.png +0 -0
  72. admin/images/features/logging-n-reporting.png +0 -0
  73. admin/images/features/metaslider_logo.png +0 -0
  74. admin/images/features/multisite-support.png +0 -0
  75. admin/images/features/number_of_weeks.png +0 -0
  76. admin/images/features/optimize-individual.png +0 -0
  77. admin/images/features/premium-support.png +0 -0
  78. admin/images/features/remove-unwanted-img.png +0 -0
  79. admin/images/features/scheduling.png +0 -0
  80. admin/images/features/updraftcentral_logo.png +0 -0
  81. admin/images/features/updraftplus_logo.png +0 -0
  82. admin/images/features/wpo_logo.png +0 -0
  83. admin/images/keyy_logo.png +0 -0
  84. admin/images/metaslider_logo.png +0 -0
  85. admin/images/metaslider_logo3.png +0 -0
  86. admin/images/metaslider_logo_large.png +0 -0
  87. admin/images/notices/keyy_logo.png +0 -0
  88. admin/images/notices/metaslider_logo.png +0 -0
  89. admin/images/notices/updraft_logo.png +0 -0
  90. admin/images/notices/wp_optimize_logo.png +0 -0
  91. admin/images/seasonal/black_friday.png +0 -0
  92. admin/images/seasonal/christmas.png +0 -0
  93. admin/images/seasonal/new_year.png +0 -0
  94. admin/images/seasonal/spring.png +0 -0
  95. admin/images/seasonal/summer.png +0 -0
  96. admin/images/updraft_logo.png +0 -0
  97. admin/images/wp_optimize_logo.png +0 -0
  98. admin/lib/Updraft_Notices.php +212 -0
  99. admin/lib/helpers.php +170 -0
  100. admin/views/notices/dashboard-notice.php +28 -0
  101. admin/views/notices/header-notice.php +31 -0
  102. admin/views/pages/upgrade.php +169 -0
  103. assets/metaslider/admin.css +0 -948
  104. assets/metaslider/admin.js +0 -388
  105. assets/metaslider/public.css +96 -37
  106. assets/sliders/flexslider/LICENSE.md +339 -0
  107. assets/sliders/flexslider/flexslider.css +255 -141
  108. assets/sliders/flexslider/flexslider.min.css +1 -0
  109. assets/sliders/flexslider/{jquery.flexslider-min.js → jquery.flexslider.js} +151 -97
  110. assets/sliders/flexslider/jquery.flexslider.min.js +1 -0
  111. assets/sliders/nivoslider/jquery.nivo.slider.pack.js +1 -1
  112. inc/metaslider.imagehelper.class.php +51 -51
  113. inc/metaslider.systemcheck.class.php +2 -2
  114. inc/metaslider.widget.class.php +3 -3
  115. inc/slide/metaslide.class.php +103 -83
  116. inc/slide/metaslide.image.class.php +125 -47
  117. inc/slider/metaslider.class.php +15 -13
  118. inc/slider/metaslider.flex.class.php +2 -2
  119. languages/ml-slider-de_DE.po +4 -4
  120. languages/ml-slider-es_ES.po +3 -3
  121. languages/ml-slider-fa_IR.po +3 -3
  122. languages/ml-slider-fr_FR.po +5 -5
  123. languages/ml-slider-he_IL.po +8 -8
  124. languages/ml-slider-hr_HR.po +4 -4
  125. languages/ml-slider-hu_HU.po +4 -4
  126. languages/ml-slider-ja.po +4 -4
  127. languages/ml-slider-nb_NO.po +3 -3
  128. languages/ml-slider-nl_NL.po +3 -3
  129. languages/ml-slider-pl_PL.po +3 -3
  130. languages/ml-slider-pt_BR.po +4 -4
  131. languages/ml-slider-ro_RO.po +4 -4
  132. languages/ml-slider-ru_RU.po +3 -3
  133. languages/ml-slider-uk.po +4 -4
  134. languages/ml-slider-zh_CN.po +3 -3
  135. languages/ml-slider-zh_TW.po +3 -3
  136. languages/ml-slider.mo +0 -0
  137. languages/ml-slider.po +0 -676
  138. languages/ml-slider.pot +1226 -0
  139. ml-slider.php +414 -447
  140. readme.txt +46 -32
admin/Notices.php ADDED
@@ -0,0 +1,638 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if (!defined('ABSPATH')) die('No direct access allowed');
4
+
5
+ if (!class_exists('Updraft_Notices_1_0')) require_once(METASLIDER_PATH.'admin/lib/Updraft_Notices.php');
6
+
7
+ class MetaSlider_Notices extends Updraft_Notices_1_0 {
8
+
9
+ /**
10
+ * @var object $ads - all ads
11
+ */
12
+ protected $ads;
13
+
14
+ /**
15
+ * @var object $notices_content
16
+ */
17
+ protected $notices_content;
18
+
19
+ /**
20
+ * @var object $plugin
21
+ */
22
+ protected $plugin;
23
+
24
+
25
+ /**
26
+ * Populates ad content and loads assets
27
+ */
28
+ public function __construct($plugin) {
29
+ $this->ads = $this->is_metasliderpro_installed() ? $this->pro_notices() : $this->lite_notices();
30
+
31
+ // To avoid showing the user ads off the start, lets wait
32
+ $this->notices_content = ($this->ad_delay_has_finished()) ? $this->ads : array();
33
+ $this->plugin = $plugin;
34
+
35
+ add_action('admin_enqueue_scripts', array($this, 'add_notice_assets'));
36
+ add_action('wp_ajax_notice_handler', array($this, 'ajax_notice_handler'));
37
+ add_action('admin_notices', array($this, 'show_dashboard_notices'));
38
+ }
39
+
40
+ /**
41
+ * Handles assets for the notices
42
+ */
43
+ public function add_notice_assets() {
44
+ wp_enqueue_style('ml-slider-notices-css', METASLIDER_ADMIN_URL . 'assets/css/notices.css', false, METASLIDER_VERSION);
45
+ wp_localize_script('jquery', 'metaslider_notices', array(
46
+ 'handle_notices_nonce' => wp_create_nonce('metaslider_handle_notices_nonce')
47
+ ));
48
+ }
49
+
50
+ /**
51
+ * Deprecated for MetaSlider for now
52
+ */
53
+ public function notices_init() { return; }
54
+
55
+ /**
56
+ * Returns notices that free/lite users should see. dismiss_time should match the key
57
+ * hide_time is in weeks. Use a string to hide for 9999 weeks.
58
+ * @return array returns an array of notices
59
+ */
60
+ protected function lite_notices() {
61
+ return array_merge(array(
62
+ 'updraftplus' => array(
63
+ 'title' => __('Always backup WordPress to avoid losing your site!', 'ml-slider'),
64
+ 'text' => __("UpdraftPlus is the world's #1 backup plugin from the makers of MetaSlider. Backup to the cloud, on a schedule and restore with 1 click!", 'ml-slider'),
65
+ 'image' => 'updraft_logo.png',
66
+ 'button_link' => 'https://wordpress.org/plugins/updraftplus/',
67
+ 'button_meta' => 'updraftplus',
68
+ 'dismiss_time' => 'updraftplus',
69
+ 'hide_time' => 12,
70
+ 'supported_positions' => array('header', 'dashboard'),
71
+ 'validity_function' => 'is_updraftplus_installed',
72
+ ),
73
+ 'keyy' => array(
74
+ 'title' => __('Keyy: Instant and secure logon with a wave of your phone', 'ml-slider'),
75
+ 'text' => __('No more forgotten passwords. Find out more about our revolutionary new WordPress plugin', 'ml-slider'),
76
+ 'image' => 'keyy_logo.png',
77
+ 'button_link' => 'https://getkeyy.com/?utm_source=metaslider-plugin-page&utm_medium=banner',
78
+ 'button_meta' => 'keyy',
79
+ 'dismiss_time' => 'keyy',
80
+ 'hide_time' => 12,
81
+ 'supported_positions' => array('header', 'dashboard'),
82
+ 'validity_function' => 'is_keyy_installed',
83
+ ),
84
+ 'updraftcentral' => array(
85
+ 'title' => __('Save Time and Money. Manage multiple WordPress sites from one location.', 'ml-slider'),
86
+ 'text' => __('UpdraftCentral is a highly efficient way to take backup, update and manage multiple WP sites from one location', 'ml-slider'),
87
+ 'image' => 'updraft_logo.png',
88
+ 'button_link' => 'https://updraftcentral.com?utm_source=metaslider-plugin-page&utm_medium=banner',
89
+ 'button_meta' => 'updraftcentral',
90
+ 'dismiss_time' => 'updraftcentral',
91
+ 'hide_time' => 12,
92
+ 'supported_positions' => array('header', 'dashboard'),
93
+ 'validity_function' => 'is_updraftcentral_installed',
94
+ ),
95
+ 'rate_plugin' => array(
96
+ 'title' => __('Like MetaSlider and have a minute to spare?', 'ml-slider'),
97
+ 'text' => __('Please help MetaSlider by giving a positive review at wordpress.org.', 'ml-slider'),
98
+ 'image' => 'metaslider_logo.png',
99
+ 'button_link' => 'https://wordpress.org/support/plugin/ml-slider/reviews/?rate=5#new-post',
100
+ 'button_meta' => 'review',
101
+ 'dismiss_time' => 'rate_plugin',
102
+ 'hide_time' => 12,
103
+ 'supported_positions' => array('header', 'dashboard'),
104
+ ),
105
+ 'lite_survey' => array(
106
+ 'title' => __('Help us to get even better MetaSlider', 'ml-slider'),
107
+ 'text' => __('Let us know how you use MetaSlider by answering 4 simple questions. We will make MetaSlider to suit you better.', 'ml-slider'),
108
+ 'image' => 'metaslider_logo.png',
109
+ 'button_link' => 'https://www.metaslider.com/survey?utm_source=metaslider-plugin-page&utm_medium=banner',
110
+ 'button_meta' => 'lets_start',
111
+ 'dismiss_time' => 'lite_survey',
112
+ 'hide_time' => 12,
113
+ 'supported_positions' => array('header'),
114
+ ),
115
+ 'pro_layers' => array(
116
+ 'title' => __('Spice up your site with animated layers and video slides', 'ml-slider'),
117
+ 'text' => __('With the MetaSlider Add-on pack you can give your slideshows a professional look!', 'ml-slider'),
118
+ 'image' => 'metaslider_logo.png',
119
+ 'button_link' => apply_filters('metaslider_hoplink', 'https://www.metaslider.com/upgrade') . '?utm_source=metaslider-plugin-page&utm_medium=banner',
120
+ 'button_meta' => 'ml-slider',
121
+ 'dismiss_time' => 'pro_layers',
122
+ 'hide_time' => 12,
123
+ 'supported_positions' => array('header'),
124
+ ),
125
+ 'pro_features' => array(
126
+ 'title' => __('Increase your revenue and conversion with video slides and many more features', 'ml-slider'),
127
+ 'text' => __('Upgrade today to benefit from many more premium features. Find out more.', 'ml-slider'),
128
+ 'image' => 'metaslider_logo.png',
129
+ 'button_link' => apply_filters('metaslider_hoplink', 'https://www.metaslider.com/upgrade') . '?utm_source=metaslider-plugin-page&utm_medium=banner',
130
+ 'button_meta' => 'ml-slider',
131
+ 'dismiss_time' => 'pro_features',
132
+ 'hide_time' => 12,
133
+ 'supported_positions' => array('header'),
134
+ ),
135
+ 'translation' => array(
136
+ 'title' => __('Can you translate? Want to improve MetaSlider for speakers of your language?', 'ml-slider'),
137
+ 'text' => __('Please go here for instructions - it is easy.', 'ml-slider'),
138
+ 'image' => 'metaslider_logo.png',
139
+ 'button_link' => 'https://translate.wordpress.org/projects/wp-plugins/ml-slider',
140
+ 'button_meta' => 'lets_start',
141
+ 'dismiss_time' => 'translation',
142
+ 'hide_time' => 12,
143
+ 'supported_positions' => array('header'),
144
+ 'validity_function' => 'translation_needed',
145
+ ),
146
+ 'thankyou' => array(
147
+ 'title' => __('Thank you for installing MetaSlider', 'ml-slider'),
148
+ 'text' => __('Supercharge & secure your WordPress site with our other top plugins:', 'ml-slider'),
149
+ 'image' => 'metaslider_logo_large.png',
150
+ 'dismiss_time' => 'thankyou',
151
+ 'hide_time' => 24,
152
+ 'mega' => true,
153
+ 'supported_positions' => array('dashboard'),
154
+ ),
155
+ ), $this->valid_seasonal_notices());
156
+ }
157
+
158
+ /**
159
+ * Premium user notices, if any.
160
+ * @return string
161
+ */
162
+ protected function pro_notices() {
163
+ return array(
164
+ 'pro_survey' => array(
165
+ 'title' => __("We’re making changes and need your help.", 'ml-slider'),
166
+ 'text' => __('If you could spare a minute, we would like to ask you 4 easy questions about how you use MetaSlider. Your voice is important to us!', 'ml-slider'),
167
+ 'image' => 'metaslider_logo.png',
168
+ 'button_link' => 'https://www.metaslider.com/survey-pro',
169
+ 'button_meta' => 'lets_start',
170
+ 'dismiss_time' => 'pro_survey',
171
+ 'hide_time' => __('forever', 'ml-slider'),
172
+ 'supported_positions' => array('header'),
173
+ ),
174
+ );
175
+ }
176
+
177
+ /**
178
+ * Seasonal Notices. Note that if dismissed, they will stay dismissed for two weeks
179
+ * which is the default for any notice. Since the parent class forces these,
180
+ * there's no need to edit the key/dismiss_time
181
+ * @return string
182
+ */
183
+ protected function seasonal_notices() {
184
+ return array(
185
+ 'blackfriday' => array(
186
+ 'title' => __('Black Friday - 50% off the MetaSlider Add-on Pack until November 30th', 'ml-slider'),
187
+ 'text' => __('To benefit, use this discount code:', 'ml-slider').' ',
188
+ 'image' => 'seasonal/black_friday.png',
189
+ 'button_link' => apply_filters('metaslider_hoplink', 'https://www.metaslider.com/upgrade') . '?utm_source=metaslider-plugin-page&utm_medium=banner',
190
+ 'button_meta' => 'ml-slider',
191
+ 'dismiss_time' => 'blackfriday',
192
+ 'discount_code' => 'blackfriday2017sale',
193
+ 'valid_from' => '2017-11-20 00:00:00',
194
+ 'valid_to' => '2017-11-30 23:59:59',
195
+ 'hide_time' => __('until next year', 'ml-slider'),
196
+ 'supported_positions' => array('header', 'dashboard'),
197
+ ),
198
+ 'christmas' => array(
199
+ 'title' => __('Christmas sale - 50% off the MetaSlider Add-on Pack until December 25th', 'ml-slider'),
200
+ 'text' => __('To benefit, use this discount code:', 'ml-slider').' ',
201
+ 'image' => 'seasonal/christmas.png',
202
+ 'button_link' => apply_filters('metaslider_hoplink', 'https://www.metaslider.com/upgrade') . '?utm_source=metaslider-plugin-page&utm_medium=banner',
203
+ 'button_meta' => 'ml-slider',
204
+ 'dismiss_time' => 'christmas',
205
+ 'discount_code' => 'christmas2017sale',
206
+ 'valid_from' => '2017-12-01 00:00:00',
207
+ 'valid_to' => '2017-12-25 23:59:59',
208
+ 'hide_time' => __('until next year', 'ml-slider'),
209
+ 'supported_positions' => array('header', 'dashboard'),
210
+ ),
211
+ 'newyear' => array(
212
+ 'title' => __('Happy New Year - 50% off the MetaSlider Add-on Pack until January 1st', 'ml-slider'),
213
+ 'text' => __('To benefit, use this discount code:', 'ml-slider').' ',
214
+ 'image' => 'seasonal/new_year.png',
215
+ 'button_link' => apply_filters('metaslider_hoplink', 'https://www.metaslider.com/upgrade') . '?utm_source=metaslider-plugin-page&utm_medium=banner',
216
+ 'button_meta' => 'ml-slider',
217
+ 'dismiss_time' => 'newyear',
218
+ 'discount_code' => 'newyear2018sale',
219
+ 'valid_from' => '2017-12-26 00:00:00',
220
+ 'valid_to' => '2018-01-14 23:59:59',
221
+ 'hide_time' => __('until next year', 'ml-slider'),
222
+ 'supported_positions' => array('header', 'dashboard'),
223
+ ),
224
+ 'spring' => array(
225
+ 'title' => __('Spring sale - 50% off the MetaSlider Add-on Pack until April 31st', 'ml-slider'),
226
+ 'text' => __('To benefit, use this discount code:', 'ml-slider').' ',
227
+ 'image' => 'seasonal/spring.png',
228
+ 'button_link' => apply_filters('metaslider_hoplink', 'https://www.metaslider.com/upgrade') . '?utm_source=metaslider-plugin-page&utm_medium=banner',
229
+ 'button_meta' => 'ml-slider',
230
+ 'dismiss_time' => 'spring',
231
+ 'discount_code' => 'spring2018sale',
232
+ 'valid_from' => '2018-04-01 00:00:00',
233
+ 'valid_to' => '2018-04-30 23:59:59',
234
+ 'hide_time' => __('until next year', 'ml-slider'),
235
+ 'supported_positions' => array('header', 'dashboard'),
236
+ ),
237
+ 'summer' => array(
238
+ 'title' => __('Summer sale - 50% off the MetaSlider Add-on Pack until July 31st', 'ml-slider'),
239
+ 'text' => __('To benefit, use this discount code:', 'ml-slider').' ',
240
+ 'image' => 'seasonal/summer.png',
241
+ 'button_link' => apply_filters('metaslider_hoplink', 'https://www.metaslider.com/upgrade') . '?utm_source=metaslider-plugin-page&utm_medium=banner',
242
+ 'button_meta' => 'ml-slider',
243
+ 'dismiss_time' => 'summer',
244
+ 'discount_code' => 'summer2018sale',
245
+ 'valid_from' => '2018-07-01 00:00:00',
246
+ 'valid_to' => '2018-07-31 23:59:59',
247
+ 'hide_time' => __('until next year', 'ml-slider'),
248
+ 'supported_positions' => array('header', 'dashboard'),
249
+ )
250
+ );
251
+ }
252
+
253
+ /**
254
+ * These appear inside a mega ad.
255
+ * @return string
256
+ */
257
+ protected function mega_notice_parts() {
258
+ return array(
259
+ 'ms_pro' => array(
260
+ 'title' => __('MetaSlider Add-on Pack:'),
261
+ 'text' => __('Increase your conversion rate with video slides and many more options.', 'ml-slider'),
262
+ 'image' => '',
263
+ 'button_link' => apply_filters('metaslider_hoplink', 'https://www.metaslider.com/upgrade') . '?utm_source=metaslider-plugin-page&utm_medium=banner',
264
+ 'button_meta' => 'ml-slider',
265
+ ),
266
+ // 'wpo_pro' => array(
267
+ // 'title' => __('WP-Optimize Premium'),
268
+ // 'text' => __('offers unparalleled choice and flexibility, allowing you to select one or a combination of over a dozen optimization options.', 'ml-slider'),
269
+ // 'image' => '',
270
+ // 'button_link' => 'https://getwpo.com?utm_source=metaslider-plugin-page&utm_medium=banner',
271
+ // 'button_meta' => 'ml-slider',
272
+ // ),
273
+ // 'udp_pro' => array(
274
+ // 'title' => __('UpdraftPlus Premium'),
275
+ // 'text' => __('provides personal support, the ability to copy sites, more storage destinations, encrypted backups for security, multiple backup destinations, better reporting, no adverts and plenty more.', 'ml-slider'),
276
+ // 'image' => '',
277
+ // 'button_link' => 'https://updraftplus.com?utm_source=metaslider-plugin-page&utm_medium=banner',
278
+ // 'button_meta' => 'ml-slider',
279
+ // ),
280
+ 'udp' => array(
281
+ 'title' => __('UpdraftPlus'),
282
+ 'text' => __('simplifies backups and restoration. It is the world\'s highest ranking and most popular scheduled backup plugin, with over a million currently-active installs.', 'ml-slider'),
283
+ 'image' => '',
284
+ 'button_link' => 'https://wordpress.org/plugins/updraftplus/',
285
+ 'button_meta' => 'updraftplus',
286
+ ),
287
+ 'wpo' => array(
288
+ 'title' => __('WP-Optimize:'),
289
+ 'text' => __('auto-clean your WordPress database so that it runs at maximum efficiency.', 'ml-slider'),
290
+ 'image' => '',
291
+ 'button_link' => 'https://wordpress.org/plugins/wp-optimize/',
292
+ 'button_meta' => 'wp-optimize',
293
+ ),
294
+ 'keyy' => array(
295
+ 'title' => __('Keyy:'),
296
+ 'text' => htmlspecialchars(__('Simple & secure login with a wave of your phone.', 'ml-slider')),
297
+ 'image' => '',
298
+ 'button_link' => 'https://getkeyy.com/?utm_source=metaslider-plugin-page&utm_medium=banner',
299
+ 'button_meta' => 'keyy',
300
+ ),
301
+ 'updraftcentral' => array(
302
+ 'title' => __('UpdraftCentral'),
303
+ 'text' => __('is a highly efficient way to manage, update and backup multiple websites from one place.', 'ml-slider'),
304
+ 'image' => '',
305
+ 'button_link' => 'https://updraftcentral.com?utm_source=metaslider-plugin-page&utm_medium=banner',
306
+ 'button_meta' => 'updraftcentral',
307
+ ),
308
+ );
309
+ }
310
+
311
+ /**
312
+ * Check to disable ads on the Pro version. The parent function returns
313
+ * false if installed, so this is reversed and shouldn't be used for the validity function
314
+ * @return bool
315
+ */
316
+ protected function is_metasliderpro_installed() {
317
+ return !parent::is_plugin_installed('ml-slider-pro', false);
318
+ }
319
+
320
+ /**
321
+ * Check to see if UpdraftPlus is installed
322
+ * @return bool
323
+ */
324
+ protected function is_updraftplus_installed() {
325
+ return parent::is_plugin_installed('updraftplus', false);
326
+ }
327
+
328
+ /**
329
+ * Check to see if UpdraftPlus is installed
330
+ * @return bool
331
+ */
332
+ protected function is_keyy_installed() {
333
+ return parent::is_plugin_installed('keyy', false);
334
+ }
335
+
336
+ /**
337
+ * Check to see if UpdraftCentral is installed
338
+ * @return bool
339
+ */
340
+ protected function is_updraftcentral_installed() {
341
+ return parent::is_plugin_installed('updraftcentral', false);
342
+ }
343
+
344
+ /**
345
+ * Checks if the user agent isn't set as en_GB or en_US, and if the language file doesn't exist
346
+ * @param string $plugin_base_dir
347
+ * @param string $product_name
348
+ * @return bool
349
+ */
350
+ protected function translation_needed($plugin_base_dir = null, $product_name = null) {
351
+ return parent::translation_needed(METASLIDER_PATH, 'ml-slider');
352
+ }
353
+
354
+ /**
355
+ * This method checks to see if the ad has been dismissed
356
+ * @param string $ad_identifier - identifier for the ad
357
+ * @return bool returns true when we dont want to show the ad
358
+ */
359
+ protected function check_notice_dismissed($ad_identifier) {
360
+ return (time() < get_option("ms_hide_{$ad_identifier}_ads_until"));
361
+ }
362
+
363
+ /**
364
+ * Returns all active seasonal ads
365
+ * @return array
366
+ */
367
+ protected function valid_seasonal_notices() {
368
+ $valid = array();
369
+ $time_now = time();
370
+ // $time_now = strtotime('2017-11-20 00:00:01'); // Black Friday
371
+ // $time_now = strtotime('2017-12-01 00:00:01'); // XMAS
372
+ // $time_now = strtotime('2017-12-26 00:00:01'); // NY
373
+ // $time_now = strtotime('2018-04-01 00:00:01'); // Spring
374
+ // $time_now = strtotime('2018-07-01 00:00:01'); // Summer
375
+ foreach($this->seasonal_notices() as $ad_identifier => $notice) {
376
+ $valid_from = strtotime($notice['valid_from']);
377
+ $valid_to = strtotime($notice['valid_to']);
378
+ if ($valid_from < $time_now && $time_now <= $valid_to) {
379
+ $valid[$ad_identifier] = $notice;
380
+ }
381
+ }
382
+ return $valid;
383
+ }
384
+
385
+ /**
386
+ * The logic is handled elsewhere. This being true does not skip
387
+ * the seasonal notices. Overrides parent function
388
+ * @return array
389
+ */
390
+ protected function skip_seasonal_notices($notice_data) {
391
+ return true;
392
+ }
393
+
394
+ /**
395
+ * Checks whether this is an ad page - hard-coded
396
+ * @return bool
397
+ */
398
+ protected function is_page_with_ads() {
399
+ global $pagenow;
400
+ $page = isset($_GET['page']) ? $_GET['page'] : '';
401
+
402
+ // I'm thinking to limit the check to the actual settings page for now
403
+ // This way, if the activaye the plugin but don't start using it until
404
+ // a few weeks after, it won't bother them with ads.
405
+ // return ('index.php' === $pagenow) || ($page === 'metaslider');
406
+ return ($page === 'metaslider');
407
+ }
408
+
409
+ /**
410
+ * This method checks to see if the ad waiting period is over (2 weeks)
411
+ * If not, it will set a two week time
412
+ * @return bool returns true when we dont want to show the ad
413
+ */
414
+ protected function ad_delay_has_finished() {
415
+
416
+ if (metaslider_is_pro_installed()) {
417
+
418
+ // If they are pro don't check anything but show the pro ad.
419
+ return true;
420
+ }
421
+
422
+ // Disable this for now so that after a dismiss, ads hide for 24 hours
423
+ // if (get_option("ms_ads_first_seen_on")) {
424
+
425
+ // // They have seen ads before which means the delay is over
426
+ // return true;
427
+ // }
428
+
429
+
430
+ $delay = get_option("ms_hide_all_ads_until");
431
+
432
+ // Only start the timer if they see a page that has ads
433
+ if (!$this->is_page_with_ads() && !$delay) {
434
+ return false;
435
+ }
436
+ if (!$delay) {
437
+
438
+ // Set the delay for when to see an ad, 2 weeks; returns false
439
+ return !update_option("ms_hide_all_ads_until", time() + 2*7*86400);
440
+ } else if ((time() > $delay) && !get_option("ms_ads_first_seen_on")) {
441
+
442
+ // Note the time they first saw ads
443
+ update_option("ms_ads_first_seen_on", time());
444
+
445
+ // Now that they can see ads, make sure the rate_plugin is shown first
446
+ // TODO: Enable this next time
447
+ // $notices = $this->lite_notices();
448
+ // $this->ads = array('rate_plugin' => $notices['rate_plugin']);
449
+ return true;
450
+ } else if (time() < $delay) {
451
+
452
+ // This means an ad was dismissed and there's a 24h delay
453
+ return false;
454
+ } else if (get_option("ms_ads_first_seen_on")) {
455
+
456
+ // This means the delay has elapsed, the 24hr period expired
457
+ // and there are still ads that haven't been dismissed
458
+ return true;
459
+ }
460
+ // Default to not show an ad, in case there's some error
461
+ return false;
462
+ }
463
+
464
+ /*
465
+ * Method to handle dashboard notices
466
+ */
467
+ public function show_dashboard_notices() {
468
+ $current_page = get_current_screen();
469
+ if ('dashboard' === $current_page->base && metaslider_sees_notices($this->plugin)) {
470
+
471
+ // Override the delay to show the thankyou notice on activation
472
+ // if (!empty($_GET['ms_activated'])) {
473
+ // $lite_notices = $this->lite_notices();
474
+ // $this->notices_content['thankyou'] = $lite_notices['thankyou'];
475
+ // }
476
+ echo $this->do_notice(false, 'dashboard', true);
477
+ }
478
+ }
479
+
480
+ /**
481
+ * Selects the template and returns or displays the notice
482
+ * @param array $notice_information - variable names/values to pass through to the template
483
+ * @param bool $return_instead_of_echo - whether to
484
+ * @param string $position - where the notice is being displayed
485
+ * @return null|string - depending on the value of $return_instead_of_echo
486
+ */
487
+ protected function render_specified_notice($notice_information, $return_instead_of_echo = false, $position = 'header') {
488
+ $views = array(
489
+ 'header' => 'header-notice.php',
490
+ 'dashboard' => 'dashboard-notice.php',
491
+ );
492
+ $view = isset($views[$position]) ? $views[$position] : 'header-notice.php';
493
+ return $this->include_template($view, $return_instead_of_echo, $notice_information);
494
+ }
495
+
496
+ /**
497
+ * Displays or returns the template
498
+ * @param string $path file name of the template
499
+ * @param bool $return_instead_of_echo
500
+ * @param array $args
501
+ * @return null|string
502
+ */
503
+ public function include_template($path, $return_instead_of_echo = false, $args = array()) {
504
+ if ($return_instead_of_echo) ob_start();
505
+
506
+ extract($args);
507
+ if (is_int($hide_time)) {
508
+ $hide_time = $hide_time . ' ' . __('weeks', 'ml-slider');
509
+ }
510
+ include METASLIDER_PATH.'admin/views/notices/'.$path;
511
+
512
+ if ($return_instead_of_echo) return ob_get_clean();
513
+ }
514
+
515
+ /**
516
+ * Builds a link based on the type of notice being requested
517
+ * @param string $link - the URL to link to
518
+ * @param string $type - which notice is being displayed
519
+ * @return string - the resulting HTML
520
+ */
521
+ public function get_button_link($link, $type) {
522
+ $messages = array(
523
+ 'updraftplus' => __('Get UpdraftPlus', 'ml-slider'),
524
+ 'keyy' => __('Get Keyy', 'ml-slider'),
525
+ 'wp-optimize' => __('Optimize today', 'ml-slider'),
526
+ 'updraftcentral' => __('Get UpdraftCentral', 'ml-slider'),
527
+ 'lets_start' => __('Let\'s Start', 'ml-slider'),
528
+ 'review' => __('Review MetaSlider', 'ml-slider'),
529
+ 'ml-slider' => __('Find out more', 'ml-slider'),
530
+ 'signup' => __('Sign up', 'ml-slider'),
531
+ 'go_there' => __('Go there', 'ml-slider')
532
+ );
533
+ $message = isset($messages[$type]) ? $messages[$type] : __('Read more', 'ml-slider');
534
+ $link = apply_filters('updraftplus_com_link', $link);
535
+
536
+ return '<a class="updraft_notice_link" href="' . esc_url($link) . '">' . $message . '</a>';
537
+ }
538
+
539
+ /**
540
+ * Handles any notice related ajax calls
541
+ * @return string - (JSON) Sends a success response unless an error is encountered
542
+ */
543
+ public function ajax_notice_handler() {
544
+ if (!wp_verify_nonce($_REQUEST['_wpnonce'], 'metaslider_handle_notices_nonce')) {
545
+ return wp_send_json_error(array(
546
+ 'message' => __('The security check failed. Please refresh the page and try again.', 'ml-slider')
547
+ ), 401);
548
+ }
549
+
550
+ if (is_wp_error($ad_data = $this->ad_exists($_POST['ad_identifier']))) {
551
+ return wp_send_json_error(array(
552
+ 'message' => __('This item does not exist. Please refresh the page and try again.', 'ml-slider')
553
+ ), 401);
554
+ }
555
+
556
+ $result = $this->dismiss_ad($ad_data['dismiss_time'], $ad_data['hide_time']);
557
+
558
+ if (is_wp_error($result)) {
559
+ return wp_send_json_error(array(
560
+ 'message' => $result->get_error_message()
561
+ ), 409);
562
+ }
563
+
564
+ return wp_send_json_success(array(
565
+ 'message' => __('The option was successfully updated', 'ml-slider'),
566
+ ), 200);
567
+ }
568
+
569
+ /**
570
+ * Returns the available ads that havent been dismissed by the user
571
+ * @param string|array the location for the ad
572
+ * @return array the identifier for the ad
573
+ */
574
+ public function active_ads($location = 'header', $bypass_delay = false) {
575
+ $dismissed_ads = array();
576
+
577
+ $ads = ($bypass_delay) ? $this->ads : $this->notices_content;
578
+
579
+ // Filter through all site options (cached)
580
+ foreach(wp_load_alloptions() as $key => $value){
581
+ if (strpos($key, 'ms_hide_') && strpos($key, '_ads_until')) {
582
+ $key = str_replace(array('ms_hide_', '_ads_until'), '', $key);
583
+ $dismissed_ads[$key] = $value;
584
+ }
585
+ }
586
+
587
+ // Filter out if the dismiss time has expired, then compare to the database
588
+ $valid_ads = array();
589
+ foreach ($ads as $ad_identifier => $values) {
590
+ $is_valid = isset($values['validity_function']) ? call_user_func(array($this, $values['validity_function'])) : true;
591
+ $not_dismissed = !$this->check_notice_dismissed($ad_identifier);
592
+ $is_supported = in_array($location, $values['supported_positions']);
593
+ if ($is_valid && $not_dismissed && $is_supported) {
594
+ $valid_ads[$ad_identifier] = $values;
595
+ }
596
+ }
597
+
598
+ return array_diff_key($valid_ads, $dismissed_ads);
599
+ }
600
+
601
+ /**
602
+ * Returns all possible ads or the specified identifier
603
+ * @param string $ad_identifier
604
+ * @return string|null the data of the ad
605
+ */
606
+ public function get_ad($ad_identifier = null) {
607
+ $all_notices = array_merge($this->pro_notices(), $this->lite_notices());
608
+ return is_null($ad_identifier) ? $all_notices : $all_notices['ad_identifier'];
609
+ }
610
+
611
+ /**
612
+ * Checks if the ad identifier exists in any of the ads above
613
+ * @param string $ad_identifier
614
+ * @return bool the data of the ad
615
+ */
616
+ public function ad_exists($ad_identifier) {
617
+ $all_notices = array_merge($this->pro_notices(), $this->lite_notices());
618
+ return isset($all_notices[$ad_identifier]) ? $all_notices[$ad_identifier] : new WP_Error('bad_call', __('The requested data does not exist.', 'ml-slider'), array('status' => 401));
619
+ }
620
+
621
+ /**
622
+ * Updates the stored value for how long to hide the ads
623
+ * @param string $ad_identifier
624
+ * @param int|string time in weeks or a string to show
625
+ * @return bool|WP_Error whether the update was a success
626
+ */
627
+ public function dismiss_ad($ad_identifier, $weeks) {
628
+
629
+ // if the time isn't specified it will hide forever (9999 weeks)
630
+ $weeks = is_int($weeks) ? $weeks : 9999;
631
+ $result = update_option("ms_hide_{$ad_identifier}_ads_until", time() + $weeks*7*86400);
632
+
633
+ // Hide all ads for 24 hours
634
+ update_option("ms_hide_all_ads_until", time() + 1*86400);
635
+
636
+ return $result ? $result : new WP_Error('update_failed', __('The attempt to update the option failed.', 'ml-slider'), array('status' => 409));
637
+ }
638
+ }
admin/Pages.php ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * Entry point for building the wordpress admin pages.
5
+ * Temporarily extends the MetaSlider Class until more refactoring can be done.
6
+ */
7
+
8
+ Class MetaSlider_Admin_Pages extends MetaSliderPlugin {
9
+
10
+ /**
11
+ * @property string $capability - The minimum capability to view the admin page
12
+ */
13
+ private $capability;
14
+
15
+ /**
16
+ * @property object $plugin - The MetaSlider plugin class
17
+ */
18
+ private $plugin;
19
+
20
+ /*
21
+ * @property string $current_page - The current admin page
22
+ */
23
+ private $current_page;
24
+
25
+ /**
26
+ * Sets up the notices, security and loads assets for the admin page
27
+ */
28
+ public function __construct($plugin) {
29
+ $this->plugin = $plugin;
30
+ $this->capability = apply_filters('metaslider_capability', 'edit_others_posts');
31
+ $this->notices = new MetaSlider_Notices($plugin);
32
+ $this->tour = new MetaSlider_Tour($plugin, 'toplevel_page_metaslider');
33
+ add_action('admin_enqueue_scripts', array($this, 'load_icon_css'));
34
+ add_action('admin_enqueue_scripts', array($this, 'load_upgrade_page_assets'));
35
+ }
36
+
37
+ /**
38
+ * Loads the icon on the top levelmenu page name
39
+ */
40
+ public function load_icon_css() {
41
+ wp_enqueue_style('metaslider-global', METASLIDER_ADMIN_URL . 'assets/css/icon.css', array(), METASLIDER_VERSION);
42
+ }
43
+
44
+ /**
45
+ * Loads in the overlay assets
46
+ */
47
+ public function load_overlay() {
48
+ wp_enqueue_style('metaslider-colorbox-styles', METASLIDER_ADMIN_URL . 'assets/vendor/colorbox/colorbox.css', false, METASLIDER_VERSION);
49
+ wp_enqueue_script('metaslider-colorbox', METASLIDER_ADMIN_URL . 'assets/vendor/colorbox/jquery.colorbox-min.js', array('jquery'), METASLIDER_VERSION, true);
50
+ }
51
+
52
+ /**
53
+ * Loads in tooltips
54
+ */
55
+ public function load_tooltips() {
56
+ wp_enqueue_style('metaslider-tipsy-styles', METASLIDER_ADMIN_URL . 'assets/vendor/tipsy/tipsy.css', false, METASLIDER_VERSION);
57
+ wp_enqueue_script('metaslider-tipsy', METASLIDER_ADMIN_URL . 'assets/vendor/tipsy/jquery.tipsy.js', array('jquery'), METASLIDER_VERSION, true);
58
+ }
59
+
60
+ /**
61
+ * Loads in custom javascript
62
+ */
63
+ public function load_javascript() {
64
+
65
+ wp_enqueue_media();
66
+ wp_enqueue_script('jquery-ui-core');
67
+ wp_enqueue_script('jquery-ui-sortable');
68
+
69
+ wp_register_script('metaslider-admin-script', METASLIDER_ADMIN_URL . 'assets/js/admin.js', array('jquery'), METASLIDER_VERSION, true);
70
+ wp_localize_script('metaslider-admin-script', 'metaslider', array(
71
+ 'url' => __("URL", "ml-slider"),
72
+ 'caption' => __("Caption", "ml-slider"),
73
+ 'new_window' => __("New Window", "ml-slider"),
74
+ 'confirm' => __("Are you sure?", "ml-slider"),
75
+ 'restore_language' => __("Undo", "ml-slider"),
76
+ 'restored_language' => __("Slide restored", "ml-slider"),
77
+ 'deleted_language' => __("Slide deleted", "ml-slider"),
78
+ 'click_to_undo_language' => __("Press to undo", "ml-slider"),
79
+ 'ajaxurl' => admin_url('admin-ajax.php'),
80
+ 'update_image' => __("Select replacement image", "ml-slider"),
81
+ 'resize_nonce' => wp_create_nonce('metaslider_resize'),
82
+ 'create_slide_nonce' => wp_create_nonce('metaslider_create_slide'),
83
+ 'delete_slide_nonce' => wp_create_nonce('metaslider_delete_slide'),
84
+ 'undelete_slide_nonce' => wp_create_nonce('metaslider_undelete_slide'),
85
+ 'update_slide_image_nonce' => wp_create_nonce('metaslider_update_slide_image'),
86
+ 'handle_notices_nonce' => wp_create_nonce('metaslider_handle_notices_nonce'),
87
+ 'iframeurl' => admin_url('admin-post.php?action=metaslider_preview'),
88
+ 'useWithCaution' => __("Caution: This setting is for advanced developers only. If you're unsure, leave it checked.", "ml-slider")
89
+ ));
90
+ wp_enqueue_script('metaslider-admin-script');
91
+ do_action('metaslider_register_admin_scripts');
92
+ }
93
+
94
+ /**
95
+ * Loads in custom styling for upgrade page
96
+ */
97
+ public function load_upgrade_page_assets() {
98
+ if ('upgrade' == $this->current_page) {
99
+ wp_enqueue_style('metaslider-upgrade-styles', METASLIDER_ADMIN_URL . 'assets/css/upgrade.css', false, METASLIDER_VERSION);
100
+ }
101
+ }
102
+
103
+ /**
104
+ * Loads in custom styling
105
+ */
106
+ public function load_styles() {
107
+ wp_enqueue_style('metaslider-admin-styles', METASLIDER_ADMIN_URL . 'assets/css/admin.css', false, METASLIDER_VERSION);
108
+
109
+ // Hook to load more styles and scripts (from pro)
110
+ do_action('metaslider_register_admin_styles');
111
+ }
112
+
113
+ /**
114
+ * Area used to handle any third-party plugin conflicts
115
+ */
116
+ public function fix_conflicts() {
117
+
118
+ // WP Posts Filter Fix (Advanced Settings not toggling)
119
+ wp_dequeue_script('link');
120
+
121
+ // All In One Events Calendar Fix (Advanced Settings not toggling)
122
+ wp_dequeue_script('ai1ec_requirejs');
123
+ }
124
+
125
+ /**
126
+ * Method to add pages
127
+ * @param string $title - The title of the page
128
+ * @param string $slug - The slug used for the page
129
+ * @param string $parent - Setting a parent will make this page a submenu item
130
+ */
131
+ public function add_page($title, $slug = '', $parent = '') {
132
+ $slug = ('' == $slug) ? sanitize_title($title) : $slug;
133
+ $method = 'render_'.str_replace("-", "_", $slug).'_page';
134
+ if (!method_exists($this, $method)) {
135
+ return false;
136
+ }
137
+ $this->current_page = $slug;
138
+ $page = ('' == $parent) ? add_menu_page($title, $title, $this->capability, $slug, array($this, $method)) : add_submenu_page($parent, $title, $title, $this->capability, $slug, array($this, $method));
139
+
140
+ // Load assets on all pages
141
+ add_action('load-' . $page, array($this, 'fix_conflicts'));
142
+ add_action('load-' . $page, array($this, 'load_overlay'));
143
+ add_action('load-' . $page, array($this, 'load_tooltips'));
144
+ add_action('load-' . $page, array($this, 'load_javascript'));
145
+ add_action('load-' . $page, array($this, 'load_styles'));
146
+ }
147
+
148
+ /**
149
+ * Sets up any logic needed for the main page
150
+ * TODO continue refactoring from here
151
+ */
152
+ public function render_metaslider_page() {
153
+ parent::render_admin_page();
154
+ }
155
+
156
+ /**
157
+ * Sets up any logic needed for the upgrade page
158
+ */
159
+ public function render_upgrade_page() {
160
+ include METASLIDER_PATH."admin/views/pages/upgrade.php";
161
+ }
162
+ }
admin/Tour.php ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if (!defined('ABSPATH')) die('No direct access allowed');
4
+
5
+ /*
6
+ * Class for guided tour
7
+ */
8
+
9
+ Class MetaSlider_Tour {
10
+
11
+ /**
12
+ * The plugin object
13
+ */
14
+ protected $plugin;
15
+
16
+ /**
17
+ * Sets up the notices, security and loads assets for the admin page
18
+ */
19
+ public function __construct($plugin, $page) {
20
+ $this->plugin = $plugin;
21
+ add_action('load-' . $page, array($this, 'load_tour'));
22
+ add_action('wp_ajax_set_tour_status', array($this, 'handle_ajax'));
23
+ add_action('wp_ajax_reset_tour_status', array($this, 'handle_ajax'));
24
+ }
25
+
26
+ /**
27
+ * Loads in tour assets
28
+ */
29
+ public function load_tour() {
30
+ wp_enqueue_script('metaslider-tether-js', METASLIDER_ADMIN_URL . 'assets/tether/tether.min.js', METASLIDER_VERSION, true);
31
+ wp_enqueue_script('metaslider-shepherd-js', METASLIDER_ADMIN_URL . 'assets/tether-shepherd/shepherd.min.js', array('metaslider-tether-js'), METASLIDER_VERSION, true);
32
+ wp_enqueue_style('metaslider-shepherd-css', METASLIDER_ADMIN_URL . 'assets/tether-shepherd/shepherd-theme-arrows.css', false, METASLIDER_VERSION);
33
+
34
+ wp_register_script('metaslider-tour-js', METASLIDER_ADMIN_URL . 'assets/js/tour.js', array('metaslider-tether-js'), METASLIDER_VERSION, true);
35
+ wp_localize_script('metaslider-tour-js', 'metaslider_tour', array(
36
+ 'no_slideshows' => array(
37
+ 'show' => ! (bool) count($this->plugin->all_meta_sliders()),
38
+ 'title' => __("Welcome", "ml-slider"),
39
+ 'message' => __("Thanks for using the MetaSlider WordPress plugin. It looks like you don’t have any slideshows yet! To get started, click above to add your first one.", "ml-slider")
40
+ ),
41
+ 'main_tour' => array(
42
+ 'show' => (bool) count($this->plugin->all_meta_sliders()) && ! (bool) get_option('metaslider_tour_cancelled_on'),
43
+ 'nonce' => wp_create_nonce('metaslider_tour_nonce'),
44
+ // 'has_slides' => ms
45
+ 'learn_more_language' => __('Learn More', 'ml-slider'),
46
+ 'next_language' => __('Next', 'ml-slider'),
47
+ 'skip_language' => __('Skip this step', 'ml-slider'),
48
+ 'upgrade_link' => metaslider_get_upgrade_link(),
49
+ 'is_pro' => metaslider_is_pro_active(),
50
+ 'step1' => array(
51
+ 'title' => __("Add A Slide", "ml-slider"),
52
+ 'message' => __("Congratulations! Now that you've created a slideshow, click here to add a slide.", "ml-slider")
53
+ ),
54
+ 'step2a' => array(
55
+ 'title' => __("Select Slide Type", "ml-slider"),
56
+ 'message' => metaslider_is_pro_active() ? 'Thanks for activating the Add-on Pack! Premium users can choose from any of these slide types' : __("Premium users that have the Add-on Pack activated can access additional slide types!", "ml-slider")
57
+ ),
58
+ 'step2b' => array(
59
+ 'title' => __("Select Media", "ml-slider"),
60
+ 'message' => __("After you have selected your media from the left, click below to continue.", "ml-slider")
61
+ ),
62
+ 'step3' => array(
63
+ 'title' => __("Preview Slideshow", "ml-slider"),
64
+ 'message' => __("Now that you have some slides set, you can preview your slideshow by clicking here.", "ml-slider")
65
+ ),
66
+ 'step4' => array(
67
+ 'title' => __("Adjust Settings", "ml-slider"),
68
+ 'message' => __("If you need to adjust the settings for this slideshow, you may do so here.", "ml-slider")
69
+ ),
70
+ 'step5' => array(
71
+ 'title' => __("Shortcode Usage", "ml-slider"),
72
+ 'message' => __("You are all set! If you want to add the slideshow to a post, you may use this shortcode.", "ml-slider"),
73
+ 'button' => __('Finish')
74
+ ),
75
+ 'final_ad' => array(
76
+ 'title' => __("Congratulations!", "ml-slider"),
77
+ 'message' => __("You've completed the tour and are ready to add great slideshows to your website. Don't forget, if you want your slideshows to really stand out, pick up the add-on pack today. ", "ml-slider"),
78
+ 'button' => __('Finish')
79
+ )
80
+ )
81
+ ));
82
+ wp_enqueue_script('metaslider-tour-js');
83
+ }
84
+
85
+ /**
86
+ * Removes the tour status so the tour can be seen again
87
+ *
88
+ * @return bool|WP_Error The Boolean should be true
89
+ */
90
+ public function reset_tour_status() {
91
+
92
+ // If the option isn't set, the tour hasn't been cancelled
93
+ if (!get_option('metaslider_tour_cancelled_on')) {
94
+ return 'The tour is still active. Everything should be ok.';
95
+ }
96
+
97
+ $result = delete_option('metaslider_tour_cancelled_on');
98
+ return $result ? 'The tour status was successfully reset' : new WP_Error('update_failed', 'The attempt to update the tour option failed.', array('status' => 409));
99
+ }
100
+
101
+ /**
102
+ * Updates the stored value for which step the tour ended on
103
+ * @param object $request - the http $_REQUEST obj
104
+ * @return bool|WP_Error The Boolean should be true
105
+ */
106
+ public function set_tour_status($request) {
107
+ $result = update_option('metaslider_tour_cancelled_on', $request['current_step']);
108
+ return $result ? 'The tour status was successfully updated' : new WP_Error('update_failed', 'The attempt to update the tour option failed.', array('status' => 409));
109
+ }
110
+
111
+ /**
112
+ * Handles AJAX calls
113
+ *
114
+ * @return String - (JSON) Sends a success response unless an error is encountered
115
+ */
116
+ public function handle_ajax() {
117
+ if (!wp_verify_nonce($_REQUEST['_wpnonce'], 'metaslider_tour_nonce')) {
118
+ return wp_send_json_error(array(
119
+ 'message' => __('The security check failed. Please refresh the page and try again.', 'ml-slider')
120
+ ), 401);
121
+ }
122
+
123
+ $method = str_replace('ajax_', '', $_POST['action']);
124
+ if (!method_exists($this, $method)) {
125
+ return wp_send_json_error(array(
126
+ 'message' => __('This method does not exist. Please refresh the page and try again.', 'ml-slider')
127
+ ), 401);
128
+ }
129
+
130
+ // Call the dynamic method
131
+ $result = $this->{$method}($_REQUEST);
132
+
133
+ if (is_wp_error($result)) {
134
+ return wp_send_json_error(array(
135
+ 'message' => $result->get_error_message()
136
+ ), 409);
137
+ }
138
+
139
+ return wp_send_json_success(array(
140
+ 'message' => $result,
141
+ ), 200);
142
+ }
143
+ }
admin/assets/css/admin.css ADDED
@@ -0,0 +1,1529 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .metaslider.wrap div.updated,
2
+ .metaslider.wrap div.error {
3
+ clear: both
4
+ }
5
+
6
+ .metaslider #post-body.columns-2 #postbox-container-1 {
7
+ margin-right: -320px;
8
+ width: 300px;
9
+ }
10
+
11
+ .metaslider #poststuff #post-body.columns-2 {
12
+ margin-right: 320px;
13
+ }
14
+
15
+ .rtl .metaslider #post-body.columns-2 #postbox-container-1 {
16
+ margin-left: -320px;
17
+ margin-right: 0;
18
+ }
19
+
20
+ .rtl .metaslider #poststuff #post-body.columns-2 {
21
+ margin-left: 320px;
22
+ margin-right: 0;
23
+ }
24
+
25
+
26
+ .metaslider .left input,
27
+ .metaslider .left textarea {
28
+ border: 1px solid #ccc;
29
+ border-radius: 0;
30
+ resize: none;
31
+ box-shadow: inherit;
32
+ }
33
+
34
+ .media-frame-menu .separator {
35
+ display: none
36
+ }
37
+
38
+ .msTipsy .tipsy-arrow-s {
39
+ border-top-color: #555
40
+ }
41
+
42
+ .msTipsy .tipsy-arrow-w {
43
+ border-right-color: #555
44
+ }
45
+
46
+ .msTipsy .tipsy-arrow-n {
47
+ border-bottom-color: #555
48
+ }
49
+
50
+ .msTipsy .tipsy-inner {
51
+ color: white;
52
+ background-color: #555;
53
+ }
54
+
55
+ .msTipsy .tipsy-arrow-e {
56
+ border-left-color: #555
57
+ }
58
+
59
+ #cboxLoadedContent {
60
+ overflow: hidden !important
61
+ }
62
+
63
+ #cboxLoadedContent iframe {
64
+ border: 0 none;
65
+ display: block;
66
+ height: 100%;
67
+ width: 100%;
68
+ }
69
+
70
+ .metaslider .right input[type=submit] {
71
+ margin: 0 3px;
72
+ }
73
+
74
+ .metaslider #poststuff .right .configuration {
75
+ padding: 7px 7px 7px 12px;
76
+ line-height: 27px;
77
+ float: left;
78
+ width: 100%;
79
+ box-sizing: border-box;
80
+ }
81
+
82
+ .metaslider .left table tr.slide input.url {
83
+ width: 100%;
84
+ margin: 0;
85
+ padding: 4px;
86
+ }
87
+
88
+ .metaslider .section {
89
+ cursor: pointer
90
+ }
91
+
92
+ .metaslider .hidden {
93
+ display: none
94
+ }
95
+
96
+ .metaslider .tipsy-tooltip {
97
+ cursor: default
98
+ }
99
+
100
+ .metaslider .ui-sortable-helper {
101
+ box-shadow: 3px 3px 5px #cccccc
102
+ }
103
+
104
+ .metaslider .left table tr.slide textarea {
105
+ width: 100%;
106
+ height: 60px;
107
+ margin: 0 0 5px 0;
108
+ padding: 2px 5px;
109
+ }
110
+
111
+ .branch-3-5 .metaslider .left table tr.slide .tabs-content .new_window,
112
+ .branch-3-6 .metaslider .left table tr.slide .tabs-content .new_window,
113
+ .branch-3-7 .metaslider .left table tr.slide .tabs-content .new_window {
114
+ right: 6px;
115
+ bottom: 20px;
116
+ }
117
+
118
+ .branch-3-5 .metaslider .left table tr.slide .tabs-content .new_window label,
119
+ .branch-3-6 .metaslider .left table tr.slide .tabs-content .new_window label,
120
+ .branch-3-7 .metaslider .left table tr.slide .tabs-content .new_window label {
121
+ line-height: 18px;
122
+ vertical-align: top;
123
+ }
124
+
125
+ .branch-3-5 .metaslider .left table tr.slide .tabs-content .new_window input,
126
+ .branch-3-6 .metaslider .left table tr.slide .tabs-content .new_window input,
127
+ .branch-3-7 .metaslider .left table tr.slide .tabs-content .new_window input {
128
+ margin: -2px 0 0 4px;
129
+ }
130
+
131
+ .metaslider .left table tr.slide .tabs-content .new_window {
132
+ position: relative;
133
+ float: right;
134
+ padding: 0px;
135
+ color: #a9a9a9;
136
+ line-height: 20px;
137
+ bottom: 22px;
138
+ right: 0;
139
+ }
140
+
141
+ .rtl .metaslider .left table tr.slide .tabs-content .new_window {
142
+ position: relative;
143
+ float: left;
144
+ }
145
+
146
+ .metaslider .left table tr.slide .tabs-content .new_window input {
147
+ margin-left: 3px
148
+ }
149
+
150
+ .rtl .metaslider .left table tr.slide .tabs-content .new_window input {
151
+ margin-right: 3px
152
+ }
153
+
154
+ .metaslider .left table tr.slide .tabs-content .new_window label {
155
+ width: 120px;
156
+ text-align: right;
157
+ font-size: 11px;
158
+ }
159
+
160
+ .metaslider tr.radio {
161
+ display: table-row;
162
+ }
163
+
164
+ .metaslider .right .highlight {
165
+ background: transparent;
166
+ border: 0;
167
+ font-weight: bold;
168
+ }
169
+
170
+ /* *
171
+ * Change background color for label next to checked radio button
172
+ * to make it look like highlighted button
173
+ ================================================== */
174
+
175
+ .metaslider .right .slider-lib-row input[type=radio]:checked + label {
176
+ background-image: none;
177
+ background-color: #d0d0d0;
178
+ }
179
+
180
+ .metaslider .right .slider-lib-row input[type=radio] {
181
+ display: none;
182
+ }
183
+
184
+ .ie8 .metaslider .right .slider-lib-row input[type=radio] {
185
+ display: inline;
186
+ }
187
+
188
+ .metaslider .right .slider-lib-row input[type=radio] + label {
189
+ display: inline-block;
190
+ margin: -2px;
191
+ padding: 4px 0;
192
+ margin-bottom: 0;
193
+ font-size: 11px;
194
+ line-height: 20px;
195
+ color: #333;
196
+ text-align: center;
197
+ vertical-align: middle;
198
+ cursor: pointer;
199
+ background-color: #f5f5f5;
200
+ background-image: -moz-linear-gradient(top,#fff,#e6e6e6);
201
+ background-image: -webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));
202
+ background-image: -webkit-linear-gradient(top,#fff,#e6e6e6);
203
+ background-image: -o-linear-gradient(top,#fff,#e6e6e6);
204
+ background-image: linear-gradient(to bottom,#fff,#e6e6e6);
205
+ background-repeat: repeat-x;
206
+ border: 1px solid #ddd;
207
+ border-color: #e6e6e6 #e6e6e6 #bfbfbf;
208
+ border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);
209
+ border-bottom-color: #b3b3b3;
210
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);
211
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
212
+ -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);
213
+ -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);
214
+ box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);
215
+ width: 24%;
216
+ }
217
+
218
+ input[type=radio]:checked + label {
219
+ background-image: none;
220
+ outline: 0;
221
+ -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);
222
+ -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);
223
+ box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);
224
+ background-color: #e0e0e0;
225
+ }
226
+
227
+ .metaslider .right #nivo + label:hover,
228
+ .metaslider .right #nivo:checked + label {
229
+ color: white;
230
+ background: #b6e026;
231
+ background: -moz-linear-gradient(top, #b6e026 0%, #abdc28 100%);
232
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #b6e026), color-stop(100%, #abdc28));
233
+ background: -webkit-linear-gradient(top, #b6e026 0%, #abdc28 100%);
234
+ background: -o-linear-gradient(top, #b6e026 0%, #abdc28 100%);
235
+ background: -ms-linear-gradient(top, #b6e026 0%, #abdc28 100%);
236
+ background: linear-gradient(to bottom, #b6e026 0%, #abdc28 100%);
237
+ }
238
+
239
+ .metaslider .right #responsive + label:hover,
240
+ .metaslider .right #responsive:checked + label,
241
+ .metaslider .right #responsive:checked {
242
+ color: white;
243
+ background: #ff5db1; /* Old browsers */
244
+ background: -moz-linear-gradient(top, #ff5db1 0%, #ef017c 100%); /* FF3.6+ */
245
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ff5db1), color-stop(100%,#ef017c)); /* Chrome,Safari4+ */
246
+ background: -webkit-linear-gradient(top, #ff5db1 0%,#ef017c 100%); /* Chrome10+,Safari5.1+ */
247
+ background: -o-linear-gradient(top, #ff5db1 0%,#ef017c 100%); /* Opera 11.10+ */
248
+ background: -ms-linear-gradient(top, #ff5db1 0%,#ef017c 100%); /* IE10+ */
249
+ background: linear-gradient(to bottom, #ff5db1 0%,#ef017c 100%); /* W3C */
250
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ff5db1', endColorstr='#ef017c',GradientType=0 ); /* IE6-9 */
251
+ }
252
+
253
+ .metaslider .right #coin + label:hover,
254
+ .metaslider .right #coin:checked + label {
255
+ color: white;
256
+ background: #ffd65e;
257
+ background: -moz-linear-gradient(top, #ffd65e 0%, #febf04 100%);
258
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffd65e), color-stop(100%, #febf04));
259
+ background: -webkit-linear-gradient(top, #ffd65e 0%, #febf04 100%);
260
+ background: -o-linear-gradient(top, #ffd65e 0%, #febf04 100%);
261
+ background: -ms-linear-gradient(top, #ffd65e 0%, #febf04 100%);
262
+ background: linear-gradient(to bottom, #ffd65e 0%, #febf04 100%);
263
+ }
264
+
265
+ .metaslider .right #flex + label:hover,
266
+ .metaslider .right #flex:checked + label {
267
+ color: white;
268
+ background: #00b7ea;
269
+ background: -moz-linear-gradient(top, #00b7ea 0%, #009ec3 100%);
270
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #00b7ea), color-stop(100%, #009ec3));
271
+ background: -webkit-linear-gradient(top, #00b7ea 0%, #009ec3 100%);
272
+ background: -o-linear-gradient(top, #00b7ea 0%, #009ec3 100%);
273
+ background: -ms-linear-gradient(top, #00b7ea 0%, #009ec3 100%);
274
+ background: linear-gradient(to bottom, #00b7ea 0%, #009ec3 100%);
275
+ }
276
+ .metaslider .right .slider-lib-row label:focus,
277
+ .metaslider .right .slider-lib-row label:active {
278
+ background: #acd7fd !important;
279
+ box-shadow: none !important;
280
+ outline: none;
281
+ }
282
+ .metaslider .right .slider-lib-row {
283
+ padding: 17px 0 9px 0;
284
+ text-align: center;
285
+ }
286
+
287
+ .metaslider .right #save {
288
+ margin-right: 0
289
+ }
290
+ .rtl .metaslider .right #save {
291
+ margin-right: 4px;
292
+ margin-left: 0;
293
+ }
294
+
295
+ .metaslider .right .number input:focus {
296
+ outline: none;
297
+ outline-style: none;
298
+ box-shadow: none;
299
+ background-color: #acd7fd;
300
+ color: #444;
301
+ }
302
+
303
+ .metaslider .right .number .after,
304
+ .metaslider .right .number input {
305
+ display: block;
306
+ float: left;
307
+ height: 26px;
308
+ margin: 0;
309
+ }
310
+
311
+ .rtl .metaslider .right .number .after,
312
+ .rtl .metaslider .right .number input {
313
+ float: right;
314
+ }
315
+ .rtl .metaslider .right .number .after {
316
+ border-left: 1px solid #ddd;
317
+ border-right: 0;
318
+ }
319
+ .rtl .metaslider .right .number input {
320
+ border-right: 1px solid #ddd;
321
+ border-left: 0;
322
+ }
323
+
324
+ .metaslider .right .radio ul {
325
+ margin: 0;
326
+ }
327
+ .metaslider .right .radio li {
328
+ margin: 0 0 2px 0;
329
+ clear: both;
330
+ }
331
+ .metaslider .right .radio input[type="radio"] {
332
+ margin-top: 0;
333
+ }
334
+ .rtl .metaslider .right .radio input[type="radio"] {
335
+ float: right;
336
+ }
337
+
338
+ .metaslider .right .number input {
339
+ width: 70px;
340
+ margin-right: 0;
341
+ box-shadow: none;
342
+ border-right: 0;
343
+ }
344
+
345
+ .metaslider .right .number .after {
346
+ border: 1px solid #ddd;
347
+ border-left: 0;
348
+ box-shadow: none;
349
+ font-size: 11px;
350
+ height: 24px;
351
+ line-height: 24px;
352
+ padding: 0 3px;
353
+ background: white;
354
+ }
355
+
356
+ .metaslider .right input[type="text"],
357
+ .metaslider .right select {
358
+ width: 130px;
359
+ }
360
+
361
+ .metaslider #poststuff .right .ms-postbox .inside {
362
+ padding: 8px 12px 12px 12px;
363
+ margin: 0;
364
+ }
365
+
366
+ .ms-postbox .handlediv {
367
+ float: right;
368
+ width: 27px;
369
+ height: 30px;
370
+ cursor: pointer;
371
+ color: #aaa;
372
+ }
373
+
374
+ .ms-postbox .handlediv:before {
375
+ right: 12px;
376
+ font: 400 20px/1 dashicons;
377
+ speak: none;
378
+ display: inline-block;
379
+ padding: 8px 10px;
380
+ top: 0;
381
+ position: relative;
382
+ -webkit-font-smoothing: antialiased;
383
+ -moz-osx-font-smoothing: grayscale;
384
+ text-decoration: none !important;
385
+ content: '\f142';
386
+ }
387
+
388
+ .ms-postbox.closed .handlediv:before {
389
+ content: '\f140';
390
+ }
391
+
392
+ .metaslider .shortcode .inside {
393
+ padding: 15px 10px;
394
+ }
395
+
396
+ .metaslider .social .inside {
397
+ padding: 10px;
398
+ }
399
+
400
+ .metaslider .social .inside ul.info {
401
+ width: 100%;
402
+ margin: 0;
403
+ height: 20px;
404
+ }
405
+
406
+ .metaslider .shortcode input[type=text],
407
+ .metaslider .shortcode input[type=text]:active,
408
+ .metaslider .shortcode textarea,
409
+ .metaslider .shortcode textarea:active {
410
+ font-family: monospace;
411
+ font-size: 11px;
412
+ width: 100%;
413
+ background: transparent;
414
+ border: 0;
415
+ box-shadow: none;
416
+ }
417
+
418
+ .metaslider .shortcode textarea {
419
+ height: 65px;
420
+ }
421
+
422
+ .metaslider .shortcode ul.tabs {
423
+ margin: 0;
424
+ }
425
+
426
+ .metaslider .shortcode ul.tabs li.selected {
427
+ background: #fdfdfd;
428
+ border-bottom: 1px solid #fdfdfd;
429
+ }
430
+
431
+ .metaslider .shortcode .tabs-content {
432
+ clear: both;
433
+ background: #fdfdfd;
434
+ border-left: 1px solid #ccc;
435
+ border-right: 1px solid #ccc;
436
+ border-bottom: 1px solid #ccc;
437
+ padding: 10px;
438
+ }
439
+
440
+ .metaslider .right .ms-postbox table {
441
+ border: 0;
442
+ width: 100%;
443
+ }
444
+
445
+ .metaslider .right .ms-postbox table textarea {
446
+ width: 100%;
447
+ height: 100px;
448
+ font-family: monospace;
449
+ background: #272822;
450
+ color: #a6e22e;
451
+ }
452
+
453
+ .metaslider .right .ms-postbox h3 {
454
+ cursor: inherit;
455
+ }
456
+
457
+ .metaslider .right .ms-postbox.ms-toggle h3 {
458
+ cursor: pointer;
459
+ }
460
+
461
+ .metaslider .right table {
462
+ margin: 0 0 5px 0;
463
+ }
464
+
465
+ .metaslider .right table td {
466
+ vertical-align: middle;
467
+ padding: 8px 4px;
468
+ border: 0;
469
+ height: 21px;
470
+ }
471
+
472
+ .metaslider select {
473
+ height: auto;
474
+ }
475
+
476
+ .metaslider .warning {
477
+ background-color: #ffebe8;
478
+ border: 1px solid #c00;
479
+ margin-bottom: 5px;
480
+ border-radius: 3px;
481
+ padding: 5px 10px;
482
+ }
483
+
484
+ input:-ms-input-placeholder {
485
+ color: LightGray;
486
+ }
487
+
488
+ textarea:-ms-input-placeholder {
489
+ color: LightGray;
490
+ }
491
+
492
+ .attachment-display-settings {
493
+ display: none;
494
+ }
495
+
496
+ .metaslider .tabs-content,
497
+ .metaslider .tabs-content ul,
498
+ .metaslider .tabs-content li {
499
+ font-size: 12px;
500
+ }
501
+
502
+ .metaslider .tabs-content input,
503
+ .metaslider .tabs-content select {
504
+ font-size: 11px;
505
+ }
506
+ .metaslider .tabs-content input:focus,
507
+ .metaslider .tabs-content textarea:focus,
508
+ .metaslider .tabs-content select:focus {
509
+ color: #444;
510
+ border-color: #acd7fd;
511
+ background: rgba(172, 215, 253, 0.2);
512
+ }
513
+
514
+ .metaslider .left .tabs-content {
515
+ clear: both;
516
+ }
517
+
518
+ .metaslider .tabs-content .row {
519
+ float: left;
520
+ clear: both;
521
+ width: 100%;
522
+ vertical-align: middle;
523
+ margin-bottom: 6px;
524
+ }
525
+
526
+ .metaslider .tabs-content .row.last {
527
+ margin-bottom: 0;
528
+ }
529
+
530
+ .metaslider .tabs-content .row label {
531
+ color: #999;
532
+ display: inline-block;
533
+ text-indent: 3px;
534
+ }
535
+
536
+ .metaslider .tabs-content .row input {
537
+ margin-right: 5px;
538
+ margin-bottom: 0px;
539
+ margin-left: 0px;
540
+ }
541
+
542
+ .metaslider .tabs-content .row input[type=text] {
543
+ width: 100%;
544
+ }
545
+
546
+ .metaslider .tabs-content ul {
547
+ margin: 0;
548
+ }
549
+
550
+ .metaslider .tabs-content li {
551
+ margin: 0 0 3px 0;
552
+ }
553
+
554
+ .metaslider .tabs-content select {
555
+ font-size: 11px;
556
+ }
557
+
558
+ .metaslider .tabs-content p {
559
+ font-style: italic;
560
+ color: #999999;
561
+ }
562
+
563
+ .metaslider ul.tabs {
564
+ float: left;
565
+ width: 100%;
566
+ margin: 0 0 10px 0;
567
+ border-bottom: 1px solid #ccc;
568
+ }
569
+
570
+ .metaslider ul.tabs li {
571
+ margin: 0 0 0 5px;
572
+ cursor: pointer;
573
+ padding: 3px 5px;
574
+ display: inline-block;
575
+ line-height: 14px;
576
+ color: #ccc;
577
+ position: relative;
578
+ top: 1px;
579
+ border: 1px solid transparent;
580
+ }
581
+ .metaslider ul.tabs li a {
582
+ color: #aaaaaa;
583
+ outline: 0;
584
+ box-shadow: none;
585
+ }
586
+ .metaslider ul.tabs li a:focus {
587
+ background-color: #acd7fd;
588
+ color: #444!important;
589
+ }
590
+ .metaslider ul.tabs li a:hover,
591
+ .metaslider ul.tabs li.selected a {
592
+ color: #e1642e;
593
+ }
594
+
595
+ .metaslider ul.tabs li:hover {
596
+ color: #333;
597
+ }
598
+
599
+ .metaslider ul.tabs li.selected {
600
+ font-weight: bold;
601
+ color: #666;
602
+ border: 1px solid #ccc;
603
+ border-bottom: 1px solid white;
604
+ }
605
+
606
+ .metaslider .left table tr.slide:nth-child(odd) ul.tabs li.selected {
607
+ border-bottom: 1px solid #ffffff;
608
+ }
609
+
610
+ .metaslider .dropdown_container {
611
+ margin: 40px 0 10px 0;
612
+ }
613
+
614
+ #screen-meta-links #screen-options-switch-view-wrap {
615
+ float: right;
616
+ height: 28px;
617
+ margin: 0 0 0 6px;
618
+ border: 1px solid #ddd;
619
+ border-top: 0;
620
+ background: #fff;
621
+ -webkit-box-shadow: 0 1px 1px -1px rgba(0,0,0,.1);
622
+ box-shadow: 0 1px 1px -1px rgba(0,0,0,.1);
623
+ }
624
+
625
+ #screen-meta-links #screen-options-switch-view-wrap a {
626
+ padding: 3px 6px 3px 8px;
627
+ display: block;
628
+ font-size: 13px;
629
+ height: 22px;
630
+ line-height: 22px;
631
+ text-decoration: none;
632
+ z-index: 1;
633
+ color: #777;
634
+ }
635
+
636
+ #screen-meta-links #screen-options-link-wrap a {
637
+ padding: 3px 6px;
638
+ text-decoration: none;
639
+ line-height: 28px;
640
+ }
641
+ #screen-meta-links #screen-options-link-wrap a:before {
642
+ line-height: 28px;
643
+ }
644
+
645
+ #screen-meta-links #screen-options-link-wrap a:after,
646
+ #screen-meta-links #screen-options-switch-view-wrap a:after {
647
+ content: '';
648
+ }
649
+ #screen-meta-links #screen-options-link-wrap a:before,
650
+ #screen-meta-links #screen-options-switch-view-wrap a:before {
651
+ padding: 0px 8px 0 0;
652
+ }
653
+
654
+ .metaslider_gopro li:before {
655
+ top: 4px;
656
+ font: 400 20px/1 dashicons;
657
+ speak: none;
658
+ display: inline-block;
659
+ position: relative;
660
+ -webkit-font-smoothing: antialiased;
661
+ -moz-osx-font-smoothing: grayscale;
662
+ text-decoration: none !important;
663
+ content: '\f147';
664
+ color: #de6826;
665
+ }
666
+
667
+ #adminmenu .toplevel_page_metaslider .wp-menu-image img {
668
+ opacity: 1;
669
+ }
670
+
671
+ .metaslider_pro {
672
+ margin-top: 50px;
673
+ }
674
+ .metaslider_pro p {
675
+ text-align: center;
676
+ font-size: 1.2em;
677
+ }
678
+
679
+ .metaslider_pro .probutton,
680
+ .metaslider_pro .probutton:hover {
681
+ width: 36%;
682
+ margin: 20px 32% 10px 32%;
683
+ float: left;
684
+ font-size: 1.4em;
685
+ padding: 15px 0;
686
+ border-color: #3793B7;
687
+ background-color: #41add7;
688
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #41add7), color-stop(100%, #218cb7));
689
+ background-image: -webkit-linear-gradient(top, #41add7, #218cb7);
690
+ background-image: -moz-linear-gradient(top, #41add7, #218cb7);
691
+ background-image: -o-linear-gradient(top, #41add7, #218cb7);
692
+ background-image: linear-gradient(top, #41add7, #218cb7);
693
+ -webkit-box-shadow: inset 0 1px rgba(255, 255, 255, 0.2), 0 1px 3px rgba(0, 0, 0, 0.2);
694
+ -moz-box-shadow: inset 0 1px rgba(255, 255, 255, 0.2), 0 1px 3px rgba(0, 0, 0, 0.2);
695
+ box-shadow: inset 0 1px rgba(255, 255, 255, 0.2), 0 1px 3px rgba(0, 0, 0, 0.2);
696
+ border-radius: 4px;
697
+ -webkit-box-shadow: inset 0 0 2px 0 rgba(57, 140, 255, 0.8);
698
+ box-shadow: inset 0 0 2px 0 rgba(57, 140, 255, 0.8);
699
+ color: #fff;
700
+ font-family: Interface, sans-serif;
701
+ text-shadow: 0 -1px 1px #1a5ad9;
702
+ color: white;
703
+ text-align: center;
704
+ text-decoration: none;
705
+ border-radius: 5px;
706
+ line-height: 2em;
707
+ }
708
+
709
+ .metaslider_pro .super {
710
+ text-transform: uppercase;
711
+ font-size: 0.7em;
712
+ vertical-align: top;
713
+ line-height: 2em;
714
+ }
715
+
716
+ .metaslider_pro .subtext {
717
+ float: left;
718
+ width: 100%;
719
+ text-align: center;
720
+ font-style: italic;
721
+ }
722
+
723
+ .metaslider_pro .logo {
724
+ text-transform: uppercase;
725
+ }
726
+
727
+ @font-face {
728
+ font-family: 'Interface';
729
+ font-style: normal;
730
+ font-weight: 400;
731
+ src: url("../fonts/interface/Interface-Regular.woff2") format("woff2"),
732
+ url("../fonts/interface/Interface-Regular.woff") format("woff");
733
+ }
734
+ @font-face {
735
+ font-family: 'Interface';
736
+ font-style: italic;
737
+ font-weight: 400;
738
+ src: url("../fonts/interface/Interface-RegularItalic.woff2") format("woff2"),
739
+ url("../fonts/interface/Interface-RegularItalic.woff") format("woff");
740
+ }
741
+ @font-face {
742
+ font-family: 'Interface';
743
+ font-style: normal;
744
+ font-weight: 500;
745
+ src: url("../fonts/interface/Interface-Medium.woff2") format("woff2"),
746
+ url("../fonts/interface/Interface-Medium.woff") format("woff");
747
+ }
748
+ @font-face {
749
+ font-family: 'Interface';
750
+ font-style: italic;
751
+ font-weight: 500;
752
+ src: url("../fonts/interface/Interface-MediumItalic.woff2") format("woff2"),
753
+ url("../fonts/interface/Interface-MediumItalic.woff") format("woff");
754
+ }
755
+ /* @font-face {
756
+ font-family: 'Interface';
757
+ font-style: normal;
758
+ font-weight: 700;
759
+ src: url("../fonts/interface/Interface-Bold.woff2") format("woff2"),
760
+ url("../fonts/interface/Interface-Bold.woff") format("woff");
761
+ }
762
+ @font-face {
763
+ font-family: 'Interface';
764
+ font-style: italic;
765
+ font-weight: 700;
766
+ src: url("../fonts/interface/Interface-BoldItalic.woff2") format("woff2"),
767
+ url("../fonts/interface/Interface-BoldItalic.woff") format("woff");
768
+ } */
769
+
770
+ .brand-color {
771
+ color:#de6826!important;
772
+ }
773
+ .metaslider-ui,
774
+ .metaslider-ui-top {
775
+ font-family: Interface, sans-serif;
776
+ }
777
+ .update-nag ~ .metaslider-ui-top {
778
+ float: right;
779
+ }
780
+
781
+ .metaslider-ui h1.metaslider-title {
782
+ font-size: 3.5em;
783
+ line-height: 1;
784
+ font-weight: 700;
785
+ color: #de6826;
786
+ padding: 0;
787
+ margin-bottom: 1rem;
788
+ text-shadow: 1px 1px 1px rgba(51, 51, 51, 0.12);
789
+ }
790
+ .metaslider-ui h1.metaslider-title img {
791
+ width: 50px;
792
+ position: relative;
793
+ bottom: -0.6rem;
794
+ }
795
+
796
+ /* Slider UI wrap */
797
+ .metaslider-ui {
798
+ max-width: 1200px;
799
+ margin: 0 auto;
800
+ }
801
+ .metaslider-ui .metaslider-inner {
802
+ border: 1px solid #ccc;
803
+ border-top: 0;
804
+ box-sizing: border-box;
805
+ padding: 0 1rem 0;
806
+ }
807
+ .metaslider-ui #post-body-content {
808
+ margin-bottom: 0;
809
+ }
810
+
811
+ /* Slide Title */
812
+ .metaslider-ui .slider-title {
813
+ padding: 10px 0 13px;
814
+ position: relative;
815
+ padding-right: 100px;
816
+ }
817
+ .metaslider-ui .slider-title h3 {
818
+ font-weight: normal;
819
+ margin: 0 0.5rem 0 0;
820
+ }
821
+ .metaslider-ui .slider-title .metaslider-shortcode {
822
+ border: 0;
823
+ box-shadow: none;
824
+ font-family: monospace;
825
+ margin: 0;
826
+ color: #de6826;
827
+ cursor: pointer;
828
+ }
829
+ .metaslider-ui .slider-title .add-slide {
830
+ padding-top: 1px !important;
831
+ position: absolute !important;
832
+ right: 0px;
833
+ top: 12px;
834
+ }
835
+
836
+ /* Slide Listing */
837
+ .metaslider-ui .metaslider-slides-container * {
838
+ box-sizing: border-box;
839
+ }
840
+ .metaslider-ui .metaslider-slides-container {
841
+ border-collapse: separate;
842
+ background: none;
843
+ border: 0;
844
+ margin-top: 12px;
845
+ box-shadow: none;
846
+ }
847
+ .metaslider-ui .metaslider-slides-container .slide {
848
+ background: white;
849
+ max-height: 215px;
850
+ overflow: hidden;
851
+ transition: all .3s ease-in-out;
852
+ -moz-transition: all .3s ease-in-out;
853
+ -webkit-transition: all .3s ease-in-out;
854
+ box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
855
+ position: relative;
856
+ display: block;
857
+ margin-bottom: 22px;
858
+ padding-top: 31px;
859
+ }
860
+ .metaslider-ui .metaslider-slides-container .slide > td {
861
+ padding: 0;
862
+ transition: all .25s ease-in-out;
863
+ -moz-transition: all .25s ease-in-out;
864
+ -webkit-transition: all .25s ease-in-out;
865
+ }
866
+ .metaslider-ui .metaslider-slides-container .slide .slide-details {
867
+ margin: 0;
868
+ font-size: 0.9em;
869
+ display: inline-block;
870
+ margin-top: 8px;
871
+ color: #666666;
872
+ font-weight: 400;
873
+ }
874
+ .metaslider-ui .metaslider-slides-container .slide .metaslider-ui-controls {
875
+ padding-left: 0.5rem;
876
+ height: 31px;
877
+ font-size: 1.2em;
878
+ cursor: move;
879
+ background-color: #f7f7f7;
880
+ border-bottom: 1px solid #eeeeee;
881
+ position: absolute;
882
+ top: 0;
883
+ left: 0;
884
+ width: 100%;
885
+ }
886
+ .metaslider-ui .metaslider-slides-container .metaslider-ui-inner {
887
+ margin: 1rem;
888
+ }
889
+ .metaslider-ui .metaslider-slides-container .slide .col-2 {
890
+ width: 100%;
891
+ }
892
+ .metaslider-ui .metaslider-slides-container .slide .thumb {
893
+ border: 1px solid #eee;
894
+ position: relative;
895
+ height: 150px;
896
+ width: 150px;
897
+ background-size: auto 150px;
898
+ background-position: center;
899
+ }
900
+ .metaslider-ui .metaslider-slides-container .update-image,
901
+ .metaslider-ui .metaslider-slides-container .delete-slide,
902
+ .metaslider-ui .metaslider-slides-container .undo-delete-slide {
903
+ color: #aaa;
904
+ outline: 0;
905
+ cursor: pointer;
906
+ background: none;
907
+ box-shadow: none;
908
+ border: 0;
909
+ width: 30px;
910
+ height: 30px;
911
+ }
912
+ .metaslider-ui .metaslider-slides-container .update-image {
913
+ padding: 0px 0 0 6px;
914
+ }
915
+ .metaslider-ui .metaslider-slides-container .update-image.image-button {
916
+ padding: 0;
917
+ margin: 0;
918
+ display: block;
919
+ width: auto;
920
+ height: auto;
921
+ }
922
+ .metaslider-ui .metaslider-slides-container .update-image.image-button:active,
923
+ .metaslider-ui .metaslider-slides-container .update-image.image-button:focus {
924
+ box-shadow: 0 0 3px 3px #acd7fd;
925
+ }
926
+ .metaslider-ui .metaslider-slides-container .update-image.image-button:focus .thumb {
927
+ background-color: #acd7fd;
928
+ }
929
+ .metaslider-ui .metaslider-slides-container .delete-slide {
930
+ padding: 3px 0 0 3px;
931
+ }
932
+ .metaslider-ui .metaslider-slides-container .update-image:hover {
933
+ color: white;
934
+ background: #1d8abf;
935
+ }
936
+ .metaslider-ui .metaslider-slides-container .delete-slide:hover {
937
+ color: white;
938
+ background: #e82323;
939
+ }
940
+ .metaslider-ui .metaslider-slides-container .update-image:active,
941
+ .metaslider-ui .metaslider-slides-container .update-image:focus {
942
+ color: #444;
943
+ background: #acd7fd;
944
+ }
945
+ .metaslider-ui .metaslider-slides-container .delete-slide:active,
946
+ .metaslider-ui .metaslider-slides-container .delete-slide:focus {
947
+ color: #444;
948
+ background: #acd7fd;
949
+ }
950
+ .metaslider-ui .metaslider-slides-container .update-image svg,
951
+ .metaslider-ui .metaslider-slides-container .delete-slide svg {
952
+ display: block;
953
+ }
954
+
955
+ /* Sorting */
956
+ .metaslider-ui .metaslider-slides-container .ui-sortable-helper {
957
+ transition: none;
958
+ -moz-transition: none;
959
+ -webkit-transition: none;
960
+ -webkit-transform: translate3d(0, 0, 0) rotate(2deg);
961
+ -ms-transform: translate3d(0, 0, 0) rotate(2deg);
962
+ transform: translate3d(0, 0, 0) rotate(2deg);
963
+ box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.2) !important;
964
+ }
965
+ .metaslider-ui .metaslider-slides-container .ui-sortable-placeholder {
966
+ background: rgba(204, 204, 204, 0.33);
967
+ padding: 4rem;
968
+ visibility: visible !important;
969
+ border: 3px dashed #e0e0e0;
970
+ box-shadow: none;
971
+ }
972
+
973
+ /* Navigation */
974
+ .metaslider-ui .nav-tab * {
975
+ box-sizing: border-box;
976
+ }
977
+ .metaslider-ui .nav-tab {
978
+ font-weight: 400;
979
+ font-size: 13px;
980
+ color: #aaaaaa;
981
+ line-height: 13px;
982
+ padding: 0.5rem;
983
+ max-width: 100px;
984
+ text-overflow: ellipsis;
985
+ overflow: hidden;
986
+ outline: 0;
987
+ }
988
+
989
+ .metaslider-ui .nav-tab:active,
990
+ .metaslider-ui .nav-tab:focus {
991
+ background: #acd7fd;
992
+ box-shadow: none;
993
+ color: #444;
994
+ }
995
+
996
+ .metaslider-ui .nav-tab-active {
997
+ border: 1px solid #ccc;
998
+ border-bottom: 1px solid #f1f1f1;
999
+ background: #f1f1f1;
1000
+ position: relative;
1001
+ margin-bottom: -1px;
1002
+ padding: 0.15rem 0.4rem;
1003
+ max-width: none;
1004
+ }
1005
+ .metaslider-ui .nav-tab-active:hover {
1006
+ background: none;
1007
+ }
1008
+
1009
+ .metaslider-ui .nav-tab-active input {
1010
+ height: 100%;
1011
+ transition: width .25s ease-in-out;
1012
+ -moz-transition: width .25s ease-in-out;
1013
+ -webkit-transition: width .25s ease-in-out;
1014
+ display: block;
1015
+ padding: 0.25rem 0.5rem;
1016
+ margin: 0;
1017
+ border: 0;
1018
+ background: transparent;
1019
+ box-shadow: none;
1020
+ width: 150px;
1021
+ min-width: 150px;
1022
+ text-overflow: ellipsis;
1023
+ }
1024
+
1025
+ .metaslider-ui .nav-tab-active input:active,
1026
+ .metaslider-ui .nav-tab-active input:focus,
1027
+ .metaslider-ui .nav-tab-active input:hover {
1028
+ box-shadow: 0 1px 1px rgba(0,0,0,.04);
1029
+ background-color: #fff;
1030
+ }
1031
+ .metaslider-ui .nav-tab-active input:active,
1032
+ .metaslider-ui .nav-tab-active input:focus {
1033
+ box-shadow: 0 0 1px 2px #acd7fd;
1034
+ max-width: none;
1035
+ }
1036
+ .metaslider-ui .ml-add-new {
1037
+ background: none;
1038
+ font-weight: 400;
1039
+ font-size: 13px;
1040
+ color: #aaaaaa;
1041
+ text-decoration: none;
1042
+ border: 0;
1043
+ line-height: 18px;
1044
+ padding: 0;
1045
+ position: relative;
1046
+ bottom: -5px;
1047
+ max-width: none;
1048
+ }
1049
+ .metaslider-ui .ml-add-new:hover {
1050
+ background: none;
1051
+ color: #de6826;
1052
+ }
1053
+ .metaslider-ui .ml-add-new i {
1054
+ position: relative;
1055
+ bottom: -3px;
1056
+ }
1057
+
1058
+ /* Buttons */
1059
+ /* TODO: Consider to set up pre-processors to make this more modular */
1060
+ .metaslider-ui-top:after,
1061
+ .metaslider-ui:after {
1062
+ content: "";
1063
+ display: table;
1064
+ clear: both;
1065
+ }
1066
+ .metaslider-ui-top .ml-hanging-button {
1067
+ text-decoration: none;
1068
+ color: #888;
1069
+ line-height: 17px;
1070
+ float: right;
1071
+ background: white;
1072
+ padding: 0.5rem;
1073
+ margin-left: 0.5rem;
1074
+ border: 1px solid #e5e5e5;
1075
+ box-shadow: 0 1px 1px rgba(0,0,0,.04);
1076
+ }
1077
+ .metaslider-ui-top .ml-hanging-button.ml-has-icon {
1078
+ position: relative;
1079
+ padding-left: 1.5rem;
1080
+ }
1081
+ .metaslider-ui-top .ml-hanging-button:focus,
1082
+ .metaslider-ui-top .ml-hanging-button:hover {
1083
+ color: #444;
1084
+ background: #acd7fd;
1085
+ }
1086
+ .metaslider-ui .ml-button i,
1087
+ .metaslider-ui-top .ml-hanging-button i {
1088
+ position: absolute;
1089
+ left: 0.3rem;
1090
+ top: 0.5rem;
1091
+ }
1092
+ .metaslider-ui .ml-button {
1093
+ display: inline-block;
1094
+ text-decoration: none;
1095
+ line-height: 17px;
1096
+ cursor: pointer;
1097
+ background: #00b1d5;
1098
+ color: #ffffff;
1099
+ padding: 0.5rem;
1100
+ border: 1px solid #e5e5e5;
1101
+ box-shadow: 0 1px 1px rgba(0,0,0,.04);
1102
+ border-radius: 3px;
1103
+ white-space: nowrap;
1104
+ box-sizing: border-box;
1105
+ }
1106
+ .metaslider-ui .ml-button:hover,
1107
+ .metaslider-ui .ml-button:focus,
1108
+ .metaslider-ui .ml-button:active {
1109
+ background: #acd7fd;
1110
+ color: #444;
1111
+ }
1112
+ .metaslider-ui .ml-button.ml-skinless-button {
1113
+ padding-bottom: 0;
1114
+ padding-top: 0;
1115
+ background: none;
1116
+ border: 0;
1117
+ box-shadow: none;
1118
+ color: #888;
1119
+ }
1120
+ .metaslider-ui .ml-button.ml-skinless-button.ml-has-icon i {
1121
+ top: auto;
1122
+ }
1123
+ .metaslider-ui .ml-button.ml-skinless-button.ml-has-icon i svg {
1124
+ display: block;
1125
+ }
1126
+ .metaslider-ui .ml-button.ml-skinless-button:hover {
1127
+ color: #444;
1128
+ }
1129
+ .metaslider-ui .ml-button.ml-has-icon {
1130
+ position: relative;
1131
+ padding-left: 1.5rem;
1132
+ }
1133
+ .metaslider-ui .ml-button.add-slide:hover {
1134
+ color: #de6826;
1135
+ }
1136
+ .metaslider-ui .ml-button.add-slide:active,
1137
+ .metaslider-ui .ml-button.add-slide:focus {
1138
+ background: #acd7fd;
1139
+ outline: 0;
1140
+ box-shadow: none;
1141
+ color: #444;
1142
+ }
1143
+ .metaslider-ui .ml-delete-button {
1144
+ background: #e82323;
1145
+ color: rgba(255, 255, 255, 0.97);
1146
+ border-color: #e00000;
1147
+ margin-bottom: 1rem;
1148
+ }
1149
+ .metaslider-ui .ml-delete-button:focus,
1150
+ .metaslider-ui .ml-delete-button:active,
1151
+ .metaslider-ui .ml-delete-button:hover {
1152
+ background: #ff3333;
1153
+ color: white;
1154
+ }
1155
+ .metaslider-ui .ml-delete-button:focus,
1156
+ .metaslider-ui .ml-delete-button:active {
1157
+ box-shadow: 0 0 3px 4px #5aa9ef;
1158
+ }
1159
+
1160
+ /* Slider Settings Area */
1161
+ .metaslider-ui .metaslider-settings-area {
1162
+ margin-top: 11px;
1163
+ }
1164
+ .metaslider-ui .metaslider-settings-area .metaslider-actions {
1165
+ background-color: #f7f7f7;
1166
+ border-bottom: 1px solid #eeeeee;
1167
+ position: relative;
1168
+ }
1169
+ .metaslider-ui .metaslider-settings-area .metaslider-preview {
1170
+ margin: 0;
1171
+ height: 28px;
1172
+ }
1173
+ .metaslider-ui .metaslider-settings-area .metaslider-preview:hover {
1174
+ color: #de6826;
1175
+ }
1176
+ .metaslider-ui .metaslider-settings-area .metaslider-preview:focus {
1177
+ background-color: #acd7fd;
1178
+ color: #444;
1179
+ }
1180
+ .metaslider-ui .metaslider-settings-area .metaslider-preview i {
1181
+ top: 5px;
1182
+ left: 3px;
1183
+ }
1184
+ .metaslider-ui .metaslider-settings-area .metaslider-preview:active,
1185
+ .metaslider-ui .metaslider-settings-area .metaslider-preview:focus {
1186
+ box-shadow: none;
1187
+ outline: 0;
1188
+ }
1189
+ .metaslider .ms-postbox {
1190
+ position: relative;
1191
+ min-width: 255px;
1192
+ border: 1px solid #e5e5e5;
1193
+ box-shadow: 0 1px 1px rgba(0,0,0,.04);
1194
+ background: #ffffff;
1195
+ margin-bottom: 20px;
1196
+ padding: 0;
1197
+ line-height: 1;
1198
+ }
1199
+
1200
+ .metaslider-ui .settings .disabled {
1201
+ color:#bbb;
1202
+ font-style: italic;
1203
+ }
1204
+
1205
+ .metaslider-ui .settings .disabled input {
1206
+ border-color: #bbb;
1207
+ }
1208
+
1209
+ /* Grid and add-on page */
1210
+ .btn-cta-gradient {
1211
+ background-image: -webkit-linear-gradient(to left, #00b1d5, #bf2fcb), -webkit-linear-gradient(to left, #00b1d5, #bf2fcb)!important;
1212
+ background-image: linear-gradient(to left, #00b1d5, #bf2fcb), linear-gradient(to left, #00b1d5, #bf2fcb)!important;
1213
+ }
1214
+
1215
+ /* Spin an svg */
1216
+ .ms-spin {
1217
+ -webkit-animation: ms-spin 2s infinite linear;
1218
+ animation: ms-spin 2s infinite linear;
1219
+ }
1220
+ @-webkit-keyframes ms-spin {
1221
+ 0% {
1222
+ -webkit-transform: rotate(0deg);
1223
+ transform: rotate(0deg);
1224
+ }
1225
+ 100% {
1226
+ -webkit-transform: rotate(359deg);
1227
+ transform: rotate(359deg);
1228
+ }
1229
+ }
1230
+ @keyframes ms-spin {
1231
+ 0% {
1232
+ -webkit-transform: rotate(0deg);
1233
+ transform: rotate(0deg);
1234
+ }
1235
+ 100% {
1236
+ -webkit-transform: rotate(359deg);
1237
+ transform: rotate(359deg);
1238
+ }
1239
+ }
1240
+
1241
+ /* Deleting a slide */
1242
+ .ms-deleting > td {
1243
+ -webkit-filter: blur(2px);
1244
+ -moz-filter: blur(2px);
1245
+ -o-filter: blur(2px);
1246
+ -ms-filter: blur(2px);
1247
+ filter: blur(2px);
1248
+ }
1249
+ .ms-deleting button {
1250
+ background: none !important;
1251
+ color: #aaa!important;
1252
+ }
1253
+ .ms-deleted {
1254
+ max-height: 0 !important;
1255
+ margin-bottom: 0 !important;
1256
+ overflow: hidden;
1257
+ background-color: transparent!important;
1258
+ border: 0!important;
1259
+ box-shadow: none!important;
1260
+ padding: 0!important;
1261
+ }
1262
+ .slide.hide-status .ms-delete-status {
1263
+ display:none;
1264
+ }
1265
+ .slide:not(.hide-status) .ms-delete-status.is-error {
1266
+ font-size: 0.8em;
1267
+ line-height: 31px;
1268
+ color: #e82323;
1269
+ }
1270
+ .slide:not(.hide-status) .ms-delete-status.is-success {
1271
+ font-size: 0.8em;
1272
+ margin-left: 5px;
1273
+ float: right;
1274
+ padding: 0.5em;
1275
+ color: #46b450;
1276
+ }
1277
+ .ms-deleted .slide-details,
1278
+ .ms-deleted .metaslider-ui-controls button.delete-slide,
1279
+ .ms-deleted .metaslider-ui-controls button.update-image {
1280
+ display: none !important;
1281
+ }
1282
+ .ms-deleted .metaslider-ui-inner {
1283
+ max-height: 0 !important;
1284
+ overflow: hidden;
1285
+ transition: all .75s ease-in-out;
1286
+ -moz-transition: all .75s ease-in-out;
1287
+ -webkit-transition: all .75s ease-in-out;
1288
+ }
1289
+ .ms-deleted .metaslider-ui-controls {
1290
+ cursor: default !important;
1291
+ background-color: #f1f1f1 !important;
1292
+ border: 0 !important;
1293
+ box-shadow: none !important;
1294
+ }
1295
+ .ms-deleted .metaslider-ui-controls button.undo-delete-slide {
1296
+ display: inline-block;
1297
+ font-size: 0.7em;
1298
+ width: auto;
1299
+ text-transform: lowercase;
1300
+ }
1301
+ .ms-deleted .metaslider-ui-controls button.undo-delete-slide i {
1302
+ top: 1px;
1303
+ position: relative;
1304
+ margin-right: 0px;
1305
+ }
1306
+ .ms-deleted .metaslider-ui-controls button.undo-delete-slide:focus {
1307
+ text-decoration: underline;
1308
+ }
1309
+ .ms-deleted .metaslider-ui-controls button.undo-delete-slide:hover {
1310
+ color: #de6826;
1311
+ }
1312
+ .ms-deleted .metaslider-ui-controls .countdown {
1313
+ display: inline-block;
1314
+ margin-left: 5px;
1315
+ color: #ccc;
1316
+ text-shadow: 1px 1px 1px #fff;
1317
+ }
1318
+ .ms-delete-overlay {
1319
+ position: absolute;
1320
+ top: 0;
1321
+ left: 0;
1322
+ width: 100%;
1323
+ height: 100%;
1324
+ background: rgba(255, 255, 255, 0.5);
1325
+ color: #666;
1326
+ display: -webkit-box;
1327
+ display: -ms-flexbox;
1328
+ display: flex;
1329
+ -webkit-box-align: center;
1330
+ -ms-flex-align: center;
1331
+ align-items: center;
1332
+ -webkit-box-pack: center;
1333
+ -ms-flex-pack: center;
1334
+ justify-content: center;
1335
+ }
1336
+
1337
+ .metaslider-ui .restore-slide-link {
1338
+ text-decoration: none;
1339
+ display: block;
1340
+ float: right;
1341
+ }
1342
+ .metaslider-ui .restore-slide-link span {
1343
+ color: #555d66;
1344
+ }
1345
+ .metaslider-ui .restore-slide-link:hover,
1346
+ .metaslider-ui .restore-slide-link:hover span {
1347
+ color: #de6826;
1348
+ }
1349
+ .metaslider-ui .restore-slide-link svg {
1350
+ position: relative;
1351
+ top: 2px;
1352
+ left: -2px;
1353
+ }
1354
+ .metaslider-ui .trashed-header {
1355
+ padding: 0 0 0.5rem;
1356
+ }
1357
+ .metaslider-ui .trashed-header h3 {
1358
+ color: #de6826;
1359
+ font-weight: normal;
1360
+ display: inline-block;
1361
+ margin: 0;
1362
+ }
1363
+ .metaslider-ui .trashed-header small {
1364
+ color: #ccc;
1365
+ }
1366
+ .metaslider-ui .trashed-header a {
1367
+ color: #666;
1368
+ text-decoration: underline;
1369
+ }
1370
+ .metaslider-ui .trashed-header a:hover {
1371
+ color: #de6826;
1372
+ }
1373
+ .metaslider-ui .trash-btns {
1374
+ float: right;
1375
+ position: static;
1376
+ padding: 0;
1377
+ }
1378
+ .metaslider-ui .trash-btns a {
1379
+ padding: 0.37rem;
1380
+ display: block;
1381
+ }
1382
+ .metaslider-ui .trashed-notice {
1383
+ line-height: 1.4;
1384
+ margin-top: 31px;
1385
+ }
1386
+ .metaslider-ui .trashed-notice .notice-info {
1387
+ padding: 1rem;
1388
+ background: #fff;
1389
+ border-left: 4px solid #00a0d2;
1390
+ -webkit-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
1391
+ box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
1392
+ }
1393
+
1394
+ /* Notification */
1395
+ #ms-notifications * {
1396
+ box-sizing: border-box;
1397
+ }
1398
+ #ms-notifications {
1399
+ position: fixed;
1400
+ overflow: hidden;
1401
+ right: 0.5rem;
1402
+ bottom: 0.5rem;
1403
+ }
1404
+ .ms-notification {
1405
+ cursor: pointer;
1406
+ min-width: 250px;
1407
+ min-height: 56px;
1408
+ background: #de6826;
1409
+ border-left: 5px solid rgb(199, 87, 39);
1410
+ margin: 0.5rem 0 0;
1411
+ padding: 0.5rem;
1412
+ overflow: hidden;
1413
+ box-shadow: 0 0 5px 0px rgb(199, 87, 39);
1414
+ }
1415
+ .ms-notification:hover {
1416
+ background: rgb(199, 87, 39);
1417
+ }
1418
+ .ms-notification.finished {
1419
+ position: relative;
1420
+ right: 0;
1421
+ -webkit-animation: slide-right 0.5s forwards;
1422
+ animation: slide-right 0.5s forwards;
1423
+ }
1424
+ @-webkit-keyframes slide-right {
1425
+ 100% { right: -250px; }
1426
+ }
1427
+ @keyframes slide-right {
1428
+ 100% { right: -250px; }
1429
+ }
1430
+ .ms-notification.has-image .ms-notification-content {
1431
+ width: 150px;
1432
+ float: left;
1433
+ }
1434
+ .ms-notification.has-image .img {
1435
+ width: 56px;
1436
+ height: 56px;
1437
+ overflow: hidden;
1438
+ float: right;
1439
+ border: 3px solid rgb(255, 127, 71);
1440
+ margin-left: 1rem;
1441
+ }
1442
+ .ms-notification .img img {
1443
+ width: auto;
1444
+ display: block;
1445
+ }
1446
+ .ms-notification h3 {
1447
+ margin: 0;
1448
+ color: rgba(0, 0, 0, 0.4);
1449
+ }
1450
+ .ms-notification p {
1451
+ margin: 0 0 0 0.1rem;
1452
+ color: rgb(240, 240, 240);
1453
+ }
1454
+ .ms-notification.is-success {
1455
+ background: #46b450;
1456
+ border-left: 5px solid #4e9a55;
1457
+ }
1458
+ .ms-notification.is-success.has-image .img {
1459
+ border: 3px solid rgb(124, 202, 131);
1460
+ }
1461
+ .ms-notification.is-success:hover {
1462
+ background: #4e9a55
1463
+ }
1464
+ .ms-notification.is-success h3 {
1465
+ color: #fff;
1466
+ }
1467
+
1468
+ /* Tour Specific Styles */
1469
+ .metaslider-ui .fake-tabs {
1470
+ padding: 0.7rem 1rem 0.2rem;
1471
+ }
1472
+ .metaslider-ui .fake-tabs span {
1473
+ max-width: 100px;
1474
+ text-overflow: ellipsis;
1475
+ overflow: hidden;
1476
+ display: inline-block;
1477
+ }
1478
+ .metaslider-ui .fake-tabs:hover {
1479
+ color: #aaa;
1480
+ }
1481
+ .blurred-out {
1482
+ cursor: default;
1483
+ -webkit-filter: blur(2px);
1484
+ -moz-filter: blur(2px);
1485
+ -o-filter: blur(2px);
1486
+ -ms-filter: blur(2px);
1487
+ filter: blur(2px);
1488
+ }
1489
+
1490
+ .shepherd-theme-arrows {
1491
+ z-index: 99;
1492
+ max-width: 300px!important;
1493
+ }
1494
+ .shepherd-theme-arrows.super-index {
1495
+ z-index: 999999;
1496
+ }
1497
+ .shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top.shepherd-target-attached-left .shepherd-content:before,
1498
+ .shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top.shepherd-target-attached-right .shepherd-content:before,
1499
+ .shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-target-attached-left .shepherd-content:before,
1500
+ .shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-target-attached-right .shepherd-content:before {
1501
+ display: none; }
1502
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-center.shepherd-has-title .shepherd-content:before,
1503
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before,
1504
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before {
1505
+ border-bottom-color: #dd6823;
1506
+ }
1507
+ .shepherd-element.shepherd-theme-arrows.shepherd-has-title .shepherd-content header {
1508
+ background-color: #dd6823
1509
+ }
1510
+ .shepherd-element.shepherd-theme-arrows .shepherd-content header h3 {
1511
+ color: #ffffff;
1512
+ }
1513
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before {
1514
+ top: 44px;
1515
+ }
1516
+ .shepherd-element.shepherd-theme-arrows .shepherd-content footer .shepherd-buttons li .shepherd-button {
1517
+ padding: .75em 1.3em;
1518
+ }
1519
+
1520
+ /* Styles for edge cases */
1521
+
1522
+ /* Removes styling for LastPass autofill */
1523
+ input.no_last_pass {
1524
+ background-image: none !important;
1525
+ background-attachment: none !important;
1526
+ }
1527
+ #__lpform_title {
1528
+ display: none;
1529
+ }
assets/metaslider/global.css → admin/assets/css/icon.css RENAMED
@@ -9,7 +9,8 @@
9
  font-style: normal;
10
  }
11
 
12
- #adminmenu .toplevel_page_metaslider div.wp-menu-image:before {
 
13
  content: "\e900" !important;
14
  font-family: "metaslider" !important;
15
  speak: none;
9
  font-style: normal;
10
  }
11
 
12
+ #adminmenu .toplevel_page_metaslider div.wp-menu-image:before,
13
+ #adminmenu .toplevel_page_metaslider-pro div.wp-menu-image:before {
14
  content: "\e900" !important;
15
  font-family: "metaslider" !important;
16
  speak: none;
admin/assets/css/notices.css ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* CSS for adverts */
2
+
3
+ .updraft-ad-container {
4
+ position: relative;
5
+ padding-right: 150px!important;
6
+ }
7
+
8
+ .updraft-ad-container > h1 {
9
+ color: #e1642e;
10
+ font-weight: 700;
11
+ }
12
+
13
+ .updraft-ad-container > p {
14
+ font-size: 110%;
15
+ }
16
+
17
+ .updraft_notice_container {
18
+ display: -webkit-box;
19
+ display: -ms-flexbox;
20
+ display: flex;
21
+ -webkit-box-align: center;
22
+ -ms-flex-align: center;
23
+ align-items: center;
24
+ height: auto;
25
+ overflow: hidden;
26
+ }
27
+
28
+ .updraft_advert_content_left {
29
+ float:none;
30
+ width:65px;
31
+ }
32
+
33
+ .updraft_advert_content_right {
34
+ max-width: 800px;
35
+ float:none;
36
+ width:auto;
37
+ overflow: hidden;
38
+ }
39
+
40
+ .updraft_advert_bottom {
41
+ margin: 10px 0;
42
+ padding: 10px;
43
+ font-size: 140%;
44
+ background-color: white;
45
+ border-color: #E6DB55;
46
+ border: 1px solid;
47
+ border-radius: 4px;
48
+ }
49
+
50
+ .updraft-advert-dismiss {
51
+ position: absolute;
52
+ font-size: 13px;
53
+ top: 5px;
54
+ right: 10px;
55
+ }
56
+
57
+ h3.updraft_advert_heading {
58
+ margin-top: 5px !important;
59
+ margin-bottom: 5px !important;
60
+ }
61
+
62
+ h4.updraft_advert_heading {
63
+ margin-top: 2px !important;
64
+ margin-bottom: 3px !important;
65
+ }
66
+
67
+ .updraft_center_content {
68
+ text-align: center;
69
+ margin-bottom:5px;
70
+ }
71
+
72
+ .updraft_notice_link {
73
+ padding-left:5px;
74
+ }
75
+
76
+ .updraft_text_center {
77
+ text-align: center;
78
+ }
79
+
80
+ .updraft_ad_meta {
81
+ color: #c5c5c5;
82
+ margin: 0;
83
+ font-size: 0.9em;
84
+ position: absolute;
85
+ bottom: 0;
86
+ right: 10px;
87
+ }
88
+
89
+ .mega_list strong {
90
+ font-weight: 700;
91
+ }
92
+
93
+ @media screen and (min-width: 560px) {
94
+ .updraft_advert_content_left {
95
+ float: left;
96
+ }
97
+ }
admin/assets/css/upgrade.css ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @font-face {
2
+ font-family: 'Interface';
3
+ font-style: normal;
4
+ font-weight: 400;
5
+ src: url("../fonts/interface/Interface-Regular.woff2") format("woff2"),
6
+ url("../fonts/interface/Interface-Regular.woff") format("woff");
7
+ }
8
+
9
+ @font-face {
10
+ font-family: 'Interface';
11
+ font-style: italic;
12
+ font-weight: 400;
13
+ src: url("../fonts/interface/Interface-RegularItalic.woff2") format("woff2"),
14
+ url("../fonts/interface/Interface-RegularItalic.woff") format("woff");
15
+ }
16
+
17
+ @font-face {
18
+ font-family: 'Interface';
19
+ font-style: normal;
20
+ font-weight: 500;
21
+ src: url("../fonts/interface/Interface-Medium.woff2") format("woff2"),
22
+ url("../fonts/interface/Interface-Medium.woff") format("woff");
23
+ }
24
+
25
+ @font-face {
26
+ font-family: 'Interface';
27
+ font-style: italic;
28
+ font-weight: 500;
29
+ src: url("../fonts/interface/Interface-MediumItalic.woff2") format("woff2"),
30
+ url("../fonts/interface/Interface-MediumItalic.woff") format("woff");
31
+ }
32
+
33
+ .ms-addon-headers {
34
+ margin: 1em 0 0.5em;
35
+ }
36
+
37
+ .metaslider_feat_table th {
38
+ font-size: 1.1em;
39
+ }
40
+
41
+ .metaslider_feat_table th span {
42
+ text-transform: uppercase;
43
+ }
44
+
45
+ .metaslider_feat_table th img {
46
+ width: 50px;
47
+ height: 50px;
48
+ display: block;
49
+ margin: 0 auto -5px;
50
+ }
51
+
52
+ /* COLUMN SETUP */
53
+ .metaslider_col {
54
+ display: block;
55
+ float: left;
56
+ margin: 1% 0 1% 1%;
57
+ font-family: Interface, sans-serif;
58
+ }
59
+
60
+ .metaslider_col:first-child {
61
+ margin-left: 0;
62
+ }
63
+
64
+ .metaslider_col .postbox {
65
+ max-width: 600px;
66
+ }
67
+
68
+ .metaslider_half_width {
69
+ width: 48%;
70
+ max-width: 820px;
71
+ }
72
+
73
+ .other-plugin-title {
74
+ text-decoration: none;
75
+ }
76
+
77
+ /* Added for the Image on Addons tab*/
78
+ img.addons {
79
+ display: block;
80
+ margin-left: auto;
81
+ margin-right: auto;
82
+ height: 44px;
83
+ }
84
+
85
+ .metaslider_feature_cont {
86
+ width: 54.5%;
87
+ }
88
+
89
+ .metaslider_plugin_family_cont {
90
+ width: 44.5%;
91
+ }
92
+
93
+ .metaslider_feat_table, .metaslider_feat_th, .metaslider_feat_table td {
94
+ border: 1px solid #e0e0e0;
95
+ border-collapse: collapse;
96
+ background-color: white;
97
+ }
98
+
99
+ .metaslider_installed_status,
100
+ .metaslider_feat_table p {
101
+ color: #666666;
102
+ padding: 0 10px;
103
+ margin: 7px 0 5px;
104
+ font-size: 16px;
105
+ line-height: 1.1;
106
+ }
107
+
108
+ .metaslider_installed_status {
109
+ padding: 10px;
110
+ text-align: center;
111
+ }
112
+
113
+ .metaslider_feat_table h4 {
114
+ font-size: 1.7em;
115
+ line-height: 1;
116
+ margin: 5px 0;
117
+ }
118
+
119
+ .metaslider_feat_table .dashicons {
120
+ display: block;
121
+ margin: auto;
122
+ width: 25px;
123
+ height: 25px;
124
+ font-size: 25px;
125
+ line-height: 1;
126
+ }
127
+
128
+ .metaslider_feat_table .dashicons-yes, .metaslider_feat_table .updraft-yes {
129
+ color: green;
130
+ }
131
+
132
+ .metaslider_feat_table .dashicons-no-alt, .metaslider_feat_table .updraft-no {
133
+ color: red;
134
+ }
135
+
136
+ .metaslider-premium-image {
137
+ display: none;
138
+ -webkit-box-align: center;
139
+ -ms-flex-align: center;
140
+ align-items: center;
141
+ -webkit-box-pack: center;
142
+ -ms-flex-pack: center;
143
+ justify-content: center;
144
+ color: #de6826;
145
+ float: left;
146
+ padding: 14px 8px;
147
+ margin: 5px;
148
+ }
149
+
150
+
151
+ @media screen and (max-width: 768px) {
152
+ #wpcontent {
153
+ padding: 0 10px;
154
+ }
155
+ .metaslider_col {
156
+ margin: 1% 0 !important;
157
+ }
158
+ .metaslider_half_width {
159
+ width: 100% !important;
160
+ }
161
+ .metaslider_feat_table h4 {
162
+ margin-left: 10px;
163
+ }
164
+ }
165
+
166
+ @media screen and (min-width: 720px) {
167
+ .metaslider-premium-image {
168
+ display: -webkit-box;
169
+ display: -ms-flexbox;
170
+ display: flex;
171
+ }
172
+ }
admin/assets/fonts/interface/Interface-Bold.woff ADDED
Binary file
admin/assets/fonts/interface/Interface-Bold.woff2 ADDED
Binary file
admin/assets/fonts/interface/Interface-BoldItalic.woff ADDED
Binary file
admin/assets/fonts/interface/Interface-BoldItalic.woff2 ADDED
Binary file
admin/assets/fonts/interface/Interface-Medium.woff ADDED
Binary file
admin/assets/fonts/interface/Interface-Medium.woff2 ADDED
Binary file
admin/assets/fonts/interface/Interface-MediumItalic.woff ADDED
Binary file
admin/assets/fonts/interface/Interface-MediumItalic.woff2 ADDED
Binary file
admin/assets/fonts/interface/Interface-Regular.woff ADDED
Binary file
admin/assets/fonts/interface/Interface-Regular.woff2 ADDED
Binary file
admin/assets/fonts/interface/Interface-RegularItalic.woff ADDED
Binary file
admin/assets/fonts/interface/Interface-RegularItalic.woff2 ADDED
Binary file
{assets → admin/assets}/fonts/metaslider.eot RENAMED
File without changes
{assets → admin/assets}/fonts/metaslider.svg RENAMED
File without changes
{assets → admin/assets}/fonts/metaslider.ttf RENAMED
File without changes
{assets → admin/assets}/fonts/metaslider.woff RENAMED
File without changes
admin/assets/js/admin.js ADDED
@@ -0,0 +1,728 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(function($) {
2
+
3
+ /*
4
+ * UI for adding a slide. Managed through the WP media upload UI
5
+ * Event managed here.
6
+ */
7
+ var create_slides = wp.media.frames.file_frame = wp.media({
8
+ multiple: 'add',
9
+ frame: 'post',
10
+ library: {type: 'image'}
11
+ });
12
+ create_slides.on('insert', function() {
13
+ MetaSlider_Helpers.loading(true)
14
+
15
+ var slide_ids = [];
16
+ create_slides.state().get('selection').map(function(media) {
17
+ slide_ids.push(media.toJSON().id);
18
+ });
19
+
20
+ var data = {
21
+ action: 'create_image_slide',
22
+ slider_id: window.parent.metaslider_slider_id,
23
+ selection: slide_ids,
24
+ _wpnonce: metaslider.create_slide_nonce
25
+ };
26
+
27
+ // TODO: Create micro feedback to the user.
28
+ // TODO: Adding lots of slides locks up the page due to 'resizeSlides' event
29
+ $.ajax({
30
+ url: metaslider.ajaxurl,
31
+ data: data,
32
+ method: 'POST',
33
+ beforeSend: function() { MetaSlider_Helpers.loading(true); },
34
+ complete: function() {MetaSlider_Helpers.loading(false); },
35
+ error: function(response) {
36
+ alert(response.responseJSON.data.message);
37
+ },
38
+ success: function(response) {
39
+
40
+ /*
41
+ * Echo Slide on success
42
+ * TODO: instead have it return data and use JS to render it
43
+ */
44
+ $(".metaslider .left table").append(response);
45
+ MetaSlider_Helpers.loading(false)
46
+ $(".metaslider .left table").trigger('resizeSlides');
47
+ }
48
+ });
49
+ });
50
+
51
+ /*
52
+ * UI for changing slide image. Managed through the WP media upload UI
53
+ * Initialized dynamically due to multiple slides.
54
+ */
55
+ var update_slide_frame;
56
+
57
+ /*
58
+ * Opens the UI for the slide selection.
59
+ */
60
+ $('.metaslider').on('click', '.add-slide', function(event){
61
+ event.preventDefault();
62
+ create_slides.open();
63
+
64
+ // Remove the Media Library tab (media_upload_tabs filter is broken in 3.6)
65
+ // TODO investigate if this is needed
66
+ $(".media-menu a:contains('Media Library')").remove();
67
+ });
68
+
69
+ /**
70
+ * Handles changing an image when edited by the user.
71
+ */
72
+ $('.metaslider').on('click', '.update-image', function(event) {
73
+ event.preventDefault();
74
+ var $this = $(this);
75
+
76
+ /*
77
+ * Opens up a media window showing images
78
+ */
79
+ update_slide_frame = wp.media.frames.file_frame = wp.media({
80
+ title: MetaSlider_Helpers.capitalize(metaslider.update_image),
81
+ library: {type: 'image'},
82
+ button: {
83
+ text: MetaSlider_Helpers.capitalize($this.attr('data-button-text'))
84
+ }
85
+ }).open();
86
+
87
+ /*
88
+ * Handles changing an image in DB and UI
89
+ */
90
+ update_slide_frame.on('select', function() {
91
+ var selection = update_slide_frame.state().get('selection');
92
+ selection.map(function(attachment) {
93
+ attachment = attachment.toJSON();
94
+ new_image_id = attachment.id;
95
+ });
96
+
97
+ /**
98
+ * Updates the meta information on the slide
99
+ */
100
+ var data = {
101
+ action: 'update_slide_image',
102
+ _wpnonce: metaslider.update_slide_image_nonce,
103
+ slide_id: $this.data('slideId'),
104
+ slider_id: window.parent.metaslider_slider_id,
105
+ image_id: new_image_id
106
+ };
107
+
108
+ $.ajax({
109
+ url: metaslider.ajaxurl,
110
+ data: data,
111
+ method: 'POST',
112
+ beforeSend: function() { MetaSlider_Helpers.loading(true); },
113
+ complete: function() {MetaSlider_Helpers.loading(false); },
114
+ error: function(response) {
115
+ alert(response.responseJSON.data.message);
116
+ },
117
+ success: function(response) {
118
+
119
+ /*
120
+ * Updates the image on success
121
+ */
122
+ $('#slide-' + $this.data('slideId') + ' .thumb')
123
+ .css('background-image', 'url(' + response.data.img_url + ')');
124
+ $(".metaslider .left table").trigger('resizeSlides');
125
+ }
126
+ });
127
+ });
128
+ });
129
+
130
+
131
+ /**
132
+ * delete a slide using ajax (avoid losing changes)
133
+ */
134
+ $(".metaslider").on('click', '.delete-slide', function(event) {
135
+ event.preventDefault();
136
+ var $this = $(this);
137
+ var data = {
138
+ action: 'delete_slide',
139
+ _wpnonce: metaslider.delete_slide_nonce,
140
+ slide_id: $this.data('slideId'),
141
+ slider_id: window.parent.metaslider_slider_id
142
+ };
143
+
144
+ // Set the slider state to deleting
145
+ $this.parents('#slide-' + $this.data('slideId'))
146
+ .removeClass('ms-restored')
147
+ .addClass('ms-deleting')
148
+ .append('<div class="ms-delete-overlay"><i style="height:24px;width:24px"><svg class="ms-spin" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-loader"><line x1="12" y1="2" x2="12" y2="6"/><line x1="12" y1="18" x2="12" y2="22"/><line x1="4.93" y1="4.93" x2="7.76" y2="7.76"/><line x1="16.24" y1="16.24" x2="19.07" y2="19.07"/><line x1="2" y1="12" x2="6" y2="12"/><line x1="18" y1="12" x2="22" y2="12"/><line x1="4.93" y1="19.07" x2="7.76" y2="16.24"/><line x1="16.24" y1="7.76" x2="19.07" y2="4.93"/></svg></i></div>');
149
+ $this.parents('#slide-' + $this.data('slideId'))
150
+ .find('.ms-delete-status')
151
+ .remove();
152
+
153
+ $.ajax({
154
+ url: metaslider.ajaxurl,
155
+ data: data,
156
+ method: 'POST',
157
+ error: function(response) {
158
+
159
+ // Delete failed. Remove delete state UI
160
+ alert(response.responseJSON.data.message);
161
+ $slide = $this.parents('#slide-' + $this.data('slideId'));
162
+ $slide.removeClass('ms-deleting');
163
+ $slide.find('.ms-delete-overlay').remove();
164
+ },
165
+ success: function(response) {
166
+ var count = 10;
167
+
168
+ // Remove deleting state and add a deleted state with restore option
169
+ setTimeout(function() {
170
+ $slide = $this.parents('#slide-' + $this.data('slideId'));
171
+ $slide.addClass('ms-deleted')
172
+ .removeClass('ms-deleting')
173
+ .find('.metaslider-ui-controls').append(
174
+ '<button class="undo-delete-slide" title="' + metaslider.restore_language + '" data-slide-id="' + $this.data('slideId') + '">' + metaslider.restore_language + '</button>'
175
+ );
176
+
177
+ // Grab the image from the slide
178
+ var img = $slide.find('.thumb').css('background-image')
179
+ .replace(/^url\(["']?/, '')
180
+ .replace(/["']?\)$/, '');
181
+
182
+ // If the image is the same as the URL then it's empty (external slide type)
183
+ img = (window.location.href === img) ? '' : img;
184
+
185
+ // Send a notice to the user
186
+ var notice = new MS_Notification(metaslider.deleted_language, metaslider.click_to_undo_language, img);
187
+
188
+ // Fire the notice and set callback to undo
189
+ notice.fire(10000, function() {
190
+ jQuery('#slide-' + $this.data('slideId'))
191
+ .addClass('hide-status')
192
+ .find('.undo-delete-slide').trigger('click');
193
+ });
194
+
195
+ // If the trash link isn't there, add it in (without counter)
196
+ if ('none' == $('.restore-slide-link').css('display')) {
197
+ $('.restore-slide-link').css('display', 'inline');
198
+ }
199
+ }, 1000);
200
+ }
201
+ });
202
+ });
203
+
204
+ /**
205
+ * delete a slide using ajax (avoid losing changes)
206
+ */
207
+ $(".metaslider").on('click', '.undo-delete-slide, .trash-view-restore', function(event) {
208
+ event.preventDefault();
209
+ var $this = $(this);
210
+ var data = {
211
+ action: 'undelete_slide',
212
+ _wpnonce: metaslider.undelete_slide_nonce,
213
+ slide_id: $this.data('slideId'),
214
+ slider_id: window.parent.metaslider_slider_id
215
+ };
216
+
217
+ // Remove undo button
218
+ $('#slide-' + $this.data('slideId')).find('.undo-delete-slide').html('');
219
+
220
+ // Set the slider state to deleting
221
+ $this.parents('#slide-' + $this.data('slideId'))
222
+ .removeClass('ms-deleted')
223
+ .addClass('ms-deleting')
224
+ .css('padding-top', '31px')
225
+ .append('<div class="ms-delete-overlay"><i style="height:24px;width:24px"><svg class="ms-spin" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-loader"><line x1="12" y1="2" x2="12" y2="6"/><line x1="12" y1="18" x2="12" y2="22"/><line x1="4.93" y1="4.93" x2="7.76" y2="7.76"/><line x1="16.24" y1="16.24" x2="19.07" y2="19.07"/><line x1="2" y1="12" x2="6" y2="12"/><line x1="18" y1="12" x2="22" y2="12"/><line x1="4.93" y1="19.07" x2="7.76" y2="16.24"/><line x1="16.24" y1="7.76" x2="19.07" y2="4.93"/></svg></i></div>');
226
+ $this.parents('#slide-' + $this.data('slideId'))
227
+ .find('.ms-delete-status')
228
+ .remove();
229
+ $this.parents('#slide-' + $this.data('slideId'))
230
+ .find('.delete-slide')
231
+ .focus();
232
+
233
+ $.ajax({
234
+ url: metaslider.ajaxurl,
235
+ data: data,
236
+ method: 'POST',
237
+ error: function(response) {
238
+
239
+ // Undelete failed. Remove delete state UI
240
+ $slide = $this.parents('#slide-' + $this.data('slideId'));
241
+ $slide.removeClass('ms-restoring').addClass('ms-deleted');
242
+ $slide.find('.ms-delete-overlay').remove();
243
+
244
+ // If there was a WP error, this should be populated:
245
+ if (response.responseJSON) {
246
+ alert(response.responseJSON.data.message);
247
+ } else {
248
+ alert('There was an error with the server and the action could not be completed.');
249
+ }
250
+ },
251
+ success: function(response) {
252
+
253
+ // Restore to original state
254
+ $slide = $this.parents('#slide-' + $this.data('slideId'));
255
+ $slide.addClass('ms-restored')
256
+ $slide.removeClass('ms-deleting')
257
+ .find('.undo-delete-slide, .trash-view-restore').remove();
258
+ $slide.find('.ms-delete-overlay').remove();
259
+ $('#slide-' + $this.data('slideId') + ' h4').after('<span class="ms-delete-status is-success">' + metaslider.restored_language + '</span>');
260
+
261
+ // We can try to remove the buton actions too (trashed view)
262
+ $('#slide-' + $this.data('slideId')).find('.row-actions.trash-btns').html('');
263
+
264
+ // Grab the image from the slide
265
+ var img = $slide.find('.thumb').css('background-image')
266
+ .replace(/^url\(["']?/, '')
267
+ .replace(/["']?\)$/, '');
268
+
269
+ // If the image is the same as the URL then it's empty (external slide type)
270
+ img = (window.location.href === img) ? '' : img;
271
+
272
+ // Send a success notification
273
+ var notice = new MS_Notification(metaslider.restored_language, '', img, 'is-success');
274
+
275
+ // Fire the notice
276
+ notice.fire(5000);
277
+ }
278
+ });
279
+ });
280
+
281
+ // Enable the correct options for this slider type
282
+ var switchType = function(slider) {
283
+ $('.metaslider .option:not(.' + slider + ')').attr('disabled', 'disabled').parents('tr').hide();
284
+ $('.metaslider .option.' + slider).removeAttr('disabled').parents('tr').show();
285
+ $('.metaslider input.radio:not(.' + slider + ')').attr('disabled', 'disabled');
286
+ $('.metaslider input.radio.' + slider).removeAttr('disabled');
287
+
288
+ $('.metaslider .showNextWhenChecked:visible').parent().parent().next('tr').hide();
289
+ $('.metaslider .showNextWhenChecked:visible:checked').parent().parent().next('tr').show();
290
+
291
+ // make sure that the selected option is available for this slider type
292
+ if ($('.effect option:selected').attr('disabled') === 'disabled') {
293
+ $('.effect option:enabled:first').attr('selected', 'selected');
294
+ }
295
+
296
+ // make sure that the selected option is available for this slider type
297
+ if ($('.theme option:selected').attr('disabled') === 'disabled') {
298
+ $('.theme option:enabled:first').attr('selected', 'selected');
299
+ }
300
+ };
301
+
302
+ // enable the correct options on page load
303
+ switchType($(".metaslider .select-slider:checked").attr("rel"));
304
+
305
+ var toggleNextRow = function(checkbox) {
306
+ if(checkbox.is(':checked')){
307
+ checkbox.parent().parent().next("tr").show();
308
+ } else {
309
+ checkbox.parent().parent().next("tr").hide();
310
+ }
311
+ }
312
+
313
+ toggleNextRow($(".metaslider .showNextWhenChecked"));
314
+
315
+ $(".metaslider .showNextWhenChecked").on("change", function() {
316
+ toggleNextRow($(this));
317
+ });
318
+
319
+ // mark the slide for resizing when the crop position has changed
320
+ $(".metaslider").on('change', '.left tr.slide .crop_position', function() {
321
+ $(this).closest('tr').data('crop_changed', true);
322
+ });
323
+
324
+ // handle slide libary switching
325
+ $(".metaslider .select-slider").on("click", function() {
326
+ switchType($(this).attr("rel"));
327
+ });
328
+
329
+ // return a helper with preserved width of cells
330
+ var metaslider_sortable_helper = function(e, ui) {
331
+ ui.children().each(function() {
332
+ $(this).width($(this).width());
333
+ });
334
+ return ui;
335
+ };
336
+
337
+ // drag and drop slides, update the slide order on drop
338
+ $(".metaslider .left table tbody").sortable({
339
+ helper: metaslider_sortable_helper,
340
+ handle: "td.col-1",
341
+ stop: function() {
342
+ $(".metaslider .left table").trigger("updateSlideOrder");
343
+ $("#ms-save").click();
344
+ }
345
+ });
346
+
347
+ // bind an event to the slides table to update the menu order of each slide
348
+ $(".metaslider .left table").live("updateSlideOrder", function(event) {
349
+ $("tr", this).each(function() {
350
+ $("input.menu_order", $(this)).val($(this).index());
351
+ });
352
+ });
353
+
354
+ // bind an event to the slides table to update the menu order of each slide
355
+ $(".metaslider .left table").live("resizeSlides", function(event) {
356
+ var slideshow_width = $("input.width").val();
357
+ var slideshow_height = $("input.height").val();
358
+
359
+ $("tr.slide input[name='resize_slide_id']", this).each(function() {
360
+ $this = $(this);
361
+
362
+ var thumb_width = $this.attr("data-width");
363
+ var thumb_height = $this.attr("data-height");
364
+ var slide_row = $(this).closest('tr');
365
+ var crop_changed = slide_row.data('crop_changed');
366
+
367
+ if (thumb_width != slideshow_width || thumb_height != slideshow_height || crop_changed === true ) {
368
+ $this.attr("data-width", slideshow_width);
369
+ $this.attr("data-height", slideshow_height);
370
+
371
+ var data = {
372
+ action: "resize_image_slide",
373
+ slider_id: window.parent.metaslider_slider_id,
374
+ slide_id: $this.attr("data-slide_id"),
375
+ _wpnonce: metaslider.resize_nonce
376
+ };
377
+
378
+ $.ajax({
379
+ type: "POST",
380
+ data : data,
381
+ async: false,
382
+ cache: false,
383
+ url: metaslider.ajaxurl,
384
+ success: function(data) {
385
+ if (crop_changed === true) {
386
+ slide_row.data('crop_changed', false);
387
+ }
388
+
389
+ if (console && console.log) {
390
+ console.log(data);
391
+ }
392
+ }
393
+ });
394
+ }
395
+ });
396
+ });
397
+
398
+ $(document).ajaxStop(function() {
399
+ $(".metaslider .spinner").hide().css('visibility', '');
400
+ $(".metaslider button[type=submit]").removeAttr("disabled");
401
+ });
402
+
403
+ $(".useWithCaution").on("change", function(){
404
+ if(!this.checked) {
405
+ return alert(metaslider.useWithCaution);
406
+ }
407
+ });
408
+
409
+ // helptext tooltips
410
+ $(".tipsy-tooltip").tipsy({className: 'msTipsy', live: true, delayIn: 500, html: true, gravity: 'e'});
411
+ $(".tipsy-tooltip-top").tipsy({live: true, delayIn: 500, html: true, gravity: 's'});
412
+
413
+ // Select input field contents when clicked
414
+ $(".metaslider .shortcode input, .metaslider .shortcode textarea").on('click', function() {
415
+ this.select();
416
+ });
417
+
418
+ // return lightbox width
419
+ var getLightboxWidth = function() {
420
+ var width = parseInt($('input.width').val(), 10);
421
+
422
+ if ($('.carouselMode').is(':checked')) {
423
+ width = '75%';
424
+ }
425
+
426
+ return width;
427
+ };
428
+
429
+ // return lightbox height
430
+ var getLightboxHeight = function() {
431
+ var height = parseInt($('input.height').val(), 10);
432
+ var thumb_height = parseInt($('input.thumb_height').val(), 10);
433
+
434
+ if (isNaN(height)) {
435
+ height = '70%';
436
+ } else {
437
+ height = height + 50;
438
+
439
+ if (!isNaN(thumb_height)) {
440
+ height = height + thumb_height;
441
+ }
442
+ }
443
+
444
+ return height;
445
+ };
446
+
447
+
448
+ // IE10 treats placeholder text as the actual value of a textarea
449
+ // http://stackoverflow.com/questions/13764607/html5-placeholder-attribute-on-textarea-via-$-in-ie10
450
+ var fixIE10PlaceholderText = function() {
451
+ $("textarea").each(function() {
452
+ if ($(this).val() == $(this).attr('placeholder')) {
453
+ $(this).val('');
454
+ }
455
+ });
456
+ };
457
+
458
+ $(".metaslider .ms-toggle .hndle, .metaslider .ms-toggle .handlediv").on('click', function() {
459
+ $(this).parent().toggleClass('closed');
460
+ });
461
+
462
+ // Switch tabs within a slide on space press
463
+ $('.metaslider-ui').on('keypress', 'ul.tabs > li > a', function(event) {
464
+ if (32 === event.which) {
465
+ event.preventDefault();
466
+ $(':focus').trigger('click');
467
+ }
468
+ });
469
+
470
+ // Event to switch tabs within a slide
471
+ $(".metaslider-ui").on('click', 'ul.tabs > li > a', function(event) {
472
+ event.preventDefault();
473
+ var tab = $(this);
474
+
475
+ // Hide all the tabs
476
+ tab.parents('.metaslider-ui-inner')
477
+ .children('.tabs-content')
478
+ .find('div.tab').hide();
479
+
480
+ // Show the selected tab
481
+ tab.parents('.metaslider-ui-inner')
482
+ .children('.tabs-content')
483
+ .find('div.' + tab.data('tab_id')).show();
484
+
485
+ // Add the class
486
+ tab.parent().addClass("selected")
487
+ .siblings().removeClass("selected");
488
+ });
489
+
490
+ // Switch slider types when on the label and pressing enter
491
+ $('.metaslider-ui').on('keypress', '.slider-lib-row label', function (event) {
492
+ if (32 === event.which) {
493
+ event.preventDefault();
494
+ $('.slider-lib-row #' + $(this).attr('for')).trigger('click');
495
+ }
496
+ });
497
+
498
+ // show the confirm dialogue
499
+ $(".metaslider").on('click', '.delete-slider', function() {
500
+ return confirm(metaslider.confirm);
501
+ });
502
+
503
+ // AJAX save & preview
504
+ $(".metaslider form").find("button[type=submit]").on("click", function(e) {
505
+ e.preventDefault();
506
+
507
+ $(".metaslider .spinner").show().css('visibility', 'visible');
508
+ $(".metaslider input[type=submit]").attr("disabled", "disabled");
509
+
510
+ // update slide order
511
+ $(".metaslider .left table").trigger('updateSlideOrder');
512
+
513
+ fixIE10PlaceholderText();
514
+
515
+ // get some values from elements on the page:
516
+ var the_form = $(this).parents("form");
517
+ var data = the_form.serialize();
518
+ var url = the_form.attr("action");
519
+ var button = $(this);
520
+
521
+ $.ajax({
522
+ type: "POST",
523
+ data : data,
524
+ cache: false,
525
+ url: url,
526
+ success: function(data) {
527
+ var response = $(data);
528
+ $.when($(".metaslider .left table").trigger("resizeSlides")).done(function() {
529
+
530
+ $("button[data-thumb]", response).each(function() {
531
+ var $this = $(this);
532
+ var editor_id = $this.attr("data-editor_id");
533
+ $("button[data-editor_id=" + editor_id + "]")
534
+ .attr("data-thumb", $this.attr("data-thumb"))
535
+ .attr("data-width", $this.attr("data-width"))
536
+ .attr("data-height", $this.attr("data-height"));
537
+ });
538
+
539
+ fixIE10PlaceholderText();
540
+
541
+ if ("ms-preview" === button.prop("id")) {
542
+ $.colorbox({
543
+ iframe: true,
544
+ href: metaslider.iframeurl + "&slider_id=" + button.data("slider_id"),
545
+ transition: "elastic",
546
+ innerHeight: getLightboxHeight(),
547
+ innerWidth: getLightboxWidth(),
548
+ scrolling: false,
549
+ fastIframe: false
550
+ });
551
+ }
552
+
553
+ });
554
+ }
555
+ });
556
+ });
557
+
558
+ // UI/Feedback
559
+
560
+ // Events for the slideshow title
561
+ $('.metaslider .nav-tab-active input[name="title"]').on('focusin', function() {
562
+
563
+ // Expand the input box when a user wants to edit a slider title
564
+ $(this).css('width', ($(this).val().length + 1) * 9);
565
+ }).on('focusout', function() {
566
+
567
+ // Retract and save the slideshow title
568
+ $(this).css('width', 150);
569
+ $("#ms-save").trigger('click');
570
+ }).on('keypress', function() {
571
+
572
+ // Pressing enter on the slide title saves it and focuses outside.
573
+ if (13 === event.which) {
574
+ event.preventDefault();
575
+ $("#ms-save").trigger('click');
576
+ $("button.add-slide").focus();
577
+ }
578
+ });
579
+
580
+
581
+ // Bind the slider title to the input.
582
+ $('.metaslider input[name="title"]').on('input', function(event) {
583
+ event.preventDefault();
584
+
585
+ var title = new MS_Binder(".slider-title > h3");
586
+ title.bind($(this).val());
587
+ });
588
+ });
589
+
590
+ /**
591
+ * Various helper functions to use throughout
592
+ */
593
+ var MetaSlider_Helpers = {
594
+
595
+ /**
596
+ * Various helper functions to use throughout
597
+ */
598
+ capitalize: function(string) {
599
+ return string.replace(/\b\w/g, function(l){ return l.toUpperCase(); });
600
+ },
601
+
602
+ /**
603
+ * Sets some basic loading state UI elements of the app. Currently,
604
+ * it only enables or disables the input and shows a loading spinner.
605
+ * @property {boolean} state
606
+ */
607
+ loading: function(state) {
608
+ if (state) {
609
+ jQuery(".metaslider .spinner").show().css('visibility', 'visible');
610
+ jQuery(".metaslider button[type=submit]").attr('disabled', 'disabled');
611
+ } else {
612
+ jQuery(".metaslider .spinner").hide().css('visibility', '');
613
+ jQuery(".metaslider button[type=submit]").removeAttr("disabled");
614
+ }
615
+ },
616
+ };
617
+
618
+ /**
619
+ * Simple view binder
620
+ * var elm = new MS_Binder("#selector");
621
+ * elm.bind(200);
622
+ */
623
+ var MS_Binder = function(selector) {
624
+ this.dom = document.querySelector(selector);
625
+ this.value = null;
626
+ };
627
+
628
+ MS_Binder.prototype.bind = function(value){
629
+ if (value === this.value) return;
630
+
631
+ this.value = value;
632
+ this.dom.innerText = this.value;
633
+ };
634
+
635
+ /**
636
+ * Simple notifications
637
+ * var notice = new MS_Notification("Slide Deleted", "click to undo", 'img.jpg', 'success');
638
+ * Can use a custom function for the callback as well
639
+ * requires jQuery
640
+ */
641
+ var MS_Notification = function(message, submessage, image, _classname) {
642
+ this.panel = document.getElementById('ms-notifications');
643
+ if (!this.panel) {
644
+ this.panel = document.createElement('div');
645
+ this.panel.id = "ms-notifications";
646
+ }
647
+ this.notice = jQuery('<div class="ms-notification"><div class="ms-notification-content"><h3></h3><p></p></div><div class="img"></div></div>');
648
+ this.notice.find('h3').text(message);
649
+ this.notice.find('p').text(submessage);
650
+
651
+ // If there is an image, let's add it.
652
+ if (('undefined' !== typeof image) && image.length) {
653
+ this.notice.addClass('has-image')
654
+ .find('.img')
655
+ .append('<img width=50 height=50 src="' + image + '">');
656
+ }
657
+
658
+ // TODO add an option for svg
659
+
660
+ // If an extra class is set, set it
661
+ ('undefined' !== typeof _classname) && this.notice.addClass(_classname);
662
+
663
+ // Append the panel to the body and
664
+ jQuery(this.panel).appendTo(jQuery('body'));
665
+ };
666
+
667
+ /**
668
+ * Hide a notification
669
+ */
670
+ MS_Notification.prototype.hide = function() {
671
+ var _this = this;
672
+ _this.notice.addClass('finished');
673
+ this.notice.fadeOut(500, function () {
674
+ _this.notice.remove();
675
+ });
676
+ };
677
+
678
+ /**
679
+ * Launch a notification and add a click event
680
+ * @param int delay the time in milliseconds
681
+ * @param string callback a method on the object or anon function
682
+ */
683
+ MS_Notification.prototype.fire = function(delay, callback) {
684
+ var _this = this;
685
+ var _callback = ('undefined' !== typeof callback) ? callback : 'hide';
686
+
687
+ // Prepend this to the notification stack
688
+ this.notice.prependTo(this.panel);
689
+
690
+ // Automatically hide after the delay
691
+ this.timeout = setTimeout(function() {
692
+ _this.hide();
693
+ }, delay);
694
+
695
+ // Clear this timeout on click
696
+ this.notice.on('click', function() {
697
+ clearTimeout(_this.timeout);
698
+ });
699
+
700
+ // Pause the timeout on hover
701
+ this.notice.on('mouseenter', function() {
702
+ clearTimeout(_this.timeout);
703
+ });
704
+
705
+ // Restart the timeout after leaving
706
+ this.notice.on('mouseleave', function() {
707
+ _this.timeout = setTimeout(function() {
708
+ _this.hide();
709
+ }, delay);
710
+ });
711
+
712
+ // If callback is a method
713
+ if (MS_Notification.prototype.hasOwnProperty(_callback)) {
714
+ this.notice.on('click', function() {
715
+ if ('hide' !== _callback) {
716
+ _this.hide();
717
+ }
718
+ MS_Notification.call(_this[_callback]());
719
+ });
720
+ } else {
721
+
722
+ // If the callback is a custom function
723
+ this.notice.on('click', function() {
724
+ _this.hide();
725
+ _callback();
726
+ });
727
+ }
728
+ };
admin/assets/js/tour.js ADDED
@@ -0,0 +1,261 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Not really a tour, but uses the same library to introduce the plugin.
2
+ // This should always show when the user has no slideshows
3
+ var no_slideshows = new Shepherd.Tour({
4
+ defaults: {
5
+ classes: 'shepherd-theme-arrows shepherd-no-slideshows'
6
+ }
7
+ });
8
+ no_slideshows.addStep('welcome', {
9
+ title: metaslider_tour.no_slideshows.title,
10
+ text: metaslider_tour.no_slideshows.message,
11
+ attachTo: '#create_new_tab bottom',
12
+ tetherOptions: {
13
+ offset: '-5px 0'
14
+ },
15
+ buttons: []
16
+ });
17
+
18
+ metaslider_tour.no_slideshows.show && no_slideshows.start();
19
+
20
+ // Main tour to introduce the plugin
21
+ var main_tour = new Shepherd.Tour();
22
+
23
+ // Set up the defaults for each step
24
+ main_tour.options.defaults = {
25
+ classes: 'shepherd-theme-arrows shepherd-main-tour',
26
+ showCancelLink: true
27
+ };
28
+
29
+ // If we have passed step two, don't let the media
30
+ // uploader events below effect the UX
31
+ main_tour.can_still_go_back = true;
32
+
33
+ // If they have slides already, allow them to skip this step
34
+ var skip_button = jQuery('.metaslider-ui .slide').length ? [{
35
+ text: metaslider_tour.main_tour.skip_language,
36
+ action: function() {
37
+ main_tour.show('step_preview_slideshow');
38
+ }
39
+ }] : [];
40
+ main_tour.addStep('step_add_slide', {
41
+ title: metaslider_tour.main_tour.step1.title,
42
+ text: metaslider_tour.main_tour.step1.message,
43
+ attachTo: 'button.add-slide bottom',
44
+ tetherOptions: {
45
+ offset: '-5px 0'
46
+ },
47
+ buttons: skip_button
48
+ });
49
+ main_tour.addStep('step_show_slide_types', {
50
+ title: metaslider_tour.main_tour.step2a.title,
51
+ text: metaslider_tour.main_tour.step2a.message,
52
+ attachTo: '.media-menu right',
53
+ classes: 'shepherd-theme-arrows shepherd-main-tour super-index',
54
+ tetherOptions: {
55
+ constraints: null,
56
+ attachment: 'top left',
57
+ targetAttachment: 'top right',
58
+ targetOffset: '10% -35px'
59
+ },
60
+ buttons: [
61
+ {
62
+ text: metaslider_tour.main_tour.next_language,
63
+ action: function() {
64
+ main_tour.next();
65
+ }
66
+ }
67
+ ]
68
+ });
69
+ main_tour.addStep('step_add_media', {
70
+ title: metaslider_tour.main_tour.step2b.title,
71
+ text: metaslider_tour.main_tour.step2b.message,
72
+ attachTo: '.media-modal.wp-core-ui top',
73
+ classes: 'shepherd-theme-arrows shepherd-main-tour super-index',
74
+ tetherOptions: {
75
+ targetAttachment: 'bottom right',
76
+ offset: '50px 140px'
77
+ },
78
+ buttons: []
79
+ });
80
+ main_tour.addStep('step_preview_slideshow', {
81
+ title: metaslider_tour.main_tour.step3.title,
82
+ text: metaslider_tour.main_tour.step3.message,
83
+ attachTo: '.metaslider-actions left',
84
+ classes: 'shepherd-theme-arrows shepherd-main-tour',
85
+ tetherOptions: {
86
+ offset: '0 5px'
87
+ },
88
+ buttons: [
89
+ {
90
+ text: metaslider_tour.main_tour.next_language,
91
+ action: function() {
92
+ main_tour.next();
93
+ }
94
+ }
95
+ ]
96
+ });
97
+ main_tour.addStep('step_edit_settings', {
98
+ title: metaslider_tour.main_tour.step4.title,
99
+ text: metaslider_tour.main_tour.step4.message,
100
+ attachTo: '#metaslider_configuration left',
101
+ classes: 'shepherd-theme-arrows shepherd-main-tour',
102
+ scrollTo: true,
103
+ tetherOptions: {
104
+ offset: '0 5px'
105
+ },
106
+ buttons: [
107
+ {
108
+ text: metaslider_tour.main_tour.next_language,
109
+ action: function() {
110
+ main_tour.next();
111
+ }
112
+ }
113
+ ]
114
+ });
115
+ main_tour.addStep('step_view_shortcode', {
116
+ title: metaslider_tour.main_tour.step5.title,
117
+ text: metaslider_tour.main_tour.step5.message,
118
+ attachTo: '.metaslider-shortcode bottom',
119
+ classes: 'shepherd-theme-arrows shepherd-main-tour',
120
+ when: {
121
+ show: function() {
122
+ window.scrollTo(0, 0);
123
+ }
124
+ },
125
+ tetherOptions: {
126
+ offset: '-5px 0'
127
+ },
128
+ buttons: [
129
+ {
130
+ text : metaslider_tour.main_tour.step5.button,
131
+ action : main_tour.cancel
132
+ }
133
+ ]
134
+ });
135
+ main_tour.addStep('step_show_ad', {
136
+ title: metaslider_tour.main_tour.final_ad.title,
137
+ text: metaslider_tour.main_tour.final_ad.message,
138
+ classes: 'shepherd-theme-arrows shepherd-main-tour super-index',
139
+ showCancelLink: false,
140
+ buttons: [
141
+ {
142
+ text: metaslider_tour.main_tour.learn_more_language,
143
+ action: function() {
144
+ window.open(metaslider_tour.main_tour.upgrade_link, '_blank').focus();
145
+ },
146
+ classes: 'btn-cta-gradient'
147
+ },
148
+ {
149
+ text : metaslider_tour.main_tour.final_ad.button,
150
+ action : function() {
151
+ jQuery('#wpwrap, .media-modal').removeClass('blurred-out');
152
+ main_tour.hide();
153
+ }
154
+ }
155
+ ]
156
+ });
157
+ main_tour.on('cancel', function() {
158
+
159
+ // The tour is either finished or they hit the x
160
+ main_tour.can_still_go_back = false;
161
+ var data = {
162
+ action: 'set_tour_status',
163
+ _wpnonce: metaslider_tour.main_tour.nonce,
164
+ current_step: this.getCurrentStep().id
165
+ };
166
+ jQuery.ajax({
167
+ url: metaslider.ajaxurl,
168
+ data: data,
169
+ method: 'POST',
170
+ error: function(response) {
171
+
172
+ // Error to the console (useful if we get support feedback
173
+ // that the tour always shows)
174
+ console.log("Tour error: " + response.responseJSON.data.message);
175
+ },
176
+ success: function(response) {
177
+
178
+ // We will show a final ad to lite users only when they cancel
179
+ // and there are no errors (don't want to annoy them if there's a bug)
180
+ if (!metaslider_tour.main_tour.is_pro) {
181
+ jQuery('#wpwrap, .media-modal').addClass('blurred-out');
182
+ main_tour.show('step_show_ad');
183
+ }
184
+
185
+ }
186
+ });
187
+ });
188
+
189
+ metaslider_tour.main_tour.show && main_tour.start();
190
+
191
+ // Specifics for lite users (i.e. ads)
192
+ if (!metaslider_tour.main_tour.is_pro) {
193
+
194
+ // Add a CTA button to this step if add-on pack is disabled
195
+ main_tour.getById('step_show_slide_types').options.buttons.unshift({
196
+ text: metaslider_tour.main_tour.learn_more_language,
197
+ action: function() {
198
+ window.open(metaslider_tour.main_tour.upgrade_link, '_blank').focus();
199
+ },
200
+ classes: 'btn-cta-gradient'
201
+ });
202
+ }
203
+
204
+ // Load jQuery events after DOM load
205
+ jQuery(function($) {
206
+ if (metaslider_tour.main_tour.show) {
207
+
208
+ // When the add slide UI is opened, progress the tour
209
+ $('body').on('click', '.add-slide.shepherd-target', function(event) {
210
+ window.setTimeout(function() {
211
+ main_tour.can_still_go_back && main_tour.show('step_show_slide_types');
212
+
213
+ // If it's an image, we can progress (see below for other slides)
214
+ var add_to_slideshow_event = function() {
215
+ $('.media-button').on('click', function(event) {
216
+ main_tour.can_still_go_back && main_tour.show('step_preview_slideshow');
217
+ main_tour.can_still_go_back = false;
218
+ });
219
+ };
220
+ add_to_slideshow_event();
221
+
222
+ // If we're on pro, call the above function. But if we're on lite, then
223
+ // we have to rebind the events. I'm not really sure why, but it works,
224
+ // and without it, it doesn't work.
225
+ metaslider_tour.main_tour.is_pro || $('.media-menu-item').on('click', function(event) {
226
+ add_to_slideshow_event();
227
+ if($('.media-menu-item').eq(0).is(this)) {
228
+ main_tour.show('step_add_media');
229
+ } else {
230
+ main_tour.hide();
231
+ }
232
+ });
233
+ }, 500);
234
+ });
235
+
236
+ // When the UI is closed and no slide is set, reverse the tour
237
+ $('body').on('click', '.media-modal-close, .media-modal-backdrop', function(event) {
238
+
239
+ // If the user is pro, and adds a non-image slide, the way it's handled
240
+ // is the iFrame triggers a click on the main add media button. So this will also
241
+ // fire. Let's move forward if the count of slides is more than 1
242
+ var slide_count = $('.metaslider-slides-container .slide').length;
243
+ if (metaslider_tour.main_tour.is_pro && slide_count) {
244
+ main_tour.can_still_go_back && main_tour.show('step_preview_slideshow');
245
+ main_tour.can_still_go_back = false;
246
+ }
247
+
248
+ // Only go back if we still can (i.e. reopening the UI doesn't reset the tour)
249
+ main_tour.can_still_go_back && main_tour.show('step_add_slide');
250
+ });
251
+
252
+ // This is to handle the Escape key.
253
+ $(document).keyup(function(event) {
254
+
255
+ // If they press escape during the add-media step, send them back one step.
256
+ if (27 == event.keyCode && ('add-media' === main_tour.getCurrentStep().id)) {
257
+ main_tour.can_still_go_back && main_tour.show('step_add_slide');
258
+ }
259
+ });
260
+ }
261
+ });
admin/assets/tether-shepherd/LICENSE ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2015 HubSpot, Inc.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8
+
admin/assets/tether-shepherd/shepherd-theme-arrows-fix.css ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ .shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top.shepherd-target-attached-left .shepherd-content:before,
2
+ .shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top.shepherd-target-attached-right .shepherd-content:before,
3
+ .shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-target-attached-left .shepherd-content:before,
4
+ .shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-target-attached-right .shepherd-content:before {
5
+ display: none; }
admin/assets/tether-shepherd/shepherd-theme-arrows-fix.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top.shepherd-target-attached-left .shepherd-content:before,.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top.shepherd-target-attached-right .shepherd-content:before,.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-target-attached-left .shepherd-content:before,.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-target-attached-right .shepherd-content:before{display:none}
admin/assets/tether-shepherd/shepherd-theme-arrows-plain-buttons.css ADDED
@@ -0,0 +1,215 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top.shepherd-target-attached-left .shepherd-content:before,
2
+ .shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top.shepherd-target-attached-right .shepherd-content:before,
3
+ .shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-target-attached-left .shepherd-content:before,
4
+ .shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-target-attached-right .shepherd-content:before {
5
+ display: none; }
6
+
7
+ .shepherd-element, .shepherd-element:after, .shepherd-element:before, .shepherd-element *, .shepherd-element *:after, .shepherd-element *:before {
8
+ box-sizing: border-box; }
9
+
10
+ .shepherd-element {
11
+ position: absolute;
12
+ display: none; }
13
+ .shepherd-element.shepherd-open {
14
+ display: block; }
15
+
16
+ .shepherd-element.shepherd-theme-arrows-plain-buttons {
17
+ max-width: 100%;
18
+ max-height: 100%; }
19
+ .shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content {
20
+ border-radius: 5px;
21
+ position: relative;
22
+ font-family: inherit;
23
+ background: #fff;
24
+ color: #444;
25
+ padding: 1em;
26
+ font-size: 1.1em;
27
+ line-height: 1.5em;
28
+ -webkit-transform: translateZ(0);
29
+ transform: translateZ(0);
30
+ -webkit-filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
31
+ filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2)); }
32
+ .shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content:before {
33
+ content: "";
34
+ display: block;
35
+ position: absolute;
36
+ width: 0;
37
+ height: 0;
38
+ border-color: transparent;
39
+ border-width: 16px;
40
+ border-style: solid;
41
+ pointer-events: none; }
42
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content {
43
+ margin-bottom: 16px; }
44
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content:before {
45
+ top: 100%;
46
+ left: 50%;
47
+ margin-left: -16px;
48
+ border-top-color: #fff; }
49
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content {
50
+ margin-top: 16px; }
51
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content:before {
52
+ bottom: 100%;
53
+ left: 50%;
54
+ margin-left: -16px;
55
+ border-bottom-color: #fff; }
56
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content {
57
+ margin-right: 16px; }
58
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content:before {
59
+ left: 100%;
60
+ top: 50%;
61
+ margin-top: -16px;
62
+ border-left-color: #fff; }
63
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content {
64
+ margin-left: 16px; }
65
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content:before {
66
+ right: 100%;
67
+ top: 50%;
68
+ margin-top: -16px;
69
+ border-right-color: #fff; }
70
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-left.shepherd-target-attached-center .shepherd-content {
71
+ left: -32px; }
72
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-right.shepherd-target-attached-center .shepherd-content {
73
+ left: 32px; }
74
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content {
75
+ margin-top: 16px; }
76
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before {
77
+ bottom: 100%;
78
+ left: 16px;
79
+ border-bottom-color: #fff; }
80
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content {
81
+ margin-top: 16px; }
82
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before {
83
+ bottom: 100%;
84
+ right: 16px;
85
+ border-bottom-color: #fff; }
86
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content {
87
+ margin-bottom: 16px; }
88
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before {
89
+ top: 100%;
90
+ left: 16px;
91
+ border-top-color: #fff; }
92
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content {
93
+ margin-bottom: 16px; }
94
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before {
95
+ top: 100%;
96
+ right: 16px;
97
+ border-top-color: #fff; }
98
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content {
99
+ margin-top: 16px; }
100
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content:before {
101
+ bottom: 100%;
102
+ left: 16px;
103
+ border-bottom-color: #fff; }
104
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content {
105
+ margin-top: 16px; }
106
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content:before {
107
+ bottom: 100%;
108
+ right: 16px;
109
+ border-bottom-color: #fff; }
110
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content {
111
+ margin-bottom: 16px; }
112
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content:before {
113
+ top: 100%;
114
+ left: 16px;
115
+ border-top-color: #fff; }
116
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content {
117
+ margin-bottom: 16px; }
118
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content:before {
119
+ top: 100%;
120
+ right: 16px;
121
+ border-top-color: #fff; }
122
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content {
123
+ margin-right: 16px; }
124
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before {
125
+ top: 16px;
126
+ left: 100%;
127
+ border-left-color: #fff; }
128
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content {
129
+ margin-left: 16px; }
130
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before {
131
+ top: 16px;
132
+ right: 100%;
133
+ border-right-color: #fff; }
134
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content {
135
+ margin-right: 16px; }
136
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before {
137
+ bottom: 16px;
138
+ left: 100%;
139
+ border-left-color: #fff; }
140
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content {
141
+ margin-left: 16px; }
142
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before {
143
+ bottom: 16px;
144
+ right: 100%;
145
+ border-right-color: #fff; }
146
+
147
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-center.shepherd-has-title .shepherd-content:before, .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before, .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before {
148
+ border-bottom-color: #eee; }
149
+
150
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-has-title .shepherd-content header {
151
+ background: #eee;
152
+ padding: 1em; }
153
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-has-title .shepherd-content header a.shepherd-cancel-link {
154
+ padding: 0;
155
+ margin-bottom: 0; }
156
+
157
+ .shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-has-cancel-link .shepherd-content header h3 {
158
+ float: left; }
159
+
160
+ .shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content {
161
+ padding: 0; }
162
+ .shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content header {
163
+ *zoom: 1;
164
+ border-radius: 5px 5px 0 0; }
165
+ .shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content header:after {
166
+ content: "";
167
+ display: table;
168
+ clear: both; }
169
+ .shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content header h3 {
170
+ margin: 0;
171
+ line-height: 1;
172
+ font-weight: normal; }
173
+ .shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content header a.shepherd-cancel-link {
174
+ float: right;
175
+ text-decoration: none;
176
+ font-size: 1.25em;
177
+ line-height: .8em;
178
+ font-weight: normal;
179
+ color: rgba(0, 0, 0, 0.5);
180
+ opacity: 0.25;
181
+ position: relative;
182
+ top: .1em;
183
+ padding: .8em;
184
+ margin-bottom: -.8em; }
185
+ .shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content header a.shepherd-cancel-link:hover {
186
+ opacity: 1; }
187
+ .shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content .shepherd-text {
188
+ padding: 1em; }
189
+ .shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content .shepherd-text p {
190
+ margin: 0 0 .5em 0;
191
+ line-height: 1.3em; }
192
+ .shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content .shepherd-text p:last-child {
193
+ margin-bottom: 0; }
194
+ .shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content footer {
195
+ padding: 0 1em 1em; }
196
+ .shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content footer .shepherd-buttons {
197
+ text-align: right;
198
+ list-style: none;
199
+ padding: 0;
200
+ margin: 0; }
201
+ .shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content footer .shepherd-buttons li {
202
+ display: inline;
203
+ padding: 0;
204
+ margin: 0; }
205
+ .shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content footer .shepherd-buttons li .shepherd-button {
206
+ display: inline-block;
207
+ vertical-align: middle;
208
+ *vertical-align: auto;
209
+ *zoom: 1;
210
+ *display: inline;
211
+ cursor: pointer;
212
+ margin: 0 .5em 0 0;
213
+ text-decoration: none; }
214
+ .shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content footer .shepherd-buttons li:last-child .shepherd-button {
215
+ margin-right: 0; }
admin/assets/tether-shepherd/shepherd-theme-arrows-plain-buttons.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top.shepherd-target-attached-left .shepherd-content:before,.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top.shepherd-target-attached-right .shepherd-content:before,.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-target-attached-left .shepherd-content:before,.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-target-attached-right .shepherd-content:before{display:none}.shepherd-element,.shepherd-element:after,.shepherd-element:before,.shepherd-element *,.shepherd-element *:after,.shepherd-element *:before{box-sizing:border-box}.shepherd-element{position:absolute;display:none}.shepherd-element.shepherd-open{display:block}.shepherd-element.shepherd-theme-arrows-plain-buttons{max-width:100%;max-height:100%}.shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content{border-radius:5px;position:relative;font-family:inherit;background:#fff;color:#444;padding:1em;font-size:1.1em;line-height:1.5em;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-filter:drop-shadow(0 1px 4px rgba(0,0,0,0.2));filter:drop-shadow(0 1px 4px rgba(0,0,0,0.2))}.shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content:before{content:"";display:block;position:absolute;width:0;height:0;border-color:transparent;border-width:16px;border-style:solid;pointer-events:none}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content:before{top:100%;left:50%;margin-left:-16px;border-top-color:#fff}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content:before{bottom:100%;left:50%;margin-left:-16px;border-bottom-color:#fff}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content{margin-right:16px}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content:before{left:100%;top:50%;margin-top:-16px;border-left-color:#fff}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content{margin-left:16px}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content:before{right:100%;top:50%;margin-top:-16px;border-right-color:#fff}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-left.shepherd-target-attached-center .shepherd-content{left:-32px}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-right.shepherd-target-attached-center .shepherd-content{left:32px}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before{bottom:100%;left:16px;border-bottom-color:#fff}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before{bottom:100%;right:16px;border-bottom-color:#fff}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before{top:100%;left:16px;border-top-color:#fff}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before{top:100%;right:16px;border-top-color:#fff}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content:before{bottom:100%;left:16px;border-bottom-color:#fff}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content:before{bottom:100%;right:16px;border-bottom-color:#fff}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content:before{top:100%;left:16px;border-top-color:#fff}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content:before{top:100%;right:16px;border-top-color:#fff}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content{margin-right:16px}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before{top:16px;left:100%;border-left-color:#fff}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content{margin-left:16px}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before{top:16px;right:100%;border-right-color:#fff}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content{margin-right:16px}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before{bottom:16px;left:100%;border-left-color:#fff}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content{margin-left:16px}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before{bottom:16px;right:100%;border-right-color:#fff}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-center.shepherd-has-title .shepherd-content:before,.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before,.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before{border-bottom-color:#eee}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-has-title .shepherd-content header{background:#eee;padding:1em}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-has-title .shepherd-content header a.shepherd-cancel-link{padding:0;margin-bottom:0}.shepherd-element.shepherd-theme-arrows-plain-buttons.shepherd-has-cancel-link .shepherd-content header h3{float:left}.shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content{padding:0}.shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content header{*zoom:1;border-radius:5px 5px 0 0}.shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content header:after{content:"";display:table;clear:both}.shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content header h3{margin:0;line-height:1;font-weight:normal}.shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content header a.shepherd-cancel-link{float:right;text-decoration:none;font-size:1.25em;line-height:.8em;font-weight:normal;color:rgba(0,0,0,0.5);opacity:.25;position:relative;top:.1em;padding:.8em;margin-bottom:-.8em}.shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content header a.shepherd-cancel-link:hover{opacity:1}.shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content .shepherd-text{padding:1em}.shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content .shepherd-text p{margin:0 0 .5em 0;line-height:1.3em}.shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content .shepherd-text p:last-child{margin-bottom:0}.shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content footer{padding:0 1em 1em}.shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content footer .shepherd-buttons{text-align:right;list-style:none;padding:0;margin:0}.shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content footer .shepherd-buttons li{display:inline;padding:0;margin:0}.shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content footer .shepherd-buttons li .shepherd-button{display:inline-block;vertical-align:middle;*vertical-align:auto;*zoom:1;*display:inline;cursor:pointer;margin:0 .5em 0 0;text-decoration:none}.shepherd-element.shepherd-theme-arrows-plain-buttons .shepherd-content footer .shepherd-buttons li:last-child .shepherd-button{margin-right:0}
admin/assets/tether-shepherd/shepherd-theme-arrows.css ADDED
@@ -0,0 +1,229 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top.shepherd-target-attached-left .shepherd-content:before,
2
+ .shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top.shepherd-target-attached-right .shepherd-content:before,
3
+ .shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-target-attached-left .shepherd-content:before,
4
+ .shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-target-attached-right .shepherd-content:before {
5
+ display: none; }
6
+
7
+ .shepherd-element, .shepherd-element:after, .shepherd-element:before, .shepherd-element *, .shepherd-element *:after, .shepherd-element *:before {
8
+ box-sizing: border-box; }
9
+
10
+ .shepherd-element {
11
+ position: absolute;
12
+ display: none; }
13
+ .shepherd-element.shepherd-open {
14
+ display: block; }
15
+
16
+ .shepherd-element.shepherd-theme-arrows {
17
+ max-width: 100%;
18
+ max-height: 100%; }
19
+ .shepherd-element.shepherd-theme-arrows .shepherd-content {
20
+ border-radius: 5px;
21
+ position: relative;
22
+ font-family: inherit;
23
+ background: #fff;
24
+ color: #444;
25
+ padding: 1em;
26
+ font-size: 1.1em;
27
+ line-height: 1.5em;
28
+ -webkit-transform: translateZ(0);
29
+ transform: translateZ(0);
30
+ -webkit-filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
31
+ filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2)); }
32
+ .shepherd-element.shepherd-theme-arrows .shepherd-content:before {
33
+ content: "";
34
+ display: block;
35
+ position: absolute;
36
+ width: 0;
37
+ height: 0;
38
+ border-color: transparent;
39
+ border-width: 16px;
40
+ border-style: solid;
41
+ pointer-events: none; }
42
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content {
43
+ margin-bottom: 16px; }
44
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content:before {
45
+ top: 100%;
46
+ left: 50%;
47
+ margin-left: -16px;
48
+ border-top-color: #fff; }
49
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content {
50
+ margin-top: 16px; }
51
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content:before {
52
+ bottom: 100%;
53
+ left: 50%;
54
+ margin-left: -16px;
55
+ border-bottom-color: #fff; }
56
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content {
57
+ margin-right: 16px; }
58
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content:before {
59
+ left: 100%;
60
+ top: 50%;
61
+ margin-top: -16px;
62
+ border-left-color: #fff; }
63
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content {
64
+ margin-left: 16px; }
65
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content:before {
66
+ right: 100%;
67
+ top: 50%;
68
+ margin-top: -16px;
69
+ border-right-color: #fff; }
70
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-left.shepherd-target-attached-center .shepherd-content {
71
+ left: -32px; }
72
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-right.shepherd-target-attached-center .shepherd-content {
73
+ left: 32px; }
74
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content {
75
+ margin-top: 16px; }
76
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before {
77
+ bottom: 100%;
78
+ left: 16px;
79
+ border-bottom-color: #fff; }
80
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content {
81
+ margin-top: 16px; }
82
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before {
83
+ bottom: 100%;
84
+ right: 16px;
85
+ border-bottom-color: #fff; }
86
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content {
87
+ margin-bottom: 16px; }
88
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before {
89
+ top: 100%;
90
+ left: 16px;
91
+ border-top-color: #fff; }
92
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content {
93
+ margin-bottom: 16px; }
94
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before {
95
+ top: 100%;
96
+ right: 16px;
97
+ border-top-color: #fff; }
98
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content {
99
+ margin-top: 16px; }
100
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content:before {
101
+ bottom: 100%;
102
+ left: 16px;
103
+ border-bottom-color: #fff; }
104
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content {
105
+ margin-top: 16px; }
106
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content:before {
107
+ bottom: 100%;
108
+ right: 16px;
109
+ border-bottom-color: #fff; }
110
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content {
111
+ margin-bottom: 16px; }
112
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content:before {
113
+ top: 100%;
114
+ left: 16px;
115
+ border-top-color: #fff; }
116
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content {
117
+ margin-bottom: 16px; }
118
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content:before {
119
+ top: 100%;
120
+ right: 16px;
121
+ border-top-color: #fff; }
122
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content {
123
+ margin-right: 16px; }
124
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before {
125
+ top: 16px;
126
+ left: 100%;
127
+ border-left-color: #fff; }
128
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content {
129
+ margin-left: 16px; }
130
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before {
131
+ top: 16px;
132
+ right: 100%;
133
+ border-right-color: #fff; }
134
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content {
135
+ margin-right: 16px; }
136
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before {
137
+ bottom: 16px;
138
+ left: 100%;
139
+ border-left-color: #fff; }
140
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content {
141
+ margin-left: 16px; }
142
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before {
143
+ bottom: 16px;
144
+ right: 100%;
145
+ border-right-color: #fff; }
146
+
147
+ .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-center.shepherd-has-title .shepherd-content:before, .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before, .shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before {
148
+ border-bottom-color: #eee; }
149
+
150
+ .shepherd-element.shepherd-theme-arrows.shepherd-has-title .shepherd-content header {
151
+ background: #eee;
152
+ padding: 1em; }
153
+ .shepherd-element.shepherd-theme-arrows.shepherd-has-title .shepherd-content header a.shepherd-cancel-link {
154
+ padding: 0;
155
+ margin-bottom: 0; }
156
+
157
+ .shepherd-element.shepherd-theme-arrows.shepherd-has-cancel-link .shepherd-content header h3 {
158
+ float: left; }
159
+
160
+ .shepherd-element.shepherd-theme-arrows .shepherd-content {
161
+ padding: 0; }
162
+ .shepherd-element.shepherd-theme-arrows .shepherd-content * {
163
+ font-size: inherit; }
164
+ .shepherd-element.shepherd-theme-arrows .shepherd-content header {
165
+ *zoom: 1;
166
+ border-radius: 5px 5px 0 0; }
167
+ .shepherd-element.shepherd-theme-arrows .shepherd-content header:after {
168
+ content: "";
169
+ display: table;
170
+ clear: both; }
171
+ .shepherd-element.shepherd-theme-arrows .shepherd-content header h3 {
172
+ margin: 0;
173
+ line-height: 1;
174
+ font-weight: normal; }
175
+ .shepherd-element.shepherd-theme-arrows .shepherd-content header a.shepherd-cancel-link {
176
+ float: right;
177
+ text-decoration: none;
178
+ font-size: 1.25em;
179
+ line-height: .8em;
180
+ font-weight: normal;
181
+ color: rgba(0, 0, 0, 0.5);
182
+ opacity: 0.25;
183
+ position: relative;
184
+ top: .1em;
185
+ padding: .8em;
186
+ margin-bottom: -.8em; }
187
+ .shepherd-element.shepherd-theme-arrows .shepherd-content header a.shepherd-cancel-link:hover {
188
+ opacity: 1; }
189
+ .shepherd-element.shepherd-theme-arrows .shepherd-content .shepherd-text {
190
+ padding: 1em; }
191
+ .shepherd-element.shepherd-theme-arrows .shepherd-content .shepherd-text p {
192
+ margin: 0 0 .5em 0;
193
+ line-height: 1.3em; }
194
+ .shepherd-element.shepherd-theme-arrows .shepherd-content .shepherd-text p:last-child {
195
+ margin-bottom: 0; }
196
+ .shepherd-element.shepherd-theme-arrows .shepherd-content footer {
197
+ padding: 0 1em 1em; }
198
+ .shepherd-element.shepherd-theme-arrows .shepherd-content footer .shepherd-buttons {
199
+ text-align: right;
200
+ list-style: none;
201
+ padding: 0;
202
+ margin: 0; }
203
+ .shepherd-element.shepherd-theme-arrows .shepherd-content footer .shepherd-buttons li {
204
+ display: inline;
205
+ padding: 0;
206
+ margin: 0; }
207
+ .shepherd-element.shepherd-theme-arrows .shepherd-content footer .shepherd-buttons li .shepherd-button {
208
+ display: inline-block;
209
+ vertical-align: middle;
210
+ *vertical-align: auto;
211
+ *zoom: 1;
212
+ *display: inline;
213
+ border-radius: 3px;
214
+ cursor: pointer;
215
+ border: 0;
216
+ margin: 0 .5em 0 0;
217
+ font-family: inherit;
218
+ text-transform: uppercase;
219
+ letter-spacing: .1em;
220
+ font-size: .8em;
221
+ line-height: 1em;
222
+ padding: .75em 2em;
223
+ background: #3288e6;
224
+ color: #fff; }
225
+ .shepherd-element.shepherd-theme-arrows .shepherd-content footer .shepherd-buttons li .shepherd-button.shepherd-button-secondary {
226
+ background: #eee;
227
+ color: #888; }
228
+ .shepherd-element.shepherd-theme-arrows .shepherd-content footer .shepherd-buttons li:last-child .shepherd-button {
229
+ margin-right: 0; }
admin/assets/tether-shepherd/shepherd-theme-arrows.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top.shepherd-target-attached-left .shepherd-content:before,.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top.shepherd-target-attached-right .shepherd-content:before,.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-target-attached-left .shepherd-content:before,.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-target-attached-right .shepherd-content:before{display:none}.shepherd-element,.shepherd-element:after,.shepherd-element:before,.shepherd-element *,.shepherd-element *:after,.shepherd-element *:before{box-sizing:border-box}.shepherd-element{position:absolute;display:none}.shepherd-element.shepherd-open{display:block}.shepherd-element.shepherd-theme-arrows{max-width:100%;max-height:100%}.shepherd-element.shepherd-theme-arrows .shepherd-content{border-radius:5px;position:relative;font-family:inherit;background:#fff;color:#444;padding:1em;font-size:1.1em;line-height:1.5em;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-filter:drop-shadow(0 1px 4px rgba(0,0,0,0.2));filter:drop-shadow(0 1px 4px rgba(0,0,0,0.2))}.shepherd-element.shepherd-theme-arrows .shepherd-content:before{content:"";display:block;position:absolute;width:0;height:0;border-color:transparent;border-width:16px;border-style:solid;pointer-events:none}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content:before{top:100%;left:50%;margin-left:-16px;border-top-color:#fff}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content:before{bottom:100%;left:50%;margin-left:-16px;border-bottom-color:#fff}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content{margin-right:16px}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content:before{left:100%;top:50%;margin-top:-16px;border-left-color:#fff}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content{margin-left:16px}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content:before{right:100%;top:50%;margin-top:-16px;border-right-color:#fff}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-left.shepherd-target-attached-center .shepherd-content{left:-32px}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-right.shepherd-target-attached-center .shepherd-content{left:32px}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before{bottom:100%;left:16px;border-bottom-color:#fff}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before{bottom:100%;right:16px;border-bottom-color:#fff}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before{top:100%;left:16px;border-top-color:#fff}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before{top:100%;right:16px;border-top-color:#fff}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content:before{bottom:100%;left:16px;border-bottom-color:#fff}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content:before{bottom:100%;right:16px;border-bottom-color:#fff}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content:before{top:100%;left:16px;border-top-color:#fff}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content:before{top:100%;right:16px;border-top-color:#fff}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content{margin-right:16px}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before{top:16px;left:100%;border-left-color:#fff}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content{margin-left:16px}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before{top:16px;right:100%;border-right-color:#fff}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content{margin-right:16px}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before{bottom:16px;left:100%;border-left-color:#fff}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content{margin-left:16px}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before{bottom:16px;right:100%;border-right-color:#fff}.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-center.shepherd-has-title .shepherd-content:before,.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before,.shepherd-element.shepherd-theme-arrows.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before{border-bottom-color:#eee}.shepherd-element.shepherd-theme-arrows.shepherd-has-title .shepherd-content header{background:#eee;padding:1em}.shepherd-element.shepherd-theme-arrows.shepherd-has-title .shepherd-content header a.shepherd-cancel-link{padding:0;margin-bottom:0}.shepherd-element.shepherd-theme-arrows.shepherd-has-cancel-link .shepherd-content header h3{float:left}.shepherd-element.shepherd-theme-arrows .shepherd-content{padding:0}.shepherd-element.shepherd-theme-arrows .shepherd-content *{font-size:inherit}.shepherd-element.shepherd-theme-arrows .shepherd-content header{*zoom:1;border-radius:5px 5px 0 0}.shepherd-element.shepherd-theme-arrows .shepherd-content header:after{content:"";display:table;clear:both}.shepherd-element.shepherd-theme-arrows .shepherd-content header h3{margin:0;line-height:1;font-weight:normal}.shepherd-element.shepherd-theme-arrows .shepherd-content header a.shepherd-cancel-link{float:right;text-decoration:none;font-size:1.25em;line-height:.8em;font-weight:normal;color:rgba(0,0,0,0.5);opacity:.25;position:relative;top:.1em;padding:.8em;margin-bottom:-.8em}.shepherd-element.shepherd-theme-arrows .shepherd-content header a.shepherd-cancel-link:hover{opacity:1}.shepherd-element.shepherd-theme-arrows .shepherd-content .shepherd-text{padding:1em}.shepherd-element.shepherd-theme-arrows .shepherd-content .shepherd-text p{margin:0 0 .5em 0;line-height:1.3em}.shepherd-element.shepherd-theme-arrows .shepherd-content .shepherd-text p:last-child{margin-bottom:0}.shepherd-element.shepherd-theme-arrows .shepherd-content footer{padding:0 1em 1em}.shepherd-element.shepherd-theme-arrows .shepherd-content footer .shepherd-buttons{text-align:right;list-style:none;padding:0;margin:0}.shepherd-element.shepherd-theme-arrows .shepherd-content footer .shepherd-buttons li{display:inline;padding:0;margin:0}.shepherd-element.shepherd-theme-arrows .shepherd-content footer .shepherd-buttons li .shepherd-button{display:inline-block;vertical-align:middle;*vertical-align:auto;*zoom:1;*display:inline;border-radius:3px;cursor:pointer;border:0;margin:0 .5em 0 0;font-family:inherit;text-transform:uppercase;letter-spacing:.1em;font-size:.8em;line-height:1em;padding:.75em 2em;background:#3288e6;color:#fff}.shepherd-element.shepherd-theme-arrows .shepherd-content footer .shepherd-buttons li .shepherd-button.shepherd-button-secondary{background:#eee;color:#888}.shepherd-element.shepherd-theme-arrows .shepherd-content footer .shepherd-buttons li:last-child .shepherd-button{margin-right:0}
admin/assets/tether-shepherd/shepherd-theme-dark.css ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top.shepherd-target-attached-left .shepherd-content:before,
2
+ .shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top.shepherd-target-attached-right .shepherd-content:before,
3
+ .shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-target-attached-left .shepherd-content:before,
4
+ .shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-target-attached-right .shepherd-content:before {
5
+ display: none; }
6
+
7
+ .shepherd-element, .shepherd-element:after, .shepherd-element:before, .shepherd-element *, .shepherd-element *:after, .shepherd-element *:before {
8
+ box-sizing: border-box; }
9
+
10
+ .shepherd-element {
11
+ position: absolute;
12
+ display: none; }
13
+ .shepherd-element.shepherd-open {
14
+ display: block; }
15
+
16
+ .shepherd-element.shepherd-theme-dark {
17
+ max-width: 100%;
18
+ max-height: 100%; }
19
+ .shepherd-element.shepherd-theme-dark .shepherd-content {
20
+ border-radius: 5px;
21
+ position: relative;
22
+ font-family: inherit;
23
+ background: #232323;
24
+ color: #eee;
25
+ padding: 1em;
26
+ font-size: 1.1em;
27
+ line-height: 1.5em; }
28
+ .shepherd-element.shepherd-theme-dark .shepherd-content:before {
29
+ content: "";
30
+ display: block;
31
+ position: absolute;
32
+ width: 0;
33
+ height: 0;
34
+ border-color: transparent;
35
+ border-width: 16px;
36
+ border-style: solid;
37
+ pointer-events: none; }
38
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content {
39
+ margin-bottom: 16px; }
40
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content:before {
41
+ top: 100%;
42
+ left: 50%;
43
+ margin-left: -16px;
44
+ border-top-color: #232323; }
45
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content {
46
+ margin-top: 16px; }
47
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content:before {
48
+ bottom: 100%;
49
+ left: 50%;
50
+ margin-left: -16px;
51
+ border-bottom-color: #232323; }
52
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content {
53
+ margin-right: 16px; }
54
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content:before {
55
+ left: 100%;
56
+ top: 50%;
57
+ margin-top: -16px;
58
+ border-left-color: #232323; }
59
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content {
60
+ margin-left: 16px; }
61
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content:before {
62
+ right: 100%;
63
+ top: 50%;
64
+ margin-top: -16px;
65
+ border-right-color: #232323; }
66
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-left.shepherd-target-attached-center .shepherd-content {
67
+ left: -32px; }
68
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-right.shepherd-target-attached-center .shepherd-content {
69
+ left: 32px; }
70
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content {
71
+ margin-top: 16px; }
72
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before {
73
+ bottom: 100%;
74
+ left: 16px;
75
+ border-bottom-color: #232323; }
76
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content {
77
+ margin-top: 16px; }
78
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before {
79
+ bottom: 100%;
80
+ right: 16px;
81
+ border-bottom-color: #232323; }
82
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content {
83
+ margin-bottom: 16px; }
84
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before {
85
+ top: 100%;
86
+ left: 16px;
87
+ border-top-color: #232323; }
88
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content {
89
+ margin-bottom: 16px; }
90
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before {
91
+ top: 100%;
92
+ right: 16px;
93
+ border-top-color: #232323; }
94
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content {
95
+ margin-top: 16px; }
96
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content:before {
97
+ bottom: 100%;
98
+ left: 16px;
99
+ border-bottom-color: #232323; }
100
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content {
101
+ margin-top: 16px; }
102
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content:before {
103
+ bottom: 100%;
104
+ right: 16px;
105
+ border-bottom-color: #232323; }
106
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content {
107
+ margin-bottom: 16px; }
108
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content:before {
109
+ top: 100%;
110
+ left: 16px;
111
+ border-top-color: #232323; }
112
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content {
113
+ margin-bottom: 16px; }
114
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content:before {
115
+ top: 100%;
116
+ right: 16px;
117
+ border-top-color: #232323; }
118
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content {
119
+ margin-right: 16px; }
120
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before {
121
+ top: 16px;
122
+ left: 100%;
123
+ border-left-color: #232323; }
124
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content {
125
+ margin-left: 16px; }
126
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before {
127
+ top: 16px;
128
+ right: 100%;
129
+ border-right-color: #232323; }
130
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content {
131
+ margin-right: 16px; }
132
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before {
133
+ bottom: 16px;
134
+ left: 100%;
135
+ border-left-color: #232323; }
136
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content {
137
+ margin-left: 16px; }
138
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before {
139
+ bottom: 16px;
140
+ right: 100%;
141
+ border-right-color: #232323; }
142
+
143
+ .shepherd-element.shepherd-theme-dark {
144
+ z-index: 9999;
145
+ max-width: 24em;
146
+ font-size: 1em; }
147
+ .shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-center.shepherd-has-title .shepherd-content:before, .shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before, .shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before {
148
+ border-bottom-color: #303030; }
149
+ .shepherd-element.shepherd-theme-dark.shepherd-has-title .shepherd-content header {
150
+ background: #303030;
151
+ padding: 1em; }
152
+ .shepherd-element.shepherd-theme-dark.shepherd-has-title .shepherd-content header a.shepherd-cancel-link {
153
+ padding: 0;
154
+ margin-bottom: 0; }
155
+ .shepherd-element.shepherd-theme-dark.shepherd-has-cancel-link .shepherd-content header h3 {
156
+ float: left; }
157
+ .shepherd-element.shepherd-theme-dark .shepherd-content {
158
+ box-shadow: 0 0 1em rgba(0, 0, 0, 0.2);
159
+ padding: 0; }
160
+ .shepherd-element.shepherd-theme-dark .shepherd-content * {
161
+ font-size: inherit; }
162
+ .shepherd-element.shepherd-theme-dark .shepherd-content header {
163
+ *zoom: 1;
164
+ border-radius: 5px 5px 0 0; }
165
+ .shepherd-element.shepherd-theme-dark .shepherd-content header:after {
166
+ content: "";
167
+ display: table;
168
+ clear: both; }
169
+ .shepherd-element.shepherd-theme-dark .shepherd-content header h3 {
170
+ margin: 0;
171
+ line-height: 1;
172
+ font-weight: normal; }
173
+ .shepherd-element.shepherd-theme-dark .shepherd-content header a.shepherd-cancel-link {
174
+ float: right;
175
+ text-decoration: none;
176
+ font-size: 1.25em;
177
+ line-height: .8em;
178
+ font-weight: normal;
179
+ color: rgba(0, 0, 0, 0.5);
180
+ opacity: 0.25;
181
+ position: relative;
182
+ top: .1em;
183
+ padding: .8em;
184
+ margin-bottom: -.8em; }
185
+ .shepherd-element.shepherd-theme-dark .shepherd-content header a.shepherd-cancel-link:hover {
186
+ opacity: 1; }
187
+ .shepherd-element.shepherd-theme-dark .shepherd-content .shepherd-text {
188
+ padding: 1em; }
189
+ .shepherd-element.shepherd-theme-dark .shepherd-content .shepherd-text p {
190
+ margin: 0 0 .5em 0;
191
+ line-height: 1.3em; }
192
+ .shepherd-element.shepherd-theme-dark .shepherd-content .shepherd-text p:last-child {
193
+ margin-bottom: 0; }
194
+ .shepherd-element.shepherd-theme-dark .shepherd-content footer {
195
+ padding: 0 1em 1em; }
196
+ .shepherd-element.shepherd-theme-dark .shepherd-content footer .shepherd-buttons {
197
+ text-align: right;
198
+ list-style: none;
199
+ padding: 0;
200
+ margin: 0; }
201
+ .shepherd-element.shepherd-theme-dark .shepherd-content footer .shepherd-buttons li {
202
+ display: inline;
203
+ padding: 0;
204
+ margin: 0; }
205
+ .shepherd-element.shepherd-theme-dark .shepherd-content footer .shepherd-buttons li .shepherd-button {
206
+ display: inline-block;
207
+ vertical-align: middle;
208
+ *vertical-align: auto;
209
+ *zoom: 1;
210
+ *display: inline;
211
+ border-radius: 3px;
212
+ cursor: pointer;
213
+ border: 0;
214
+ margin: 0 .5em 0 0;
215
+ font-family: inherit;
216
+ text-transform: uppercase;
217
+ letter-spacing: .1em;
218
+ font-size: .8em;
219
+ line-height: 1em;
220
+ padding: .75em 2em;
221
+ background: #3288e6;
222
+ color: #fff; }
223
+ .shepherd-element.shepherd-theme-dark .shepherd-content footer .shepherd-buttons li .shepherd-button.shepherd-button-secondary {
224
+ background: #eee;
225
+ color: #888; }
226
+ .shepherd-element.shepherd-theme-dark .shepherd-content footer .shepherd-buttons li:last-child .shepherd-button {
227
+ margin-right: 0; }
228
+
229
+ .shepherd-start-tour-button.shepherd-theme-dark {
230
+ display: inline-block;
231
+ vertical-align: middle;
232
+ *vertical-align: auto;
233
+ *zoom: 1;
234
+ *display: inline;
235
+ border-radius: 3px;
236
+ cursor: pointer;
237
+ border: 0;
238
+ margin: 0 .5em 0 0;
239
+ font-family: inherit;
240
+ text-transform: uppercase;
241
+ letter-spacing: .1em;
242
+ font-size: .8em;
243
+ line-height: 1em;
244
+ padding: .75em 2em;
245
+ background: #3288e6;
246
+ color: #fff; }
admin/assets/tether-shepherd/shepherd-theme-dark.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top.shepherd-target-attached-left .shepherd-content:before,.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top.shepherd-target-attached-right .shepherd-content:before,.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-target-attached-left .shepherd-content:before,.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-target-attached-right .shepherd-content:before{display:none}.shepherd-element,.shepherd-element:after,.shepherd-element:before,.shepherd-element *,.shepherd-element *:after,.shepherd-element *:before{box-sizing:border-box}.shepherd-element{position:absolute;display:none}.shepherd-element.shepherd-open{display:block}.shepherd-element.shepherd-theme-dark{max-width:100%;max-height:100%}.shepherd-element.shepherd-theme-dark .shepherd-content{border-radius:5px;position:relative;font-family:inherit;background:#232323;color:#eee;padding:1em;font-size:1.1em;line-height:1.5em}.shepherd-element.shepherd-theme-dark .shepherd-content:before{content:"";display:block;position:absolute;width:0;height:0;border-color:transparent;border-width:16px;border-style:solid;pointer-events:none}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content:before{top:100%;left:50%;margin-left:-16px;border-top-color:#232323}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content:before{bottom:100%;left:50%;margin-left:-16px;border-bottom-color:#232323}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content{margin-right:16px}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content:before{left:100%;top:50%;margin-top:-16px;border-left-color:#232323}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content{margin-left:16px}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content:before{right:100%;top:50%;margin-top:-16px;border-right-color:#232323}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-left.shepherd-target-attached-center .shepherd-content{left:-32px}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-right.shepherd-target-attached-center .shepherd-content{left:32px}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before{bottom:100%;left:16px;border-bottom-color:#232323}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before{bottom:100%;right:16px;border-bottom-color:#232323}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before{top:100%;left:16px;border-top-color:#232323}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before{top:100%;right:16px;border-top-color:#232323}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content:before{bottom:100%;left:16px;border-bottom-color:#232323}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content:before{bottom:100%;right:16px;border-bottom-color:#232323}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content:before{top:100%;left:16px;border-top-color:#232323}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content:before{top:100%;right:16px;border-top-color:#232323}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content{margin-right:16px}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before{top:16px;left:100%;border-left-color:#232323}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content{margin-left:16px}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before{top:16px;right:100%;border-right-color:#232323}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content{margin-right:16px}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before{bottom:16px;left:100%;border-left-color:#232323}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content{margin-left:16px}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before{bottom:16px;right:100%;border-right-color:#232323}.shepherd-element.shepherd-theme-dark{z-index:9999;max-width:24em;font-size:1em}.shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-center.shepherd-has-title .shepherd-content:before,.shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before,.shepherd-element.shepherd-theme-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before{border-bottom-color:#303030}.shepherd-element.shepherd-theme-dark.shepherd-has-title .shepherd-content header{background:#303030;padding:1em}.shepherd-element.shepherd-theme-dark.shepherd-has-title .shepherd-content header a.shepherd-cancel-link{padding:0;margin-bottom:0}.shepherd-element.shepherd-theme-dark.shepherd-has-cancel-link .shepherd-content header h3{float:left}.shepherd-element.shepherd-theme-dark .shepherd-content{box-shadow:0 0 1em rgba(0,0,0,0.2);padding:0}.shepherd-element.shepherd-theme-dark .shepherd-content *{font-size:inherit}.shepherd-element.shepherd-theme-dark .shepherd-content header{*zoom:1;border-radius:5px 5px 0 0}.shepherd-element.shepherd-theme-dark .shepherd-content header:after{content:"";display:table;clear:both}.shepherd-element.shepherd-theme-dark .shepherd-content header h3{margin:0;line-height:1;font-weight:normal}.shepherd-element.shepherd-theme-dark .shepherd-content header a.shepherd-cancel-link{float:right;text-decoration:none;font-size:1.25em;line-height:.8em;font-weight:normal;color:rgba(0,0,0,0.5);opacity:.25;position:relative;top:.1em;padding:.8em;margin-bottom:-.8em}.shepherd-element.shepherd-theme-dark .shepherd-content header a.shepherd-cancel-link:hover{opacity:1}.shepherd-element.shepherd-theme-dark .shepherd-content .shepherd-text{padding:1em}.shepherd-element.shepherd-theme-dark .shepherd-content .shepherd-text p{margin:0 0 .5em 0;line-height:1.3em}.shepherd-element.shepherd-theme-dark .shepherd-content .shepherd-text p:last-child{margin-bottom:0}.shepherd-element.shepherd-theme-dark .shepherd-content footer{padding:0 1em 1em}.shepherd-element.shepherd-theme-dark .shepherd-content footer .shepherd-buttons{text-align:right;list-style:none;padding:0;margin:0}.shepherd-element.shepherd-theme-dark .shepherd-content footer .shepherd-buttons li{display:inline;padding:0;margin:0}.shepherd-element.shepherd-theme-dark .shepherd-content footer .shepherd-buttons li .shepherd-button{display:inline-block;vertical-align:middle;*vertical-align:auto;*zoom:1;*display:inline;border-radius:3px;cursor:pointer;border:0;margin:0 .5em 0 0;font-family:inherit;text-transform:uppercase;letter-spacing:.1em;font-size:.8em;line-height:1em;padding:.75em 2em;background:#3288e6;color:#fff}.shepherd-element.shepherd-theme-dark .shepherd-content footer .shepherd-buttons li .shepherd-button.shepherd-button-secondary{background:#eee;color:#888}.shepherd-element.shepherd-theme-dark .shepherd-content footer .shepherd-buttons li:last-child .shepherd-button{margin-right:0}.shepherd-start-tour-button.shepherd-theme-dark{display:inline-block;vertical-align:middle;*vertical-align:auto;*zoom:1;*display:inline;border-radius:3px;cursor:pointer;border:0;margin:0 .5em 0 0;font-family:inherit;text-transform:uppercase;letter-spacing:.1em;font-size:.8em;line-height:1em;padding:.75em 2em;background:#3288e6;color:#fff}
admin/assets/tether-shepherd/shepherd-theme-default.css ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top.shepherd-target-attached-left .shepherd-content:before,
2
+ .shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top.shepherd-target-attached-right .shepherd-content:before,
3
+ .shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-target-attached-left .shepherd-content:before,
4
+ .shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-target-attached-right .shepherd-content:before {
5
+ display: none; }
6
+
7
+ .shepherd-element, .shepherd-element:after, .shepherd-element:before, .shepherd-element *, .shepherd-element *:after, .shepherd-element *:before {
8
+ box-sizing: border-box; }
9
+
10
+ .shepherd-element {
11
+ position: absolute;
12
+ display: none; }
13
+ .shepherd-element.shepherd-open {
14
+ display: block; }
15
+
16
+ .shepherd-element.shepherd-theme-default {
17
+ max-width: 100%;
18
+ max-height: 100%; }
19
+ .shepherd-element.shepherd-theme-default .shepherd-content {
20
+ border-radius: 5px;
21
+ position: relative;
22
+ font-family: inherit;
23
+ background: #f6f6f6;
24
+ color: #444;
25
+ padding: 1em;
26
+ font-size: 1.1em;
27
+ line-height: 1.5em; }
28
+ .shepherd-element.shepherd-theme-default .shepherd-content:before {
29
+ content: "";
30
+ display: block;
31
+ position: absolute;
32
+ width: 0;
33
+ height: 0;
34
+ border-color: transparent;
35
+ border-width: 16px;
36
+ border-style: solid;
37
+ pointer-events: none; }
38
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content {
39
+ margin-bottom: 16px; }
40
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content:before {
41
+ top: 100%;
42
+ left: 50%;
43
+ margin-left: -16px;
44
+ border-top-color: #f6f6f6; }
45
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content {
46
+ margin-top: 16px; }
47
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content:before {
48
+ bottom: 100%;
49
+ left: 50%;
50
+ margin-left: -16px;
51
+ border-bottom-color: #f6f6f6; }
52
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content {
53
+ margin-right: 16px; }
54
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content:before {
55
+ left: 100%;
56
+ top: 50%;
57
+ margin-top: -16px;
58
+ border-left-color: #f6f6f6; }
59
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content {
60
+ margin-left: 16px; }
61
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content:before {
62
+ right: 100%;
63
+ top: 50%;
64
+ margin-top: -16px;
65
+ border-right-color: #f6f6f6; }
66
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-left.shepherd-target-attached-center .shepherd-content {
67
+ left: -32px; }
68
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-right.shepherd-target-attached-center .shepherd-content {
69
+ left: 32px; }
70
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content {
71
+ margin-top: 16px; }
72
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before {
73
+ bottom: 100%;
74
+ left: 16px;
75
+ border-bottom-color: #f6f6f6; }
76
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content {
77
+ margin-top: 16px; }
78
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before {
79
+ bottom: 100%;
80
+ right: 16px;
81
+ border-bottom-color: #f6f6f6; }
82
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content {
83
+ margin-bottom: 16px; }
84
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before {
85
+ top: 100%;
86
+ left: 16px;
87
+ border-top-color: #f6f6f6; }
88
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content {
89
+ margin-bottom: 16px; }
90
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before {
91
+ top: 100%;
92
+ right: 16px;
93
+ border-top-color: #f6f6f6; }
94
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content {
95
+ margin-top: 16px; }
96
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content:before {
97
+ bottom: 100%;
98
+ left: 16px;
99
+ border-bottom-color: #f6f6f6; }
100
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content {
101
+ margin-top: 16px; }
102
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content:before {
103
+ bottom: 100%;
104
+ right: 16px;
105
+ border-bottom-color: #f6f6f6; }
106
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content {
107
+ margin-bottom: 16px; }
108
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content:before {
109
+ top: 100%;
110
+ left: 16px;
111
+ border-top-color: #f6f6f6; }
112
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content {
113
+ margin-bottom: 16px; }
114
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content:before {
115
+ top: 100%;
116
+ right: 16px;
117
+ border-top-color: #f6f6f6; }
118
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content {
119
+ margin-right: 16px; }
120
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before {
121
+ top: 16px;
122
+ left: 100%;
123
+ border-left-color: #f6f6f6; }
124
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content {
125
+ margin-left: 16px; }
126
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before {
127
+ top: 16px;
128
+ right: 100%;
129
+ border-right-color: #f6f6f6; }
130
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content {
131
+ margin-right: 16px; }
132
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before {
133
+ bottom: 16px;
134
+ left: 100%;
135
+ border-left-color: #f6f6f6; }
136
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content {
137
+ margin-left: 16px; }
138
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before {
139
+ bottom: 16px;
140
+ right: 100%;
141
+ border-right-color: #f6f6f6; }
142
+
143
+ .shepherd-element.shepherd-theme-default {
144
+ z-index: 9999;
145
+ max-width: 24em;
146
+ font-size: 1em; }
147
+ .shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-center.shepherd-has-title .shepherd-content:before, .shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before, .shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before {
148
+ border-bottom-color: #e6e6e6; }
149
+ .shepherd-element.shepherd-theme-default.shepherd-has-title .shepherd-content header {
150
+ background: #e6e6e6;
151
+ padding: 1em; }
152
+ .shepherd-element.shepherd-theme-default.shepherd-has-title .shepherd-content header a.shepherd-cancel-link {
153
+ padding: 0;
154
+ margin-bottom: 0; }
155
+ .shepherd-element.shepherd-theme-default.shepherd-has-cancel-link .shepherd-content header h3 {
156
+ float: left; }
157
+ .shepherd-element.shepherd-theme-default .shepherd-content {
158
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.17);
159
+ padding: 0; }
160
+ .shepherd-element.shepherd-theme-default .shepherd-content * {
161
+ font-size: inherit; }
162
+ .shepherd-element.shepherd-theme-default .shepherd-content header {
163
+ *zoom: 1;
164
+ border-radius: 5px 5px 0 0; }
165
+ .shepherd-element.shepherd-theme-default .shepherd-content header:after {
166
+ content: "";
167
+ display: table;
168
+ clear: both; }
169
+ .shepherd-element.shepherd-theme-default .shepherd-content header h3 {
170
+ margin: 0;
171
+ line-height: 1;
172
+ font-weight: normal; }
173
+ .shepherd-element.shepherd-theme-default .shepherd-content header a.shepherd-cancel-link {
174
+ float: right;
175
+ text-decoration: none;
176
+ font-size: 1.25em;
177
+ line-height: .8em;
178
+ font-weight: normal;
179
+ color: rgba(0, 0, 0, 0.5);
180
+ opacity: 0.25;
181
+ position: relative;
182
+ top: .1em;
183
+ padding: .8em;
184
+ margin-bottom: -.8em; }
185
+ .shepherd-element.shepherd-theme-default .shepherd-content header a.shepherd-cancel-link:hover {
186
+ opacity: 1; }
187
+ .shepherd-element.shepherd-theme-default .shepherd-content .shepherd-text {
188
+ padding: 1em; }
189
+ .shepherd-element.shepherd-theme-default .shepherd-content .shepherd-text p {
190
+ margin: 0 0 .5em 0;
191
+ line-height: 1.3em; }
192
+ .shepherd-element.shepherd-theme-default .shepherd-content .shepherd-text p:last-child {
193
+ margin-bottom: 0; }
194
+ .shepherd-element.shepherd-theme-default .shepherd-content footer {
195
+ padding: 0 1em 1em; }
196
+ .shepherd-element.shepherd-theme-default .shepherd-content footer .shepherd-buttons {
197
+ text-align: right;
198
+ list-style: none;
199
+ padding: 0;
200
+ margin: 0; }
201
+ .shepherd-element.shepherd-theme-default .shepherd-content footer .shepherd-buttons li {
202
+ display: inline;
203
+ padding: 0;
204
+ margin: 0; }
205
+ .shepherd-element.shepherd-theme-default .shepherd-content footer .shepherd-buttons li .shepherd-button {
206
+ display: inline-block;
207
+ vertical-align: middle;
208
+ *vertical-align: auto;
209
+ *zoom: 1;
210
+ *display: inline;
211
+ border-radius: 3px;
212
+ cursor: pointer;
213
+ border: 0;
214
+ margin: 0 .5em 0 0;
215
+ font-family: inherit;
216
+ text-transform: uppercase;
217
+ letter-spacing: .1em;
218
+ font-size: .8em;
219
+ line-height: 1em;
220
+ padding: .75em 2em;
221
+ background: #3288e6;
222
+ color: #fff; }
223
+ .shepherd-element.shepherd-theme-default .shepherd-content footer .shepherd-buttons li .shepherd-button.shepherd-button-secondary {
224
+ background: #eee;
225
+ color: #888; }
226
+ .shepherd-element.shepherd-theme-default .shepherd-content footer .shepherd-buttons li:last-child .shepherd-button {
227
+ margin-right: 0; }
228
+
229
+ .shepherd-start-tour-button.shepherd-theme-default {
230
+ display: inline-block;
231
+ vertical-align: middle;
232
+ *vertical-align: auto;
233
+ *zoom: 1;
234
+ *display: inline;
235
+ border-radius: 3px;
236
+ cursor: pointer;
237
+ border: 0;
238
+ margin: 0 .5em 0 0;
239
+ font-family: inherit;
240
+ text-transform: uppercase;
241
+ letter-spacing: .1em;
242
+ font-size: .8em;
243
+ line-height: 1em;
244
+ padding: .75em 2em;
245
+ background: #3288e6;
246
+ color: #fff; }
admin/assets/tether-shepherd/shepherd-theme-default.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top.shepherd-target-attached-left .shepherd-content:before,.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top.shepherd-target-attached-right .shepherd-content:before,.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-target-attached-left .shepherd-content:before,.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-target-attached-right .shepherd-content:before{display:none}.shepherd-element,.shepherd-element:after,.shepherd-element:before,.shepherd-element *,.shepherd-element *:after,.shepherd-element *:before{box-sizing:border-box}.shepherd-element{position:absolute;display:none}.shepherd-element.shepherd-open{display:block}.shepherd-element.shepherd-theme-default{max-width:100%;max-height:100%}.shepherd-element.shepherd-theme-default .shepherd-content{border-radius:5px;position:relative;font-family:inherit;background:#f6f6f6;color:#444;padding:1em;font-size:1.1em;line-height:1.5em}.shepherd-element.shepherd-theme-default .shepherd-content:before{content:"";display:block;position:absolute;width:0;height:0;border-color:transparent;border-width:16px;border-style:solid;pointer-events:none}.shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content:before{top:100%;left:50%;margin-left:-16px;border-top-color:#f6f6f6}.shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content:before{bottom:100%;left:50%;margin-left:-16px;border-bottom-color:#f6f6f6}.shepherd-element.shepherd-theme-default.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content{margin-right:16px}.shepherd-element.shepherd-theme-default.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content:before{left:100%;top:50%;margin-top:-16px;border-left-color:#f6f6f6}.shepherd-element.shepherd-theme-default.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content{margin-left:16px}.shepherd-element.shepherd-theme-default.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content:before{right:100%;top:50%;margin-top:-16px;border-right-color:#f6f6f6}.shepherd-element.shepherd-theme-default.shepherd-element-attached-left.shepherd-target-attached-center .shepherd-content{left:-32px}.shepherd-element.shepherd-theme-default.shepherd-element-attached-right.shepherd-target-attached-center .shepherd-content{left:32px}.shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before{bottom:100%;left:16px;border-bottom-color:#f6f6f6}.shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before{bottom:100%;right:16px;border-bottom-color:#f6f6f6}.shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before{top:100%;left:16px;border-top-color:#f6f6f6}.shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before{top:100%;right:16px;border-top-color:#f6f6f6}.shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content:before{bottom:100%;left:16px;border-bottom-color:#f6f6f6}.shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content:before{bottom:100%;right:16px;border-bottom-color:#f6f6f6}.shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content:before{top:100%;left:16px;border-top-color:#f6f6f6}.shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content:before{top:100%;right:16px;border-top-color:#f6f6f6}.shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content{margin-right:16px}.shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before{top:16px;left:100%;border-left-color:#f6f6f6}.shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content{margin-left:16px}.shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before{top:16px;right:100%;border-right-color:#f6f6f6}.shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content{margin-right:16px}.shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before{bottom:16px;left:100%;border-left-color:#f6f6f6}.shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content{margin-left:16px}.shepherd-element.shepherd-theme-default.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before{bottom:16px;right:100%;border-right-color:#f6f6f6}.shepherd-element.shepherd-theme-default{z-index:9999;max-width:24em;font-size:1em}.shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-center.shepherd-has-title .shepherd-content:before,.shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before,.shepherd-element.shepherd-theme-default.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before{border-bottom-color:#e6e6e6}.shepherd-element.shepherd-theme-default.shepherd-has-title .shepherd-content header{background:#e6e6e6;padding:1em}.shepherd-element.shepherd-theme-default.shepherd-has-title .shepherd-content header a.shepherd-cancel-link{padding:0;margin-bottom:0}.shepherd-element.shepherd-theme-default.shepherd-has-cancel-link .shepherd-content header h3{float:left}.shepherd-element.shepherd-theme-default .shepherd-content{box-shadow:0 0 0 1px rgba(0,0,0,0.17);padding:0}.shepherd-element.shepherd-theme-default .shepherd-content *{font-size:inherit}.shepherd-element.shepherd-theme-default .shepherd-content header{*zoom:1;border-radius:5px 5px 0 0}.shepherd-element.shepherd-theme-default .shepherd-content header:after{content:"";display:table;clear:both}.shepherd-element.shepherd-theme-default .shepherd-content header h3{margin:0;line-height:1;font-weight:normal}.shepherd-element.shepherd-theme-default .shepherd-content header a.shepherd-cancel-link{float:right;text-decoration:none;font-size:1.25em;line-height:.8em;font-weight:normal;color:rgba(0,0,0,0.5);opacity:.25;position:relative;top:.1em;padding:.8em;margin-bottom:-.8em}.shepherd-element.shepherd-theme-default .shepherd-content header a.shepherd-cancel-link:hover{opacity:1}.shepherd-element.shepherd-theme-default .shepherd-content .shepherd-text{padding:1em}.shepherd-element.shepherd-theme-default .shepherd-content .shepherd-text p{margin:0 0 .5em 0;line-height:1.3em}.shepherd-element.shepherd-theme-default .shepherd-content .shepherd-text p:last-child{margin-bottom:0}.shepherd-element.shepherd-theme-default .shepherd-content footer{padding:0 1em 1em}.shepherd-element.shepherd-theme-default .shepherd-content footer .shepherd-buttons{text-align:right;list-style:none;padding:0;margin:0}.shepherd-element.shepherd-theme-default .shepherd-content footer .shepherd-buttons li{display:inline;padding:0;margin:0}.shepherd-element.shepherd-theme-default .shepherd-content footer .shepherd-buttons li .shepherd-button{display:inline-block;vertical-align:middle;*vertical-align:auto;*zoom:1;*display:inline;border-radius:3px;cursor:pointer;border:0;margin:0 .5em 0 0;font-family:inherit;text-transform:uppercase;letter-spacing:.1em;font-size:.8em;line-height:1em;padding:.75em 2em;background:#3288e6;color:#fff}.shepherd-element.shepherd-theme-default .shepherd-content footer .shepherd-buttons li .shepherd-button.shepherd-button-secondary{background:#eee;color:#888}.shepherd-element.shepherd-theme-default .shepherd-content footer .shepherd-buttons li:last-child .shepherd-button{margin-right:0}.shepherd-start-tour-button.shepherd-theme-default{display:inline-block;vertical-align:middle;*vertical-align:auto;*zoom:1;*display:inline;border-radius:3px;cursor:pointer;border:0;margin:0 .5em 0 0;font-family:inherit;text-transform:uppercase;letter-spacing:.1em;font-size:.8em;line-height:1em;padding:.75em 2em;background:#3288e6;color:#fff}
admin/assets/tether-shepherd/shepherd-theme-square-dark.css ADDED
@@ -0,0 +1,248 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top.shepherd-target-attached-left .shepherd-content:before,
2
+ .shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top.shepherd-target-attached-right .shepherd-content:before,
3
+ .shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-target-attached-left .shepherd-content:before,
4
+ .shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-target-attached-right .shepherd-content:before {
5
+ display: none; }
6
+
7
+ .shepherd-element, .shepherd-element:after, .shepherd-element:before, .shepherd-element *, .shepherd-element *:after, .shepherd-element *:before {
8
+ box-sizing: border-box; }
9
+
10
+ .shepherd-element {
11
+ position: absolute;
12
+ display: none; }
13
+ .shepherd-element.shepherd-open {
14
+ display: block; }
15
+
16
+ .shepherd-element.shepherd-theme-square-dark {
17
+ max-width: 100%;
18
+ max-height: 100%; }
19
+ .shepherd-element.shepherd-theme-square-dark .shepherd-content {
20
+ border-radius: 5px;
21
+ position: relative;
22
+ font-family: inherit;
23
+ background: #232323;
24
+ color: #eee;
25
+ padding: 1em;
26
+ font-size: 1.1em;
27
+ line-height: 1.5em; }
28
+ .shepherd-element.shepherd-theme-square-dark .shepherd-content:before {
29
+ content: "";
30
+ display: block;
31
+ position: absolute;
32
+ width: 0;
33
+ height: 0;
34
+ border-color: transparent;
35
+ border-width: 16px;
36
+ border-style: solid;
37
+ pointer-events: none; }
38
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content {
39
+ margin-bottom: 16px; }
40
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content:before {
41
+ top: 100%;
42
+ left: 50%;
43
+ margin-left: -16px;
44
+ border-top-color: #232323; }
45
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content {
46
+ margin-top: 16px; }
47
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content:before {
48
+ bottom: 100%;
49
+ left: 50%;
50
+ margin-left: -16px;
51
+ border-bottom-color: #232323; }
52
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content {
53
+ margin-right: 16px; }
54
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content:before {
55
+ left: 100%;
56
+ top: 50%;
57
+ margin-top: -16px;
58
+ border-left-color: #232323; }
59
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content {
60
+ margin-left: 16px; }
61
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content:before {
62
+ right: 100%;
63
+ top: 50%;
64
+ margin-top: -16px;
65
+ border-right-color: #232323; }
66
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-left.shepherd-target-attached-center .shepherd-content {
67
+ left: -32px; }
68
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-right.shepherd-target-attached-center .shepherd-content {
69
+ left: 32px; }
70
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content {
71
+ margin-top: 16px; }
72
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before {
73
+ bottom: 100%;
74
+ left: 16px;
75
+ border-bottom-color: #232323; }
76
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content {
77
+ margin-top: 16px; }
78
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before {
79
+ bottom: 100%;
80
+ right: 16px;
81
+ border-bottom-color: #232323; }
82
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content {
83
+ margin-bottom: 16px; }
84
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before {
85
+ top: 100%;
86
+ left: 16px;
87
+ border-top-color: #232323; }
88
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content {
89
+ margin-bottom: 16px; }
90
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before {
91
+ top: 100%;
92
+ right: 16px;
93
+ border-top-color: #232323; }
94
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content {
95
+ margin-top: 16px; }
96
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content:before {
97
+ bottom: 100%;
98
+ left: 16px;
99
+ border-bottom-color: #232323; }
100
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content {
101
+ margin-top: 16px; }
102
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content:before {
103
+ bottom: 100%;
104
+ right: 16px;
105
+ border-bottom-color: #232323; }
106
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content {
107
+ margin-bottom: 16px; }
108
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content:before {
109
+ top: 100%;
110
+ left: 16px;
111
+ border-top-color: #232323; }
112
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content {
113
+ margin-bottom: 16px; }
114
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content:before {
115
+ top: 100%;
116
+ right: 16px;
117
+ border-top-color: #232323; }
118
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content {
119
+ margin-right: 16px; }
120
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before {
121
+ top: 16px;
122
+ left: 100%;
123
+ border-left-color: #232323; }
124
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content {
125
+ margin-left: 16px; }
126
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before {
127
+ top: 16px;
128
+ right: 100%;
129
+ border-right-color: #232323; }
130
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content {
131
+ margin-right: 16px; }
132
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before {
133
+ bottom: 16px;
134
+ left: 100%;
135
+ border-left-color: #232323; }
136
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content {
137
+ margin-left: 16px; }
138
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before {
139
+ bottom: 16px;
140
+ right: 100%;
141
+ border-right-color: #232323; }
142
+
143
+ .shepherd-element.shepherd-theme-square-dark {
144
+ border-radius: 0;
145
+ z-index: 9999;
146
+ max-width: 24em;
147
+ font-size: 1em; }
148
+ .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-center.shepherd-has-title .shepherd-content:before, .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before, .shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before {
149
+ border-bottom-color: #303030; }
150
+ .shepherd-element.shepherd-theme-square-dark.shepherd-has-title .shepherd-content header {
151
+ background: #303030;
152
+ padding: 1em; }
153
+ .shepherd-element.shepherd-theme-square-dark.shepherd-has-title .shepherd-content header a.shepherd-cancel-link {
154
+ padding: 0;
155
+ margin-bottom: 0; }
156
+ .shepherd-element.shepherd-theme-square-dark.shepherd-has-cancel-link .shepherd-content header h3 {
157
+ float: left; }
158
+ .shepherd-element.shepherd-theme-square-dark .shepherd-content {
159
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.17);
160
+ border-radius: 0;
161
+ padding: 0; }
162
+ .shepherd-element.shepherd-theme-square-dark .shepherd-content * {
163
+ font-size: inherit; }
164
+ .shepherd-element.shepherd-theme-square-dark .shepherd-content header {
165
+ *zoom: 1;
166
+ border-radius: 0; }
167
+ .shepherd-element.shepherd-theme-square-dark .shepherd-content header:after {
168
+ content: "";
169
+ display: table;
170
+ clear: both; }
171
+ .shepherd-element.shepherd-theme-square-dark .shepherd-content header h3 {
172
+ margin: 0;
173
+ line-height: 1;
174
+ font-weight: normal; }
175
+ .shepherd-element.shepherd-theme-square-dark .shepherd-content header a.shepherd-cancel-link {
176
+ float: right;
177
+ text-decoration: none;
178
+ font-size: 1.25em;
179
+ line-height: .8em;
180
+ font-weight: normal;
181
+ color: rgba(0, 0, 0, 0.5);
182
+ opacity: 0.25;
183
+ position: relative;
184
+ top: .1em;
185
+ padding: .8em;
186
+ margin-bottom: -.8em; }
187
+ .shepherd-element.shepherd-theme-square-dark .shepherd-content header a.shepherd-cancel-link:hover {
188
+ opacity: 1; }
189
+ .shepherd-element.shepherd-theme-square-dark .shepherd-content .shepherd-text {
190
+ padding: 1em; }
191
+ .shepherd-element.shepherd-theme-square-dark .shepherd-content .shepherd-text p {
192
+ margin: 0 0 .5em 0;
193
+ line-height: 1.3em; }
194
+ .shepherd-element.shepherd-theme-square-dark .shepherd-content .shepherd-text p:last-child {
195
+ margin-bottom: 0; }
196
+ .shepherd-element.shepherd-theme-square-dark .shepherd-content footer {
197
+ padding: 0 1em 1em; }
198
+ .shepherd-element.shepherd-theme-square-dark .shepherd-content footer .shepherd-buttons {
199
+ text-align: right;
200
+ list-style: none;
201
+ padding: 0;
202
+ margin: 0; }
203
+ .shepherd-element.shepherd-theme-square-dark .shepherd-content footer .shepherd-buttons li {
204
+ display: inline;
205
+ padding: 0;
206
+ margin: 0; }
207
+ .shepherd-element.shepherd-theme-square-dark .shepherd-content footer .shepherd-buttons li .shepherd-button {
208
+ display: inline-block;
209
+ vertical-align: middle;
210
+ *vertical-align: auto;
211
+ *zoom: 1;
212
+ *display: inline;
213
+ border-radius: 0;
214
+ cursor: pointer;
215
+ border: 0;
216
+ margin: 0 .5em 0 0;
217
+ font-family: inherit;
218
+ text-transform: uppercase;
219
+ letter-spacing: .1em;
220
+ font-size: .8em;
221
+ line-height: 1em;
222
+ padding: .75em 2em;
223
+ background: #3288e6;
224
+ color: #fff; }
225
+ .shepherd-element.shepherd-theme-square-dark .shepherd-content footer .shepherd-buttons li .shepherd-button.shepherd-button-secondary {
226
+ background: #eee;
227
+ color: #888; }
228
+ .shepherd-element.shepherd-theme-square-dark .shepherd-content footer .shepherd-buttons li:last-child .shepherd-button {
229
+ margin-right: 0; }
230
+
231
+ .shepherd-start-tour-button.shepherd-theme-square-dark {
232
+ display: inline-block;
233
+ vertical-align: middle;
234
+ *vertical-align: auto;
235
+ *zoom: 1;
236
+ *display: inline;
237
+ border-radius: 0;
238
+ cursor: pointer;
239
+ border: 0;
240
+ margin: 0 .5em 0 0;
241
+ font-family: inherit;
242
+ text-transform: uppercase;
243
+ letter-spacing: .1em;
244
+ font-size: .8em;
245
+ line-height: 1em;
246
+ padding: .75em 2em;
247
+ background: #3288e6;
248
+ color: #fff; }
admin/assets/tether-shepherd/shepherd-theme-square-dark.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top.shepherd-target-attached-left .shepherd-content:before,.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top.shepherd-target-attached-right .shepherd-content:before,.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-target-attached-left .shepherd-content:before,.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-target-attached-right .shepherd-content:before{display:none}.shepherd-element,.shepherd-element:after,.shepherd-element:before,.shepherd-element *,.shepherd-element *:after,.shepherd-element *:before{box-sizing:border-box}.shepherd-element{position:absolute;display:none}.shepherd-element.shepherd-open{display:block}.shepherd-element.shepherd-theme-square-dark{max-width:100%;max-height:100%}.shepherd-element.shepherd-theme-square-dark .shepherd-content{border-radius:5px;position:relative;font-family:inherit;background:#232323;color:#eee;padding:1em;font-size:1.1em;line-height:1.5em}.shepherd-element.shepherd-theme-square-dark .shepherd-content:before{content:"";display:block;position:absolute;width:0;height:0;border-color:transparent;border-width:16px;border-style:solid;pointer-events:none}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content:before{top:100%;left:50%;margin-left:-16px;border-top-color:#232323}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content:before{bottom:100%;left:50%;margin-left:-16px;border-bottom-color:#232323}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content{margin-right:16px}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content:before{left:100%;top:50%;margin-top:-16px;border-left-color:#232323}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content{margin-left:16px}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content:before{right:100%;top:50%;margin-top:-16px;border-right-color:#232323}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-left.shepherd-target-attached-center .shepherd-content{left:-32px}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-right.shepherd-target-attached-center .shepherd-content{left:32px}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before{bottom:100%;left:16px;border-bottom-color:#232323}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before{bottom:100%;right:16px;border-bottom-color:#232323}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before{top:100%;left:16px;border-top-color:#232323}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before{top:100%;right:16px;border-top-color:#232323}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content:before{bottom:100%;left:16px;border-bottom-color:#232323}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content:before{bottom:100%;right:16px;border-bottom-color:#232323}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content:before{top:100%;left:16px;border-top-color:#232323}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content:before{top:100%;right:16px;border-top-color:#232323}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content{margin-right:16px}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before{top:16px;left:100%;border-left-color:#232323}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content{margin-left:16px}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before{top:16px;right:100%;border-right-color:#232323}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content{margin-right:16px}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before{bottom:16px;left:100%;border-left-color:#232323}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content{margin-left:16px}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before{bottom:16px;right:100%;border-right-color:#232323}.shepherd-element.shepherd-theme-square-dark{border-radius:0;z-index:9999;max-width:24em;font-size:1em}.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-center.shepherd-has-title .shepherd-content:before,.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before,.shepherd-element.shepherd-theme-square-dark.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before{border-bottom-color:#303030}.shepherd-element.shepherd-theme-square-dark.shepherd-has-title .shepherd-content header{background:#303030;padding:1em}.shepherd-element.shepherd-theme-square-dark.shepherd-has-title .shepherd-content header a.shepherd-cancel-link{padding:0;margin-bottom:0}.shepherd-element.shepherd-theme-square-dark.shepherd-has-cancel-link .shepherd-content header h3{float:left}.shepherd-element.shepherd-theme-square-dark .shepherd-content{box-shadow:0 0 0 1px rgba(0,0,0,0.17);border-radius:0;padding:0}.shepherd-element.shepherd-theme-square-dark .shepherd-content *{font-size:inherit}.shepherd-element.shepherd-theme-square-dark .shepherd-content header{*zoom:1;border-radius:0}.shepherd-element.shepherd-theme-square-dark .shepherd-content header:after{content:"";display:table;clear:both}.shepherd-element.shepherd-theme-square-dark .shepherd-content header h3{margin:0;line-height:1;font-weight:normal}.shepherd-element.shepherd-theme-square-dark .shepherd-content header a.shepherd-cancel-link{float:right;text-decoration:none;font-size:1.25em;line-height:.8em;font-weight:normal;color:rgba(0,0,0,0.5);opacity:.25;position:relative;top:.1em;padding:.8em;margin-bottom:-.8em}.shepherd-element.shepherd-theme-square-dark .shepherd-content header a.shepherd-cancel-link:hover{opacity:1}.shepherd-element.shepherd-theme-square-dark .shepherd-content .shepherd-text{padding:1em}.shepherd-element.shepherd-theme-square-dark .shepherd-content .shepherd-text p{margin:0 0 .5em 0;line-height:1.3em}.shepherd-element.shepherd-theme-square-dark .shepherd-content .shepherd-text p:last-child{margin-bottom:0}.shepherd-element.shepherd-theme-square-dark .shepherd-content footer{padding:0 1em 1em}.shepherd-element.shepherd-theme-square-dark .shepherd-content footer .shepherd-buttons{text-align:right;list-style:none;padding:0;margin:0}.shepherd-element.shepherd-theme-square-dark .shepherd-content footer .shepherd-buttons li{display:inline;padding:0;margin:0}.shepherd-element.shepherd-theme-square-dark .shepherd-content footer .shepherd-buttons li .shepherd-button{display:inline-block;vertical-align:middle;*vertical-align:auto;*zoom:1;*display:inline;border-radius:0;cursor:pointer;border:0;margin:0 .5em 0 0;font-family:inherit;text-transform:uppercase;letter-spacing:.1em;font-size:.8em;line-height:1em;padding:.75em 2em;background:#3288e6;color:#fff}.shepherd-element.shepherd-theme-square-dark .shepherd-content footer .shepherd-buttons li .shepherd-button.shepherd-button-secondary{background:#eee;color:#888}.shepherd-element.shepherd-theme-square-dark .shepherd-content footer .shepherd-buttons li:last-child .shepherd-button{margin-right:0}.shepherd-start-tour-button.shepherd-theme-square-dark{display:inline-block;vertical-align:middle;*vertical-align:auto;*zoom:1;*display:inline;border-radius:0;cursor:pointer;border:0;margin:0 .5em 0 0;font-family:inherit;text-transform:uppercase;letter-spacing:.1em;font-size:.8em;line-height:1em;padding:.75em 2em;background:#3288e6;color:#fff}
admin/assets/tether-shepherd/shepherd-theme-square.css ADDED
@@ -0,0 +1,248 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top.shepherd-target-attached-left .shepherd-content:before,
2
+ .shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top.shepherd-target-attached-right .shepherd-content:before,
3
+ .shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-target-attached-left .shepherd-content:before,
4
+ .shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-target-attached-right .shepherd-content:before {
5
+ display: none; }
6
+
7
+ .shepherd-element, .shepherd-element:after, .shepherd-element:before, .shepherd-element *, .shepherd-element *:after, .shepherd-element *:before {
8
+ box-sizing: border-box; }
9
+
10
+ .shepherd-element {
11
+ position: absolute;
12
+ display: none; }
13
+ .shepherd-element.shepherd-open {
14
+ display: block; }
15
+
16
+ .shepherd-element.shepherd-theme-square {
17
+ max-width: 100%;
18
+ max-height: 100%; }
19
+ .shepherd-element.shepherd-theme-square .shepherd-content {
20
+ border-radius: 5px;
21
+ position: relative;
22
+ font-family: inherit;
23
+ background: #f6f6f6;
24
+ color: #444;
25
+ padding: 1em;
26
+ font-size: 1.1em;
27
+ line-height: 1.5em; }
28
+ .shepherd-element.shepherd-theme-square .shepherd-content:before {
29
+ content: "";
30
+ display: block;
31
+ position: absolute;
32
+ width: 0;
33
+ height: 0;
34
+ border-color: transparent;
35
+ border-width: 16px;
36
+ border-style: solid;
37
+ pointer-events: none; }
38
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content {
39
+ margin-bottom: 16px; }
40
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content:before {
41
+ top: 100%;
42
+ left: 50%;
43
+ margin-left: -16px;
44
+ border-top-color: #f6f6f6; }
45
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content {
46
+ margin-top: 16px; }
47
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content:before {
48
+ bottom: 100%;
49
+ left: 50%;
50
+ margin-left: -16px;
51
+ border-bottom-color: #f6f6f6; }
52
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content {
53
+ margin-right: 16px; }
54
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content:before {
55
+ left: 100%;
56
+ top: 50%;
57
+ margin-top: -16px;
58
+ border-left-color: #f6f6f6; }
59
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content {
60
+ margin-left: 16px; }
61
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content:before {
62
+ right: 100%;
63
+ top: 50%;
64
+ margin-top: -16px;
65
+ border-right-color: #f6f6f6; }
66
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-left.shepherd-target-attached-center .shepherd-content {
67
+ left: -32px; }
68
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-right.shepherd-target-attached-center .shepherd-content {
69
+ left: 32px; }
70
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content {
71
+ margin-top: 16px; }
72
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before {
73
+ bottom: 100%;
74
+ left: 16px;
75
+ border-bottom-color: #f6f6f6; }
76
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content {
77
+ margin-top: 16px; }
78
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before {
79
+ bottom: 100%;
80
+ right: 16px;
81
+ border-bottom-color: #f6f6f6; }
82
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content {
83
+ margin-bottom: 16px; }
84
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before {
85
+ top: 100%;
86
+ left: 16px;
87
+ border-top-color: #f6f6f6; }
88
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content {
89
+ margin-bottom: 16px; }
90
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before {
91
+ top: 100%;
92
+ right: 16px;
93
+ border-top-color: #f6f6f6; }
94
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content {
95
+ margin-top: 16px; }
96
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content:before {
97
+ bottom: 100%;
98
+ left: 16px;
99
+ border-bottom-color: #f6f6f6; }
100
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content {
101
+ margin-top: 16px; }
102
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content:before {
103
+ bottom: 100%;
104
+ right: 16px;
105
+ border-bottom-color: #f6f6f6; }
106
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content {
107
+ margin-bottom: 16px; }
108
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content:before {
109
+ top: 100%;
110
+ left: 16px;
111
+ border-top-color: #f6f6f6; }
112
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content {
113
+ margin-bottom: 16px; }
114
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content:before {
115
+ top: 100%;
116
+ right: 16px;
117
+ border-top-color: #f6f6f6; }
118
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content {
119
+ margin-right: 16px; }
120
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before {
121
+ top: 16px;
122
+ left: 100%;
123
+ border-left-color: #f6f6f6; }
124
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content {
125
+ margin-left: 16px; }
126
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before {
127
+ top: 16px;
128
+ right: 100%;
129
+ border-right-color: #f6f6f6; }
130
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content {
131
+ margin-right: 16px; }
132
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before {
133
+ bottom: 16px;
134
+ left: 100%;
135
+ border-left-color: #f6f6f6; }
136
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content {
137
+ margin-left: 16px; }
138
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before {
139
+ bottom: 16px;
140
+ right: 100%;
141
+ border-right-color: #f6f6f6; }
142
+
143
+ .shepherd-element.shepherd-theme-square {
144
+ border-radius: 0;
145
+ z-index: 9999;
146
+ max-width: 24em;
147
+ font-size: 1em; }
148
+ .shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-center.shepherd-has-title .shepherd-content:before, .shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before, .shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before {
149
+ border-bottom-color: #e6e6e6; }
150
+ .shepherd-element.shepherd-theme-square.shepherd-has-title .shepherd-content header {
151
+ background: #e6e6e6;
152
+ padding: 1em; }
153
+ .shepherd-element.shepherd-theme-square.shepherd-has-title .shepherd-content header a.shepherd-cancel-link {
154
+ padding: 0;
155
+ margin-bottom: 0; }
156
+ .shepherd-element.shepherd-theme-square.shepherd-has-cancel-link .shepherd-content header h3 {
157
+ float: left; }
158
+ .shepherd-element.shepherd-theme-square .shepherd-content {
159
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.17);
160
+ border-radius: 0;
161
+ padding: 0; }
162
+ .shepherd-element.shepherd-theme-square .shepherd-content * {
163
+ font-size: inherit; }
164
+ .shepherd-element.shepherd-theme-square .shepherd-content header {
165
+ *zoom: 1;
166
+ border-radius: 0; }
167
+ .shepherd-element.shepherd-theme-square .shepherd-content header:after {
168
+ content: "";
169
+ display: table;
170
+ clear: both; }
171
+ .shepherd-element.shepherd-theme-square .shepherd-content header h3 {
172
+ margin: 0;
173
+ line-height: 1;
174
+ font-weight: normal; }
175
+ .shepherd-element.shepherd-theme-square .shepherd-content header a.shepherd-cancel-link {
176
+ float: right;
177
+ text-decoration: none;
178
+ font-size: 1.25em;
179
+ line-height: .8em;
180
+ font-weight: normal;
181
+ color: rgba(0, 0, 0, 0.5);
182
+ opacity: 0.25;
183
+ position: relative;
184
+ top: .1em;
185
+ padding: .8em;
186
+ margin-bottom: -.8em; }
187
+ .shepherd-element.shepherd-theme-square .shepherd-content header a.shepherd-cancel-link:hover {
188
+ opacity: 1; }
189
+ .shepherd-element.shepherd-theme-square .shepherd-content .shepherd-text {
190
+ padding: 1em; }
191
+ .shepherd-element.shepherd-theme-square .shepherd-content .shepherd-text p {
192
+ margin: 0 0 .5em 0;
193
+ line-height: 1.3em; }
194
+ .shepherd-element.shepherd-theme-square .shepherd-content .shepherd-text p:last-child {
195
+ margin-bottom: 0; }
196
+ .shepherd-element.shepherd-theme-square .shepherd-content footer {
197
+ padding: 0 1em 1em; }
198
+ .shepherd-element.shepherd-theme-square .shepherd-content footer .shepherd-buttons {
199
+ text-align: right;
200
+ list-style: none;
201
+ padding: 0;
202
+ margin: 0; }
203
+ .shepherd-element.shepherd-theme-square .shepherd-content footer .shepherd-buttons li {
204
+ display: inline;
205
+ padding: 0;
206
+ margin: 0; }
207
+ .shepherd-element.shepherd-theme-square .shepherd-content footer .shepherd-buttons li .shepherd-button {
208
+ display: inline-block;
209
+ vertical-align: middle;
210
+ *vertical-align: auto;
211
+ *zoom: 1;
212
+ *display: inline;
213
+ border-radius: 0;
214
+ cursor: pointer;
215
+ border: 0;
216
+ margin: 0 .5em 0 0;
217
+ font-family: inherit;
218
+ text-transform: uppercase;
219
+ letter-spacing: .1em;
220
+ font-size: .8em;
221
+ line-height: 1em;
222
+ padding: .75em 2em;
223
+ background: #3288e6;
224
+ color: #fff; }
225
+ .shepherd-element.shepherd-theme-square .shepherd-content footer .shepherd-buttons li .shepherd-button.shepherd-button-secondary {
226
+ background: #eee;
227
+ color: #888; }
228
+ .shepherd-element.shepherd-theme-square .shepherd-content footer .shepherd-buttons li:last-child .shepherd-button {
229
+ margin-right: 0; }
230
+
231
+ .shepherd-start-tour-button.shepherd-theme-square {
232
+ display: inline-block;
233
+ vertical-align: middle;
234
+ *vertical-align: auto;
235
+ *zoom: 1;
236
+ *display: inline;
237
+ border-radius: 0;
238
+ cursor: pointer;
239
+ border: 0;
240
+ margin: 0 .5em 0 0;
241
+ font-family: inherit;
242
+ text-transform: uppercase;
243
+ letter-spacing: .1em;
244
+ font-size: .8em;
245
+ line-height: 1em;
246
+ padding: .75em 2em;
247
+ background: #3288e6;
248
+ color: #fff; }
admin/assets/tether-shepherd/shepherd-theme-square.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top.shepherd-target-attached-left .shepherd-content:before,.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top.shepherd-target-attached-right .shepherd-content:before,.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-target-attached-left .shepherd-content:before,.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-target-attached-right .shepherd-content:before{display:none}.shepherd-element,.shepherd-element:after,.shepherd-element:before,.shepherd-element *,.shepherd-element *:after,.shepherd-element *:before{box-sizing:border-box}.shepherd-element{position:absolute;display:none}.shepherd-element.shepherd-open{display:block}.shepherd-element.shepherd-theme-square{max-width:100%;max-height:100%}.shepherd-element.shepherd-theme-square .shepherd-content{border-radius:5px;position:relative;font-family:inherit;background:#f6f6f6;color:#444;padding:1em;font-size:1.1em;line-height:1.5em}.shepherd-element.shepherd-theme-square .shepherd-content:before{content:"";display:block;position:absolute;width:0;height:0;border-color:transparent;border-width:16px;border-style:solid;pointer-events:none}.shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-center .shepherd-content:before{top:100%;left:50%;margin-left:-16px;border-top-color:#f6f6f6}.shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-center .shepherd-content:before{bottom:100%;left:50%;margin-left:-16px;border-bottom-color:#f6f6f6}.shepherd-element.shepherd-theme-square.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content{margin-right:16px}.shepherd-element.shepherd-theme-square.shepherd-element-attached-right.shepherd-element-attached-middle .shepherd-content:before{left:100%;top:50%;margin-top:-16px;border-left-color:#f6f6f6}.shepherd-element.shepherd-theme-square.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content{margin-left:16px}.shepherd-element.shepherd-theme-square.shepherd-element-attached-left.shepherd-element-attached-middle .shepherd-content:before{right:100%;top:50%;margin-top:-16px;border-right-color:#f6f6f6}.shepherd-element.shepherd-theme-square.shepherd-element-attached-left.shepherd-target-attached-center .shepherd-content{left:-32px}.shepherd-element.shepherd-theme-square.shepherd-element-attached-right.shepherd-target-attached-center .shepherd-content{left:32px}.shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before{bottom:100%;left:16px;border-bottom-color:#f6f6f6}.shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before{bottom:100%;right:16px;border-bottom-color:#f6f6f6}.shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-middle .shepherd-content:before{top:100%;left:16px;border-top-color:#f6f6f6}.shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-middle .shepherd-content:before{top:100%;right:16px;border-top-color:#f6f6f6}.shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom .shepherd-content:before{bottom:100%;left:16px;border-bottom-color:#f6f6f6}.shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content{margin-top:16px}.shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom .shepherd-content:before{bottom:100%;right:16px;border-bottom-color:#f6f6f6}.shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-top .shepherd-content:before{top:100%;left:16px;border-top-color:#f6f6f6}.shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content{margin-bottom:16px}.shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-top .shepherd-content:before{top:100%;right:16px;border-top-color:#f6f6f6}.shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content{margin-right:16px}.shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before{top:16px;left:100%;border-left-color:#f6f6f6}.shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content{margin-left:16px}.shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before{top:16px;right:100%;border-right-color:#f6f6f6}.shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content{margin-right:16px}.shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-right.shepherd-target-attached-left .shepherd-content:before{bottom:16px;left:100%;border-left-color:#f6f6f6}.shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content{margin-left:16px}.shepherd-element.shepherd-theme-square.shepherd-element-attached-bottom.shepherd-element-attached-left.shepherd-target-attached-right .shepherd-content:before{bottom:16px;right:100%;border-right-color:#f6f6f6}.shepherd-element.shepherd-theme-square{border-radius:0;z-index:9999;max-width:24em;font-size:1em}.shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-center.shepherd-has-title .shepherd-content:before,.shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-right.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before,.shepherd-element.shepherd-theme-square.shepherd-element-attached-top.shepherd-element-attached-left.shepherd-target-attached-bottom.shepherd-has-title .shepherd-content:before{border-bottom-color:#e6e6e6}.shepherd-element.shepherd-theme-square.shepherd-has-title .shepherd-content header{background:#e6e6e6;padding:1em}.shepherd-element.shepherd-theme-square.shepherd-has-title .shepherd-content header a.shepherd-cancel-link{padding:0;margin-bottom:0}.shepherd-element.shepherd-theme-square.shepherd-has-cancel-link .shepherd-content header h3{float:left}.shepherd-element.shepherd-theme-square .shepherd-content{box-shadow:0 0 0 1px rgba(0,0,0,0.17);border-radius:0;padding:0}.shepherd-element.shepherd-theme-square .shepherd-content *{font-size:inherit}.shepherd-element.shepherd-theme-square .shepherd-content header{*zoom:1;border-radius:0}.shepherd-element.shepherd-theme-square .shepherd-content header:after{content:"";display:table;clear:both}.shepherd-element.shepherd-theme-square .shepherd-content header h3{margin:0;line-height:1;font-weight:normal}.shepherd-element.shepherd-theme-square .shepherd-content header a.shepherd-cancel-link{float:right;text-decoration:none;font-size:1.25em;line-height:.8em;font-weight:normal;color:rgba(0,0,0,0.5);opacity:.25;position:relative;top:.1em;padding:.8em;margin-bottom:-.8em}.shepherd-element.shepherd-theme-square .shepherd-content header a.shepherd-cancel-link:hover{opacity:1}.shepherd-element.shepherd-theme-square .shepherd-content .shepherd-text{padding:1em}.shepherd-element.shepherd-theme-square .shepherd-content .shepherd-text p{margin:0 0 .5em 0;line-height:1.3em}.shepherd-element.shepherd-theme-square .shepherd-content .shepherd-text p:last-child{margin-bottom:0}.shepherd-element.shepherd-theme-square .shepherd-content footer{padding:0 1em 1em}.shepherd-element.shepherd-theme-square .shepherd-content footer .shepherd-buttons{text-align:right;list-style:none;padding:0;margin:0}.shepherd-element.shepherd-theme-square .shepherd-content footer .shepherd-buttons li{display:inline;padding:0;margin:0}.shepherd-element.shepherd-theme-square .shepherd-content footer .shepherd-buttons li .shepherd-button{display:inline-block;vertical-align:middle;*vertical-align:auto;*zoom:1;*display:inline;border-radius:0;cursor:pointer;border:0;margin:0 .5em 0 0;font-family:inherit;text-transform:uppercase;letter-spacing:.1em;font-size:.8em;line-height:1em;padding:.75em 2em;background:#3288e6;color:#fff}.shepherd-element.shepherd-theme-square .shepherd-content footer .shepherd-buttons li .shepherd-button.shepherd-button-secondary{background:#eee;color:#888}.shepherd-element.shepherd-theme-square .shepherd-content footer .shepherd-buttons li:last-child .shepherd-button{margin-right:0}.shepherd-start-tour-button.shepherd-theme-square{display:inline-block;vertical-align:middle;*vertical-align:auto;*zoom:1;*display:inline;border-radius:0;cursor:pointer;border:0;margin:0 .5em 0 0;font-family:inherit;text-transform:uppercase;letter-spacing:.1em;font-size:.8em;line-height:1em;padding:.75em 2em;background:#3288e6;color:#fff}
admin/assets/tether-shepherd/shepherd.js ADDED
@@ -0,0 +1,745 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*! tether-shepherd 1.8.1 */
2
+
3
+ (function(root, factory) {
4
+ if (typeof define === 'function' && define.amd) {
5
+ define(["tether"], factory);
6
+ } else if (typeof exports === 'object') {
7
+ module.exports = factory(require('tether'));
8
+ } else {
9
+ root.Shepherd = factory(root.Tether);
10
+ }
11
+ }(this, function(Tether) {
12
+
13
+ /* global Tether */
14
+
15
+ 'use strict';
16
+
17
+ var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
18
+
19
+ var _get = function get(_x5, _x6, _x7) { var _again = true; _function: while (_again) { var object = _x5, property = _x6, receiver = _x7; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x5 = parent; _x6 = property; _x7 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
20
+
21
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
22
+
23
+ function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
24
+
25
+ var _Tether$Utils = Tether.Utils;
26
+ var Evented = _Tether$Utils.Evented;
27
+ var addClass = _Tether$Utils.addClass;
28
+ var extend = _Tether$Utils.extend;
29
+ var hasClass = _Tether$Utils.hasClass;
30
+ var removeClass = _Tether$Utils.removeClass;
31
+ var uniqueId = _Tether$Utils.uniqueId;
32
+
33
+ var Shepherd = new Evented();
34
+
35
+ function isUndefined(obj) {
36
+ return typeof obj === 'undefined';
37
+ };
38
+
39
+ function isArray(obj) {
40
+ return obj && obj.constructor === Array;
41
+ };
42
+
43
+ function isObject(obj) {
44
+ return obj && obj.constructor === Object;
45
+ };
46
+
47
+ function isObjectLoose(obj) {
48
+ return typeof obj === 'object';
49
+ };
50
+
51
+ var ATTACHMENT = {
52
+ 'top right': 'bottom left',
53
+ 'top left': 'bottom right',
54
+ 'top center': 'bottom center',
55
+ 'middle right': 'middle left',
56
+ 'middle left': 'middle right',
57
+ 'middle center': 'middle center',
58
+ 'bottom left': 'top right',
59
+ 'bottom right': 'top left',
60
+ 'bottom center': 'top center',
61
+ 'top': 'bottom center',
62
+ 'left': 'middle right',
63
+ 'right': 'middle left',
64
+ 'bottom': 'top center',
65
+ 'center': 'middle center',
66
+ 'middle': 'middle center'
67
+ };
68
+
69
+ function createFromHTML(html) {
70
+ var el = document.createElement('div');
71
+ el.innerHTML = html;
72
+ return el.children[0];
73
+ }
74
+
75
+ function matchesSelector(el, sel) {
76
+ var matches = undefined;
77
+ if (!isUndefined(el.matches)) {
78
+ matches = el.matches;
79
+ } else if (!isUndefined(el.matchesSelector)) {
80
+ matches = el.matchesSelector;
81
+ } else if (!isUndefined(el.msMatchesSelector)) {
82
+ matches = el.msMatchesSelector;
83
+ } else if (!isUndefined(el.webkitMatchesSelector)) {
84
+ matches = el.webkitMatchesSelector;
85
+ } else if (!isUndefined(el.mozMatchesSelector)) {
86
+ matches = el.mozMatchesSelector;
87
+ } else if (!isUndefined(el.oMatchesSelector)) {
88
+ matches = el.oMatchesSelector;
89
+ }
90
+ return matches.call(el, sel);
91
+ }
92
+
93
+ var positionRe = /^(.+) (top|left|right|bottom|center|\[[a-z ]+\])$/;
94
+
95
+ function parsePosition(str) {
96
+ if (isObjectLoose(str)) {
97
+ if (str.hasOwnProperty("element") && str.hasOwnProperty("on")) {
98
+ return str;
99
+ }
100
+ return null;
101
+ }
102
+
103
+ var matches = positionRe.exec(str);
104
+ if (!matches) {
105
+ return null;
106
+ }
107
+
108
+ var on = matches[2];
109
+ if (on[0] === '[') {
110
+ on = on.substring(1, on.length - 1);
111
+ }
112
+
113
+ return {
114
+ 'element': matches[1],
115
+ 'on': on
116
+ };
117
+ }
118
+
119
+ function parseShorthand(obj, props) {
120
+ if (obj === null || isUndefined(obj)) {
121
+ return obj;
122
+ } else if (isObjectLoose(obj)) {
123
+ return obj;
124
+ }
125
+
126
+ var vals = obj.split(' ');
127
+ var out = {};
128
+ var j = props.length - 1;
129
+ for (var i = vals.length - 1; i >= 0; i--) {
130
+ if (j === 0) {
131
+ out[props[j]] = vals.slice(0, i + 1).join(' ');
132
+ break;
133
+ } else {
134
+ out[props[j]] = vals[i];
135
+ }
136
+
137
+ j--;
138
+ }
139
+
140
+ return out;
141
+ }
142
+
143
+ var Step = (function (_Evented) {
144
+ _inherits(Step, _Evented);
145
+
146
+ function Step(tour, options) {
147
+ _classCallCheck(this, Step);
148
+
149
+ _get(Object.getPrototypeOf(Step.prototype), 'constructor', this).call(this, tour, options);
150
+ this.tour = tour;
151
+ this.bindMethods();
152
+ this.setOptions(options);
153
+ return this;
154
+ }
155
+
156
+ _createClass(Step, [{
157
+ key: 'bindMethods',
158
+ value: function bindMethods() {
159
+ var _this = this;
160
+
161
+ var methods = ['_show', 'show', 'hide', 'isOpen', 'cancel', 'complete', 'scrollTo', 'destroy', 'render'];
162
+ methods.map(function (method) {
163
+ _this[method] = _this[method].bind(_this);
164
+ });
165
+ }
166
+ }, {
167
+ key: 'setOptions',
168
+ value: function setOptions() {
169
+ var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
170
+
171
+ this.options = options;
172
+ this.destroy();
173
+
174
+ this.id = this.options.id || this.id || 'step-' + uniqueId();
175
+
176
+ var when = this.options.when;
177
+ if (when) {
178
+ for (var _event in when) {
179
+ if (({}).hasOwnProperty.call(when, _event)) {
180
+ var handler = when[_event];
181
+ this.on(_event, handler, this);
182
+ }
183
+ }
184
+ }
185
+
186
+ // Button configuration
187
+
188
+ var buttonsJson = JSON.stringify(this.options.buttons);
189
+ var buttonsAreDefault = isUndefined(buttonsJson) || buttonsJson === "true";
190
+
191
+ var buttonsAreEmpty = buttonsJson === "{}" || buttonsJson === "[]" || buttonsJson === "null" || buttonsJson === "false";
192
+
193
+ var buttonsAreArray = !buttonsAreDefault && isArray(this.options.buttons);
194
+
195
+ var buttonsAreObject = !buttonsAreDefault && isObject(this.options.buttons);
196
+
197
+ // Show default button if undefined or 'true'
198
+ if (buttonsAreDefault) {
199
+ this.options.buttons = [{
200
+ text: 'Next',
201
+ action: this.tour.next,
202
+ classes: 'btn'
203
+ }];
204
+
205
+ // Can pass in an object which will assume asingle button
206
+ } else if (!buttonsAreEmpty && buttonsAreObject) {
207
+ this.options.buttons = [this.options.buttons];
208
+
209
+ // Falsey/empty values or non-object values prevent buttons from rendering
210
+ } else if (buttonsAreEmpty || !buttonsAreArray) {
211
+ this.options.buttons = false;
212
+ }
213
+ }
214
+ }, {
215
+ key: 'getTour',
216
+ value: function getTour() {
217
+ return this.tour;
218
+ }
219
+ }, {
220
+ key: 'bindAdvance',
221
+ value: function bindAdvance() {
222
+ var _this2 = this;
223
+
224
+ // An empty selector matches the step element
225
+
226
+ var _parseShorthand = parseShorthand(this.options.advanceOn, ['selector', 'event']);
227
+
228
+ var event = _parseShorthand.event;
229
+ var selector = _parseShorthand.selector;
230
+
231
+ var handler = function handler(e) {
232
+ if (!_this2.isOpen()) {
233
+ return;
234
+ }
235
+
236
+ if (!isUndefined(selector)) {
237
+ if (matchesSelector(e.target, selector)) {
238
+ _this2.tour.next();
239
+ }
240
+ } else {
241
+ if (_this2.el && e.target === _this2.el) {
242
+ _this2.tour.next();
243
+ }
244
+ }
245
+ };
246
+
247
+ // TODO: this should also bind/unbind on show/hide
248
+ document.body.addEventListener(event, handler);
249
+ this.on('destroy', function () {
250
+ return document.body.removeEventListener(event, handler);
251
+ });
252
+ }
253
+ }, {
254
+ key: 'getAttachTo',
255
+ value: function getAttachTo() {
256
+ var opts = parsePosition(this.options.attachTo) || {};
257
+ var returnOpts = extend({}, opts);
258
+
259
+ if (typeof opts.element === 'string') {
260
+ // Can't override the element in user opts reference because we can't
261
+ // guarantee that the element will exist in the future.
262
+ returnOpts.element = document.querySelector(opts.element);
263
+ if (!returnOpts.element) {
264
+ console.error('The element for this Shepherd step was not found ' + opts.element);
265
+ }
266
+ }
267
+
268
+ return returnOpts;
269
+ }
270
+ }, {
271
+ key: 'setupTether',
272
+ value: function setupTether() {
273
+ if (isUndefined(Tether)) {
274
+ throw new Error("Using the attachment feature of Shepherd requires the Tether library");
275
+ }
276
+
277
+ var opts = this.getAttachTo();
278
+ var attachment = ATTACHMENT[opts.on] || ATTACHMENT.right;
279
+ if (isUndefined(opts.element)) {
280
+ opts.element = 'viewport';
281
+ attachment = 'middle center';
282
+ }
283
+
284
+ var tetherOpts = {
285
+ classPrefix: 'shepherd',
286
+ element: this.el,
287
+ constraints: [{
288
+ to: 'window',
289
+ pin: true,
290
+ attachment: 'together'
291
+ }],
292
+ target: opts.element,
293
+ offset: opts.offset || '0 0',
294
+ attachment: attachment
295
+ };
296
+
297
+ if (this.tether) {
298
+ this.tether.destroy();
299
+ }
300
+
301
+ this.tether = new Tether(extend(tetherOpts, this.options.tetherOptions));
302
+ }
303
+ }, {
304
+ key: 'show',
305
+ value: function show() {
306
+ var _this3 = this;
307
+
308
+ if (!isUndefined(this.options.beforeShowPromise)) {
309
+ var beforeShowPromise = this.options.beforeShowPromise();
310
+ if (!isUndefined(beforeShowPromise)) {
311
+ return beforeShowPromise.then(function () {
312
+ return _this3._show();
313
+ });
314
+ }
315
+ }
316
+ this._show();
317
+ }
318
+ }, {
319
+ key: '_show',
320
+ value: function _show() {
321
+ var _this4 = this;
322
+
323
+ this.trigger('before-show');
324
+
325
+ if (!this.el) {
326
+ this.render();
327
+ }
328
+
329
+ addClass(this.el, 'shepherd-open');
330
+
331
+ document.body.setAttribute('data-shepherd-step', this.id);
332
+
333
+ this.setupTether();
334
+
335
+ if (this.options.scrollTo) {
336
+ setTimeout(function () {
337
+ _this4.scrollTo();
338
+ });
339
+ }
340
+
341
+ this.trigger('show');
342
+ }
343
+ }, {
344
+ key: 'hide',
345
+ value: function hide() {
346
+ this.trigger('before-hide');
347
+
348
+ removeClass(this.el, 'shepherd-open');
349
+
350
+ document.body.removeAttribute('data-shepherd-step');
351
+
352
+ if (this.tether) {
353
+ this.tether.destroy();
354
+ }
355
+ this.tether = null;
356
+
357
+ this.trigger('hide');
358
+ }
359
+ }, {
360
+ key: 'isOpen',
361
+ value: function isOpen() {
362
+ return this.el && hasClass(this.el, 'shepherd-open');
363
+ }
364
+ }, {
365
+ key: 'cancel',
366
+ value: function cancel() {
367
+ this.tour.cancel();
368
+ this.trigger('cancel');
369
+ }
370
+ }, {
371
+ key: 'complete',
372
+ value: function complete() {
373
+ this.tour.complete();
374
+ this.trigger('complete');
375
+ }
376
+ }, {
377
+ key: 'scrollTo',
378
+ value: function scrollTo() {
379
+ var _getAttachTo = this.getAttachTo();
380
+
381
+ var element = _getAttachTo.element;
382
+
383
+ if (!isUndefined(this.options.scrollToHandler)) {
384
+ this.options.scrollToHandler(element);
385
+ } else if (!isUndefined(element)) {
386
+ element.scrollIntoView();
387
+ }
388
+ }
389
+ }, {
390
+ key: 'destroy',
391
+ value: function destroy() {
392
+ if (!isUndefined(this.el) && this.el.parentNode) {
393
+ this.el.parentNode.removeChild(this.el);
394
+ delete this.el;
395
+ }
396
+
397
+ if (this.tether) {
398
+ this.tether.destroy();
399
+ }
400
+ this.tether = null;
401
+
402
+ this.trigger('destroy');
403
+ }
404
+ }, {
405
+ key: 'render',
406
+ value: function render() {
407
+ var _this5 = this;
408
+
409
+ if (!isUndefined(this.el)) {
410
+ this.destroy();
411
+ }
412
+
413
+ this.el = createFromHTML('<div class=\'shepherd-step ' + (this.options.classes || '') + '\' data-id=\'' + this.id + '\' ' + (this.options.idAttribute ? 'id="' + this.options.idAttribute + '"' : '') + '></div>');
414
+
415
+ var content = document.createElement('div');
416
+ content.className = 'shepherd-content';
417
+ this.el.appendChild(content);
418
+
419
+ var header = document.createElement('header');
420
+ content.appendChild(header);
421
+
422
+ if (this.options.title) {
423
+ header.innerHTML += '<h3 class=\'shepherd-title\'>' + this.options.title + '</h3>';
424
+ this.el.className += ' shepherd-has-title';
425
+ }
426
+
427
+ if (this.options.showCancelLink) {
428
+ var link = createFromHTML("<a href class='shepherd-cancel-link'>✕</a>");
429
+ header.appendChild(link);
430
+
431
+ this.el.className += ' shepherd-has-cancel-link';
432
+
433
+ this.bindCancelLink(link);
434
+ }
435
+
436
+ if (!isUndefined(this.options.text)) {
437
+ (function () {
438
+ var text = createFromHTML("<div class='shepherd-text'></div>");
439
+ var paragraphs = _this5.options.text;
440
+
441
+ if (typeof paragraphs === 'function') {
442
+ paragraphs = paragraphs.call(_this5, text);
443
+ }
444
+
445
+ if (paragraphs instanceof HTMLElement) {
446
+ text.appendChild(paragraphs);
447
+ } else {
448
+ if (typeof paragraphs === 'string') {
449
+ paragraphs = [paragraphs];
450
+ }
451
+
452
+ paragraphs.map(function (paragraph) {
453
+ text.innerHTML += '<p>' + paragraph + '</p>';
454
+ });
455
+ }
456
+
457
+ content.appendChild(text);
458
+ })();
459
+ }
460
+
461
+ if (this.options.buttons) {
462
+ (function () {
463
+ var footer = document.createElement('footer');
464
+ var buttons = createFromHTML("<ul class='shepherd-buttons'></ul>");
465
+
466
+ _this5.options.buttons.map(function (cfg) {
467
+ var button = createFromHTML('<li><a class=\'shepherd-button ' + (cfg.classes || '') + '\'>' + cfg.text + '</a>');
468
+ buttons.appendChild(button);
469
+ _this5.bindButtonEvents(cfg, button.querySelector('a'));
470
+ });
471
+
472
+ footer.appendChild(buttons);
473
+ content.appendChild(footer);
474
+ })();
475
+ }
476
+
477
+ document.body.appendChild(this.el);
478
+
479
+ this.setupTether();
480
+
481
+ if (this.options.advanceOn) {
482
+ this.bindAdvance();
483
+ }
484
+ }
485
+ }, {
486
+ key: 'bindCancelLink',
487
+ value: function bindCancelLink(link) {
488
+ var _this6 = this;
489
+
490
+ link.addEventListener('click', function (e) {
491
+ e.preventDefault();
492
+ _this6.cancel();
493
+ });
494
+ }
495
+ }, {
496
+ key: 'bindButtonEvents',
497
+ value: function bindButtonEvents(cfg, el) {
498
+ var _this7 = this;
499
+
500
+ cfg.events = cfg.events || {};
501
+ if (!isUndefined(cfg.action)) {
502
+ // Including both a click event and an action is not supported
503
+ cfg.events.click = cfg.action;
504
+ }
505
+
506
+ for (var _event2 in cfg.events) {
507
+ if (({}).hasOwnProperty.call(cfg.events, _event2)) {
508
+ var handler = cfg.events[_event2];
509
+ if (typeof handler === 'string') {
510
+ (function () {
511
+ var page = handler;
512
+ handler = function () {
513
+ return _this7.tour.show(page);
514
+ };
515
+ })();
516
+ }
517
+ el.addEventListener(_event2, handler);
518
+ }
519
+ }
520
+
521
+ this.on('destroy', function () {
522
+ for (var _event3 in cfg.events) {
523
+ if (({}).hasOwnProperty.call(cfg.events, _event3)) {
524
+ var handler = cfg.events[_event3];
525
+ el.removeEventListener(_event3, handler);
526
+ }
527
+ }
528
+ });
529
+ }
530
+ }]);
531
+
532
+ return Step;
533
+ })(Evented);
534
+
535
+ var Tour = (function (_Evented2) {
536
+ _inherits(Tour, _Evented2);
537
+
538
+ function Tour() {
539
+ var _this8 = this;
540
+
541
+ var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
542
+
543
+ _classCallCheck(this, Tour);
544
+
545
+ _get(Object.getPrototypeOf(Tour.prototype), 'constructor', this).call(this, options);
546
+ this.bindMethods();
547
+ this.options = options;
548
+ this.steps = this.options.steps || [];
549
+
550
+ // Pass these events onto the global Shepherd object
551
+ var events = ['complete', 'cancel', 'hide', 'start', 'show', 'active', 'inactive'];
552
+ events.map(function (event) {
553
+ (function (e) {
554
+ _this8.on(e, function (opts) {
555
+ opts = opts || {};
556
+ opts.tour = _this8;
557
+ Shepherd.trigger(e, opts);
558
+ });
559
+ })(event);
560
+ });
561
+
562
+ return this;
563
+ }
564
+
565
+ _createClass(Tour, [{
566
+ key: 'bindMethods',
567
+ value: function bindMethods() {
568
+ var _this9 = this;
569
+
570
+ var methods = ['next', 'back', 'cancel', 'complete', 'hide'];
571
+ methods.map(function (method) {
572
+ _this9[method] = _this9[method].bind(_this9);
573
+ });
574
+ }
575
+ }, {
576
+ key: 'addStep',
577
+ value: function addStep(name, step) {
578
+ if (isUndefined(step)) {
579
+ step = name;
580
+ }
581
+
582
+ if (!(step instanceof Step)) {
583
+ if (typeof name === 'string' || typeof name === 'number') {
584
+ step.id = name.toString();
585
+ }
586
+ step = extend({}, this.options.defaults, step);
587
+ step = new Step(this, step);
588
+ } else {
589
+ step.tour = this;
590
+ }
591
+
592
+ this.steps.push(step);
593
+ return this;
594
+ }
595
+ }, {
596
+ key: 'removeStep',
597
+ value: function removeStep(name) {
598
+ var current = this.getCurrentStep();
599
+
600
+ for (var i = 0; i < this.steps.length; ++i) {
601
+ var step = this.steps[i];
602
+ if (step.id === name) {
603
+ if (step.isOpen()) {
604
+ step.hide();
605
+ }
606
+ step.destroy();
607
+ this.steps.splice(i, 1);
608
+ break;
609
+ }
610
+ }
611
+
612
+ if (current && current.id === name) {
613
+ this.currentStep = undefined;
614
+
615
+ if (this.steps.length) this.show(0);else this.hide();
616
+ }
617
+ }
618
+ }, {
619
+ key: 'getById',
620
+ value: function getById(id) {
621
+ for (var i = 0; i < this.steps.length; ++i) {
622
+ var step = this.steps[i];
623
+ if (step.id === id) {
624
+ return step;
625
+ }
626
+ }
627
+ }
628
+ }, {
629
+ key: 'getCurrentStep',
630
+ value: function getCurrentStep() {
631
+ return this.currentStep;
632
+ }
633
+ }, {
634
+ key: 'next',
635
+ value: function next() {
636
+ var index = this.steps.indexOf(this.currentStep);
637
+
638
+ if (index === this.steps.length - 1) {
639
+ this.hide(index);
640
+ this.trigger('complete');
641
+ this.done();
642
+ } else {
643
+ this.show(index + 1, true);
644
+ }
645
+ }
646
+ }, {
647
+ key: 'back',
648
+ value: function back() {
649
+ var index = this.steps.indexOf(this.currentStep);
650
+ this.show(index - 1, false);
651
+ }
652
+ }, {
653
+ key: 'cancel',
654
+ value: function cancel() {
655
+ if (this.currentStep) {
656
+ this.currentStep.hide();
657
+ }
658
+ this.trigger('cancel');
659
+ this.done();
660
+ }
661
+ }, {
662
+ key: 'complete',
663
+ value: function complete() {
664
+ if (this.currentStep) {
665
+ this.currentStep.hide();
666
+ }
667
+ this.trigger('complete');
668
+ this.done();
669
+ }
670
+ }, {
671
+ key: 'hide',
672
+ value: function hide() {
673
+ if (this.currentStep) {
674
+ this.currentStep.hide();
675
+ }
676
+ this.trigger('hide');
677
+ this.done();
678
+ }
679
+ }, {
680
+ key: 'done',
681
+ value: function done() {
682
+ Shepherd.activeTour = null;
683
+ removeClass(document.body, 'shepherd-active');
684
+ this.trigger('inactive', { tour: this });
685
+ }
686
+ }, {
687
+ key: 'show',
688
+ value: function show() {
689
+ var key = arguments.length <= 0 || arguments[0] === undefined ? 0 : arguments[0];
690
+ var forward = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];
691
+
692
+ if (this.currentStep) {
693
+ this.currentStep.hide();
694
+ } else {
695
+ addClass(document.body, 'shepherd-active');
696
+ this.trigger('active', { tour: this });
697
+ }
698
+
699
+ Shepherd.activeTour = this;
700
+
701
+ var next = undefined;
702
+
703
+ if (typeof key === 'string') {
704
+ next = this.getById(key);
705
+ } else {
706
+ next = this.steps[key];
707
+ }
708
+
709
+ if (next) {
710
+ if (!isUndefined(next.options.showOn) && !next.options.showOn()) {
711
+ var index = this.steps.indexOf(next);
712
+ var nextIndex = forward ? index + 1 : index - 1;
713
+ this.show(nextIndex, forward);
714
+ } else {
715
+ this.trigger('show', {
716
+ step: next,
717
+ previous: this.currentStep
718
+ });
719
+
720
+ if (this.currentStep) {
721
+ this.currentStep.hide();
722
+ }
723
+
724
+ this.currentStep = next;
725
+ next.show();
726
+ }
727
+ }
728
+ }
729
+ }, {
730
+ key: 'start',
731
+ value: function start() {
732
+ this.trigger('start');
733
+
734
+ this.currentStep = null;
735
+ this.next();
736
+ }
737
+ }]);
738
+
739
+ return Tour;
740
+ })(Evented);
741
+
742
+ extend(Shepherd, { Tour: Tour, Step: Step, Evented: Evented });
743
+ return Shepherd;
744
+
745
+ }));
admin/assets/tether-shepherd/shepherd.min.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(t,e){"function"==typeof define&&define.amd?define(["tether"],e):"object"==typeof exports?module.exports=e(require("tether")):t.Shepherd=e(t.Tether)}(this,function(t){"use strict";function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function i(t){return"undefined"==typeof t}function r(t){return t&&t.constructor===Array}function o(t){return t&&t.constructor===Object}function s(t){return"object"==typeof t}function h(t){var e=document.createElement("div");return e.innerHTML=t,e.children[0]}function c(t,e){var n=void 0;return i(t.matches)?i(t.matchesSelector)?i(t.msMatchesSelector)?i(t.webkitMatchesSelector)?i(t.mozMatchesSelector)?i(t.oMatchesSelector)||(n=t.oMatchesSelector):n=t.mozMatchesSelector:n=t.webkitMatchesSelector:n=t.msMatchesSelector:n=t.matchesSelector:n=t.matches,n.call(t,e)}function l(t){if(s(t))return t.hasOwnProperty("element")&&t.hasOwnProperty("on")?t:null;var e=S.exec(t);if(!e)return null;var n=e[2];return"["===n[0]&&(n=n.substring(1,n.length-1)),{element:e[1],on:n}}function a(t,e){if(null===t||i(t))return t;if(s(t))return t;for(var n=t.split(" "),r={},o=e.length-1,h=n.length-1;h>=0;h--){if(0===o){r[e[o]]=n.slice(0,h+1).join(" ");break}r[e[o]]=n[h],o--}return r}var u=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),d=function(t,e,n){for(var i=!0;i;){var r=t,o=e,s=n;i=!1,null===r&&(r=Function.prototype);var h=Object.getOwnPropertyDescriptor(r,o);if(void 0!==h){if("value"in h)return h.value;var c=h.get;if(void 0===c)return;return c.call(s)}var l=Object.getPrototypeOf(r);if(null===l)return;t=l,e=o,n=s,i=!0,h=l=void 0}},p=t.Utils,f=p.Evented,v=p.addClass,m=p.extend,y=p.hasClass,g=p.removeClass,b=p.uniqueId,w=new f,k={"top right":"bottom left","top left":"bottom right","top center":"bottom center","middle right":"middle left","middle left":"middle right","middle center":"middle center","bottom left":"top right","bottom right":"top left","bottom center":"top center",top:"bottom center",left:"middle right",right:"middle left",bottom:"top center",center:"middle center",middle:"middle center"},S=/^(.+) (top|left|right|bottom|center|\[[a-z ]+\])$/,O=function(s){function p(t,n){return e(this,p),d(Object.getPrototypeOf(p.prototype),"constructor",this).call(this,t,n),this.tour=t,this.bindMethods(),this.setOptions(n),this}return n(p,s),u(p,[{key:"bindMethods",value:function(){var t=this,e=["_show","show","hide","isOpen","cancel","complete","scrollTo","destroy","render"];e.map(function(e){t[e]=t[e].bind(t)})}},{key:"setOptions",value:function(){var t=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.options=t,this.destroy(),this.id=this.options.id||this.id||"step-"+b();var e=this.options.when;if(e)for(var n in e)if({}.hasOwnProperty.call(e,n)){var s=e[n];this.on(n,s,this)}var h=JSON.stringify(this.options.buttons),c=i(h)||"true"===h,l="{}"===h||"[]"===h||"null"===h||"false"===h,a=!c&&r(this.options.buttons),u=!c&&o(this.options.buttons);c?this.options.buttons=[{text:"Next",action:this.tour.next,classes:"btn"}]:!l&&u?this.options.buttons=[this.options.buttons]:!l&&a||(this.options.buttons=!1)}},{key:"getTour",value:function(){return this.tour}},{key:"bindAdvance",value:function(){var t=this,e=a(this.options.advanceOn,["selector","event"]),n=e.event,r=e.selector,o=function(e){t.isOpen()&&(i(r)?t.el&&e.target===t.el&&t.tour.next():c(e.target,r)&&t.tour.next())};document.body.addEventListener(n,o),this.on("destroy",function(){return document.body.removeEventListener(n,o)})}},{key:"getAttachTo",value:function(){var t=l(this.options.attachTo)||{},e=m({},t);return"string"==typeof t.element&&(e.element=document.querySelector(t.element),e.element||console.error("The element for this Shepherd step was not found "+t.element)),e}},{key:"setupTether",value:function(){if(i(t))throw new Error("Using the attachment feature of Shepherd requires the Tether library");var e=this.getAttachTo(),n=k[e.on]||k.right;i(e.element)&&(e.element="viewport",n="middle center");var r={classPrefix:"shepherd",element:this.el,constraints:[{to:"window",pin:!0,attachment:"together"}],target:e.element,offset:e.offset||"0 0",attachment:n};this.tether&&this.tether.destroy(),this.tether=new t(m(r,this.options.tetherOptions))}},{key:"show",value:function(){var t=this;if(!i(this.options.beforeShowPromise)){var e=this.options.beforeShowPromise();if(!i(e))return e.then(function(){return t._show()})}this._show()}},{key:"_show",value:function(){var t=this;this.trigger("before-show"),this.el||this.render(),v(this.el,"shepherd-open"),document.body.setAttribute("data-shepherd-step",this.id),this.setupTether(),this.options.scrollTo&&setTimeout(function(){t.scrollTo()}),this.trigger("show")}},{key:"hide",value:function(){this.trigger("before-hide"),g(this.el,"shepherd-open"),document.body.removeAttribute("data-shepherd-step"),this.tether&&this.tether.destroy(),this.tether=null,this.trigger("hide")}},{key:"isOpen",value:function(){return this.el&&y(this.el,"shepherd-open")}},{key:"cancel",value:function(){this.tour.cancel(),this.trigger("cancel")}},{key:"complete",value:function(){this.tour.complete(),this.trigger("complete")}},{key:"scrollTo",value:function(){var t=this.getAttachTo(),e=t.element;i(this.options.scrollToHandler)?i(e)||e.scrollIntoView():this.options.scrollToHandler(e)}},{key:"destroy",value:function(){!i(this.el)&&this.el.parentNode&&(this.el.parentNode.removeChild(this.el),delete this.el),this.tether&&this.tether.destroy(),this.tether=null,this.trigger("destroy")}},{key:"render",value:function(){var t=this;i(this.el)||this.destroy(),this.el=h("<div class='shepherd-step "+(this.options.classes||"")+"' data-id='"+this.id+"' "+(this.options.idAttribute?'id="'+this.options.idAttribute+'"':"")+"></div>");var e=document.createElement("div");e.className="shepherd-content",this.el.appendChild(e);var n=document.createElement("header");if(e.appendChild(n),this.options.title&&(n.innerHTML+="<h3 class='shepherd-title'>"+this.options.title+"</h3>",this.el.className+=" shepherd-has-title"),this.options.showCancelLink){var r=h("<a href class='shepherd-cancel-link'>✕</a>");n.appendChild(r),this.el.className+=" shepherd-has-cancel-link",this.bindCancelLink(r)}i(this.options.text)||!function(){var n=h("<div class='shepherd-text'></div>"),i=t.options.text;"function"==typeof i&&(i=i.call(t,n)),i instanceof HTMLElement?n.appendChild(i):("string"==typeof i&&(i=[i]),i.map(function(t){n.innerHTML+="<p>"+t+"</p>"})),e.appendChild(n)}(),this.options.buttons&&!function(){var n=document.createElement("footer"),i=h("<ul class='shepherd-buttons'></ul>");t.options.buttons.map(function(e){var n=h("<li><a class='shepherd-button "+(e.classes||"")+"'>"+e.text+"</a>");i.appendChild(n),t.bindButtonEvents(e,n.querySelector("a"))}),n.appendChild(i),e.appendChild(n)}(),document.body.appendChild(this.el),this.setupTether(),this.options.advanceOn&&this.bindAdvance()}},{key:"bindCancelLink",value:function(t){var e=this;t.addEventListener("click",function(t){t.preventDefault(),e.cancel()})}},{key:"bindButtonEvents",value:function(t,e){var n=this;t.events=t.events||{},i(t.action)||(t.events.click=t.action);for(var r in t.events)if({}.hasOwnProperty.call(t.events,r)){var o=t.events[r];"string"==typeof o&&!function(){var t=o;o=function(){return n.tour.show(t)}}(),e.addEventListener(r,o)}this.on("destroy",function(){for(var n in t.events)if({}.hasOwnProperty.call(t.events,n)){var i=t.events[n];e.removeEventListener(n,i)}})}}]),p}(f),T=function(t){function r(){var t=this,n=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];e(this,r),d(Object.getPrototypeOf(r.prototype),"constructor",this).call(this,n),this.bindMethods(),this.options=n,this.steps=this.options.steps||[];var i=["complete","cancel","hide","start","show","active","inactive"];return i.map(function(e){!function(e){t.on(e,function(n){n=n||{},n.tour=t,w.trigger(e,n)})}(e)}),this}return n(r,t),u(r,[{key:"bindMethods",value:function(){var t=this,e=["next","back","cancel","complete","hide"];e.map(function(e){t[e]=t[e].bind(t)})}},{key:"addStep",value:function(t,e){return i(e)&&(e=t),e instanceof O?e.tour=this:("string"!=typeof t&&"number"!=typeof t||(e.id=t.toString()),e=m({},this.options.defaults,e),e=new O(this,e)),this.steps.push(e),this}},{key:"removeStep",value:function(t){for(var e=this.getCurrentStep(),n=0;n<this.steps.length;++n){var i=this.steps[n];if(i.id===t){i.isOpen()&&i.hide(),i.destroy(),this.steps.splice(n,1);break}}e&&e.id===t&&(this.currentStep=void 0,this.steps.length?this.show(0):this.hide())}},{key:"getById",value:function(t){for(var e=0;e<this.steps.length;++e){var n=this.steps[e];if(n.id===t)return n}}},{key:"getCurrentStep",value:function(){return this.currentStep}},{key:"next",value:function(){var t=this.steps.indexOf(this.currentStep);t===this.steps.length-1?(this.hide(t),this.trigger("complete"),this.done()):this.show(t+1,!0)}},{key:"back",value:function(){var t=this.steps.indexOf(this.currentStep);this.show(t-1,!1)}},{key:"cancel",value:function(){this.currentStep&&this.currentStep.hide(),this.trigger("cancel"),this.done()}},{key:"complete",value:function(){this.currentStep&&this.currentStep.hide(),this.trigger("complete"),this.done()}},{key:"hide",value:function(){this.currentStep&&this.currentStep.hide(),this.trigger("hide"),this.done()}},{key:"done",value:function(){w.activeTour=null,g(document.body,"shepherd-active"),this.trigger("inactive",{tour:this})}},{key:"show",value:function(){var t=arguments.length<=0||void 0===arguments[0]?0:arguments[0],e=arguments.length<=1||void 0===arguments[1]||arguments[1];this.currentStep?this.currentStep.hide():(v(document.body,"shepherd-active"),this.trigger("active",{tour:this})),w.activeTour=this;var n=void 0;if(n="string"==typeof t?this.getById(t):this.steps[t])if(i(n.options.showOn)||n.options.showOn())this.trigger("show",{step:n,previous:this.currentStep}),this.currentStep&&this.currentStep.hide(),this.currentStep=n,n.show();else{var r=this.steps.indexOf(n),o=e?r+1:r-1;this.show(o,e)}}},{key:"start",value:function(){this.trigger("start"),this.currentStep=null,this.next()}}]),r}(f);return m(w,{Tour:T,Step:O,Evented:f}),w});
admin/assets/tether-shepherd/tether.js ADDED
@@ -0,0 +1,1443 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*! tether 0.6.5 */
2
+
3
+
4
+ (function(root, factory) {
5
+ if (typeof define === 'function' && define.amd) {
6
+ define(factory);
7
+ } else if (typeof exports === 'object') {
8
+ module.exports = factory(require,exports,module);
9
+ } else {
10
+ root.Tether = factory();
11
+ }
12
+ }(this, function(require,exports,module) {
13
+
14
+ (function() {
15
+ var Evented, addClass, defer, deferred, extend, flush, getBounds, getOffsetParent, getOrigin, getScrollBarSize, getScrollParent, hasClass, node, removeClass, uniqueId, updateClasses, zeroPosCache,
16
+ __hasProp = {}.hasOwnProperty,
17
+ __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
18
+ __slice = [].slice;
19
+
20
+ if (this.Tether == null) {
21
+ this.Tether = {
22
+ modules: []
23
+ };
24
+ }
25
+
26
+ getScrollParent = function(el) {
27
+ var parent, position, scrollParent, style, _ref;
28
+ position = getComputedStyle(el).position;
29
+ if (position === 'fixed') {
30
+ return el;
31
+ }
32
+ scrollParent = void 0;
33
+ parent = el;
34
+ while (parent = parent.parentNode) {
35
+ try {
36
+ style = getComputedStyle(parent);
37
+ } catch (_error) {}
38
+ if (style == null) {
39
+ return parent;
40
+ }
41
+ if (/(auto|scroll)/.test(style['overflow'] + style['overflow-y'] + style['overflow-x'])) {
42
+ if (position !== 'absolute' || ((_ref = style['position']) === 'relative' || _ref === 'absolute' || _ref === 'fixed')) {
43
+ return parent;
44
+ }
45
+ }
46
+ }
47
+ return document.body;
48
+ };
49
+
50
+ uniqueId = (function() {
51
+ var id;
52
+ id = 0;
53
+ return function() {
54
+ return id++;
55
+ };
56
+ })();
57
+
58
+ zeroPosCache = {};
59
+
60
+ getOrigin = function(doc) {
61
+ var id, k, node, v, _ref;
62
+ node = doc._tetherZeroElement;
63
+ if (node == null) {
64
+ node = doc.createElement('div');
65
+ node.setAttribute('data-tether-id', uniqueId());
66
+ extend(node.style, {
67
+ top: 0,
68
+ left: 0,
69
+ position: 'absolute'
70
+ });
71
+ doc.body.appendChild(node);
72
+ doc._tetherZeroElement = node;
73
+ }
74
+ id = node.getAttribute('data-tether-id');
75
+ if (zeroPosCache[id] == null) {
76
+ zeroPosCache[id] = {};
77
+ _ref = node.getBoundingClientRect();
78
+ for (k in _ref) {
79
+ v = _ref[k];
80
+ zeroPosCache[id][k] = v;
81
+ }
82
+ defer(function() {
83
+ return zeroPosCache[id] = void 0;
84
+ });
85
+ }
86
+ return zeroPosCache[id];
87
+ };
88
+
89
+ node = null;
90
+
91
+ getBounds = function(el) {
92
+ var box, doc, docEl, k, origin, v, _ref;
93
+ if (el === document) {
94
+ doc = document;
95
+ el = document.documentElement;
96
+ } else {
97
+ doc = el.ownerDocument;
98
+ }
99
+ docEl = doc.documentElement;
100
+ box = {};
101
+ _ref = el.getBoundingClientRect();
102
+ for (k in _ref) {
103
+ v = _ref[k];
104
+ box[k] = v;
105
+ }
106
+ origin = getOrigin(doc);
107
+ box.top -= origin.top;
108
+ box.left -= origin.left;
109
+ if (box.width == null) {
110
+ box.width = document.body.scrollWidth - box.left - box.right;
111
+ }
112
+ if (box.height == null) {
113
+ box.height = document.body.scrollHeight - box.top - box.bottom;
114
+ }
115
+ box.top = box.top - docEl.clientTop;
116
+ box.left = box.left - docEl.clientLeft;
117
+ box.right = doc.body.clientWidth - box.width - box.left;
118
+ box.bottom = doc.body.clientHeight - box.height - box.top;
119
+ return box;
120
+ };
121
+
122
+ getOffsetParent = function(el) {
123
+ return el.offsetParent || document.documentElement;
124
+ };
125
+
126
+ getScrollBarSize = function() {
127
+ var inner, outer, width, widthContained, widthScroll;
128
+ inner = document.createElement('div');
129
+ inner.style.width = '100%';
130
+ inner.style.height = '200px';
131
+ outer = document.createElement('div');
132
+ extend(outer.style, {
133
+ position: 'absolute',
134
+ top: 0,
135
+ left: 0,
136
+ pointerEvents: 'none',
137
+ visibility: 'hidden',
138
+ width: '200px',
139
+ height: '150px',
140
+ overflow: 'hidden'
141
+ });
142
+ outer.appendChild(inner);
143
+ document.body.appendChild(outer);
144
+ widthContained = inner.offsetWidth;
145
+ outer.style.overflow = 'scroll';
146
+ widthScroll = inner.offsetWidth;
147
+ if (widthContained === widthScroll) {
148
+ widthScroll = outer.clientWidth;
149
+ }
150
+ document.body.removeChild(outer);
151
+ width = widthContained - widthScroll;
152
+ return {
153
+ width: width,
154
+ height: width
155
+ };
156
+ };
157
+
158
+ extend = function(out) {
159
+ var args, key, obj, val, _i, _len, _ref;
160
+ if (out == null) {
161
+ out = {};
162
+ }
163
+ args = [];
164
+ Array.prototype.push.apply(args, arguments);
165
+ _ref = args.slice(1);
166
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
167
+ obj = _ref[_i];
168
+ if (obj) {
169
+ for (key in obj) {
170
+ if (!__hasProp.call(obj, key)) continue;
171
+ val = obj[key];
172
+ out[key] = val;
173
+ }
174
+ }
175
+ }
176
+ return out;
177
+ };
178
+
179
+ removeClass = function(el, name) {
180
+ var cls, _i, _len, _ref, _results;
181
+ if (el.classList != null) {
182
+ _ref = name.split(' ');
183
+ _results = [];
184
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
185
+ cls = _ref[_i];
186
+ if (cls.trim()) {
187
+ _results.push(el.classList.remove(cls));
188
+ }
189
+ }
190
+ return _results;
191
+ } else {
192
+ return el.className = el.className.replace(new RegExp("(^| )" + (name.split(' ').join('|')) + "( |$)", 'gi'), ' ');
193
+ }
194
+ };
195
+
196
+ addClass = function(el, name) {
197
+ var cls, _i, _len, _ref, _results;
198
+ if (el.classList != null) {
199
+ _ref = name.split(' ');
200
+ _results = [];
201
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
202
+ cls = _ref[_i];
203
+ if (cls.trim()) {
204
+ _results.push(el.classList.add(cls));
205
+ }
206
+ }
207
+ return _results;
208
+ } else {
209
+ removeClass(el, name);
210
+ return el.className += " " + name;
211
+ }
212
+ };
213
+
214
+ hasClass = function(el, name) {
215
+ if (el.classList != null) {
216
+ return el.classList.contains(name);
217
+ } else {
218
+ return new RegExp("(^| )" + name + "( |$)", 'gi').test(el.className);
219
+ }
220
+ };
221
+
222
+ updateClasses = function(el, add, all) {
223
+ var cls, _i, _j, _len, _len1, _results;
224
+ for (_i = 0, _len = all.length; _i < _len; _i++) {
225
+ cls = all[_i];
226
+ if (__indexOf.call(add, cls) < 0) {
227
+ if (hasClass(el, cls)) {
228
+ removeClass(el, cls);
229
+ }
230
+ }
231
+ }
232
+ _results = [];
233
+ for (_j = 0, _len1 = add.length; _j < _len1; _j++) {
234
+ cls = add[_j];
235
+ if (!hasClass(el, cls)) {
236
+ _results.push(addClass(el, cls));
237
+ } else {
238
+ _results.push(void 0);
239
+ }
240
+ }
241
+ return _results;
242
+ };
243
+
244
+ deferred = [];
245
+
246
+ defer = function(fn) {
247
+ return deferred.push(fn);
248
+ };
249
+
250
+ flush = function() {
251
+ var fn, _results;
252
+ _results = [];
253
+ while (fn = deferred.pop()) {
254
+ _results.push(fn());
255
+ }
256
+ return _results;
257
+ };
258
+
259
+ Evented = (function() {
260
+ function Evented() {}
261
+
262
+ Evented.prototype.on = function(event, handler, ctx, once) {
263
+ var _base;
264
+ if (once == null) {
265
+ once = false;
266
+ }
267
+ if (this.bindings == null) {
268
+ this.bindings = {};
269
+ }
270
+ if ((_base = this.bindings)[event] == null) {
271
+ _base[event] = [];
272
+ }
273
+ return this.bindings[event].push({
274
+ handler: handler,
275
+ ctx: ctx,
276
+ once: once
277
+ });
278
+ };
279
+
280
+ Evented.prototype.once = function(event, handler, ctx) {
281
+ return this.on(event, handler, ctx, true);
282
+ };
283
+
284
+ Evented.prototype.off = function(event, handler) {
285
+ var i, _ref, _results;
286
+ if (((_ref = this.bindings) != null ? _ref[event] : void 0) == null) {
287
+ return;
288
+ }
289
+ if (handler == null) {
290
+ return delete this.bindings[event];
291
+ } else {
292
+ i = 0;
293
+ _results = [];
294
+ while (i < this.bindings[event].length) {
295
+ if (this.bindings[event][i].handler === handler) {
296
+ _results.push(this.bindings[event].splice(i, 1));
297
+ } else {
298
+ _results.push(i++);
299
+ }
300
+ }
301
+ return _results;
302
+ }
303
+ };
304
+
305
+ Evented.prototype.trigger = function() {
306
+ var args, ctx, event, handler, i, once, _ref, _ref1, _results;
307
+ event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
308
+ if ((_ref = this.bindings) != null ? _ref[event] : void 0) {
309
+ i = 0;
310
+ _results = [];
311
+ while (i < this.bindings[event].length) {
312
+ _ref1 = this.bindings[event][i], handler = _ref1.handler, ctx = _ref1.ctx, once = _ref1.once;
313
+ handler.apply(ctx != null ? ctx : this, args);
314
+ if (once) {
315
+ _results.push(this.bindings[event].splice(i, 1));
316
+ } else {
317
+ _results.push(i++);
318
+ }
319
+ }
320
+ return _results;
321
+ }
322
+ };
323
+
324
+ return Evented;
325
+
326
+ })();
327
+
328
+ this.Tether.Utils = {
329
+ getScrollParent: getScrollParent,
330
+ getBounds: getBounds,
331
+ getOffsetParent: getOffsetParent,
332
+ extend: extend,
333
+ addClass: addClass,
334
+ removeClass: removeClass,
335
+ hasClass: hasClass,
336
+ updateClasses: updateClasses,
337
+ defer: defer,
338
+ flush: flush,
339
+ uniqueId: uniqueId,
340
+ Evented: Evented,
341
+ getScrollBarSize: getScrollBarSize
342
+ };
343
+
344
+ }).call(this);
345
+
346
+ (function() {
347
+ var MIRROR_LR, MIRROR_TB, OFFSET_MAP, Tether, addClass, addOffset, attachmentToOffset, autoToFixedAttachment, defer, extend, flush, getBounds, getOffsetParent, getOuterSize, getScrollBarSize, getScrollParent, getSize, now, offsetToPx, parseAttachment, parseOffset, position, removeClass, tethers, transformKey, updateClasses, within, _Tether, _ref,
348
+ __slice = [].slice,
349
+ __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
350
+
351
+ if (this.Tether == null) {
352
+ throw new Error("You must include the utils.js file before tether.js");
353
+ }
354
+
355
+ Tether = this.Tether;
356
+
357
+ _ref = Tether.Utils, getScrollParent = _ref.getScrollParent, getSize = _ref.getSize, getOuterSize = _ref.getOuterSize, getBounds = _ref.getBounds, getOffsetParent = _ref.getOffsetParent, extend = _ref.extend, addClass = _ref.addClass, removeClass = _ref.removeClass, updateClasses = _ref.updateClasses, defer = _ref.defer, flush = _ref.flush, getScrollBarSize = _ref.getScrollBarSize;
358
+
359
+ within = function(a, b, diff) {
360
+ if (diff == null) {
361
+ diff = 1;
362
+ }
363
+ return (a + diff >= b && b >= a - diff);
364
+ };
365
+
366
+ transformKey = (function() {
367
+ var el, key, _i, _len, _ref1;
368
+ el = document.createElement('div');
369
+ _ref1 = ['transform', 'webkitTransform', 'OTransform', 'MozTransform', 'msTransform'];
370
+ for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
371
+ key = _ref1[_i];
372
+ if (el.style[key] !== void 0) {
373
+ return key;
374
+ }
375
+ }
376
+ })();
377
+
378
+ tethers = [];
379
+
380
+ position = function() {
381
+ var tether, _i, _len;
382
+ for (_i = 0, _len = tethers.length; _i < _len; _i++) {
383
+ tether = tethers[_i];
384
+ tether.position(false);
385
+ }
386
+ return flush();
387
+ };
388
+
389
+ now = function() {
390
+ var _ref1;
391
+ return (_ref1 = typeof performance !== "undefined" && performance !== null ? typeof performance.now === "function" ? performance.now() : void 0 : void 0) != null ? _ref1 : +(new Date);
392
+ };
393
+
394
+ (function() {
395
+ var event, lastCall, lastDuration, pendingTimeout, tick, _i, _len, _ref1, _results;
396
+ lastCall = null;
397
+ lastDuration = null;
398
+ pendingTimeout = null;
399
+ tick = function() {
400
+ if ((lastDuration != null) && lastDuration > 16) {
401
+ lastDuration = Math.min(lastDuration - 16, 250);
402
+ pendingTimeout = setTimeout(tick, 250);
403
+ return;
404
+ }
405
+ if ((lastCall != null) && (now() - lastCall) < 10) {
406
+ return;
407
+ }
408
+ if (pendingTimeout != null) {
409
+ clearTimeout(pendingTimeout);
410
+ pendingTimeout = null;
411
+ }
412
+ lastCall = now();
413
+ position();
414
+ return lastDuration = now() - lastCall;
415
+ };
416
+ _ref1 = ['resize', 'scroll', 'touchmove'];
417
+ _results = [];
418
+ for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
419
+ event = _ref1[_i];
420
+ _results.push(window.addEventListener(event, tick));
421
+ }
422
+ return _results;
423
+ })();
424
+
425
+ MIRROR_LR = {
426
+ center: 'center',
427
+ left: 'right',
428
+ right: 'left'
429
+ };
430
+
431
+ MIRROR_TB = {
432
+ middle: 'middle',
433
+ top: 'bottom',
434
+ bottom: 'top'
435
+ };
436
+
437
+ OFFSET_MAP = {
438
+ top: 0,
439
+ left: 0,
440
+ middle: '50%',
441
+ center: '50%',
442
+ bottom: '100%',
443
+ right: '100%'
444
+ };
445
+
446
+ autoToFixedAttachment = function(attachment, relativeToAttachment) {
447
+ var left, top;
448
+ left = attachment.left, top = attachment.top;
449
+ if (left === 'auto') {
450
+ left = MIRROR_LR[relativeToAttachment.left];
451
+ }
452
+ if (top === 'auto') {
453
+ top = MIRROR_TB[relativeToAttachment.top];
454
+ }
455
+ return {
456
+ left: left,
457
+ top: top
458
+ };
459
+ };
460
+
461
+ attachmentToOffset = function(attachment) {
462
+ var _ref1, _ref2;
463
+ return {
464
+ left: (_ref1 = OFFSET_MAP[attachment.left]) != null ? _ref1 : attachment.left,
465
+ top: (_ref2 = OFFSET_MAP[attachment.top]) != null ? _ref2 : attachment.top
466
+ };
467
+ };
468
+
469
+ addOffset = function() {
470
+ var left, offsets, out, top, _i, _len, _ref1;
471
+ offsets = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
472
+ out = {
473
+ top: 0,
474
+ left: 0
475
+ };
476
+ for (_i = 0, _len = offsets.length; _i < _len; _i++) {
477
+ _ref1 = offsets[_i], top = _ref1.top, left = _ref1.left;
478
+ if (typeof top === 'string') {
479
+ top = parseFloat(top, 10);
480
+ }
481
+ if (typeof left === 'string') {
482
+ left = parseFloat(left, 10);
483
+ }
484
+ out.top += top;
485
+ out.left += left;
486
+ }
487
+ return out;
488
+ };
489
+
490
+ offsetToPx = function(offset, size) {
491
+ if (typeof offset.left === 'string' && offset.left.indexOf('%') !== -1) {
492
+ offset.left = parseFloat(offset.left, 10) / 100 * size.width;
493
+ }
494
+ if (typeof offset.top === 'string' && offset.top.indexOf('%') !== -1) {
495
+ offset.top = parseFloat(offset.top, 10) / 100 * size.height;
496
+ }
497
+ return offset;
498
+ };
499
+
500
+ parseAttachment = parseOffset = function(value) {
501
+ var left, top, _ref1;
502
+ _ref1 = value.split(' '), top = _ref1[0], left = _ref1[1];
503
+ return {
504
+ top: top,
505
+ left: left
506
+ };
507
+ };
508
+
509
+ _Tether = (function() {
510
+ _Tether.modules = [];
511
+
512
+ function _Tether(options) {
513
+ this.position = __bind(this.position, this);
514
+ var module, _i, _len, _ref1, _ref2;
515
+ tethers.push(this);
516
+ this.history = [];
517
+ this.setOptions(options, false);
518
+ _ref1 = Tether.modules;
519
+ for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
520
+ module = _ref1[_i];
521
+ if ((_ref2 = module.initialize) != null) {
522
+ _ref2.call(this);
523
+ }
524
+ }
525
+ this.position();
526
+ }
527
+
528
+ _Tether.prototype.getClass = function(key) {
529
+ var _ref1, _ref2;
530
+ if ((_ref1 = this.options.classes) != null ? _ref1[key] : void 0) {
531
+ return this.options.classes[key];
532
+ } else if (((_ref2 = this.options.classes) != null ? _ref2[key] : void 0) !== false) {
533
+ if (this.options.classPrefix) {
534
+ return "" + this.options.classPrefix + "-" + key;
535
+ } else {
536
+ return key;
537
+ }
538
+ } else {
539
+ return '';
540
+ }
541
+ };
542
+
543
+ _Tether.prototype.setOptions = function(options, position) {
544
+ var defaults, key, _i, _len, _ref1, _ref2;
545
+ this.options = options;
546
+ if (position == null) {
547
+ position = true;
548
+ }
549
+ defaults = {
550
+ offset: '0 0',
551
+ targetOffset: '0 0',
552
+ targetAttachment: 'auto auto',
553
+ classPrefix: 'tether'
554
+ };
555
+ this.options = extend(defaults, this.options);
556
+ _ref1 = this.options, this.element = _ref1.element, this.target = _ref1.target, this.targetModifier = _ref1.targetModifier;
557
+ if (this.target === 'viewport') {
558
+ this.target = document.body;
559
+ this.targetModifier = 'visible';
560
+ } else if (this.target === 'scroll-handle') {
561
+ this.target = document.body;
562
+ this.targetModifier = 'scroll-handle';
563
+ }
564
+ _ref2 = ['element', 'target'];
565
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
566
+ key = _ref2[_i];
567
+ if (this[key] == null) {
568
+ throw new Error("Tether Error: Both element and target must be defined");
569
+ }
570
+ if (this[key].jquery != null) {
571
+ this[key] = this[key][0];
572
+ } else if (typeof this[key] === 'string') {
573
+ this[key] = document.querySelector(this[key]);
574
+ }
575
+ }
576
+ addClass(this.element, this.getClass('element'));
577
+ addClass(this.target, this.getClass('target'));
578
+ if (!this.options.attachment) {
579
+ throw new Error("Tether Error: You must provide an attachment");
580
+ }
581
+ this.targetAttachment = parseAttachment(this.options.targetAttachment);
582
+ this.attachment = parseAttachment(this.options.attachment);
583
+ this.offset = parseOffset(this.options.offset);
584
+ this.targetOffset = parseOffset(this.options.targetOffset);
585
+ if (this.scrollParent != null) {
586
+ this.disable();
587
+ }
588
+ if (this.targetModifier === 'scroll-handle') {
589
+ this.scrollParent = this.target;
590
+ } else {
591
+ this.scrollParent = getScrollParent(this.target);
592
+ }
593
+ if (this.options.enabled !== false) {
594
+ return this.enable(position);
595
+ }
596
+ };
597
+
598
+ _Tether.prototype.getTargetBounds = function() {
599
+ var bounds, fitAdj, hasBottomScroll, height, out, scrollBottom, scrollPercentage, style, target;
600
+ if (this.targetModifier != null) {
601
+ switch (this.targetModifier) {
602
+ case 'visible':
603
+ if (this.target === document.body) {
604
+ return {
605
+ top: pageYOffset,
606
+ left: pageXOffset,
607
+ height: innerHeight,
608
+ width: innerWidth
609
+ };
610
+ } else {
611
+ bounds = getBounds(this.target);
612
+ out = {
613
+ height: bounds.height,
614
+ width: bounds.width,
615
+ top: bounds.top,
616
+ left: bounds.left
617
+ };
618
+ out.height = Math.min(out.height, bounds.height - (pageYOffset - bounds.top));
619
+ out.height = Math.min(out.height, bounds.height - ((bounds.top + bounds.height) - (pageYOffset + innerHeight)));
620
+ out.height = Math.min(innerHeight, out.height);
621
+ out.height -= 2;
622
+ out.width = Math.min(out.width, bounds.width - (pageXOffset - bounds.left));
623
+ out.width = Math.min(out.width, bounds.width - ((bounds.left + bounds.width) - (pageXOffset + innerWidth)));
624
+ out.width = Math.min(innerWidth, out.width);
625
+ out.width -= 2;
626
+ if (out.top < pageYOffset) {
627
+ out.top = pageYOffset;
628
+ }
629
+ if (out.left < pageXOffset) {
630
+ out.left = pageXOffset;
631
+ }
632
+ return out;
633
+ }
634
+ break;
635
+ case 'scroll-handle':
636
+ target = this.target;
637
+ if (target === document.body) {
638
+ target = document.documentElement;
639
+ bounds = {
640
+ left: pageXOffset,
641
+ top: pageYOffset,
642
+ height: innerHeight,
643
+ width: innerWidth
644
+ };
645
+ } else {
646
+ bounds = getBounds(target);
647
+ }
648
+ style = getComputedStyle(target);
649
+ hasBottomScroll = target.scrollWidth > target.clientWidth || 'scroll' === [style.overflow, style.overflowX] || this.target !== document.body;
650
+ scrollBottom = 0;
651
+ if (hasBottomScroll) {
652
+ scrollBottom = 15;
653
+ }
654
+ height = bounds.height - parseFloat(style.borderTopWidth) - parseFloat(style.borderBottomWidth) - scrollBottom;
655
+ out = {
656
+ width: 15,
657
+ height: height * 0.975 * (height / target.scrollHeight),
658
+ left: bounds.left + bounds.width - parseFloat(style.borderLeftWidth) - 15
659
+ };
660
+ fitAdj = 0;
661
+ if (height < 408 && this.target === document.body) {
662
+ fitAdj = -0.00011 * Math.pow(height, 2) - 0.00727 * height + 22.58;
663
+ }
664
+ if (this.target !== document.body) {
665
+ out.height = Math.max(out.height, 24);
666
+ }
667
+ scrollPercentage = this.target.scrollTop / (target.scrollHeight - height);
668
+ out.top = scrollPercentage * (height - out.height - fitAdj) + bounds.top + parseFloat(style.borderTopWidth);
669
+ if (this.target === document.body) {
670
+ out.height = Math.max(out.height, 24);
671
+ }
672
+ return out;
673
+ }
674
+ } else {
675
+ return getBounds(this.target);
676
+ }
677
+ };
678
+
679
+ _Tether.prototype.clearCache = function() {
680
+ return this._cache = {};
681
+ };
682
+
683
+ _Tether.prototype.cache = function(k, getter) {
684
+ if (this._cache == null) {
685
+ this._cache = {};
686
+ }
687
+ if (this._cache[k] == null) {
688
+ this._cache[k] = getter.call(this);
689
+ }
690
+ return this._cache[k];
691
+ };
692
+
693
+ _Tether.prototype.enable = function(position) {
694
+ if (position == null) {
695
+ position = true;
696
+ }
697
+ addClass(this.target, this.getClass('enabled'));
698
+ addClass(this.element, this.getClass('enabled'));
699
+ this.enabled = true;
700
+ if (this.scrollParent !== document) {
701
+ this.scrollParent.addEventListener('scroll', this.position);
702
+ }
703
+ if (position) {
704
+ return this.position();
705
+ }
706
+ };
707
+
708
+ _Tether.prototype.disable = function() {
709
+ removeClass(this.target, this.getClass('enabled'));
710
+ removeClass(this.element, this.getClass('enabled'));
711
+ this.enabled = false;
712
+ if (this.scrollParent != null) {
713
+ return this.scrollParent.removeEventListener('scroll', this.position);
714
+ }
715
+ };
716
+
717
+ _Tether.prototype.destroy = function() {
718
+ var i, tether, _i, _len, _results;
719
+ this.disable();
720
+ _results = [];
721
+ for (i = _i = 0, _len = tethers.length; _i < _len; i = ++_i) {
722
+ tether = tethers[i];
723
+ if (tether === this) {
724
+ tethers.splice(i, 1);
725
+ break;
726
+ } else {
727
+ _results.push(void 0);
728
+ }
729
+ }
730
+ return _results;
731
+ };
732
+
733
+ _Tether.prototype.updateAttachClasses = function(elementAttach, targetAttach) {
734
+ var add, all, side, sides, _i, _j, _len, _len1, _ref1,
735
+ _this = this;
736
+ if (elementAttach == null) {
737
+ elementAttach = this.attachment;
738
+ }
739
+ if (targetAttach == null) {
740
+ targetAttach = this.targetAttachment;
741
+ }
742
+ sides = ['left', 'top', 'bottom', 'right', 'middle', 'center'];
743
+ if ((_ref1 = this._addAttachClasses) != null ? _ref1.length : void 0) {
744
+ this._addAttachClasses.splice(0, this._addAttachClasses.length);
745
+ }
746
+ add = this._addAttachClasses != null ? this._addAttachClasses : this._addAttachClasses = [];
747
+ if (elementAttach.top) {
748
+ add.push("" + (this.getClass('element-attached')) + "-" + elementAttach.top);
749
+ }
750
+ if (elementAttach.left) {
751
+ add.push("" + (this.getClass('element-attached')) + "-" + elementAttach.left);
752
+ }
753
+ if (targetAttach.top) {
754
+ add.push("" + (this.getClass('target-attached')) + "-" + targetAttach.top);
755
+ }
756
+ if (targetAttach.left) {
757
+ add.push("" + (this.getClass('target-attached')) + "-" + targetAttach.left);
758
+ }
759
+ all = [];
760
+ for (_i = 0, _len = sides.length; _i < _len; _i++) {
761
+ side = sides[_i];
762
+ all.push("" + (this.getClass('element-attached')) + "-" + side);
763
+ }
764
+ for (_j = 0, _len1 = sides.length; _j < _len1; _j++) {
765
+ side = sides[_j];
766
+ all.push("" + (this.getClass('target-attached')) + "-" + side);
767
+ }
768
+ return defer(function() {
769
+ if (_this._addAttachClasses == null) {
770
+ return;
771
+ }
772
+ updateClasses(_this.element, _this._addAttachClasses, all);
773
+ updateClasses(_this.target, _this._addAttachClasses, all);
774
+ return _this._addAttachClasses = void 0;
775
+ });
776
+ };
777
+
778
+ _Tether.prototype.position = function(flushChanges) {
779
+ var elementPos, elementStyle, height, left, manualOffset, manualTargetOffset, module, next, offset, offsetBorder, offsetParent, offsetParentSize, offsetParentStyle, offsetPosition, ret, scrollLeft, scrollTop, scrollbarSize, side, targetAttachment, targetOffset, targetPos, targetSize, top, width, _i, _j, _len, _len1, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6,
780
+ _this = this;
781
+ if (flushChanges == null) {
782
+ flushChanges = true;
783
+ }
784
+ if (!this.enabled) {
785
+ return;
786
+ }
787
+ this.clearCache();
788
+ targetAttachment = autoToFixedAttachment(this.targetAttachment, this.attachment);
789
+ this.updateAttachClasses(this.attachment, targetAttachment);
790
+ elementPos = this.cache('element-bounds', function() {
791
+ return getBounds(_this.element);
792
+ });
793
+ width = elementPos.width, height = elementPos.height;
794
+ if (width === 0 && height === 0 && (this.lastSize != null)) {
795
+ _ref1 = this.lastSize, width = _ref1.width, height = _ref1.height;
796
+ } else {
797
+ this.lastSize = {
798
+ width: width,
799
+ height: height
800
+ };
801
+ }
802
+ targetSize = targetPos = this.cache('target-bounds', function() {
803
+ return _this.getTargetBounds();
804
+ });
805
+ offset = offsetToPx(attachmentToOffset(this.attachment), {
806
+ width: width,
807
+ height: height
808
+ });
809
+ targetOffset = offsetToPx(attachmentToOffset(targetAttachment), targetSize);
810
+ manualOffset = offsetToPx(this.offset, {
811
+ width: width,
812
+ height: height
813
+ });
814
+ manualTargetOffset = offsetToPx(this.targetOffset, targetSize);
815
+ offset = addOffset(offset, manualOffset);
816
+ targetOffset = addOffset(targetOffset, manualTargetOffset);
817
+ left = targetPos.left + targetOffset.left - offset.left;
818
+ top = targetPos.top + targetOffset.top - offset.top;
819
+ _ref2 = Tether.modules;
820
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
821
+ module = _ref2[_i];
822
+ ret = module.position.call(this, {
823
+ left: left,
824
+ top: top,
825
+ targetAttachment: targetAttachment,
826
+ targetPos: targetPos,
827
+ attachment: this.attachment,
828
+ elementPos: elementPos,
829
+ offset: offset,
830
+ targetOffset: targetOffset,
831
+ manualOffset: manualOffset,
832
+ manualTargetOffset: manualTargetOffset,
833
+ scrollbarSize: scrollbarSize
834
+ });
835
+ if ((ret == null) || typeof ret !== 'object') {
836
+ continue;
837
+ } else if (ret === false) {
838
+ return false;
839
+ } else {
840
+ top = ret.top, left = ret.left;
841
+ }
842
+ }
843
+ next = {
844
+ page: {
845
+ top: top,
846
+ left: left
847
+ },
848
+ viewport: {
849
+ top: top - pageYOffset,
850
+ bottom: pageYOffset - top - height + innerHeight,
851
+ left: left - pageXOffset,
852
+ right: pageXOffset - left - width + innerWidth
853
+ }
854
+ };
855
+ if (document.body.scrollWidth > window.innerWidth) {
856
+ scrollbarSize = this.cache('scrollbar-size', getScrollBarSize);
857
+ next.viewport.bottom -= scrollbarSize.height;
858
+ }
859
+ if (document.body.scrollHeight > window.innerHeight) {
860
+ scrollbarSize = this.cache('scrollbar-size', getScrollBarSize);
861
+ next.viewport.right -= scrollbarSize.width;
862
+ }
863
+ if (((_ref3 = document.body.style.position) !== '' && _ref3 !== 'static') || ((_ref4 = document.body.parentElement.style.position) !== '' && _ref4 !== 'static')) {
864
+ next.page.bottom = document.body.scrollHeight - top - height;
865
+ next.page.right = document.body.scrollWidth - left - width;
866
+ }
867
+ if (((_ref5 = this.options.optimizations) != null ? _ref5.moveElement : void 0) !== false && (this.targetModifier == null)) {
868
+ offsetParent = this.cache('target-offsetparent', function() {
869
+ return getOffsetParent(_this.target);
870
+ });
871
+ offsetPosition = this.cache('target-offsetparent-bounds', function() {
872
+ return getBounds(offsetParent);
873
+ });
874
+ offsetParentStyle = getComputedStyle(offsetParent);
875
+ elementStyle = getComputedStyle(this.element);
876
+ offsetParentSize = offsetPosition;
877
+ offsetBorder = {};
878
+ _ref6 = ['Top', 'Left', 'Bottom', 'Right'];
879
+ for (_j = 0, _len1 = _ref6.length; _j < _len1; _j++) {
880
+ side = _ref6[_j];
881
+ offsetBorder[side.toLowerCase()] = parseFloat(offsetParentStyle["border" + side + "Width"]);
882
+ }
883
+ offsetPosition.right = document.body.scrollWidth - offsetPosition.left - offsetParentSize.width + offsetBorder.right;
884
+ offsetPosition.bottom = document.body.scrollHeight - offsetPosition.top - offsetParentSize.height + offsetBorder.bottom;
885
+ if (next.page.top >= (offsetPosition.top + offsetBorder.top) && next.page.bottom >= offsetPosition.bottom) {
886
+ if (next.page.left >= (offsetPosition.left + offsetBorder.left) && next.page.right >= offsetPosition.right) {
887
+ scrollTop = offsetParent.scrollTop;
888
+ scrollLeft = offsetParent.scrollLeft;
889
+ next.offset = {
890
+ top: next.page.top - offsetPosition.top + scrollTop - offsetBorder.top,
891
+ left: next.page.left - offsetPosition.left + scrollLeft - offsetBorder.left
892
+ };
893
+ }
894
+ }
895
+ }
896
+ this.move(next);
897
+ this.history.unshift(next);
898
+ if (this.history.length > 3) {
899
+ this.history.pop();
900
+ }
901
+ if (flushChanges) {
902
+ flush();
903
+ }
904
+ return true;
905
+ };
906
+
907
+ _Tether.prototype.move = function(position) {
908
+ var css, elVal, found, key, moved, offsetParent, point, same, transcribe, type, val, write, writeCSS, _i, _len, _ref1, _ref2,
909
+ _this = this;
910
+ if (this.element.parentNode == null) {
911
+ return;
912
+ }
913
+ same = {};
914
+ for (type in position) {
915
+ same[type] = {};
916
+ for (key in position[type]) {
917
+ found = false;
918
+ _ref1 = this.history;
919
+ for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
920
+ point = _ref1[_i];
921
+ if (!within((_ref2 = point[type]) != null ? _ref2[key] : void 0, position[type][key])) {
922
+ found = true;
923
+ break;
924
+ }
925
+ }
926
+ if (!found) {
927
+ same[type][key] = true;
928
+ }
929
+ }
930
+ }
931
+ css = {
932
+ top: '',
933
+ left: '',
934
+ right: '',
935
+ bottom: ''
936
+ };
937
+ transcribe = function(same, pos) {
938
+ var xPos, yPos, _ref3;
939
+ if (((_ref3 = _this.options.optimizations) != null ? _ref3.gpu : void 0) !== false) {
940
+ if (same.top) {
941
+ css.top = 0;
942
+ yPos = pos.top;
943
+ } else {
944
+ css.bottom = 0;
945
+ yPos = -pos.bottom;
946
+ }
947
+ if (same.left) {
948
+ css.left = 0;
949
+ xPos = pos.left;
950
+ } else {
951
+ css.right = 0;
952
+ xPos = -pos.right;
953
+ }
954
+ css[transformKey] = "translateX(" + (Math.round(xPos)) + "px) translateY(" + (Math.round(yPos)) + "px)";
955
+ if (transformKey !== 'msTransform') {
956
+ return css[transformKey] += " translateZ(0)";
957
+ }
958
+ } else {
959
+ if (same.top) {
960
+ css.top = "" + pos.top + "px";
961
+ } else {
962
+ css.bottom = "" + pos.bottom + "px";
963
+ }
964
+ if (same.left) {
965
+ return css.left = "" + pos.left + "px";
966
+ } else {
967
+ return css.right = "" + pos.right + "px";
968
+ }
969
+ }
970
+ };
971
+ moved = false;
972
+ if ((same.page.top || same.page.bottom) && (same.page.left || same.page.right)) {
973
+ css.position = 'absolute';
974
+ transcribe(same.page, position.page);
975
+ } else if ((same.viewport.top || same.viewport.bottom) && (same.viewport.left || same.viewport.right)) {
976
+ css.position = 'fixed';
977
+ transcribe(same.viewport, position.viewport);
978
+ } else if ((same.offset != null) && same.offset.top && same.offset.left) {
979
+ css.position = 'absolute';
980
+ offsetParent = this.cache('target-offsetparent', function() {
981
+ return getOffsetParent(_this.target);
982
+ });
983
+ if (getOffsetParent(this.element) !== offsetParent) {
984
+ defer(function() {
985
+ _this.element.parentNode.removeChild(_this.element);
986
+ return offsetParent.appendChild(_this.element);
987
+ });
988
+ }
989
+ transcribe(same.offset, position.offset);
990
+ moved = true;
991
+ } else {
992
+ css.position = 'absolute';
993
+ transcribe({
994
+ top: true,
995
+ left: true
996
+ }, position.page);
997
+ }
998
+ if (!moved && this.element.parentNode.tagName !== 'BODY') {
999
+ this.element.parentNode.removeChild(this.element);
1000
+ document.body.appendChild(this.element);
1001
+ }
1002
+ writeCSS = {};
1003
+ write = false;
1004
+ for (key in css) {
1005
+ val = css[key];
1006
+ elVal = this.element.style[key];
1007
+ if (elVal !== '' && val !== '' && (key === 'top' || key === 'left' || key === 'bottom' || key === 'right')) {
1008
+ elVal = parseFloat(elVal);
1009
+ val = parseFloat(val);
1010
+ }
1011
+ if (elVal !== val) {
1012
+ write = true;
1013
+ writeCSS[key] = css[key];
1014
+ }
1015
+ }
1016
+ if (write) {
1017
+ return defer(function() {
1018
+ return extend(_this.element.style, writeCSS);
1019
+ });
1020
+ }
1021
+ };
1022
+
1023
+ return _Tether;
1024
+
1025
+ })();
1026
+
1027
+ Tether.position = position;
1028
+
1029
+ this.Tether = extend(_Tether, Tether);
1030
+
1031
+ }).call(this);
1032
+
1033
+ (function() {
1034
+ var BOUNDS_FORMAT, MIRROR_ATTACH, defer, extend, getBoundingRect, getBounds, getOuterSize, getSize, updateClasses, _ref,
1035
+ __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
1036
+
1037
+ _ref = this.Tether.Utils, getOuterSize = _ref.getOuterSize, getBounds = _ref.getBounds, getSize = _ref.getSize, extend = _ref.extend, updateClasses = _ref.updateClasses, defer = _ref.defer;
1038
+
1039
+ MIRROR_ATTACH = {
1040
+ left: 'right',
1041
+ right: 'left',
1042
+ top: 'bottom',
1043
+ bottom: 'top',
1044
+ middle: 'middle'
1045
+ };
1046
+
1047
+ BOUNDS_FORMAT = ['left', 'top', 'right', 'bottom'];
1048
+
1049
+ getBoundingRect = function(tether, to) {
1050
+ var i, pos, side, size, style, _i, _len;
1051
+ if (to === 'scrollParent') {
1052
+ to = tether.scrollParent;
1053
+ } else if (to === 'window') {
1054
+ to = [pageXOffset, pageYOffset, innerWidth + pageXOffset, innerHeight + pageYOffset];
1055
+ }
1056
+ if (to === document) {
1057
+ to = to.documentElement;
1058
+ }
1059
+ if (to.nodeType != null) {
1060
+ pos = size = getBounds(to);
1061
+ style = getComputedStyle(to);
1062
+ to = [pos.left, pos.top, size.width + pos.left, size.height + pos.top];
1063
+ for (i = _i = 0, _len = BOUNDS_FORMAT.length; _i < _len; i = ++_i) {
1064
+ side = BOUNDS_FORMAT[i];
1065
+ side = side[0].toUpperCase() + side.substr(1);
1066
+ if (side === 'Top' || side === 'Left') {
1067
+ to[i] += parseFloat(style["border" + side + "Width"]);
1068
+ } else {
1069
+ to[i] -= parseFloat(style["border" + side + "Width"]);
1070
+ }
1071
+ }
1072
+ }
1073
+ return to;
1074
+ };
1075
+
1076
+ this.Tether.modules.push({
1077
+ position: function(_arg) {
1078
+ var addClasses, allClasses, attachment, bounds, changeAttachX, changeAttachY, cls, constraint, eAttachment, height, left, oob, oobClass, p, pin, pinned, pinnedClass, removeClass, side, tAttachment, targetAttachment, targetHeight, targetSize, targetWidth, to, top, width, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _m, _n, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8,
1079
+ _this = this;
1080
+ top = _arg.top, left = _arg.left, targetAttachment = _arg.targetAttachment;
1081
+ if (!this.options.constraints) {
1082
+ return true;
1083
+ }
1084
+ removeClass = function(prefix) {
1085
+ var side, _i, _len, _results;
1086
+ _this.removeClass(prefix);
1087
+ _results = [];
1088
+ for (_i = 0, _len = BOUNDS_FORMAT.length; _i < _len; _i++) {
1089
+ side = BOUNDS_FORMAT[_i];
1090
+ _results.push(_this.removeClass("" + prefix + "-" + side));
1091
+ }
1092
+ return _results;
1093
+ };
1094
+ _ref1 = this.cache('element-bounds', function() {
1095
+ return getBounds(_this.element);
1096
+ }), height = _ref1.height, width = _ref1.width;
1097
+ if (width === 0 && height === 0 && (this.lastSize != null)) {
1098
+ _ref2 = this.lastSize, width = _ref2.width, height = _ref2.height;
1099
+ }
1100
+ targetSize = this.cache('target-bounds', function() {
1101
+ return _this.getTargetBounds();
1102
+ });
1103
+ targetHeight = targetSize.height;
1104
+ targetWidth = targetSize.width;
1105
+ tAttachment = {};
1106
+ eAttachment = {};
1107
+ allClasses = [this.getClass('pinned'), this.getClass('out-of-bounds')];
1108
+ _ref3 = this.options.constraints;
1109
+ for (_i = 0, _len = _ref3.length; _i < _len; _i++) {
1110
+ constraint = _ref3[_i];
1111
+ if (constraint.outOfBoundsClass) {
1112
+ allClasses.push(constraint.outOfBoundsClass);
1113
+ }
1114
+ if (constraint.pinnedClass) {
1115
+ allClasses.push(constraint.pinnedClass);
1116
+ }
1117
+ }
1118
+ for (_j = 0, _len1 = allClasses.length; _j < _len1; _j++) {
1119
+ cls = allClasses[_j];
1120
+ _ref4 = ['left', 'top', 'right', 'bottom'];
1121
+ for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) {
1122
+ side = _ref4[_k];
1123
+ allClasses.push("" + cls + "-" + side);
1124
+ }
1125
+ }
1126
+ addClasses = [];
1127
+ tAttachment = extend({}, targetAttachment);
1128
+ eAttachment = extend({}, this.attachment);
1129
+ _ref5 = this.options.constraints;
1130
+ for (_l = 0, _len3 = _ref5.length; _l < _len3; _l++) {
1131
+ constraint = _ref5[_l];
1132
+ to = constraint.to, attachment = constraint.attachment, pin = constraint.pin;
1133
+ if (attachment == null) {
1134
+ attachment = '';
1135
+ }
1136
+ if (__indexOf.call(attachment, ' ') >= 0) {
1137
+ _ref6 = attachment.split(' '), changeAttachY = _ref6[0], changeAttachX = _ref6[1];
1138
+ } else {
1139
+ changeAttachX = changeAttachY = attachment;
1140
+ }
1141
+ bounds = getBoundingRect(this, to);
1142
+ if (changeAttachY === 'target' || changeAttachY === 'both') {
1143
+ if (top < bounds[1] && tAttachment.top === 'top') {
1144
+ top += targetHeight;
1145
+ tAttachment.top = 'bottom';
1146
+ }
1147
+ if (top + height > bounds[3] && tAttachment.top === 'bottom') {
1148
+ top -= targetHeight;
1149
+ tAttachment.top = 'top';
1150
+ }
1151
+ }
1152
+ if (changeAttachY === 'together') {
1153
+ if (top < bounds[1] && tAttachment.top === 'top') {
1154
+ if (eAttachment.top === 'bottom') {
1155
+ top += targetHeight;
1156
+ tAttachment.top = 'bottom';
1157
+ top += height;
1158
+ eAttachment.top = 'top';
1159
+ } else if (eAttachment.top === 'top') {
1160
+ top += targetHeight;
1161
+ tAttachment.top = 'bottom';
1162
+ top -= height;
1163
+ eAttachment.top = 'bottom';
1164
+ }
1165
+ }
1166
+ if (top + height > bounds[3] && tAttachment.top === 'bottom') {
1167
+ if (eAttachment.top === 'top') {
1168
+ top -= targetHeight;
1169
+ tAttachment.top = 'top';
1170
+ top -= height;
1171
+ eAttachment.top = 'bottom';
1172
+ } else if (eAttachment.top === 'bottom') {
1173
+ top -= targetHeight;
1174
+ tAttachment.top = 'top';
1175
+ top += height;
1176
+ eAttachment.top = 'top';
1177
+ }
1178
+ }
1179
+ if (tAttachment.top === 'middle') {
1180
+ if (top + height > bounds[3] && eAttachment.top === 'top') {
1181
+ top -= height;
1182
+ eAttachment.top = 'bottom';
1183
+ } else if (top < bounds[1] && eAttachment.top === 'bottom') {
1184
+ top += height;
1185
+ eAttachment.top = 'top';
1186
+ }
1187
+ }
1188
+ }
1189
+ if (changeAttachX === 'target' || changeAttachX === 'both') {
1190
+ if (left < bounds[0] && tAttachment.left === 'left') {
1191
+ left += targetWidth;
1192
+ tAttachment.left = 'right';
1193
+ }
1194
+ if (left + width > bounds[2] && tAttachment.left === 'right') {
1195
+ left -= targetWidth;
1196
+ tAttachment.left = 'left';
1197
+ }
1198
+ }
1199
+ if (changeAttachX === 'together') {
1200
+ if (left < bounds[0] && tAttachment.left === 'left') {
1201
+ if (eAttachment.left === 'right') {
1202
+ left += targetWidth;
1203
+ tAttachment.left = 'right';
1204
+ left += width;
1205
+ eAttachment.left = 'left';
1206
+ } else if (eAttachment.left === 'left') {
1207
+ left += targetWidth;
1208
+ tAttachment.left = 'right';
1209
+ left -= width;
1210
+ eAttachment.left = 'right';
1211
+ }
1212
+ } else if (left + width > bounds[2] && tAttachment.left === 'right') {
1213
+ if (eAttachment.left === 'left') {
1214
+ left -= targetWidth;
1215
+ tAttachment.left = 'left';
1216
+ left -= width;
1217
+ eAttachment.left = 'right';
1218
+ } else if (eAttachment.left === 'right') {
1219
+ left -= targetWidth;
1220
+ tAttachment.left = 'left';
1221
+ left += width;
1222
+ eAttachment.left = 'left';
1223
+ }
1224
+ } else if (tAttachment.left === 'center') {
1225
+ if (left + width > bounds[2] && eAttachment.left === 'left') {
1226
+ left -= width;
1227
+ eAttachment.left = 'right';
1228
+ } else if (left < bounds[0] && eAttachment.left === 'right') {
1229
+ left += width;
1230
+ eAttachment.left = 'left';
1231
+ }
1232
+ }
1233
+ }
1234
+ if (changeAttachY === 'element' || changeAttachY === 'both') {
1235
+ if (top < bounds[1] && eAttachment.top === 'bottom') {
1236
+ top += height;
1237
+ eAttachment.top = 'top';
1238
+ }
1239
+ if (top + height > bounds[3] && eAttachment.top === 'top') {
1240
+ top -= height;
1241
+ eAttachment.top = 'bottom';
1242
+ }
1243
+ }
1244
+ if (changeAttachX === 'element' || changeAttachX === 'both') {
1245
+ if (left < bounds[0] && eAttachment.left === 'right') {
1246
+ left += width;
1247
+ eAttachment.left = 'left';
1248
+ }
1249
+ if (left + width > bounds[2] && eAttachment.left === 'left') {
1250
+ left -= width;
1251
+ eAttachment.left = 'right';
1252
+ }
1253
+ }
1254
+ if (typeof pin === 'string') {
1255
+ pin = (function() {
1256
+ var _len4, _m, _ref7, _results;
1257
+ _ref7 = pin.split(',');
1258
+ _results = [];
1259
+ for (_m = 0, _len4 = _ref7.length; _m < _len4; _m++) {
1260
+ p = _ref7[_m];
1261
+ _results.push(p.trim());
1262
+ }
1263
+ return _results;
1264
+ })();
1265
+ } else if (pin === true) {
1266
+ pin = ['top', 'left', 'right', 'bottom'];
1267
+ }
1268
+ pin || (pin = []);
1269
+ pinned = [];
1270
+ oob = [];
1271
+ if (top < bounds[1]) {
1272
+ if (__indexOf.call(pin, 'top') >= 0) {
1273
+ top = bounds[1];
1274
+ pinned.push('top');
1275
+ } else {
1276
+ oob.push('top');
1277
+ }
1278
+ }
1279
+ if (top + height > bounds[3]) {
1280
+ if (__indexOf.call(pin, 'bottom') >= 0) {
1281
+ top = bounds[3] - height;
1282
+ pinned.push('bottom');
1283
+ } else {
1284
+ oob.push('bottom');
1285
+ }
1286
+ }
1287
+ if (left < bounds[0]) {
1288
+ if (__indexOf.call(pin, 'left') >= 0) {
1289
+ left = bounds[0];
1290
+ pinned.push('left');
1291
+ } else {
1292
+ oob.push('left');
1293
+ }
1294
+ }
1295
+ if (left + width > bounds[2]) {
1296
+ if (__indexOf.call(pin, 'right') >= 0) {
1297
+ left = bounds[2] - width;
1298
+ pinned.push('right');
1299
+ } else {
1300
+ oob.push('right');
1301
+ }
1302
+ }
1303
+ if (pinned.length) {
1304
+ pinnedClass = (_ref7 = this.options.pinnedClass) != null ? _ref7 : this.getClass('pinned');
1305
+ addClasses.push(pinnedClass);
1306
+ for (_m = 0, _len4 = pinned.length; _m < _len4; _m++) {
1307
+ side = pinned[_m];
1308
+ addClasses.push("" + pinnedClass + "-" + side);
1309
+ }
1310
+ }
1311
+ if (oob.length) {
1312
+ oobClass = (_ref8 = this.options.outOfBoundsClass) != null ? _ref8 : this.getClass('out-of-bounds');
1313
+ addClasses.push(oobClass);
1314
+ for (_n = 0, _len5 = oob.length; _n < _len5; _n++) {
1315
+ side = oob[_n];
1316
+ addClasses.push("" + oobClass + "-" + side);
1317
+ }
1318
+ }
1319
+ if (__indexOf.call(pinned, 'left') >= 0 || __indexOf.call(pinned, 'right') >= 0) {
1320
+ eAttachment.left = tAttachment.left = false;
1321
+ }
1322
+ if (__indexOf.call(pinned, 'top') >= 0 || __indexOf.call(pinned, 'bottom') >= 0) {
1323
+ eAttachment.top = tAttachment.top = false;
1324
+ }
1325
+ if (tAttachment.top !== targetAttachment.top || tAttachment.left !== targetAttachment.left || eAttachment.top !== this.attachment.top || eAttachment.left !== this.attachment.left) {
1326
+ this.updateAttachClasses(eAttachment, tAttachment);
1327
+ }
1328
+ }
1329
+ defer(function() {
1330
+ updateClasses(_this.target, addClasses, allClasses);
1331
+ return updateClasses(_this.element, addClasses, allClasses);
1332
+ });
1333
+ return {
1334
+ top: top,
1335
+ left: left
1336
+ };
1337
+ }
1338
+ });
1339
+
1340
+ }).call(this);
1341
+
1342
+ (function() {
1343
+ var defer, getBounds, updateClasses, _ref;
1344
+
1345
+ _ref = this.Tether.Utils, getBounds = _ref.getBounds, updateClasses = _ref.updateClasses, defer = _ref.defer;
1346
+
1347
+ this.Tether.modules.push({
1348
+ position: function(_arg) {
1349
+ var abutted, addClasses, allClasses, bottom, height, left, right, side, sides, targetPos, top, width, _i, _j, _k, _l, _len, _len1, _len2, _len3, _ref1, _ref2, _ref3, _ref4, _ref5,
1350
+ _this = this;
1351
+ top = _arg.top, left = _arg.left;
1352
+ _ref1 = this.cache('element-bounds', function() {
1353
+ return getBounds(_this.element);
1354
+ }), height = _ref1.height, width = _ref1.width;
1355
+ targetPos = this.getTargetBounds();
1356
+ bottom = top + height;
1357
+ right = left + width;
1358
+ abutted = [];
1359
+ if (top <= targetPos.bottom && bottom >= targetPos.top) {
1360
+ _ref2 = ['left', 'right'];
1361
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
1362
+ side = _ref2[_i];
1363
+ if ((_ref3 = targetPos[side]) === left || _ref3 === right) {
1364
+ abutted.push(side);
1365
+ }
1366
+ }
1367
+ }
1368
+ if (left <= targetPos.right && right >= targetPos.left) {
1369
+ _ref4 = ['top', 'bottom'];
1370
+ for (_j = 0, _len1 = _ref4.length; _j < _len1; _j++) {
1371
+ side = _ref4[_j];
1372
+ if ((_ref5 = targetPos[side]) === top || _ref5 === bottom) {
1373
+ abutted.push(side);
1374
+ }
1375
+ }
1376
+ }
1377
+ allClasses = [];
1378
+ addClasses = [];
1379
+ sides = ['left', 'top', 'right', 'bottom'];
1380
+ allClasses.push(this.getClass('abutted'));
1381
+ for (_k = 0, _len2 = sides.length; _k < _len2; _k++) {
1382
+ side = sides[_k];
1383
+ allClasses.push("" + (this.getClass('abutted')) + "-" + side);
1384
+ }
1385
+ if (abutted.length) {
1386
+ addClasses.push(this.getClass('abutted'));
1387
+ }
1388
+ for (_l = 0, _len3 = abutted.length; _l < _len3; _l++) {
1389
+ side = abutted[_l];
1390
+ addClasses.push("" + (this.getClass('abutted')) + "-" + side);
1391
+ }
1392
+ defer(function() {
1393
+ updateClasses(_this.target, addClasses, allClasses);
1394
+ return updateClasses(_this.element, addClasses, allClasses);
1395
+ });
1396
+ return true;
1397
+ }
1398
+ });
1399
+
1400
+ }).call(this);
1401
+
1402
+ (function() {
1403
+ this.Tether.modules.push({
1404
+ position: function(_arg) {
1405
+ var left, result, shift, shiftLeft, shiftTop, top, _ref;
1406
+ top = _arg.top, left = _arg.left;
1407
+ if (!this.options.shift) {
1408
+ return;
1409
+ }
1410
+ result = function(val) {
1411
+ if (typeof val === 'function') {
1412
+ return val.call(this, {
1413
+ top: top,
1414
+ left: left
1415
+ });
1416
+ } else {
1417
+ return val;
1418
+ }
1419
+ };
1420
+ shift = result(this.options.shift);
1421
+ if (typeof shift === 'string') {
1422
+ shift = shift.split(' ');
1423
+ shift[1] || (shift[1] = shift[0]);
1424
+ shiftTop = shift[0], shiftLeft = shift[1];
1425
+ shiftTop = parseFloat(shiftTop, 10);
1426
+ shiftLeft = parseFloat(shiftLeft, 10);
1427
+ } else {
1428
+ _ref = [shift.top, shift.left], shiftTop = _ref[0], shiftLeft = _ref[1];
1429
+ }
1430
+ top += shiftTop;
1431
+ left += shiftLeft;
1432
+ return {
1433
+ top: top,
1434
+ left: left
1435
+ };
1436
+ }
1437
+ });
1438
+
1439
+ }).call(this);
1440
+
1441
+ return this.Tether;
1442
+
1443
+ }));
admin/assets/tether/LICENSE ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2014-2016 HubSpot, Inc.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8
+
admin/assets/tether/tether.js ADDED
@@ -0,0 +1,1811 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*! tether 1.4.0 */
2
+
3
+ (function(root, factory) {
4
+ if (typeof define === 'function' && define.amd) {
5
+ define(factory);
6
+ } else if (typeof exports === 'object') {
7
+ module.exports = factory(require, exports, module);
8
+ } else {
9
+ root.Tether = factory();
10
+ }
11
+ }(this, function(require, exports, module) {
12
+
13
+ 'use strict';
14
+
15
+ var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
16
+
17
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
18
+
19
+ var TetherBase = undefined;
20
+ if (typeof TetherBase === 'undefined') {
21
+ TetherBase = { modules: [] };
22
+ }
23
+
24
+ var zeroElement = null;
25
+
26
+ // Same as native getBoundingClientRect, except it takes into account parent <frame> offsets
27
+ // if the element lies within a nested document (<frame> or <iframe>-like).
28
+ function getActualBoundingClientRect(node) {
29
+ var boundingRect = node.getBoundingClientRect();
30
+
31
+ // The original object returned by getBoundingClientRect is immutable, so we clone it
32
+ // We can't use extend because the properties are not considered part of the object by hasOwnProperty in IE9
33
+ var rect = {};
34
+ for (var k in boundingRect) {
35
+ rect[k] = boundingRect[k];
36
+ }
37
+
38
+ if (node.ownerDocument !== document) {
39
+ var _frameElement = node.ownerDocument.defaultView.frameElement;
40
+ if (_frameElement) {
41
+ var frameRect = getActualBoundingClientRect(_frameElement);
42
+ rect.top += frameRect.top;
43
+ rect.bottom += frameRect.top;
44
+ rect.left += frameRect.left;
45
+ rect.right += frameRect.left;
46
+ }
47
+ }
48
+
49
+ return rect;
50
+ }
51
+
52
+ function getScrollParents(el) {
53
+ // In firefox if the el is inside an iframe with display: none; window.getComputedStyle() will return null;
54
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=548397
55
+ var computedStyle = getComputedStyle(el) || {};
56
+ var position = computedStyle.position;
57
+ var parents = [];
58
+
59
+ if (position === 'fixed') {
60
+ return [el];
61
+ }
62
+
63
+ var parent = el;
64
+ while ((parent = parent.parentNode) && parent && parent.nodeType === 1) {
65
+ var style = undefined;
66
+ try {
67
+ style = getComputedStyle(parent);
68
+ } catch (err) {}
69
+
70
+ if (typeof style === 'undefined' || style === null) {
71
+ parents.push(parent);
72
+ return parents;
73
+ }
74
+
75
+ var _style = style;
76
+ var overflow = _style.overflow;
77
+ var overflowX = _style.overflowX;
78
+ var overflowY = _style.overflowY;
79
+
80
+ if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) {
81
+ if (position !== 'absolute' || ['relative', 'absolute', 'fixed'].indexOf(style.position) >= 0) {
82
+ parents.push(parent);
83
+ }
84
+ }
85
+ }
86
+
87
+ parents.push(el.ownerDocument.body);
88
+
89
+ // If the node is within a frame, account for the parent window scroll
90
+ if (el.ownerDocument !== document) {
91
+ parents.push(el.ownerDocument.defaultView);
92
+ }
93
+
94
+ return parents;
95
+ }
96
+
97
+ var uniqueId = (function () {
98
+ var id = 0;
99
+ return function () {
100
+ return ++id;
101
+ };
102
+ })();
103
+
104
+ var zeroPosCache = {};
105
+ var getOrigin = function getOrigin() {
106
+ // getBoundingClientRect is unfortunately too accurate. It introduces a pixel or two of
107
+ // jitter as the user scrolls that messes with our ability to detect if two positions
108
+ // are equivilant or not. We place an element at the top left of the page that will
109
+ // get the same jitter, so we can cancel the two out.
110
+ var node = zeroElement;
111
+ if (!node || !document.body.contains(node)) {
112
+ node = document.createElement('div');
113
+ node.setAttribute('data-tether-id', uniqueId());
114
+ extend(node.style, {
115
+ top: 0,
116
+ left: 0,
117
+ position: 'absolute'
118
+ });
119
+
120
+ document.body.appendChild(node);
121
+
122
+ zeroElement = node;
123
+ }
124
+
125
+ var id = node.getAttribute('data-tether-id');
126
+ if (typeof zeroPosCache[id] === 'undefined') {
127
+ zeroPosCache[id] = getActualBoundingClientRect(node);
128
+
129
+ // Clear the cache when this position call is done
130
+ defer(function () {
131
+ delete zeroPosCache[id];
132
+ });
133
+ }
134
+
135
+ return zeroPosCache[id];
136
+ };
137
+
138
+ function removeUtilElements() {
139
+ if (zeroElement) {
140
+ document.body.removeChild(zeroElement);
141
+ }
142
+ zeroElement = null;
143
+ };
144
+
145
+ function getBounds(el) {
146
+ var doc = undefined;
147
+ if (el === document) {
148
+ doc = document;
149
+ el = document.documentElement;
150
+ } else {
151
+ doc = el.ownerDocument;
152
+ }
153
+
154
+ var docEl = doc.documentElement;
155
+
156
+ var box = getActualBoundingClientRect(el);
157
+
158
+ var origin = getOrigin();
159
+
160
+ box.top -= origin.top;
161
+ box.left -= origin.left;
162
+
163
+ if (typeof box.width === 'undefined') {
164
+ box.width = document.body.scrollWidth - box.left - box.right;
165
+ }
166
+ if (typeof box.height === 'undefined') {
167
+ box.height = document.body.scrollHeight - box.top - box.bottom;
168
+ }
169
+
170
+ box.top = box.top - docEl.clientTop;
171
+ box.left = box.left - docEl.clientLeft;
172
+ box.right = doc.body.clientWidth - box.width - box.left;
173
+ box.bottom = doc.body.clientHeight - box.height - box.top;
174
+
175
+ return box;
176
+ }
177
+
178
+ function getOffsetParent(el) {
179
+ return el.offsetParent || document.documentElement;
180
+ }
181
+
182
+ var _scrollBarSize = null;
183
+ function getScrollBarSize() {
184
+ if (_scrollBarSize) {
185
+ return _scrollBarSize;
186
+ }
187
+ var inner = document.createElement('div');
188
+ inner.style.width = '100%';
189
+ inner.style.height = '200px';
190
+
191
+ var outer = document.createElement('div');
192
+ extend(outer.style, {
193
+ position: 'absolute',
194
+ top: 0,
195
+ left: 0,
196
+ pointerEvents: 'none',
197
+ visibility: 'hidden',
198
+ width: '200px',
199
+ height: '150px',
200
+ overflow: 'hidden'
201
+ });
202
+
203
+ outer.appendChild(inner);
204
+
205
+ document.body.appendChild(outer);
206
+
207
+ var widthContained = inner.offsetWidth;
208
+ outer.style.overflow = 'scroll';
209
+ var widthScroll = inner.offsetWidth;
210
+
211
+ if (widthContained === widthScroll) {
212
+ widthScroll = outer.clientWidth;
213
+ }
214
+
215
+ document.body.removeChild(outer);
216
+
217
+ var width = widthContained - widthScroll;
218
+
219
+ _scrollBarSize = { width: width, height: width };
220
+ return _scrollBarSize;
221
+ }
222
+
223
+ function extend() {
224
+ var out = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
225
+
226
+ var args = [];
227
+
228
+ Array.prototype.push.apply(args, arguments);
229
+
230
+ args.slice(1).forEach(function (obj) {
231
+ if (obj) {
232
+ for (var key in obj) {
233
+ if (({}).hasOwnProperty.call(obj, key)) {
234
+ out[key] = obj[key];
235
+ }
236
+ }
237
+ }
238
+ });
239
+
240
+ return out;
241
+ }
242
+
243
+ function removeClass(el, name) {
244
+ if (typeof el.classList !== 'undefined') {
245
+ name.split(' ').forEach(function (cls) {
246
+ if (cls.trim()) {
247
+ el.classList.remove(cls);
248
+ }
249
+ });
250
+ } else {
251
+ var regex = new RegExp('(^| )' + name.split(' ').join('|') + '( |$)', 'gi');
252
+ var className = getClassName(el).replace(regex, ' ');
253
+ setClassName(el, className);
254
+ }
255
+ }
256
+
257
+ function addClass(el, name) {
258
+ if (typeof el.classList !== 'undefined') {
259
+ name.split(' ').forEach(function (cls) {
260
+ if (cls.trim()) {
261
+ el.classList.add(cls);
262
+ }
263
+ });
264
+ } else {
265
+ removeClass(el, name);
266
+ var cls = getClassName(el) + (' ' + name);
267
+ setClassName(el, cls);
268
+ }
269
+ }
270
+
271
+ function hasClass(el, name) {
272
+ if (typeof el.classList !== 'undefined') {
273
+ return el.classList.contains(name);
274
+ }
275
+ var className = getClassName(el);
276
+ return new RegExp('(^| )' + name + '( |$)', 'gi').test(className);
277
+ }
278
+
279
+ function getClassName(el) {
280
+ // Can't use just SVGAnimatedString here since nodes within a Frame in IE have
281
+ // completely separately SVGAnimatedString base classes
282
+ if (el.className instanceof el.ownerDocument.defaultView.SVGAnimatedString) {
283
+ return el.className.baseVal;
284
+ }
285
+ return el.className;
286
+ }
287
+
288
+ function setClassName(el, className) {
289
+ el.setAttribute('class', className);
290
+ }
291
+
292
+ function updateClasses(el, add, all) {
293
+ // Of the set of 'all' classes, we need the 'add' classes, and only the
294
+ // 'add' classes to be set.
295
+ all.forEach(function (cls) {
296
+ if (add.indexOf(cls) === -1 && hasClass(el, cls)) {
297
+ removeClass(el, cls);
298
+ }
299
+ });
300
+
301
+ add.forEach(function (cls) {
302
+ if (!hasClass(el, cls)) {
303
+ addClass(el, cls);
304
+ }
305
+ });
306
+ }
307
+
308
+ var deferred = [];
309
+
310
+ var defer = function defer(fn) {
311
+ deferred.push(fn);
312
+ };
313
+
314
+ var flush = function flush() {
315
+ var fn = undefined;
316
+ while (fn = deferred.pop()) {
317
+ fn();
318
+ }
319
+ };
320
+
321
+ var Evented = (function () {
322
+ function Evented() {
323
+ _classCallCheck(this, Evented);
324
+ }
325
+
326
+ _createClass(Evented, [{
327
+ key: 'on',
328
+ value: function on(event, handler, ctx) {
329
+ var once = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3];
330
+
331
+ if (typeof this.bindings === 'undefined') {
332
+ this.bindings = {};
333
+ }
334
+ if (typeof this.bindings[event] === 'undefined') {
335
+ this.bindings[event] = [];
336
+ }
337
+ this.bindings[event].push({ handler: handler, ctx: ctx, once: once });
338
+ }
339
+ }, {
340
+ key: 'once',
341
+ value: function once(event, handler, ctx) {
342
+ this.on(event, handler, ctx, true);
343
+ }
344
+ }, {
345
+ key: 'off',
346
+ value: function off(event, handler) {
347
+ if (typeof this.bindings === 'undefined' || typeof this.bindings[event] === 'undefined') {
348
+ return;
349
+ }
350
+
351
+ if (typeof handler === 'undefined') {
352
+ delete this.bindings[event];
353
+ } else {
354
+ var i = 0;
355
+ while (i < this.bindings[event].length) {
356
+ if (this.bindings[event][i].handler === handler) {
357
+ this.bindings[event].splice(i, 1);
358
+ } else {
359
+ ++i;
360
+ }
361
+ }
362
+ }
363
+ }
364
+ }, {
365
+ key: 'trigger',
366
+ value: function trigger(event) {
367
+ if (typeof this.bindings !== 'undefined' && this.bindings[event]) {
368
+ var i = 0;
369
+
370
+ for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
371
+ args[_key - 1] = arguments[_key];
372
+ }
373
+
374
+ while (i < this.bindings[event].length) {
375
+ var _bindings$event$i = this.bindings[event][i];
376
+ var handler = _bindings$event$i.handler;
377
+ var ctx = _bindings$event$i.ctx;
378
+ var once = _bindings$event$i.once;
379
+
380
+ var context = ctx;
381
+ if (typeof context === 'undefined') {
382
+ context = this;
383
+ }
384
+
385
+ handler.apply(context, args);
386
+
387
+ if (once) {
388
+ this.bindings[event].splice(i, 1);
389
+ } else {
390
+ ++i;
391
+ }
392
+ }
393
+ }
394
+ }
395
+ }]);
396
+
397
+ return Evented;
398
+ })();
399
+
400
+ TetherBase.Utils = {
401
+ getActualBoundingClientRect: getActualBoundingClientRect,
402
+ getScrollParents: getScrollParents,
403
+ getBounds: getBounds,
404
+ getOffsetParent: getOffsetParent,
405
+ extend: extend,
406
+ addClass: addClass,
407
+ removeClass: removeClass,
408
+ hasClass: hasClass,
409
+ updateClasses: updateClasses,
410
+ defer: defer,
411
+ flush: flush,
412
+ uniqueId: uniqueId,
413
+ Evented: Evented,
414
+ getScrollBarSize: getScrollBarSize,
415
+ removeUtilElements: removeUtilElements
416
+ };
417
+ /* globals TetherBase, performance */
418
+
419
+ 'use strict';
420
+
421
+ var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();
422
+
423
+ var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
424
+
425
+ var _get = function get(_x6, _x7, _x8) { var _again = true; _function: while (_again) { var object = _x6, property = _x7, receiver = _x8; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x6 = parent; _x7 = property; _x8 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
426
+
427
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
428
+
429
+ function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
430
+
431
+ if (typeof TetherBase === 'undefined') {
432
+ throw new Error('You must include the utils.js file before tether.js');
433
+ }
434
+
435
+ var _TetherBase$Utils = TetherBase.Utils;
436
+ var getScrollParents = _TetherBase$Utils.getScrollParents;
437
+ var getBounds = _TetherBase$Utils.getBounds;
438
+ var getOffsetParent = _TetherBase$Utils.getOffsetParent;
439
+ var extend = _TetherBase$Utils.extend;
440
+ var addClass = _TetherBase$Utils.addClass;
441
+ var removeClass = _TetherBase$Utils.removeClass;
442
+ var updateClasses = _TetherBase$Utils.updateClasses;
443
+ var defer = _TetherBase$Utils.defer;
444
+ var flush = _TetherBase$Utils.flush;
445
+ var getScrollBarSize = _TetherBase$Utils.getScrollBarSize;
446
+ var removeUtilElements = _TetherBase$Utils.removeUtilElements;
447
+
448
+ function within(a, b) {
449
+ var diff = arguments.length <= 2 || arguments[2] === undefined ? 1 : arguments[2];
450
+
451
+ return a + diff >= b && b >= a - diff;
452
+ }
453
+
454
+ var transformKey = (function () {
455
+ if (typeof document === 'undefined') {
456
+ return '';
457
+ }
458
+ var el = document.createElement('div');
459
+
460
+ var transforms = ['transform', 'WebkitTransform', 'OTransform', 'MozTransform', 'msTransform'];
461
+ for (var i = 0; i < transforms.length; ++i) {
462
+ var key = transforms[i];
463
+ if (el.style[key] !== undefined) {
464
+ return key;
465
+ }
466
+ }
467
+ })();
468
+
469
+ var tethers = [];
470
+
471
+ var position = function position() {
472
+ tethers.forEach(function (tether) {
473
+ tether.position(false);
474
+ });
475
+ flush();
476
+ };
477
+
478
+ function now() {
479
+ if (typeof performance !== 'undefined' && typeof performance.now !== 'undefined') {
480
+ return performance.now();
481
+ }
482
+ return +new Date();
483
+ }
484
+
485
+ (function () {
486
+ var lastCall = null;
487
+ var lastDuration = null;
488
+ var pendingTimeout = null;
489
+
490
+ var tick = function tick() {
491
+ if (typeof lastDuration !== 'undefined' && lastDuration > 16) {
492
+ // We voluntarily throttle ourselves if we can't manage 60fps
493
+ lastDuration = Math.min(lastDuration - 16, 250);
494
+
495
+ // Just in case this is the last event, remember to position just once more
496
+ pendingTimeout = setTimeout(tick, 250);
497
+ return;
498
+ }
499
+
500
+ if (typeof lastCall !== 'undefined' && now() - lastCall < 10) {
501
+ // Some browsers call events a little too frequently, refuse to run more than is reasonable
502
+ return;
503
+ }
504
+
505
+ if (pendingTimeout != null) {
506
+ clearTimeout(pendingTimeout);
507
+ pendingTimeout = null;
508
+ }
509
+
510
+ lastCall = now();
511
+ position();
512
+ lastDuration = now() - lastCall;
513
+ };
514
+
515
+ if (typeof window !== 'undefined' && typeof window.addEventListener !== 'undefined') {
516
+ ['resize', 'scroll', 'touchmove'].forEach(function (event) {
517
+ window.addEventListener(event, tick);
518
+ });
519
+ }
520
+ })();
521
+
522
+ var MIRROR_LR = {
523
+ center: 'center',
524
+ left: 'right',
525
+ right: 'left'
526
+ };
527
+
528
+ var MIRROR_TB = {
529
+ middle: 'middle',
530
+ top: 'bottom',
531
+ bottom: 'top'
532
+ };
533
+
534
+ var OFFSET_MAP = {
535
+ top: 0,
536
+ left: 0,
537
+ middle: '50%',
538
+ center: '50%',
539
+ bottom: '100%',
540
+ right: '100%'
541
+ };
542
+
543
+ var autoToFixedAttachment = function autoToFixedAttachment(attachment, relativeToAttachment) {
544
+ var left = attachment.left;
545
+ var top = attachment.top;
546
+
547
+ if (left === 'auto') {
548
+ left = MIRROR_LR[relativeToAttachment.left];
549
+ }
550
+
551
+ if (top === 'auto') {
552
+ top = MIRROR_TB[relativeToAttachment.top];
553
+ }
554
+
555
+ return { left: left, top: top };
556
+ };
557
+
558
+ var attachmentToOffset = function attachmentToOffset(attachment) {
559
+ var left = attachment.left;
560
+ var top = attachment.top;
561
+
562
+ if (typeof OFFSET_MAP[attachment.left] !== 'undefined') {
563
+ left = OFFSET_MAP[attachment.left];
564
+ }
565
+
566
+ if (typeof OFFSET_MAP[attachment.top] !== 'undefined') {
567
+ top = OFFSET_MAP[attachment.top];
568
+ }
569
+
570
+ return { left: left, top: top };
571
+ };
572
+
573
+ function addOffset() {
574
+ var out = { top: 0, left: 0 };
575
+
576
+ for (var _len = arguments.length, offsets = Array(_len), _key = 0; _key < _len; _key++) {
577
+ offsets[_key] = arguments[_key];
578
+ }
579
+
580
+ offsets.forEach(function (_ref) {
581
+ var top = _ref.top;
582
+ var left = _ref.left;
583
+
584
+ if (typeof top === 'string') {
585
+ top = parseFloat(top, 10);
586
+ }
587
+ if (typeof left === 'string') {
588
+ left = parseFloat(left, 10);
589
+ }
590
+
591
+ out.top += top;
592
+ out.left += left;
593
+ });
594
+
595
+ return out;
596
+ }
597
+
598
+ function offsetToPx(offset, size) {
599
+ if (typeof offset.left === 'string' && offset.left.indexOf('%') !== -1) {
600
+ offset.left = parseFloat(offset.left, 10) / 100 * size.width;
601
+ }
602
+ if (typeof offset.top === 'string' && offset.top.indexOf('%') !== -1) {
603
+ offset.top = parseFloat(offset.top, 10) / 100 * size.height;
604
+ }
605
+
606
+ return offset;
607
+ }
608
+
609
+ var parseOffset = function parseOffset(value) {
610
+ var _value$split = value.split(' ');
611
+
612
+ var _value$split2 = _slicedToArray(_value$split, 2);
613
+
614
+ var top = _value$split2[0];
615
+ var left = _value$split2[1];
616
+
617
+ return { top: top, left: left };
618
+ };
619
+ var parseAttachment = parseOffset;
620
+
621
+ var TetherClass = (function (_Evented) {
622
+ _inherits(TetherClass, _Evented);
623
+
624
+ function TetherClass(options) {
625
+ var _this = this;
626
+
627
+ _classCallCheck(this, TetherClass);
628
+
629
+ _get(Object.getPrototypeOf(TetherClass.prototype), 'constructor', this).call(this);
630
+ this.position = this.position.bind(this);
631
+
632
+ tethers.push(this);
633
+
634
+ this.history = [];
635
+
636
+ this.setOptions(options, false);
637
+
638
+ TetherBase.modules.forEach(function (module) {
639
+ if (typeof module.initialize !== 'undefined') {
640
+ module.initialize.call(_this);
641
+ }
642
+ });
643
+
644
+ this.position();
645
+ }
646
+
647
+ _createClass(TetherClass, [{
648
+ key: 'getClass',
649
+ value: function getClass() {
650
+ var key = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0];
651
+ var classes = this.options.classes;
652
+
653
+ if (typeof classes !== 'undefined' && classes[key]) {
654
+ return this.options.classes[key];
655
+ } else if (this.options.classPrefix) {
656
+ return this.options.classPrefix + '-' + key;
657
+ } else {
658
+ return key;
659
+ }
660
+ }
661
+ }, {
662
+ key: 'setOptions',
663
+ value: function setOptions(options) {
664
+ var _this2 = this;
665
+
666
+ var pos = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];
667
+
668
+ var defaults = {
669
+ offset: '0 0',
670
+ targetOffset: '0 0',
671
+ targetAttachment: 'auto auto',
672
+ classPrefix: 'tether'
673
+ };
674
+
675
+ this.options = extend(defaults, options);
676
+
677
+ var _options = this.options;
678
+ var element = _options.element;
679
+ var target = _options.target;
680
+ var targetModifier = _options.targetModifier;
681
+
682
+ this.element = element;
683
+ this.target = target;
684
+ this.targetModifier = targetModifier;
685
+
686
+ if (this.target === 'viewport') {
687
+ this.target = document.body;
688
+ this.targetModifier = 'visible';
689
+ } else if (this.target === 'scroll-handle') {
690
+ this.target = document.body;
691
+ this.targetModifier = 'scroll-handle';
692
+ }
693
+
694
+ ['element', 'target'].forEach(function (key) {
695
+ if (typeof _this2[key] === 'undefined') {
696
+ throw new Error('Tether Error: Both element and target must be defined');
697
+ }
698
+
699
+ if (typeof _this2[key].jquery !== 'undefined') {
700
+ _this2[key] = _this2[key][0];
701
+ } else if (typeof _this2[key] === 'string') {
702
+ _this2[key] = document.querySelector(_this2[key]);
703
+ }
704
+ });
705
+
706
+ addClass(this.element, this.getClass('element'));
707
+ if (!(this.options.addTargetClasses === false)) {
708
+ addClass(this.target, this.getClass('target'));
709
+ }
710
+
711
+ if (!this.options.attachment) {
712
+ throw new Error('Tether Error: You must provide an attachment');
713
+ }
714
+
715
+ this.targetAttachment = parseAttachment(this.options.targetAttachment);
716
+ this.attachment = parseAttachment(this.options.attachment);
717
+ this.offset = parseOffset(this.options.offset);
718
+ this.targetOffset = parseOffset(this.options.targetOffset);
719
+
720
+ if (typeof this.scrollParents !== 'undefined') {
721
+ this.disable();
722
+ }
723
+
724
+ if (this.targetModifier === 'scroll-handle') {
725
+ this.scrollParents = [this.target];
726
+ } else {
727
+ this.scrollParents = getScrollParents(this.target);
728
+ }
729
+
730
+ if (!(this.options.enabled === false)) {
731
+ this.enable(pos);
732
+ }
733
+ }
734
+ }, {
735
+ key: 'getTargetBounds',
736
+ value: function getTargetBounds() {
737
+ if (typeof this.targetModifier !== 'undefined') {
738
+ if (this.targetModifier === 'visible') {
739
+ if (this.target === document.body) {
740
+ return { top: pageYOffset, left: pageXOffset, height: innerHeight, width: innerWidth };
741
+ } else {
742
+ var bounds = getBounds(this.target);
743
+
744
+ var out = {
745
+ height: bounds.height,
746
+ width: bounds.width,
747
+ top: bounds.top,
748
+ left: bounds.left
749
+ };
750
+
751
+ out.height = Math.min(out.height, bounds.height - (pageYOffset - bounds.top));
752
+ out.height = Math.min(out.height, bounds.height - (bounds.top + bounds.height - (pageYOffset + innerHeight)));
753
+ out.height = Math.min(innerHeight, out.height);
754
+ out.height -= 2;
755
+
756
+ out.width = Math.min(out.width, bounds.width - (pageXOffset - bounds.left));
757
+ out.width = Math.min(out.width, bounds.width - (bounds.left + bounds.width - (pageXOffset + innerWidth)));
758
+ out.width = Math.min(innerWidth, out.width);
759
+ out.width -= 2;
760
+
761
+ if (out.top < pageYOffset) {
762
+ out.top = pageYOffset;
763
+ }
764
+ if (out.left < pageXOffset) {
765
+ out.left = pageXOffset;
766
+ }
767
+
768
+ return out;
769
+ }
770
+ } else if (this.targetModifier === 'scroll-handle') {
771
+ var bounds = undefined;
772
+ var target = this.target;
773
+ if (target === document.body) {
774
+ target = document.documentElement;
775
+
776
+ bounds = {
777
+ left: pageXOffset,
778
+ top: pageYOffset,
779
+ height: innerHeight,
780
+ width: innerWidth
781
+ };
782
+ } else {
783
+ bounds = getBounds(target);
784
+ }
785
+
786
+ var style = getComputedStyle(target);
787
+
788
+ var hasBottomScroll = target.scrollWidth > target.clientWidth || [style.overflow, style.overflowX].indexOf('scroll') >= 0 || this.target !== document.body;
789
+
790
+ var scrollBottom = 0;
791
+ if (hasBottomScroll) {
792
+ scrollBottom = 15;
793
+ }
794
+
795
+ var height = bounds.height - parseFloat(style.borderTopWidth) - parseFloat(style.borderBottomWidth) - scrollBottom;
796
+
797
+ var out = {
798
+ width: 15,
799
+ height: height * 0.975 * (height / target.scrollHeight),
800
+ left: bounds.left + bounds.width - parseFloat(style.borderLeftWidth) - 15
801
+ };
802
+
803
+ var fitAdj = 0;
804
+ if (height < 408 && this.target === document.body) {
805
+ fitAdj = -0.00011 * Math.pow(height, 2) - 0.00727 * height + 22.58;
806
+ }
807
+
808
+ if (this.target !== document.body) {
809
+ out.height = Math.max(out.height, 24);
810
+ }
811
+
812
+ var scrollPercentage = this.target.scrollTop / (target.scrollHeight - height);
813
+ out.top = scrollPercentage * (height - out.height - fitAdj) + bounds.top + parseFloat(style.borderTopWidth);
814
+
815
+ if (this.target === document.body) {
816
+ out.height = Math.max(out.height, 24);
817
+ }
818
+
819
+ return out;
820
+ }
821
+ } else {
822
+ return getBounds(this.target);
823
+ }
824
+ }
825
+ }, {
826
+ key: 'clearCache',
827
+ value: function clearCache() {
828
+ this._cache = {};
829
+ }
830
+ }, {
831
+ key: 'cache',
832
+ value: function cache(k, getter) {
833
+ // More than one module will often need the same DOM info, so
834
+ // we keep a cache which is cleared on each position call
835
+ if (typeof this._cache === 'undefined') {
836
+ this._cache = {};
837
+ }
838
+
839
+ if (typeof this._cache[k] === 'undefined') {
840
+ this._cache[k] = getter.call(this);
841
+ }
842
+
843
+ return this._cache[k];
844
+ }
845
+ }, {
846
+ key: 'enable',
847
+ value: function enable() {
848
+ var _this3 = this;
849
+
850
+ var pos = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];
851
+
852
+ if (!(this.options.addTargetClasses === false)) {
853
+ addClass(this.target, this.getClass('enabled'));
854
+ }
855
+ addClass(this.element, this.getClass('enabled'));
856
+ this.enabled = true;
857
+
858
+ this.scrollParents.forEach(function (parent) {
859
+ if (parent !== _this3.target.ownerDocument) {
860
+ parent.addEventListener('scroll', _this3.position);
861
+ }
862
+ });
863
+
864
+ if (pos) {
865
+ this.position();
866
+ }
867
+ }
868
+ }, {
869
+ key: 'disable',
870
+ value: function disable() {
871
+ var _this4 = this;
872
+
873
+ removeClass(this.target, this.getClass('enabled'));
874
+ removeClass(this.element, this.getClass('enabled'));
875
+ this.enabled = false;
876
+
877
+ if (typeof this.scrollParents !== 'undefined') {
878
+ this.scrollParents.forEach(function (parent) {
879
+ parent.removeEventListener('scroll', _this4.position);
880
+ });
881
+ }
882
+ }
883
+ }, {
884
+ key: 'destroy',
885
+ value: function destroy() {
886
+ var _this5 = this;
887
+
888
+ this.disable();
889
+
890
+ tethers.forEach(function (tether, i) {
891
+ if (tether === _this5) {
892
+ tethers.splice(i, 1);
893
+ }
894
+ });
895
+
896
+ // Remove any elements we were using for convenience from the DOM
897
+ if (tethers.length === 0) {
898
+ removeUtilElements();
899
+ }
900
+ }
901
+ }, {
902
+ key: 'updateAttachClasses',
903
+ value: function updateAttachClasses(elementAttach, targetAttach) {
904
+ var _this6 = this;
905
+
906
+ elementAttach = elementAttach || this.attachment;
907
+ targetAttach = targetAttach || this.targetAttachment;
908
+ var sides = ['left', 'top', 'bottom', 'right', 'middle', 'center'];
909
+
910
+ if (typeof this._addAttachClasses !== 'undefined' && this._addAttachClasses.length) {
911
+ // updateAttachClasses can be called more than once in a position call, so
912
+ // we need to clean up after ourselves such that when the last defer gets
913
+ // ran it doesn't add any extra classes from previous calls.
914
+ this._addAttachClasses.splice(0, this._addAttachClasses.length);
915
+ }
916
+
917
+ if (typeof this._addAttachClasses === 'undefined') {
918
+ this._addAttachClasses = [];
919
+ }
920
+ var add = this._addAttachClasses;
921
+
922
+ if (elementAttach.top) {
923
+ add.push(this.getClass('element-attached') + '-' + elementAttach.top);
924
+ }
925
+ if (elementAttach.left) {
926
+ add.push(this.getClass('element-attached') + '-' + elementAttach.left);
927
+ }
928
+ if (targetAttach.top) {
929
+ add.push(this.getClass('target-attached') + '-' + targetAttach.top);
930
+ }
931
+ if (targetAttach.left) {
932
+ add.push(this.getClass('target-attached') + '-' + targetAttach.left);
933
+ }
934
+
935
+ var all = [];
936
+ sides.forEach(function (side) {
937
+ all.push(_this6.getClass('element-attached') + '-' + side);
938
+ all.push(_this6.getClass('target-attached') + '-' + side);
939
+ });
940
+
941
+ defer(function () {
942
+ if (!(typeof _this6._addAttachClasses !== 'undefined')) {
943
+ return;
944
+ }
945
+
946
+ updateClasses(_this6.element, _this6._addAttachClasses, all);
947
+ if (!(_this6.options.addTargetClasses === false)) {
948
+ updateClasses(_this6.target, _this6._addAttachClasses, all);
949
+ }
950
+
951
+ delete _this6._addAttachClasses;
952
+ });
953
+ }
954
+ }, {
955
+ key: 'position',
956
+ value: function position() {
957
+ var _this7 = this;
958
+
959
+ var flushChanges = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];
960
+
961
+ // flushChanges commits the changes immediately, leave true unless you are positioning multiple
962
+ // tethers (in which case call Tether.Utils.flush yourself when you're done)
963
+
964
+ if (!this.enabled) {
965
+ return;
966
+ }
967
+
968
+ this.clearCache();
969
+
970
+ // Turn 'auto' attachments into the appropriate corner or edge
971
+ var targetAttachment = autoToFixedAttachment(this.targetAttachment, this.attachment);
972
+
973
+ this.updateAttachClasses(this.attachment, targetAttachment);
974
+
975
+ var elementPos = this.cache('element-bounds', function () {
976
+ return getBounds(_this7.element);
977
+ });
978
+
979
+ var width = elementPos.width;
980
+ var height = elementPos.height;
981
+
982
+ if (width === 0 && height === 0 && typeof this.lastSize !== 'undefined') {
983
+ var _lastSize = this.lastSize;
984
+
985
+ // We cache the height and width to make it possible to position elements that are
986
+ // getting hidden.
987
+ width = _lastSize.width;
988
+ height = _lastSize.height;
989
+ } else {
990
+ this.lastSize = { width: width, height: height };
991
+ }
992
+
993
+ var targetPos = this.cache('target-bounds', function () {
994
+ return _this7.getTargetBounds();
995
+ });
996
+ var targetSize = targetPos;
997
+
998
+ // Get an actual px offset from the attachment
999
+ var offset = offsetToPx(attachmentToOffset(this.attachment), { width: width, height: height });
1000
+ var targetOffset = offsetToPx(attachmentToOffset(targetAttachment), targetSize);
1001
+
1002
+ var manualOffset = offsetToPx(this.offset, { width: width, height: height });
1003
+ var manualTargetOffset = offsetToPx(this.targetOffset, targetSize);
1004
+
1005
+ // Add the manually provided offset
1006
+ offset = addOffset(offset, manualOffset);
1007
+ targetOffset = addOffset(targetOffset, manualTargetOffset);
1008
+
1009
+ // It's now our goal to make (element position + offset) == (target position + target offset)
1010
+ var left = targetPos.left + targetOffset.left - offset.left;
1011
+ var top = targetPos.top + targetOffset.top - offset.top;
1012
+
1013
+ for (var i = 0; i < TetherBase.modules.length; ++i) {
1014
+ var _module2 = TetherBase.modules[i];
1015
+ var ret = _module2.position.call(this, {
1016
+ left: left,
1017
+ top: top,
1018
+ targetAttachment: targetAttachment,
1019
+ targetPos: targetPos,
1020
+ elementPos: elementPos,
1021
+ offset: offset,
1022
+ targetOffset: targetOffset,
1023
+ manualOffset: manualOffset,
1024
+ manualTargetOffset: manualTargetOffset,
1025
+ scrollbarSize: scrollbarSize,
1026
+ attachment: this.attachment
1027
+ });
1028
+
1029
+ if (ret === false) {
1030
+ return false;
1031
+ } else if (typeof ret === 'undefined' || typeof ret !== 'object') {
1032
+ continue;
1033
+ } else {
1034
+ top = ret.top;
1035
+ left = ret.left;
1036
+ }
1037
+ }
1038
+
1039
+ // We describe the position three different ways to give the optimizer
1040
+ // a chance to decide the best possible way to position the element
1041
+ // with the fewest repaints.
1042
+ var next = {
1043
+ // It's position relative to the page (absolute positioning when
1044
+ // the element is a child of the body)
1045
+ page: {
1046
+ top: top,
1047
+ left: left
1048
+ },
1049
+
1050
+ // It's position relative to the viewport (fixed positioning)
1051
+ viewport: {
1052
+ top: top - pageYOffset,
1053
+ bottom: pageYOffset - top - height + innerHeight,
1054
+ left: left - pageXOffset,
1055
+ right: pageXOffset - left - width + innerWidth
1056
+ }
1057
+ };
1058
+
1059
+ var doc = this.target.ownerDocument;
1060
+ var win = doc.defaultView;
1061
+
1062
+ var scrollbarSize = undefined;
1063
+ if (win.innerHeight > doc.documentElement.clientHeight) {
1064
+ scrollbarSize = this.cache('scrollbar-size', getScrollBarSize);
1065
+ next.viewport.bottom -= scrollbarSize.height;
1066
+ }
1067
+
1068
+ if (win.innerWidth > doc.documentElement.clientWidth) {
1069
+ scrollbarSize = this.cache('scrollbar-size', getScrollBarSize);
1070
+ next.viewport.right -= scrollbarSize.width;
1071
+ }
1072
+
1073
+ if (['', 'static'].indexOf(doc.body.style.position) === -1 || ['', 'static'].indexOf(doc.body.parentElement.style.position) === -1) {
1074
+ // Absolute positioning in the body will be relative to the page, not the 'initial containing block'
1075
+ next.page.bottom = doc.body.scrollHeight - top - height;
1076
+ next.page.right = doc.body.scrollWidth - left - width;
1077
+ }
1078
+
1079
+ if (typeof this.options.optimizations !== 'undefined' && this.options.optimizations.moveElement !== false && !(typeof this.targetModifier !== 'undefined')) {
1080
+ (function () {
1081
+ var offsetParent = _this7.cache('target-offsetparent', function () {
1082
+ return getOffsetParent(_this7.target);
1083
+ });
1084
+ var offsetPosition = _this7.cache('target-offsetparent-bounds', function () {
1085
+ return getBounds(offsetParent);
1086
+ });
1087
+ var offsetParentStyle = getComputedStyle(offsetParent);
1088
+ var offsetParentSize = offsetPosition;
1089
+
1090
+ var offsetBorder = {};
1091
+ ['Top', 'Left', 'Bottom', 'Right'].forEach(function (side) {
1092
+ offsetBorder[side.toLowerCase()] = parseFloat(offsetParentStyle['border' + side + 'Width']);
1093
+ });
1094
+
1095
+ offsetPosition.right = doc.body.scrollWidth - offsetPosition.left - offsetParentSize.width + offsetBorder.right;
1096
+ offsetPosition.bottom = doc.body.scrollHeight - offsetPosition.top - offsetParentSize.height + offsetBorder.bottom;
1097
+
1098
+ if (next.page.top >= offsetPosition.top + offsetBorder.top && next.page.bottom >= offsetPosition.bottom) {
1099
+ if (next.page.left >= offsetPosition.left + offsetBorder.left && next.page.right >= offsetPosition.right) {
1100
+ // We're within the visible part of the target's scroll parent
1101
+ var scrollTop = offsetParent.scrollTop;
1102
+ var scrollLeft = offsetParent.scrollLeft;
1103
+
1104
+ // It's position relative to the target's offset parent (absolute positioning when
1105
+ // the element is moved to be a child of the target's offset parent).
1106
+ next.offset = {
1107
+ top: next.page.top - offsetPosition.top + scrollTop - offsetBorder.top,
1108
+ left: next.page.left - offsetPosition.left + scrollLeft - offsetBorder.left
1109
+ };
1110
+ }
1111
+ }
1112
+ })();
1113
+ }
1114
+
1115
+ // We could also travel up the DOM and try each containing context, rather than only
1116
+ // looking at the body, but we're gonna get diminishing returns.
1117
+
1118
+ this.move(next);
1119
+
1120
+ this.history.unshift(next);
1121
+
1122
+ if (this.history.length > 3) {
1123
+ this.history.pop();
1124
+ }
1125
+
1126
+ if (flushChanges) {
1127
+ flush();
1128
+ }
1129
+
1130
+ return true;
1131
+ }
1132
+
1133
+ // THE ISSUE
1134
+ }, {
1135
+ key: 'move',
1136
+ value: function move(pos) {
1137
+ var _this8 = this;
1138
+
1139
+ if (!(typeof this.element.parentNode !== 'undefined')) {
1140
+ return;
1141
+ }
1142
+
1143
+ var same = {};
1144
+
1145
+ for (var type in pos) {
1146
+ same[type] = {};
1147
+
1148
+ for (var key in pos[type]) {
1149
+ var found = false;
1150
+
1151
+ for (var i = 0; i < this.history.length; ++i) {
1152
+ var point = this.history[i];
1153
+ if (typeof point[type] !== 'undefined' && !within(point[type][key], pos[type][key])) {
1154
+ found = true;
1155
+ break;
1156
+ }
1157
+ }
1158
+
1159
+ if (!found) {
1160
+ same[type][key] = true;
1161
+ }
1162
+ }
1163
+ }
1164
+
1165
+ var css = { top: '', left: '', right: '', bottom: '' };
1166
+
1167
+ var transcribe = function transcribe(_same, _pos) {
1168
+ var hasOptimizations = typeof _this8.options.optimizations !== 'undefined';
1169
+ var gpu = hasOptimizations ? _this8.options.optimizations.gpu : null;
1170
+ if (gpu !== false) {
1171
+ var yPos = undefined,
1172
+ xPos = undefined;
1173
+ if (_same.top) {
1174
+ css.top = 0;
1175
+ yPos = _pos.top;
1176
+ } else {
1177
+ css.bottom = 0;
1178
+ yPos = -_pos.bottom;
1179
+ }
1180
+
1181
+ if (_same.left) {
1182
+ css.left = 0;
1183
+ xPos = _pos.left;
1184
+ } else {
1185
+ css.right = 0;
1186
+ xPos = -_pos.right;
1187
+ }
1188
+
1189
+ if (window.matchMedia) {
1190
+ // HubSpot/tether#207
1191
+ var retina = window.matchMedia('only screen and (min-resolution: 1.3dppx)').matches || window.matchMedia('only screen and (-webkit-min-device-pixel-ratio: 1.3)').matches;
1192
+ if (!retina) {
1193
+ xPos = Math.round(xPos);
1194
+ yPos = Math.round(yPos);
1195
+ }
1196
+ }
1197
+
1198
+ css[transformKey] = 'translateX(' + xPos + 'px) translateY(' + yPos + 'px)';
1199
+
1200
+ if (transformKey !== 'msTransform') {
1201
+ // The Z transform will keep this in the GPU (faster, and prevents artifacts),
1202
+ // but IE9 doesn't support 3d transforms and will choke.
1203
+ css[transformKey] += " translateZ(0)";
1204
+ }
1205
+ } else {
1206
+ if (_same.top) {
1207
+ css.top = _pos.top + 'px';
1208
+ } else {
1209
+ css.bottom = _pos.bottom + 'px';
1210
+ }
1211
+
1212
+ if (_same.left) {
1213
+ css.left = _pos.left + 'px';
1214
+ } else {
1215
+ css.right = _pos.right + 'px';
1216
+ }
1217
+ }
1218
+ };
1219
+
1220
+ var moved = false;
1221
+ if ((same.page.top || same.page.bottom) && (same.page.left || same.page.right)) {
1222
+ css.position = 'absolute';
1223
+ transcribe(same.page, pos.page);
1224
+ } else if ((same.viewport.top || same.viewport.bottom) && (same.viewport.left || same.viewport.right)) {
1225
+ css.position = 'fixed';
1226
+ transcribe(same.viewport, pos.viewport);
1227
+ } else if (typeof same.offset !== 'undefined' && same.offset.top && same.offset.left) {
1228
+ (function () {
1229
+ css.position = 'absolute';
1230
+ var offsetParent = _this8.cache('target-offsetparent', function () {
1231
+ return getOffsetParent(_this8.target);
1232
+ });
1233
+
1234
+ if (getOffsetParent(_this8.element) !== offsetParent) {
1235
+ defer(function () {
1236
+ _this8.element.parentNode.removeChild(_this8.element);
1237
+ offsetParent.appendChild(_this8.element);
1238
+ });
1239
+ }
1240
+
1241
+ transcribe(same.offset, pos.offset);
1242
+ moved = true;
1243
+ })();
1244
+ } else {
1245
+ css.position = 'absolute';
1246
+ transcribe({ top: true, left: true }, pos.page);
1247
+ }
1248
+
1249
+ if (!moved) {
1250
+ if (this.options.bodyElement) {
1251
+ this.options.bodyElement.appendChild(this.element);
1252
+ } else {
1253
+ var offsetParentIsBody = true;
1254
+ var currentNode = this.element.parentNode;
1255
+ while (currentNode && currentNode.nodeType === 1 && currentNode.tagName !== 'BODY') {
1256
+ if (getComputedStyle(currentNode).position !== 'static') {
1257
+ offsetParentIsBody = false;
1258
+ break;
1259
+ }
1260
+
1261
+ currentNode = currentNode.parentNode;
1262
+ }
1263
+
1264
+ if (!offsetParentIsBody) {
1265
+ this.element.parentNode.removeChild(this.element);
1266
+ this.element.ownerDocument.body.appendChild(this.element);
1267
+ }
1268
+ }
1269
+ }
1270
+
1271
+ // Any css change will trigger a repaint, so let's avoid one if nothing changed
1272
+ var writeCSS = {};
1273
+ var write = false;
1274
+ for (var key in css) {
1275
+ var val = css[key];
1276
+ var elVal = this.element.style[key];
1277
+
1278
+ if (elVal !== val) {
1279
+ write = true;
1280
+ writeCSS[key] = val;
1281
+ }
1282
+ }
1283
+
1284
+ if (write) {
1285
+ defer(function () {
1286
+ extend(_this8.element.style, writeCSS);
1287
+ _this8.trigger('repositioned');
1288
+ });
1289
+ }
1290
+ }
1291
+ }]);
1292
+
1293
+ return TetherClass;
1294
+ })(Evented);
1295
+
1296
+ TetherClass.modules = [];
1297
+
1298
+ TetherBase.position = position;
1299
+
1300
+ var Tether = extend(TetherClass, TetherBase);
1301
+ /* globals TetherBase */
1302
+
1303
+ 'use strict';
1304
+
1305
+ var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();
1306
+
1307
+ var _TetherBase$Utils = TetherBase.Utils;
1308
+ var getBounds = _TetherBase$Utils.getBounds;
1309
+ var extend = _TetherBase$Utils.extend;
1310
+ var updateClasses = _TetherBase$Utils.updateClasses;
1311
+ var defer = _TetherBase$Utils.defer;
1312
+
1313
+ var BOUNDS_FORMAT = ['left', 'top', 'right', 'bottom'];
1314
+
1315
+ function getBoundingRect(tether, to) {
1316
+ if (to === 'scrollParent') {
1317
+ to = tether.scrollParents[0];
1318
+ } else if (to === 'window') {
1319
+ to = [pageXOffset, pageYOffset, innerWidth + pageXOffset, innerHeight + pageYOffset];
1320
+ }
1321
+
1322
+ if (to === document) {
1323
+ to = to.documentElement;
1324
+ }
1325
+
1326
+ if (typeof to.nodeType !== 'undefined') {
1327
+ (function () {
1328
+ var node = to;
1329
+ var size = getBounds(to);
1330
+ var pos = size;
1331
+ var style = getComputedStyle(to);
1332
+
1333
+ to = [pos.left, pos.top, size.width + pos.left, size.height + pos.top];
1334
+
1335
+ // Account any parent Frames scroll offset
1336
+ if (node.ownerDocument !== document) {
1337
+ var win = node.ownerDocument.defaultView;
1338
+ to[0] += win.pageXOffset;
1339
+ to[1] += win.pageYOffset;
1340
+ to[2] += win.pageXOffset;
1341
+ to[3] += win.pageYOffset;
1342
+ }
1343
+
1344
+ BOUNDS_FORMAT.forEach(function (side, i) {
1345
+ side = side[0].toUpperCase() + side.substr(1);
1346
+ if (side === 'Top' || side === 'Left') {
1347
+ to[i] += parseFloat(style['border' + side + 'Width']);
1348
+ } else {
1349
+ to[i] -= parseFloat(style['border' + side + 'Width']);
1350
+ }
1351
+ });
1352
+ })();
1353
+ }
1354
+
1355
+ return to;
1356
+ }
1357
+
1358
+ TetherBase.modules.push({
1359
+ position: function position(_ref) {
1360
+ var _this = this;
1361
+
1362
+ var top = _ref.top;
1363
+ var left = _ref.left;
1364
+ var targetAttachment = _ref.targetAttachment;
1365
+
1366
+ if (!this.options.constraints) {
1367
+ return true;
1368
+ }
1369
+
1370
+ var _cache = this.cache('element-bounds', function () {
1371
+ return getBounds(_this.element);
1372
+ });
1373
+
1374
+ var height = _cache.height;
1375
+ var width = _cache.width;
1376
+
1377
+ if (width === 0 && height === 0 && typeof this.lastSize !== 'undefined') {
1378
+ var _lastSize = this.lastSize;
1379
+
1380
+ // Handle the item getting hidden as a result of our positioning without glitching
1381
+ // the classes in and out
1382
+ width = _lastSize.width;
1383
+ height = _lastSize.height;
1384
+ }
1385
+
1386
+ var targetSize = this.cache('target-bounds', function () {
1387
+ return _this.getTargetBounds();
1388
+ });
1389
+
1390
+ var targetHeight = targetSize.height;
1391
+ var targetWidth = targetSize.width;
1392
+
1393
+ var allClasses = [this.getClass('pinned'), this.getClass('out-of-bounds')];
1394
+
1395
+ this.options.constraints.forEach(function (constraint) {
1396
+ var outOfBoundsClass = constraint.outOfBoundsClass;
1397
+ var pinnedClass = constraint.pinnedClass;
1398
+
1399
+ if (outOfBoundsClass) {
1400
+ allClasses.push(outOfBoundsClass);
1401
+ }
1402
+ if (pinnedClass) {
1403
+ allClasses.push(pinnedClass);
1404
+ }
1405
+ });
1406
+
1407
+ allClasses.forEach(function (cls) {
1408
+ ['left', 'top', 'right', 'bottom'].forEach(function (side) {
1409
+ allClasses.push(cls + '-' + side);
1410
+ });
1411
+ });
1412
+
1413
+ var addClasses = [];
1414
+
1415
+ var tAttachment = extend({}, targetAttachment);
1416
+ var eAttachment = extend({}, this.attachment);
1417
+
1418
+ this.options.constraints.forEach(function (constraint) {
1419
+ var to = constraint.to;
1420
+ var attachment = constraint.attachment;
1421
+ var pin = constraint.pin;
1422
+
1423
+ if (typeof attachment === 'undefined') {
1424
+ attachment = '';
1425
+ }
1426
+
1427
+ var changeAttachX = undefined,
1428
+ changeAttachY = undefined;
1429
+ if (attachment.indexOf(' ') >= 0) {
1430
+ var _attachment$split = attachment.split(' ');
1431
+
1432
+ var _attachment$split2 = _slicedToArray(_attachment$split, 2);
1433
+
1434
+ changeAttachY = _attachment$split2[0];
1435
+ changeAttachX = _attachment$split2[1];
1436
+ } else {
1437
+ changeAttachX = changeAttachY = attachment;
1438
+ }
1439
+
1440
+ var bounds = getBoundingRect(_this, to);
1441
+
1442
+ if (changeAttachY === 'target' || changeAttachY === 'both') {
1443
+ if (top < bounds[1] && tAttachment.top === 'top') {
1444
+ top += targetHeight;
1445
+ tAttachment.top = 'bottom';
1446
+ }
1447
+
1448
+ if (top + height > bounds[3] && tAttachment.top === 'bottom') {
1449
+ top -= targetHeight;
1450
+ tAttachment.top = 'top';
1451
+ }
1452
+ }
1453
+
1454
+ if (changeAttachY === 'together') {
1455
+ if (tAttachment.top === 'top') {
1456
+ if (eAttachment.top === 'bottom' && top < bounds[1]) {
1457
+ top += targetHeight;
1458
+ tAttachment.top = 'bottom';
1459
+
1460
+ top += height;
1461
+ eAttachment.top = 'top';
1462
+ } else if (eAttachment.top === 'top' && top + height > bounds[3] && top - (height - targetHeight) >= bounds[1]) {
1463
+ top -= height - targetHeight;
1464
+ tAttachment.top = 'bottom';
1465
+
1466
+ eAttachment.top = 'bottom';
1467
+ }
1468
+ }
1469
+
1470
+ if (tAttachment.top === 'bottom') {
1471
+ if (eAttachment.top === 'top' && top + height > bounds[3]) {
1472
+ top -= targetHeight;
1473
+ tAttachment.top = 'top';
1474
+
1475
+ top -= height;
1476
+ eAttachment.top = 'bottom';
1477
+ } else if (eAttachment.top === 'bottom' && top < bounds[1] && top + (height * 2 - targetHeight) <= bounds[3]) {
1478
+ top += height - targetHeight;
1479
+ tAttachment.top = 'top';
1480
+
1481
+ eAttachment.top = 'top';
1482
+ }
1483
+ }
1484
+
1485
+ if (tAttachment.top === 'middle') {
1486
+ if (top + height > bounds[3] && eAttachment.top === 'top') {
1487
+ top -= height;
1488
+ eAttachment.top = 'bottom';
1489
+ } else if (top < bounds[1] && eAttachment.top === 'bottom') {
1490
+ top += height;
1491
+ eAttachment.top = 'top';
1492
+ }
1493
+ }
1494
+ }
1495
+
1496
+ if (changeAttachX === 'target' || changeAttachX === 'both') {
1497
+ if (left < bounds[0] && tAttachment.left === 'left') {
1498
+ left += targetWidth;
1499
+ tAttachment.left = 'right';
1500
+ }
1501
+
1502
+ if (left + width > bounds[2] && tAttachment.left === 'right') {
1503
+ left -= targetWidth;
1504
+ tAttachment.left = 'left';
1505
+ }
1506
+ }
1507
+
1508
+ if (changeAttachX === 'together') {
1509
+ if (left < bounds[0] && tAttachment.left === 'left') {
1510
+ if (eAttachment.left === 'right') {
1511
+ left += targetWidth;
1512
+ tAttachment.left = 'right';
1513
+
1514
+ left += width;
1515
+ eAttachment.left = 'left';
1516
+ } else if (eAttachment.left === 'left') {
1517
+ left += targetWidth;
1518
+ tAttachment.left = 'right';
1519
+
1520
+ left -= width;
1521
+ eAttachment.left = 'right';
1522
+ }
1523
+ } else if (left + width > bounds[2] && tAttachment.left === 'right') {
1524
+ if (eAttachment.left === 'left') {
1525
+ left -= targetWidth;
1526
+ tAttachment.left = 'left';
1527
+
1528
+ left -= width;
1529
+ eAttachment.left = 'right';
1530
+ } else if (eAttachment.left === 'right') {
1531
+ left -= targetWidth;
1532
+ tAttachment.left = 'left';
1533
+
1534
+ left += width;
1535
+ eAttachment.left = 'left';
1536
+ }
1537
+ } else if (tAttachment.left === 'center') {
1538
+ if (left + width > bounds[2] && eAttachment.left === 'left') {
1539
+ left -= width;
1540
+ eAttachment.left = 'right';
1541
+ } else if (left < bounds[0] && eAttachment.left === 'right') {
1542
+ left += width;
1543
+ eAttachment.left = 'left';
1544
+ }
1545
+ }
1546
+ }
1547
+
1548
+ if (changeAttachY === 'element' || changeAttachY === 'both') {
1549
+ if (top < bounds[1] && eAttachment.top === 'bottom') {
1550
+ top += height;
1551
+ eAttachment.top = 'top';
1552
+ }
1553
+
1554
+ if (top + height > bounds[3] && eAttachment.top === 'top') {
1555
+ top -= height;
1556
+ eAttachment.top = 'bottom';
1557
+ }
1558
+ }
1559
+
1560
+ if (changeAttachX === 'element' || changeAttachX === 'both') {
1561
+ if (left < bounds[0]) {
1562
+ if (eAttachment.left === 'right') {
1563
+ left += width;
1564
+ eAttachment.left = 'left';
1565
+ } else if (eAttachment.left === 'center') {
1566
+ left += width / 2;
1567
+ eAttachment.left = 'left';
1568
+ }
1569
+ }
1570
+
1571
+ if (left + width > bounds[2]) {
1572
+ if (eAttachment.left === 'left') {
1573
+ left -= width;
1574
+ eAttachment.left = 'right';
1575
+ } else if (eAttachment.left === 'center') {
1576
+ left -= width / 2;
1577
+ eAttachment.left = 'right';
1578
+ }
1579
+ }
1580
+ }
1581
+
1582
+ if (typeof pin === 'string') {
1583
+ pin = pin.split(',').map(function (p) {
1584
+ return p.trim();
1585
+ });
1586
+ } else if (pin === true) {
1587
+ pin = ['top', 'left', 'right', 'bottom'];
1588
+ }
1589
+
1590
+ pin = pin || [];
1591
+
1592
+ var pinned = [];
1593
+ var oob = [];
1594
+
1595
+ if (top < bounds[1]) {
1596
+ if (pin.indexOf('top') >= 0) {
1597
+ top = bounds[1];
1598
+ pinned.push('top');
1599
+ } else {
1600
+ oob.push('top');
1601
+ }
1602
+ }
1603
+
1604
+ if (top + height > bounds[3]) {
1605
+ if (pin.indexOf('bottom') >= 0) {
1606
+ top = bounds[3] - height;
1607
+ pinned.push('bottom');
1608
+ } else {
1609
+ oob.push('bottom');
1610
+ }
1611
+ }
1612
+
1613
+ if (left < bounds[0]) {
1614
+ if (pin.indexOf('left') >= 0) {
1615
+ left = bounds[0];
1616
+ pinned.push('left');
1617
+ } else {
1618
+ oob.push('left');
1619
+ }
1620
+ }
1621
+
1622
+ if (left + width > bounds[2]) {
1623
+ if (pin.indexOf('right') >= 0) {
1624
+ left = bounds[2] - width;
1625
+ pinned.push('right');
1626
+ } else {
1627
+ oob.push('right');
1628
+ }
1629
+ }
1630
+
1631
+ if (pinned.length) {
1632
+ (function () {
1633
+ var pinnedClass = undefined;
1634
+ if (typeof _this.options.pinnedClass !== 'undefined') {
1635
+ pinnedClass = _this.options.pinnedClass;
1636
+ } else {
1637
+ pinnedClass = _this.getClass('pinned');
1638
+ }
1639
+
1640
+ addClasses.push(pinnedClass);
1641
+ pinned.forEach(function (side) {
1642
+ addClasses.push(pinnedClass + '-' + side);
1643
+ });
1644
+ })();
1645
+ }
1646
+
1647
+ if (oob.length) {
1648
+ (function () {
1649
+ var oobClass = undefined;
1650
+ if (typeof _this.options.outOfBoundsClass !== 'undefined') {
1651
+ oobClass = _this.options.outOfBoundsClass;
1652
+ } else {
1653
+ oobClass = _this.getClass('out-of-bounds');
1654
+ }
1655
+
1656
+ addClasses.push(oobClass);
1657
+ oob.forEach(function (side) {
1658
+ addClasses.push(oobClass + '-' + side);
1659
+ });
1660
+ })();
1661
+ }
1662
+
1663
+ if (pinned.indexOf('left') >= 0 || pinned.indexOf('right') >= 0) {
1664
+ eAttachment.left = tAttachment.left = false;
1665
+ }
1666
+ if (pinned.indexOf('top') >= 0 || pinned.indexOf('bottom') >= 0) {
1667
+ eAttachment.top = tAttachment.top = false;
1668
+ }
1669
+
1670
+ if (tAttachment.top !== targetAttachment.top || tAttachment.left !== targetAttachment.left || eAttachment.top !== _this.attachment.top || eAttachment.left !== _this.attachment.left) {
1671
+ _this.updateAttachClasses(eAttachment, tAttachment);
1672
+ _this.trigger('update', {
1673
+ attachment: eAttachment,
1674
+ targetAttachment: tAttachment
1675
+ });
1676
+ }
1677
+ });
1678
+
1679
+ defer(function () {
1680
+ if (!(_this.options.addTargetClasses === false)) {
1681
+ updateClasses(_this.target, addClasses, allClasses);
1682
+ }
1683
+ updateClasses(_this.element, addClasses, allClasses);
1684
+ });
1685
+
1686
+ return { top: top, left: left };
1687
+ }
1688
+ });
1689
+ /* globals TetherBase */
1690
+
1691
+ 'use strict';
1692
+
1693
+ var _TetherBase$Utils = TetherBase.Utils;
1694
+ var getBounds = _TetherBase$Utils.getBounds;
1695
+ var updateClasses = _TetherBase$Utils.updateClasses;
1696
+ var defer = _TetherBase$Utils.defer;
1697
+
1698
+ TetherBase.modules.push({
1699
+ position: function position(_ref) {
1700
+ var _this = this;
1701
+
1702
+ var top = _ref.top;
1703
+ var left = _ref.left;
1704
+
1705
+ var _cache = this.cache('element-bounds', function () {
1706
+ return getBounds(_this.element);
1707
+ });
1708
+
1709
+ var height = _cache.height;
1710
+ var width = _cache.width;
1711
+
1712
+ var targetPos = this.getTargetBounds();
1713
+
1714
+ var bottom = top + height;
1715
+ var right = left + width;
1716
+
1717
+ var abutted = [];
1718
+ if (top <= targetPos.bottom && bottom >= targetPos.top) {
1719
+ ['left', 'right'].forEach(function (side) {
1720
+ var targetPosSide = targetPos[side];
1721
+ if (targetPosSide === left || targetPosSide === right) {
1722
+ abutted.push(side);
1723
+ }
1724
+ });
1725
+ }
1726
+
1727
+ if (left <= targetPos.right && right >= targetPos.left) {
1728
+ ['top', 'bottom'].forEach(function (side) {
1729
+ var targetPosSide = targetPos[side];
1730
+ if (targetPosSide === top || targetPosSide === bottom) {
1731
+ abutted.push(side);
1732
+ }
1733
+ });
1734
+ }
1735
+
1736
+ var allClasses = [];
1737
+ var addClasses = [];
1738
+
1739
+ var sides = ['left', 'top', 'right', 'bottom'];
1740
+ allClasses.push(this.getClass('abutted'));
1741
+ sides.forEach(function (side) {
1742
+ allClasses.push(_this.getClass('abutted') + '-' + side);
1743
+ });
1744
+
1745
+ if (abutted.length) {
1746
+ addClasses.push(this.getClass('abutted'));
1747
+ }
1748
+
1749
+ abutted.forEach(function (side) {
1750
+ addClasses.push(_this.getClass('abutted') + '-' + side);
1751
+ });
1752
+
1753
+ defer(function () {
1754
+ if (!(_this.options.addTargetClasses === false)) {
1755
+ updateClasses(_this.target, addClasses, allClasses);
1756
+ }
1757
+ updateClasses(_this.element, addClasses, allClasses);
1758
+ });
1759
+
1760
+ return true;
1761
+ }
1762
+ });
1763
+ /* globals TetherBase */
1764
+
1765
+ 'use strict';
1766
+
1767
+ var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();
1768
+
1769
+ TetherBase.modules.push({
1770
+ position: function position(_ref) {
1771
+ var top = _ref.top;
1772
+ var left = _ref.left;
1773
+
1774
+ if (!this.options.shift) {
1775
+ return;
1776
+ }
1777
+
1778
+ var shift = this.options.shift;
1779
+ if (typeof this.options.shift === 'function') {
1780
+ shift = this.options.shift.call(this, { top: top, left: left });
1781
+ }
1782
+
1783
+ var shiftTop = undefined,
1784
+ shiftLeft = undefined;
1785
+ if (typeof shift === 'string') {
1786
+ shift = shift.split(' ');
1787
+ shift[1] = shift[1] || shift[0];
1788
+
1789
+ var _shift = shift;
1790
+
1791
+ var _shift2 = _slicedToArray(_shift, 2);
1792
+
1793
+ shiftTop = _shift2[0];
1794
+ shiftLeft = _shift2[1];
1795
+
1796
+ shiftTop = parseFloat(shiftTop, 10);
1797
+ shiftLeft = parseFloat(shiftLeft, 10);
1798
+ } else {
1799
+ shiftTop = shift.top;
1800
+ shiftLeft = shift.left;
1801
+ }
1802
+
1803
+ top += shiftTop;
1804
+ left += shiftLeft;
1805
+
1806
+ return { top: top, left: left };
1807
+ }
1808
+ });
1809
+ return Tether;
1810
+
1811
+ }));
admin/assets/tether/tether.min.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(t,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e(require,exports,module):t.Tether=e()}(this,function(t,e,o){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t){var e=t.getBoundingClientRect(),o={};for(var i in e)o[i]=e[i];if(t.ownerDocument!==document){var r=t.ownerDocument.defaultView.frameElement;if(r){var s=n(r);o.top+=s.top,o.bottom+=s.top,o.left+=s.left,o.right+=s.left}}return o}function r(t){var e=getComputedStyle(t)||{},o=e.position,i=[];if("fixed"===o)return[t];for(var n=t;(n=n.parentNode)&&n&&1===n.nodeType;){var r=void 0;try{r=getComputedStyle(n)}catch(s){}if("undefined"==typeof r||null===r)return i.push(n),i;var a=r,f=a.overflow,l=a.overflowX,h=a.overflowY;/(auto|scroll)/.test(f+h+l)&&("absolute"!==o||["relative","absolute","fixed"].indexOf(r.position)>=0)&&i.push(n)}return i.push(t.ownerDocument.body),t.ownerDocument!==document&&i.push(t.ownerDocument.defaultView),i}function s(){A&&document.body.removeChild(A),A=null}function a(t){var e=void 0;t===document?(e=document,t=document.documentElement):e=t.ownerDocument;var o=e.documentElement,i=n(t),r=P();return i.top-=r.top,i.left-=r.left,"undefined"==typeof i.width&&(i.width=document.body.scrollWidth-i.left-i.right),"undefined"==typeof i.height&&(i.height=document.body.scrollHeight-i.top-i.bottom),i.top=i.top-o.clientTop,i.left=i.left-o.clientLeft,i.right=e.body.clientWidth-i.width-i.left,i.bottom=e.body.clientHeight-i.height-i.top,i}function f(t){return t.offsetParent||document.documentElement}function l(){if(M)return M;var t=document.createElement("div");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");h(e.style,{position:"absolute",top:0,left:0,pointerEvents:"none",visibility:"hidden",width:"200px",height:"150px",overflow:"hidden"}),e.appendChild(t),document.body.appendChild(e);var o=t.offsetWidth;e.style.overflow="scroll";var i=t.offsetWidth;o===i&&(i=e.clientWidth),document.body.removeChild(e);var n=o-i;return M={width:n,height:n}}function h(){var t=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],e=[];return Array.prototype.push.apply(e,arguments),e.slice(1).forEach(function(e){if(e)for(var o in e)({}).hasOwnProperty.call(e,o)&&(t[o]=e[o])}),t}function d(t,e){if("undefined"!=typeof t.classList)e.split(" ").forEach(function(e){e.trim()&&t.classList.remove(e)});else{var o=new RegExp("(^| )"+e.split(" ").join("|")+"( |$)","gi"),i=c(t).replace(o," ");g(t,i)}}function p(t,e){if("undefined"!=typeof t.classList)e.split(" ").forEach(function(e){e.trim()&&t.classList.add(e)});else{d(t,e);var o=c(t)+(" "+e);g(t,o)}}function u(t,e){if("undefined"!=typeof t.classList)return t.classList.contains(e);var o=c(t);return new RegExp("(^| )"+e+"( |$)","gi").test(o)}function c(t){return t.className instanceof t.ownerDocument.defaultView.SVGAnimatedString?t.className.baseVal:t.className}function g(t,e){t.setAttribute("class",e)}function m(t,e,o){o.forEach(function(o){e.indexOf(o)===-1&&u(t,o)&&d(t,o)}),e.forEach(function(e){u(t,e)||p(t,e)})}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function v(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function y(t,e){var o=arguments.length<=2||void 0===arguments[2]?1:arguments[2];return t+o>=e&&e>=t-o}function b(){return"undefined"!=typeof performance&&"undefined"!=typeof performance.now?performance.now():+new Date}function w(){for(var t={top:0,left:0},e=arguments.length,o=Array(e),i=0;i<e;i++)o[i]=arguments[i];return o.forEach(function(e){var o=e.top,i=e.left;"string"==typeof o&&(o=parseFloat(o,10)),"string"==typeof i&&(i=parseFloat(i,10)),t.top+=o,t.left+=i}),t}function C(t,e){return"string"==typeof t.left&&t.left.indexOf("%")!==-1&&(t.left=parseFloat(t.left,10)/100*e.width),"string"==typeof t.top&&t.top.indexOf("%")!==-1&&(t.top=parseFloat(t.top,10)/100*e.height),t}function O(t,e){return"scrollParent"===e?e=t.scrollParents[0]:"window"===e&&(e=[pageXOffset,pageYOffset,innerWidth+pageXOffset,innerHeight+pageYOffset]),e===document&&(e=e.documentElement),"undefined"!=typeof e.nodeType&&!function(){var t=e,o=a(e),i=o,n=getComputedStyle(e);if(e=[i.left,i.top,o.width+i.left,o.height+i.top],t.ownerDocument!==document){var r=t.ownerDocument.defaultView;e[0]+=r.pageXOffset,e[1]+=r.pageYOffset,e[2]+=r.pageXOffset,e[3]+=r.pageYOffset}G.forEach(function(t,o){t=t[0].toUpperCase()+t.substr(1),"Top"===t||"Left"===t?e[o]+=parseFloat(n["border"+t+"Width"]):e[o]-=parseFloat(n["border"+t+"Width"])})}(),e}var E=function(){function t(t,e){for(var o=0;o<e.length;o++){var i=e[o];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,o,i){return o&&t(e.prototype,o),i&&t(e,i),e}}(),x=void 0;"undefined"==typeof x&&(x={modules:[]});var A=null,T=function(){var t=0;return function(){return++t}}(),S={},P=function(){var t=A;t&&document.body.contains(t)||(t=document.createElement("div"),t.setAttribute("data-tether-id",T()),h(t.style,{top:0,left:0,position:"absolute"}),document.body.appendChild(t),A=t);var e=t.getAttribute("data-tether-id");return"undefined"==typeof S[e]&&(S[e]=n(t),k(function(){delete S[e]})),S[e]},M=null,W=[],k=function(t){W.push(t)},_=function(){for(var t=void 0;t=W.pop();)t()},B=function(){function t(){i(this,t)}return E(t,[{key:"on",value:function(t,e,o){var i=!(arguments.length<=3||void 0===arguments[3])&&arguments[3];"undefined"==typeof this.bindings&&(this.bindings={}),"undefined"==typeof this.bindings[t]&&(this.bindings[t]=[]),this.bindings[t].push({handler:e,ctx:o,once:i})}},{key:"once",value:function(t,e,o){this.on(t,e,o,!0)}},{key:"off",value:function(t,e){if("undefined"!=typeof this.bindings&&"undefined"!=typeof this.bindings[t])if("undefined"==typeof e)delete this.bindings[t];else for(var o=0;o<this.bindings[t].length;)this.bindings[t][o].handler===e?this.bindings[t].splice(o,1):++o}},{key:"trigger",value:function(t){if("undefined"!=typeof this.bindings&&this.bindings[t]){for(var e=0,o=arguments.length,i=Array(o>1?o-1:0),n=1;n<o;n++)i[n-1]=arguments[n];for(;e<this.bindings[t].length;){var r=this.bindings[t][e],s=r.handler,a=r.ctx,f=r.once,l=a;"undefined"==typeof l&&(l=this),s.apply(l,i),f?this.bindings[t].splice(e,1):++e}}}}]),t}();x.Utils={getActualBoundingClientRect:n,getScrollParents:r,getBounds:a,getOffsetParent:f,extend:h,addClass:p,removeClass:d,hasClass:u,updateClasses:m,defer:k,flush:_,uniqueId:T,Evented:B,getScrollBarSize:l,removeUtilElements:s};var z=function(){function t(t,e){var o=[],i=!0,n=!1,r=void 0;try{for(var s,a=t[Symbol.iterator]();!(i=(s=a.next()).done)&&(o.push(s.value),!e||o.length!==e);i=!0);}catch(f){n=!0,r=f}finally{try{!i&&a["return"]&&a["return"]()}finally{if(n)throw r}}return o}return function(e,o){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,o);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),E=function(){function t(t,e){for(var o=0;o<e.length;o++){var i=e[o];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,o,i){return o&&t(e.prototype,o),i&&t(e,i),e}}(),j=function(t,e,o){for(var i=!0;i;){var n=t,r=e,s=o;i=!1,null===n&&(n=Function.prototype);var a=Object.getOwnPropertyDescriptor(n,r);if(void 0!==a){if("value"in a)return a.value;var f=a.get;if(void 0===f)return;return f.call(s)}var l=Object.getPrototypeOf(n);if(null===l)return;t=l,e=r,o=s,i=!0,a=l=void 0}};if("undefined"==typeof x)throw new Error("You must include the utils.js file before tether.js");var Y=x.Utils,r=Y.getScrollParents,a=Y.getBounds,f=Y.getOffsetParent,h=Y.extend,p=Y.addClass,d=Y.removeClass,m=Y.updateClasses,k=Y.defer,_=Y.flush,l=Y.getScrollBarSize,s=Y.removeUtilElements,L=function(){if("undefined"==typeof document)return"";for(var t=document.createElement("div"),e=["transform","WebkitTransform","OTransform","MozTransform","msTransform"],o=0;o<e.length;++o){var i=e[o];if(void 0!==t.style[i])return i}}(),D=[],X=function(){D.forEach(function(t){t.position(!1)}),_()};!function(){var t=null,e=null,o=null,i=function n(){return"undefined"!=typeof e&&e>16?(e=Math.min(e-16,250),void(o=setTimeout(n,250))):void("undefined"!=typeof t&&b()-t<10||(null!=o&&(clearTimeout(o),o=null),t=b(),X(),e=b()-t))};"undefined"!=typeof window&&"undefined"!=typeof window.addEventListener&&["resize","scroll","touchmove"].forEach(function(t){window.addEventListener(t,i)})}();var F={center:"center",left:"right",right:"left"},H={middle:"middle",top:"bottom",bottom:"top"},N={top:0,left:0,middle:"50%",center:"50%",bottom:"100%",right:"100%"},U=function(t,e){var o=t.left,i=t.top;return"auto"===o&&(o=F[e.left]),"auto"===i&&(i=H[e.top]),{left:o,top:i}},V=function(t){var e=t.left,o=t.top;return"undefined"!=typeof N[t.left]&&(e=N[t.left]),"undefined"!=typeof N[t.top]&&(o=N[t.top]),{left:e,top:o}},R=function(t){var e=t.split(" "),o=z(e,2),i=o[0],n=o[1];return{top:i,left:n}},q=R,I=function(t){function e(t){var o=this;i(this,e),j(Object.getPrototypeOf(e.prototype),"constructor",this).call(this),this.position=this.position.bind(this),D.push(this),this.history=[],this.setOptions(t,!1),x.modules.forEach(function(t){"undefined"!=typeof t.initialize&&t.initialize.call(o)}),this.position()}return v(e,t),E(e,[{key:"getClass",value:function(){var t=arguments.length<=0||void 0===arguments[0]?"":arguments[0],e=this.options.classes;return"undefined"!=typeof e&&e[t]?this.options.classes[t]:this.options.classPrefix?this.options.classPrefix+"-"+t:t}},{key:"setOptions",value:function(t){var e=this,o=arguments.length<=1||void 0===arguments[1]||arguments[1],i={offset:"0 0",targetOffset:"0 0",targetAttachment:"auto auto",classPrefix:"tether"};this.options=h(i,t);var n=this.options,s=n.element,a=n.target,f=n.targetModifier;if(this.element=s,this.target=a,this.targetModifier=f,"viewport"===this.target?(this.target=document.body,this.targetModifier="visible"):"scroll-handle"===this.target&&(this.target=document.body,this.targetModifier="scroll-handle"),["element","target"].forEach(function(t){if("undefined"==typeof e[t])throw new Error("Tether Error: Both element and target must be defined");"undefined"!=typeof e[t].jquery?e[t]=e[t][0]:"string"==typeof e[t]&&(e[t]=document.querySelector(e[t]))}),p(this.element,this.getClass("element")),this.options.addTargetClasses!==!1&&p(this.target,this.getClass("target")),!this.options.attachment)throw new Error("Tether Error: You must provide an attachment");this.targetAttachment=q(this.options.targetAttachment),this.attachment=q(this.options.attachment),this.offset=R(this.options.offset),this.targetOffset=R(this.options.targetOffset),"undefined"!=typeof this.scrollParents&&this.disable(),"scroll-handle"===this.targetModifier?this.scrollParents=[this.target]:this.scrollParents=r(this.target),this.options.enabled!==!1&&this.enable(o)}},{key:"getTargetBounds",value:function(){if("undefined"==typeof this.targetModifier)return a(this.target);if("visible"===this.targetModifier){if(this.target===document.body)return{top:pageYOffset,left:pageXOffset,height:innerHeight,width:innerWidth};var t=a(this.target),e={height:t.height,width:t.width,top:t.top,left:t.left};return e.height=Math.min(e.height,t.height-(pageYOffset-t.top)),e.height=Math.min(e.height,t.height-(t.top+t.height-(pageYOffset+innerHeight))),e.height=Math.min(innerHeight,e.height),e.height-=2,e.width=Math.min(e.width,t.width-(pageXOffset-t.left)),e.width=Math.min(e.width,t.width-(t.left+t.width-(pageXOffset+innerWidth))),e.width=Math.min(innerWidth,e.width),e.width-=2,e.top<pageYOffset&&(e.top=pageYOffset),e.left<pageXOffset&&(e.left=pageXOffset),e}if("scroll-handle"===this.targetModifier){var t=void 0,o=this.target;o===document.body?(o=document.documentElement,t={left:pageXOffset,top:pageYOffset,height:innerHeight,width:innerWidth}):t=a(o);var i=getComputedStyle(o),n=o.scrollWidth>o.clientWidth||[i.overflow,i.overflowX].indexOf("scroll")>=0||this.target!==document.body,r=0;n&&(r=15);var s=t.height-parseFloat(i.borderTopWidth)-parseFloat(i.borderBottomWidth)-r,e={width:15,height:.975*s*(s/o.scrollHeight),left:t.left+t.width-parseFloat(i.borderLeftWidth)-15},f=0;s<408&&this.target===document.body&&(f=-11e-5*Math.pow(s,2)-.00727*s+22.58),this.target!==document.body&&(e.height=Math.max(e.height,24));var l=this.target.scrollTop/(o.scrollHeight-s);return e.top=l*(s-e.height-f)+t.top+parseFloat(i.borderTopWidth),this.target===document.body&&(e.height=Math.max(e.height,24)),e}}},{key:"clearCache",value:function(){this._cache={}}},{key:"cache",value:function(t,e){return"undefined"==typeof this._cache&&(this._cache={}),"undefined"==typeof this._cache[t]&&(this._cache[t]=e.call(this)),this._cache[t]}},{key:"enable",value:function(){var t=this,e=arguments.length<=0||void 0===arguments[0]||arguments[0];this.options.addTargetClasses!==!1&&p(this.target,this.getClass("enabled")),p(this.element,this.getClass("enabled")),this.enabled=!0,this.scrollParents.forEach(function(e){e!==t.target.ownerDocument&&e.addEventListener("scroll",t.position)}),e&&this.position()}},{key:"disable",value:function(){var t=this;d(this.target,this.getClass("enabled")),d(this.element,this.getClass("enabled")),this.enabled=!1,"undefined"!=typeof this.scrollParents&&this.scrollParents.forEach(function(e){e.removeEventListener("scroll",t.position)})}},{key:"destroy",value:function(){var t=this;this.disable(),D.forEach(function(e,o){e===t&&D.splice(o,1)}),0===D.length&&s()}},{key:"updateAttachClasses",value:function(t,e){var o=this;t=t||this.attachment,e=e||this.targetAttachment;var i=["left","top","bottom","right","middle","center"];"undefined"!=typeof this._addAttachClasses&&this._addAttachClasses.length&&this._addAttachClasses.splice(0,this._addAttachClasses.length),"undefined"==typeof this._addAttachClasses&&(this._addAttachClasses=[]);var n=this._addAttachClasses;t.top&&n.push(this.getClass("element-attached")+"-"+t.top),t.left&&n.push(this.getClass("element-attached")+"-"+t.left),e.top&&n.push(this.getClass("target-attached")+"-"+e.top),e.left&&n.push(this.getClass("target-attached")+"-"+e.left);var r=[];i.forEach(function(t){r.push(o.getClass("element-attached")+"-"+t),r.push(o.getClass("target-attached")+"-"+t)}),k(function(){"undefined"!=typeof o._addAttachClasses&&(m(o.element,o._addAttachClasses,r),o.options.addTargetClasses!==!1&&m(o.target,o._addAttachClasses,r),delete o._addAttachClasses)})}},{key:"position",value:function(){var t=this,e=arguments.length<=0||void 0===arguments[0]||arguments[0];if(this.enabled){this.clearCache();var o=U(this.targetAttachment,this.attachment);this.updateAttachClasses(this.attachment,o);var i=this.cache("element-bounds",function(){return a(t.element)}),n=i.width,r=i.height;if(0===n&&0===r&&"undefined"!=typeof this.lastSize){var s=this.lastSize;n=s.width,r=s.height}else this.lastSize={width:n,height:r};var h=this.cache("target-bounds",function(){return t.getTargetBounds()}),d=h,p=C(V(this.attachment),{width:n,height:r}),u=C(V(o),d),c=C(this.offset,{width:n,height:r}),g=C(this.targetOffset,d);p=w(p,c),u=w(u,g);for(var m=h.left+u.left-p.left,v=h.top+u.top-p.top,y=0;y<x.modules.length;++y){var b=x.modules[y],O=b.position.call(this,{left:m,top:v,targetAttachment:o,targetPos:h,elementPos:i,offset:p,targetOffset:u,manualOffset:c,manualTargetOffset:g,scrollbarSize:S,attachment:this.attachment});if(O===!1)return!1;"undefined"!=typeof O&&"object"==typeof O&&(v=O.top,m=O.left)}var E={page:{top:v,left:m},viewport:{top:v-pageYOffset,bottom:pageYOffset-v-r+innerHeight,left:m-pageXOffset,right:pageXOffset-m-n+innerWidth}},A=this.target.ownerDocument,T=A.defaultView,S=void 0;return T.innerHeight>A.documentElement.clientHeight&&(S=this.cache("scrollbar-size",l),E.viewport.bottom-=S.height),T.innerWidth>A.documentElement.clientWidth&&(S=this.cache("scrollbar-size",l),E.viewport.right-=S.width),["","static"].indexOf(A.body.style.position)!==-1&&["","static"].indexOf(A.body.parentElement.style.position)!==-1||(E.page.bottom=A.body.scrollHeight-v-r,E.page.right=A.body.scrollWidth-m-n),"undefined"!=typeof this.options.optimizations&&this.options.optimizations.moveElement!==!1&&"undefined"==typeof this.targetModifier&&!function(){var e=t.cache("target-offsetparent",function(){return f(t.target)}),o=t.cache("target-offsetparent-bounds",function(){return a(e)}),i=getComputedStyle(e),n=o,r={};if(["Top","Left","Bottom","Right"].forEach(function(t){r[t.toLowerCase()]=parseFloat(i["border"+t+"Width"])}),o.right=A.body.scrollWidth-o.left-n.width+r.right,o.bottom=A.body.scrollHeight-o.top-n.height+r.bottom,E.page.top>=o.top+r.top&&E.page.bottom>=o.bottom&&E.page.left>=o.left+r.left&&E.page.right>=o.right){var s=e.scrollTop,l=e.scrollLeft;E.offset={top:E.page.top-o.top+s-r.top,left:E.page.left-o.left+l-r.left}}}(),this.move(E),this.history.unshift(E),this.history.length>3&&this.history.pop(),e&&_(),!0}}},{key:"move",value:function(t){var e=this;if("undefined"!=typeof this.element.parentNode){var o={};for(var i in t){o[i]={};for(var n in t[i]){for(var r=!1,s=0;s<this.history.length;++s){var a=this.history[s];if("undefined"!=typeof a[i]&&!y(a[i][n],t[i][n])){r=!0;break}}r||(o[i][n]=!0)}}var l={top:"",left:"",right:"",bottom:""},d=function(t,o){var i="undefined"!=typeof e.options.optimizations,n=i?e.options.optimizations.gpu:null;if(n!==!1){var r=void 0,s=void 0;if(t.top?(l.top=0,r=o.top):(l.bottom=0,r=-o.bottom),t.left?(l.left=0,s=o.left):(l.right=0,s=-o.right),window.matchMedia){var a=window.matchMedia("only screen and (min-resolution: 1.3dppx)").matches||window.matchMedia("only screen and (-webkit-min-device-pixel-ratio: 1.3)").matches;a||(s=Math.round(s),r=Math.round(r))}l[L]="translateX("+s+"px) translateY("+r+"px)","msTransform"!==L&&(l[L]+=" translateZ(0)")}else t.top?l.top=o.top+"px":l.bottom=o.bottom+"px",t.left?l.left=o.left+"px":l.right=o.right+"px"},p=!1;if((o.page.top||o.page.bottom)&&(o.page.left||o.page.right)?(l.position="absolute",d(o.page,t.page)):(o.viewport.top||o.viewport.bottom)&&(o.viewport.left||o.viewport.right)?(l.position="fixed",d(o.viewport,t.viewport)):"undefined"!=typeof o.offset&&o.offset.top&&o.offset.left?!function(){l.position="absolute";var i=e.cache("target-offsetparent",function(){return f(e.target)});f(e.element)!==i&&k(function(){e.element.parentNode.removeChild(e.element),i.appendChild(e.element)}),d(o.offset,t.offset),p=!0}():(l.position="absolute",d({top:!0,left:!0},t.page)),!p)if(this.options.bodyElement)this.options.bodyElement.appendChild(this.element);else{for(var u=!0,c=this.element.parentNode;c&&1===c.nodeType&&"BODY"!==c.tagName;){if("static"!==getComputedStyle(c).position){u=!1;break}c=c.parentNode}u||(this.element.parentNode.removeChild(this.element),this.element.ownerDocument.body.appendChild(this.element))}var g={},m=!1;for(var n in l){var v=l[n],b=this.element.style[n];b!==v&&(m=!0,g[n]=v)}m&&k(function(){h(e.element.style,g),e.trigger("repositioned")})}}}]),e}(B);I.modules=[],x.position=X;var $=h(I,x),z=function(){function t(t,e){var o=[],i=!0,n=!1,r=void 0;try{for(var s,a=t[Symbol.iterator]();!(i=(s=a.next()).done)&&(o.push(s.value),!e||o.length!==e);i=!0);}catch(f){n=!0,r=f}finally{try{!i&&a["return"]&&a["return"]()}finally{if(n)throw r}}return o}return function(e,o){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,o);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Y=x.Utils,a=Y.getBounds,h=Y.extend,m=Y.updateClasses,k=Y.defer,G=["left","top","right","bottom"];x.modules.push({position:function(t){var e=this,o=t.top,i=t.left,n=t.targetAttachment;if(!this.options.constraints)return!0;var r=this.cache("element-bounds",function(){return a(e.element)}),s=r.height,f=r.width;if(0===f&&0===s&&"undefined"!=typeof this.lastSize){var l=this.lastSize;f=l.width,s=l.height}var d=this.cache("target-bounds",function(){return e.getTargetBounds()}),p=d.height,u=d.width,c=[this.getClass("pinned"),this.getClass("out-of-bounds")];this.options.constraints.forEach(function(t){var e=t.outOfBoundsClass,o=t.pinnedClass;e&&c.push(e),o&&c.push(o)}),c.forEach(function(t){["left","top","right","bottom"].forEach(function(e){c.push(t+"-"+e)})});var g=[],v=h({},n),y=h({},this.attachment);return this.options.constraints.forEach(function(t){var r=t.to,a=t.attachment,l=t.pin;"undefined"==typeof a&&(a="");var h=void 0,d=void 0;if(a.indexOf(" ")>=0){var c=a.split(" "),m=z(c,2);d=m[0],h=m[1]}else h=d=a;var b=O(e,r);"target"!==d&&"both"!==d||(o<b[1]&&"top"===v.top&&(o+=p,v.top="bottom"),o+s>b[3]&&"bottom"===v.top&&(o-=p,v.top="top")),"together"===d&&("top"===v.top&&("bottom"===y.top&&o<b[1]?(o+=p,v.top="bottom",o+=s,y.top="top"):"top"===y.top&&o+s>b[3]&&o-(s-p)>=b[1]&&(o-=s-p,v.top="bottom",y.top="bottom")),"bottom"===v.top&&("top"===y.top&&o+s>b[3]?(o-=p,v.top="top",o-=s,y.top="bottom"):"bottom"===y.top&&o<b[1]&&o+(2*s-p)<=b[3]&&(o+=s-p,v.top="top",y.top="top")),"middle"===v.top&&(o+s>b[3]&&"top"===y.top?(o-=s,y.top="bottom"):o<b[1]&&"bottom"===y.top&&(o+=s,y.top="top"))),"target"!==h&&"both"!==h||(i<b[0]&&"left"===v.left&&(i+=u,v.left="right"),i+f>b[2]&&"right"===v.left&&(i-=u,v.left="left")),"together"===h&&(i<b[0]&&"left"===v.left?"right"===y.left?(i+=u,v.left="right",i+=f,y.left="left"):"left"===y.left&&(i+=u,v.left="right",i-=f,y.left="right"):i+f>b[2]&&"right"===v.left?"left"===y.left?(i-=u,v.left="left",i-=f,y.left="right"):"right"===y.left&&(i-=u,v.left="left",i+=f,y.left="left"):"center"===v.left&&(i+f>b[2]&&"left"===y.left?(i-=f,y.left="right"):i<b[0]&&"right"===y.left&&(i+=f,y.left="left"))),"element"!==d&&"both"!==d||(o<b[1]&&"bottom"===y.top&&(o+=s,y.top="top"),o+s>b[3]&&"top"===y.top&&(o-=s,y.top="bottom")),"element"!==h&&"both"!==h||(i<b[0]&&("right"===y.left?(i+=f,y.left="left"):"center"===y.left&&(i+=f/2,y.left="left")),i+f>b[2]&&("left"===y.left?(i-=f,y.left="right"):"center"===y.left&&(i-=f/2,y.left="right"))),"string"==typeof l?l=l.split(",").map(function(t){return t.trim()}):l===!0&&(l=["top","left","right","bottom"]),l=l||[];var w=[],C=[];o<b[1]&&(l.indexOf("top")>=0?(o=b[1],w.push("top")):C.push("top")),o+s>b[3]&&(l.indexOf("bottom")>=0?(o=b[3]-s,w.push("bottom")):C.push("bottom")),i<b[0]&&(l.indexOf("left")>=0?(i=b[0],w.push("left")):C.push("left")),i+f>b[2]&&(l.indexOf("right")>=0?(i=b[2]-f,w.push("right")):C.push("right")),w.length&&!function(){var t=void 0;t="undefined"!=typeof e.options.pinnedClass?e.options.pinnedClass:e.getClass("pinned"),g.push(t),w.forEach(function(e){g.push(t+"-"+e)})}(),C.length&&!function(){var t=void 0;t="undefined"!=typeof e.options.outOfBoundsClass?e.options.outOfBoundsClass:e.getClass("out-of-bounds"),g.push(t),C.forEach(function(e){g.push(t+"-"+e)})}(),(w.indexOf("left")>=0||w.indexOf("right")>=0)&&(y.left=v.left=!1),(w.indexOf("top")>=0||w.indexOf("bottom")>=0)&&(y.top=v.top=!1),v.top===n.top&&v.left===n.left&&y.top===e.attachment.top&&y.left===e.attachment.left||(e.updateAttachClasses(y,v),e.trigger("update",{attachment:y,targetAttachment:v}))}),k(function(){e.options.addTargetClasses!==!1&&m(e.target,g,c),m(e.element,g,c)}),{top:o,left:i}}});var Y=x.Utils,a=Y.getBounds,m=Y.updateClasses,k=Y.defer;x.modules.push({position:function(t){var e=this,o=t.top,i=t.left,n=this.cache("element-bounds",function(){return a(e.element)}),r=n.height,s=n.width,f=this.getTargetBounds(),l=o+r,h=i+s,d=[];o<=f.bottom&&l>=f.top&&["left","right"].forEach(function(t){var e=f[t];e!==i&&e!==h||d.push(t)}),i<=f.right&&h>=f.left&&["top","bottom"].forEach(function(t){var e=f[t];e!==o&&e!==l||d.push(t)});var p=[],u=[],c=["left","top","right","bottom"];return p.push(this.getClass("abutted")),c.forEach(function(t){p.push(e.getClass("abutted")+"-"+t)}),d.length&&u.push(this.getClass("abutted")),d.forEach(function(t){u.push(e.getClass("abutted")+"-"+t)}),k(function(){e.options.addTargetClasses!==!1&&m(e.target,u,p),m(e.element,u,p)}),!0}});var z=function(){function t(t,e){var o=[],i=!0,n=!1,r=void 0;try{for(var s,a=t[Symbol.iterator]();!(i=(s=a.next()).done)&&(o.push(s.value),!e||o.length!==e);i=!0);}catch(f){n=!0,r=f}finally{try{!i&&a["return"]&&a["return"]()}finally{if(n)throw r}}return o}return function(e,o){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,o);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();return x.modules.push({position:function(t){var e=t.top,o=t.left;if(this.options.shift){var i=this.options.shift;"function"==typeof this.options.shift&&(i=this.options.shift.call(this,{top:e,left:o}));var n=void 0,r=void 0;if("string"==typeof i){i=i.split(" "),i[1]=i[1]||i[0];var s=i,a=z(s,2);n=a[0],r=a[1],n=parseFloat(n,10),r=parseFloat(r,10)}else n=i.top,r=i.left;return e+=n,o+=r,{top:e,left:o}}}}),$});
{assets → admin/assets/vendor}/colorbox/colorbox.css RENAMED
File without changes
{assets → admin/assets/vendor}/colorbox/images/border.png RENAMED
File without changes
{assets → admin/assets/vendor}/colorbox/images/controls.png RENAMED
File without changes
{assets → admin/assets/vendor}/colorbox/images/ie6/borderBottomCenter.png RENAMED
File without changes
{assets → admin/assets/vendor}/colorbox/images/ie6/borderBottomLeft.png RENAMED
File without changes
{assets → admin/assets/vendor}/colorbox/images/ie6/borderBottomRight.png RENAMED
File without changes
{assets → admin/assets/vendor}/colorbox/images/ie6/borderMiddleLeft.png RENAMED
File without changes
{assets → admin/assets/vendor}/colorbox/images/ie6/borderMiddleRight.png RENAMED
File without changes
{assets → admin/assets/vendor}/colorbox/images/ie6/borderTopCenter.png RENAMED
File without changes
{assets → admin/assets/vendor}/colorbox/images/ie6/borderTopLeft.png RENAMED
File without changes
{assets → admin/assets/vendor}/colorbox/images/ie6/borderTopRight.png RENAMED
File without changes
{assets → admin/assets/vendor}/colorbox/images/loading.gif RENAMED
File without changes
{assets → admin/assets/vendor}/colorbox/images/loading_background.png RENAMED
File without changes
{assets → admin/assets/vendor}/colorbox/images/overlay.png RENAMED
File without changes
{assets → admin/assets/vendor}/colorbox/jquery.colorbox-min.js RENAMED
File without changes
{assets → admin/assets/vendor}/tipsy/jquery.tipsy.js RENAMED
File without changes
{assets → admin/assets/vendor}/tipsy/tipsy.css RENAMED
File without changes
admin/images/features/auto-optimize.png ADDED
Binary file
admin/images/features/automatic-clean-ups.png ADDED
Binary file
admin/images/features/automatically cleans.png ADDED
Binary file
admin/images/features/choice-n-flexibility.png ADDED
Binary file
admin/images/features/displays-database-table-sta.png ADDED
Binary file
admin/images/features/enables-disables-trackbacks.png ADDED
Binary file
admin/images/features/enhanced-robustness.png ADDED
Binary file
admin/images/features/keyy_logo.png ADDED
Binary file
admin/images/features/logging-n-reporting.png ADDED
Binary file
admin/images/features/metaslider_logo.png ADDED
Binary file
admin/images/features/multisite-support.png ADDED
Binary file
admin/images/features/number_of_weeks.png ADDED
Binary file
admin/images/features/optimize-individual.png ADDED
Binary file
admin/images/features/premium-support.png ADDED
Binary file
admin/images/features/remove-unwanted-img.png ADDED
Binary file
admin/images/features/scheduling.png ADDED
Binary file
admin/images/features/updraftcentral_logo.png ADDED
Binary file
admin/images/features/updraftplus_logo.png ADDED
Binary file
admin/images/features/wpo_logo.png ADDED
Binary file
admin/images/keyy_logo.png ADDED
Binary file
admin/images/metaslider_logo.png ADDED
Binary file
admin/images/metaslider_logo3.png ADDED
Binary file
admin/images/metaslider_logo_large.png ADDED
Binary file
admin/images/notices/keyy_logo.png ADDED
Binary file
admin/images/notices/metaslider_logo.png ADDED
Binary file
admin/images/notices/updraft_logo.png ADDED
Binary file
admin/images/notices/wp_optimize_logo.png ADDED
Binary file
admin/images/seasonal/black_friday.png ADDED
Binary file
admin/images/seasonal/christmas.png ADDED
Binary file
admin/images/seasonal/new_year.png ADDED
Binary file
admin/images/seasonal/spring.png ADDED
Binary file
admin/images/seasonal/summer.png ADDED
Binary file
admin/images/updraft_logo.png ADDED
Binary file
admin/images/wp_optimize_logo.png ADDED
Binary file
admin/lib/Updraft_Notices.php ADDED
@@ -0,0 +1,212 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if (!defined('ABSPATH')) die('No direct access allowed');
4
+
5
+ /**
6
+ * If we ever change the API of the Updraft_Notices class, then we'll need to rename and version it, e.g. Updraft_Notices_1_0, because otherwise a plugin may find that it's loaded an older instance than it wanted from another plugin.
7
+ */
8
+ abstract class Updraft_Notices_1_0 {
9
+
10
+ protected $notices_content;
11
+
12
+ /**
13
+ * These variables are just short-hands to be used in advert content.
14
+ *
15
+ * @var array
16
+ */
17
+ protected $dashboard_top = array('top');
18
+
19
+ protected $dashboard_top_or_report = array('top', 'report', 'report-plain');
20
+
21
+ protected $dashboard_bottom_or_report = array('bottom', 'report', 'report-plain');
22
+
23
+ protected $anywhere = array('top', 'bottom', 'report', 'report-plain');
24
+
25
+ protected $autobackup = array('autobackup');
26
+
27
+ protected $autobackup_bottom_or_report = array('autobackup', 'bottom', 'report', 'report-plain');
28
+
29
+ /**
30
+ * This method returns any parent notices to the child caller
31
+ *
32
+ * @return Array returns an array of notices
33
+ */
34
+ protected function populate_notices_content() {
35
+ // Global adverts that appear in all products will be returned to the child to display.
36
+ return array();
37
+ }
38
+
39
+ /**
40
+ * This method is called to setup the notices
41
+ */
42
+ abstract protected function notices_init();
43
+
44
+ /**
45
+ * This method will check if the specified plugin is installed and if it is will return false otherwise returns true and the notice can be displayed
46
+ *
47
+ * @param String $product the plugin name to check
48
+ * @param boolean $also_require_active a bool value to indicate if the plugin has to be active or not
49
+ * @return boolean a bool value to indicate if the notice can be displayed or not
50
+ */
51
+ protected function is_plugin_installed($product = null, $also_require_active = false) {
52
+ if ($also_require_active) return class_exists($product);
53
+ if (!function_exists('get_plugins')) include_once(ABSPATH.'wp-admin/includes/plugin.php');
54
+ $plugins = get_plugins();
55
+ $product_file = false;
56
+ foreach ($plugins as $key => $value) {
57
+ if ($value['TextDomain'] == $product) {
58
+ // We have found the plugin so return false so that we do not display this advert.
59
+ return false;
60
+ }
61
+ }
62
+ return true;
63
+ }
64
+
65
+ /**
66
+ * This method will work out if the user is using a non english language and if so returns true so that they can see the translation advert.
67
+ *
68
+ * @param String $plugin_base_dir the plugin base directory
69
+ * @param String $product_name the name of the plugin
70
+ * @return Boolean returns true if the user is using a non english language and could translate otherwise false
71
+ */
72
+ protected function translation_needed($plugin_base_dir, $product_name) {
73
+ $wplang = get_locale();
74
+ if (strlen($wplang) < 1 || 'en_US' == $wplang || 'en_GB' == $wplang) return false;
75
+ if (defined('WP_LANG_DIR') && is_file(WP_LANG_DIR.'/plugins/'.$product_name.'-'.$wplang.'.mo')) return false;
76
+ if (is_file($plugin_base_dir.'/languages/'.$product_name.'-'.$wplang.'.mo')) return false;
77
+ return true;
78
+ }
79
+
80
+ /**
81
+ * This method is used to generate the correct URL output for the start of the URL
82
+ *
83
+ * @param Boolean $html_allowed a boolean value to indicate if HTML can be used or not
84
+ * @param String $url the url to use
85
+ * @param Boolean $https a boolean value to indicate if https should be used or not
86
+ * @param String $website_home a string to be displayed
87
+ * @return String returns a string of the completed url
88
+ */
89
+ protected function url_start($html_allowed = false, $url, $https = false, $website_home = null) {
90
+ $proto = ($https) ? 'https' : 'http';
91
+ if (strpos($url, $website_home) !== false) {
92
+ return (($html_allowed) ? "<a href=".apply_filters(str_replace('.', '_', $website_home).'_link', $proto.'://'.$url).">" : "");
93
+ } else {
94
+ return (($html_allowed) ? '<a href="'.$proto.'://'.$url.'">' : "");
95
+ }
96
+ }
97
+ /**
98
+ * This method is used to generate the correct URL output for the end of the URL
99
+ *
100
+ * @param Boolean $html_allowed a boolean value to indicate if HTML can be used or not
101
+ * @param String $url the url to use
102
+ * @param Boolean $https a boolean value to indicate if https should be used or not
103
+ * @param String $website_home a string to be displayed
104
+ * @return String returns a string of the completed url
105
+ */
106
+ protected function url_end($html_allowed, $url, $https = false) {
107
+ $proto = (($https) ? 'https' : 'http');
108
+ return (($html_allowed) ? '</a>' : " (".$proto."://".$url.")");
109
+ }
110
+
111
+ /**
112
+ * This method prepares the notice for display
113
+ *
114
+ * @param Boolean|String $notice the notice to display or false if we want a random one
115
+ * @param string $position the position to display the notice in
116
+ * @param boolean $return_instead_of_echo a bool to indicate if the notice should be returned or printed
117
+ * @return String a notice to display
118
+ */
119
+ public function do_notice($notice = false, $position = 'top', $return_instead_of_echo = false) {
120
+
121
+ $this->notices_init();
122
+
123
+ if (false === $notice) $notice = apply_filters('updraft_notices_force_id', false, $this);
124
+
125
+ $notice_content = $this->get_notice_data($notice, $position);
126
+
127
+ if (false != $notice_content) {
128
+ return $this->render_specified_notice($notice_content, $return_instead_of_echo, $position);
129
+ }
130
+ }
131
+
132
+ /**
133
+ * This method will return a notice ready for display.
134
+ *
135
+ * @param boolean $notice Sends True or False if there are notices to show.
136
+ * @param string $position Which screen position the notice is.
137
+ * @return array Returns Notice data.
138
+ */
139
+ protected function get_notice_data($notice = false, $position = 'top') {
140
+
141
+ // If a specific notice has been passed to this method then return that notice.
142
+ if ($notice) {
143
+ if (!isset($this->notices_content[$notice])) return false;
144
+
145
+ // Does the notice support the position specified?
146
+ if (isset($this->notices_content[$notice]['supported_positions']) && !in_array($position, $this->notices_content[$notice]['supported_positions'])) return false;
147
+ // First check if the advert passed can be displayed and hasn't been dismissed, we do this by checking what dismissed value we should be checking.
148
+ $dismiss_time = $this->notices_content[$notice]['dismiss_time'];
149
+
150
+ $dismiss = $this->check_notice_dismissed($dismiss_time);
151
+
152
+ if ($dismiss) return false;
153
+
154
+ return $this->notices_content[$notice];
155
+ }
156
+
157
+ // Create an array to add non-seasonal adverts to so that if a seasonal advert can't be returned we can choose a random advert from this array.
158
+ $available_notices = array();
159
+
160
+ // If Advert wasn't passed then next we should check to see if a seasonal advert can be returned.
161
+ foreach ($this->notices_content as $notice_id => $notice_data) {
162
+ // Does the notice support the position specified?
163
+ if (isset($this->notices_content[$notice_id]['supported_positions']) && !in_array($position, $this->notices_content[$notice_id]['supported_positions'])) continue;
164
+ // If the advert has a validity function, then require the advert to be valid.
165
+ if (!empty($notice_data['validity_function']) && !call_user_func(array($this, $notice_data['validity_function']))) continue;
166
+
167
+
168
+ if (isset($notice_data['valid_from']) && isset($notice_data['valid_to'])) {
169
+ if ($this->skip_seasonal_notices($notice_data)) return $notice_data;
170
+ } else {
171
+ $dismiss_time = $this->notices_content[$notice_id]['dismiss_time'];
172
+ $dismiss = $this->check_notice_dismissed($dismiss_time);
173
+
174
+ if (!$dismiss) $available_notices[$notice_id] = $notice_data;
175
+ }
176
+ }
177
+
178
+ if (empty($available_notices)) return false;
179
+
180
+ // If a seasonal advert can't be returned then we will return a random advert.
181
+ // Using shuffle here as something like rand which produces a random number and uses that as the array index fails, this is because in future an advert may not be numbered and could have a string as its key which will then cause errors.
182
+ shuffle($available_notices);
183
+ return $available_notices[0];
184
+ }
185
+
186
+ /**
187
+ * This method should be overwritten by the child class if they have seasonal notices
188
+ *
189
+ * @param String $notice_data the notice to check if it should be skipped or not
190
+ * @return Boolean returns false if the notice can be displayed
191
+ */
192
+ protected function skip_seasonal_notices($notice_data) {
193
+ return false;
194
+ }
195
+
196
+ /**
197
+ * This method returns the affilate ID
198
+ *
199
+ * @return Integer an affilate id to return
200
+ */
201
+ public function get_affiliate_id() {
202
+ return $this->self_affiliate_id;
203
+ }
204
+
205
+ /**
206
+ * This method checks to see if the notices dismiss_time parameter has been dismissed
207
+ *
208
+ * @param String $dismiss_time a string containing the dimiss time ID
209
+ * @return Boolaen returns true if the notice has been dismissed and shouldn't be shown otherwise display it
210
+ */
211
+ abstract protected function check_notice_dismissed($dismiss_time);
212
+ }
admin/lib/helpers.php ADDED
@@ -0,0 +1,170 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if (!defined('ABSPATH')) die('No direct access.');
4
+
5
+ /**
6
+ * Will be truthy if the plugin is installed
7
+ * @param string name of the plugin 'ml-slider'
8
+ * @return bool|string - will return path, ex. 'ml-slider/ml-slider.php'
9
+ */
10
+ function metaslider_is_plugin_installed($name) {
11
+ foreach (get_plugins() as $plugin => $data) {
12
+ if ($data['TextDomain'] == $name)
13
+ return $plugin;
14
+ }
15
+ return false;
16
+ }
17
+ /**
18
+ * checks if metaslider pro is installed
19
+ *
20
+ * @return bool
21
+ */
22
+ function metaslider_is_pro_installed() {
23
+ return (bool) metaslider_is_plugin_installed('ml-slider-pro');
24
+ }
25
+
26
+ /**
27
+ * Will be true if the plugin is active
28
+ *
29
+ * @return bool
30
+ */
31
+ function metaslider_is_pro_active() {
32
+ return is_plugin_active(metaslider_is_plugin_installed('ml-slider-pro'));
33
+ }
34
+ /**
35
+ * Returns true if the user does not have the pro version installed
36
+ * @return bool
37
+ */
38
+ function metaslider_sees_upgrade_page() {
39
+ return (bool) apply_filters('metaslider_show_upgrade_page', !metaslider_is_pro_installed());
40
+ }
41
+
42
+ /**
43
+ * Returns true if the user does not have the pro version installed
44
+ * @return bool
45
+ */
46
+ function metaslider_sees_call_to_action() {
47
+ return (bool) apply_filters('metaslider_show_upgrade_page', !metaslider_is_pro_installed());
48
+ }
49
+
50
+ /**
51
+ * Returns true if the user is ready to see notices. Exceptions include
52
+ * when they have no slideshows (first start) and while on the initial tour.
53
+ *
54
+ * @return bool
55
+ */
56
+ function metaslider_sees_notices($plugin) {
57
+
58
+ // If no slideshows, don't show an ad
59
+ if (!count($plugin->all_meta_sliders())) {
60
+ return false;
61
+ }
62
+
63
+ // If they have slideshows but have yet to finish the tour or cancel it,
64
+ // hold off on showing the ads
65
+ return (bool) get_option('metaslider_tour_cancelled_on');
66
+ }
67
+
68
+ /**
69
+ * Returns true if the user is on the specified admin page
70
+ *
71
+ * @return bool
72
+ */
73
+ function metaslider_is_on_admin_page($page_name = 'admin.php') {
74
+ global $pagenow;
75
+ return ($pagenow == $page_name);
76
+ }
77
+
78
+ /**
79
+ * Returns the upgrade link
80
+ *
81
+ * @return string
82
+ */
83
+ function metaslider_get_upgrade_link() {
84
+ return apply_filters('metaslider_hoplink', esc_url(
85
+ add_query_arg(array(
86
+ 'utm_source' => 'lite',
87
+ 'utm_medium' => 'nag',
88
+ 'utm_campaign' => 'pro'
89
+ ),
90
+ 'https://www.metaslider.com/upgrade/'))
91
+ );
92
+ }
93
+
94
+ /**
95
+ * Returns an array of the trashed slides
96
+ * @param $slider
97
+ * @return array
98
+ */
99
+ function metaslider_has_trashed_slides($slider_id) {
100
+ return get_posts(array(
101
+ 'force_no_custom_order' => true,
102
+ 'orderby' => 'menu_order',
103
+ 'order' => 'ASC',
104
+ 'post_type' => array('attachment', 'ml-slide'),
105
+ 'post_status' => array('trash'),
106
+ 'lang' => '',
107
+ 'posts_per_page' => -1,
108
+ 'tax_query' => array(
109
+ array(
110
+ 'taxonomy' => 'ml-slider',
111
+ 'field' => 'slug',
112
+ 'terms' => $slider_id
113
+ )
114
+ )
115
+ ));
116
+ }
117
+
118
+ /**
119
+ * Returns whether we are looking at trashed slides
120
+ * @param int $slider - the id
121
+ * @return bool
122
+ */
123
+ function metaslider_viewing_trashed_slides($slider_id) {
124
+
125
+ // If there are no trashed slides, no need to see this page
126
+ if (!count(metaslider_has_trashed_slides($slider_id))) {
127
+ return false;
128
+ }
129
+
130
+ // Checks to see if the parameter is set and if it's boolean
131
+ return isset($_REQUEST['show_trashed']) && filter_input(INPUT_GET, 'show_trashed', FILTER_VALIDATE_BOOLEAN);
132
+ }
133
+
134
+ /**
135
+ * Returns whether we are looking at a trashed slide
136
+ * @param object $slide a slide object
137
+ * @return bool
138
+ */
139
+ function metaslider_this_is_trash($slide) {
140
+ return (is_object($slide) && "trash" === $slide->post_status);
141
+ }
142
+
143
+ /**
144
+ * This will customize a URL with a correct Affiliate link
145
+ *
146
+ * This function can be updated to suit any URL as long as the URL is passed
147
+ *
148
+ * @param string $url URL to be checked to see if it is an metaslider match.
149
+ * @param string $text Anchor Text
150
+ * @param string $html Any specific HTML to be added.
151
+ * @param string $class Specify a class for the anchor tag.
152
+ *
153
+ * @return string Optimized affiliate link
154
+ */
155
+ function metaslider_optimize_url($url, $text, $html = null, $class = '') {
156
+
157
+ // Check if the URL is metaslider.
158
+ if (false !== strpos($url, 'metaslider.com')) {
159
+
160
+ // Set URL with Affiliate ID.
161
+ $url = metaslider_get_upgrade_link();
162
+ }
163
+
164
+ // Return URL - check if there is HTML such as Images.
165
+ if (!empty($html)) {
166
+ return sprintf('<a class="%1$s" href="%2$s">%3$s</a>', esc_attr($class), esc_attr($url), $html);
167
+ } else {
168
+ return sprintf('<a class="%1$s" href="%2$s">%3$s</a>', esc_attr($class), esc_attr($url), htmlspecialchars($text));
169
+ }
170
+ }
admin/views/notices/dashboard-notice.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (!defined('ABSPATH')) die('No direct access allowed'); ?>
2
+
3
+ <?php if (isset($mega) && $mega) {?>
4
+
5
+ <div class="updraft-ad-container updated">
6
+ <h1><?php echo $title; ?></h1>
7
+ <p><?php echo $text; ?>
8
+ <div class="updraft-advert-dismiss">
9
+ <a href="#" onclick="jQuery('.updraft-ad-container').slideUp(); jQuery.post(ajaxurl, {action: 'notice_handler', ad_identifier: '<?php echo $dismiss_time;?>', _wpnonce: metaslider_notices.handle_notices_nonce });"><?php echo sprintf(__('Hide this ad (%s)', 'ml-slider'), $hide_time); ?></a>
10
+ </div>
11
+ <?php foreach ($this->mega_notice_parts() as $ad_identifier => $values) {
12
+ extract($values); ?>
13
+ <div class="mega_list">
14
+ <p><strong><?php echo $title; ?></strong> <?php echo $text;
15
+ if (!empty($button_link)) {
16
+ echo $this->get_button_link($button_link, $button_meta);
17
+ } ?>
18
+ </p>
19
+ </div>
20
+ <div class="clear"></div>
21
+ <?php } ?>
22
+ </div>
23
+ <?php } else {
24
+
25
+ // Render a typical header ad
26
+ include METASLIDER_PATH.'admin/views/notices/header-notice.php';
27
+
28
+ }
admin/views/notices/header-notice.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (!defined('ABSPATH')) die('No direct access allowed'); ?>
2
+
3
+ <div class="updraft-ad-container updated">
4
+ <div class="updraft_notice_container">
5
+ <div class="updraft_advert_content_left">
6
+ <img src="<?php echo METASLIDER_BASE_URL.'admin/images/'.$image;?>" width="60" height="60" alt="<?php _e('Logo','ml-slider');?>" />
7
+ </div>
8
+ <div class="updraft_advert_content_right">
9
+ <h3 class="updraft_advert_heading"><?php echo $title; ?></h3>
10
+ <div class="updraft-advert-dismiss">
11
+ <a href="#" onclick="jQuery('.updraft-ad-container').slideUp(); jQuery.post(ajaxurl, {action: 'notice_handler', ad_identifier: '<?php echo $dismiss_time;?>', _wpnonce: metaslider_notices.handle_notices_nonce });"><?php echo sprintf(__('Hide this ad (%s)', 'ml-slider'), $hide_time); ?></a>
12
+ </div>
13
+ <p>
14
+ <?php
15
+ echo $text;
16
+
17
+ if (isset($discount_code)) echo ' <strong>' . $discount_code . '</strong>';
18
+
19
+ if (!empty($button_link)) {
20
+ echo $this->get_button_link($button_link, $button_meta);
21
+ }
22
+ ?>
23
+ </p>
24
+ <?php $count = count($this->active_ads('header'));
25
+ if ($count > 1) { ?>
26
+ <span class="updraft_ad_meta">ad <?php echo array_search($dismiss_time, array_keys($this->active_ads('header'))) + 1; ?>/<?php echo $count ?></span>
27
+ <?php } ?>
28
+ </div>
29
+ </div>
30
+ <div class="clear"></div>
31
+ </div>
admin/views/pages/upgrade.php ADDED
@@ -0,0 +1,169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (!defined('ABSPATH')) die('No direct access allowed'); ?>
2
+
3
+ <?php
4
+ // Quick check to see which of our plugins is installed
5
+ $our_plugins = array('updraftplus', 'updraftcentral', 'wp-optimize', 'keyy');
6
+ $installed_plugins = array();
7
+ foreach ($our_plugins as $plugin) {
8
+ $installed_plugins[$plugin] = metaslider_is_plugin_installed($plugin);
9
+ }
10
+ // If they have any plugins missing, make room for ads
11
+ $width = (in_array(false, $installed_plugins, true)) ? 'metaslider_half_width' : ''
12
+ ?>
13
+ <div class="metaslider_col <?php echo $width; ?>">
14
+ <h2 class="ms-addon-headers">MetaSlider <?php _e("Comparison Chart", 'ml-slider');?></h2>
15
+ <table class="metaslider_feat_table">
16
+ <thead>
17
+ <tr>
18
+ <th></th>
19
+ <th><img src="<?php echo METASLIDER_ADMIN_URL.'images/notices/metaslider_logo.png';?>" alt="MetaSlider <?php esc_attr_e('logo', 'ml-slider');?>" width="80" height="80">MetaSlider<br><span><?php _e('free', 'ml-slider');?></span></th>
20
+ <th><img src="<?php echo METASLIDER_ADMIN_URL.'images/notices/metaslider_logo.png';?>" alt="MetaSlider <?php esc_attr_e('logo', 'ml-slider');?>" width="80" height="80"><?php _e('Add-ons', 'ml-slider'); ?><br><span><?php _e('pro', 'ml-slider'); ?></span></th>
21
+ </tr>
22
+ </thead>
23
+ <tbody>
24
+ <tr>
25
+ <td></td>
26
+ <td class="metaslider_installed_status"><?php _e('Installed', 'ml-slider');?></td>
27
+ <td class="metaslider_installed_status"><?php echo metaslider_optimize_url("https://www.metaslider.com/upgrade/", __('Upgrade now', 'ml-slider'));?></td>
28
+ </tr>
29
+ <tr>
30
+ <td><i class="metaslider-premium-image"><svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-package"><path d="M12.89 1.45l8 4A2 2 0 0 1 22 7.24v9.53a2 2 0 0 1-1.11 1.79l-8 4a2 2 0 0 1-1.79 0l-8-4a2 2 0 0 1-1.1-1.8V7.24a2 2 0 0 1 1.11-1.79l8-4a2 2 0 0 1 1.78 0z"/><polyline points="2.32 6.16 12 11 21.68 6.16"/><line x1="12" y1="22.76" x2="12" y2="11"/><line x1="7" y1="3.5" x2="17" y2="8.5"/></svg></i>
31
+ <h4><?php _e('Create unlimited slideshows', 'ml-slider');?></h4>
32
+ <p><?php _e('Create and manage as many slideshows as you need.', 'ml-slider');?></p></td>
33
+ <td><i class="dashicons dashicons-yes" aria-label="<?php esc_attr_e('Yes', 'ml-slider');?>"></i></td>
34
+ <td><i class="dashicons dashicons-yes" aria-label="<?php esc_attr_e('Yes', 'ml-slider');?>"></i></td>
35
+ </tr>
36
+ <tr>
37
+ <td><i class="metaslider-premium-image"><svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-grid"><rect x="3" y="3" width="7" height="7"/><rect x="14" y="3" width="7" height="7"/><rect x="14" y="14" width="7" height="7"/><rect x="3" y="14" width="7" height="7"/></svg></i>
38
+ <h4><?php _e('Multiple slideshow types', 'ml-slider');?></h4>
39
+ <p><?php printf(__('Including %s, %s and we will soon be adding more.', 'ml-slider'), 'Flex Slider', 'Nivo Slider');?></p></td>
40
+ <td><i class="dashicons dashicons-yes" aria-label="<?php esc_attr_e('Yes', 'ml-slider');?>"></i></td>
41
+ <td><i class="dashicons dashicons-yes" aria-label="<?php esc_attr_e('Yes', 'ml-slider');?>"></i></td>
42
+ </tr>
43
+ <tr>
44
+ <td><i class="metaslider-premium-image"><svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/></svg></i>
45
+ <h4><?php _e('Regular updates', 'ml-slider');?></h4>
46
+ <p><?php printf(__('Our word to keep %s compatible with the latest versions of %s.', 'ml-slider'), 'MetaSlider', 'WordPress');?></p></td>
47
+ <td><i class="dashicons dashicons-yes" aria-label="<?php esc_attr_e('Yes', 'ml-slider');?>"></i></td>
48
+ <td><i class="dashicons dashicons-yes" aria-label="<?php esc_attr_e('Yes', 'ml-slider');?>"></i></td>
49
+ </tr>
50
+ <tr>
51
+ <td><i class="metaslider-premium-image"><svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-scissors"><circle cx="6" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><line x1="20" y1="4" x2="8.12" y2="15.88"/><line x1="14.47" y1="14.48" x2="20" y2="20"/><line x1="8.12" y1="8.12" x2="12" y2="12"/></svg></i>
52
+ <h4><?php _e('Intelligent image cropping', 'ml-slider'); ?></h4>
53
+ <p><?php printf(__('Unique %s functionality ensures your slides are perfectly resized.', 'ml-slider'), 'Smart Crop'); ?></p></td>
54
+ <td><i class="dashicons dashicons-yes" aria-label="<?php esc_attr_e('Yes', 'ml-slider');?>"></i></td>
55
+ <td><i class="dashicons dashicons-yes" aria-label="<?php esc_attr_e('Yes', 'ml-slider');?>"></i></td>
56
+ </tr>
57
+ <tr>
58
+ <td><i class="metaslider-premium-image"><svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-image"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"/><circle cx="8.5" cy="8.5" r="1.5"/><polyline points="21 15 16 10 5 21"/></svg></i>
59
+ <h4><?php _e('Thumbnail navigation', 'ml-slider');?></h4>
60
+ <p><?php _e('Easily allow users to navigate your slideshows by thumbnails.', 'ml-slider');?></p></td>
61
+ <td><i class="dashicons dashicons-no-alt" aria-label="<?php esc_attr_e('No', 'ml-slider');?>"></i></td>
62
+ <td><i class="dashicons dashicons-yes" aria-label="<?php esc_attr_e('Yes', 'ml-slider');?>"></i></td>
63
+ </tr>
64
+ <tr>
65
+ <td><i class="metaslider-premium-image"><svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-video"><polygon points="23 7 16 12 23 17 23 7"/><rect x="1" y="5" width="15" height="14" rx="2" ry="2"/></svg></i>
66
+ <h4><?php _e('Add video slides', 'ml-slider');?></h4>
67
+ <p><?php printf(__('Easily include responsive high definition %s and %s videos.', 'ml-slider'), 'YouTube', 'Vimeo');?></p></td>
68
+ <td><i class="dashicons dashicons-no-alt" aria-label="<?php esc_attr_e('No', 'ml-slider');?>"></i></td>
69
+ <td><i class="dashicons dashicons-yes" aria-label="<?php esc_attr_e('Yes', 'ml-slider');?>"></i></td>
70
+ </tr>
71
+ <tr>
72
+ <td><i class="metaslider-premium-image"><svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-at-sign"><circle cx="12" cy="12" r="4"/><path d="M16 12v1a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94"/></svg></i>
73
+ <h4><?php printf(__('%s overlay slides', 'ml-slider'), 'HTML');?></h4>
74
+ <p><?php printf(__('Create completely customized %s slides using the inline editor.', 'ml-slider'), 'HTML');?></p></td>
75
+ <td><i class="dashicons dashicons-no-alt" aria-label="<?php esc_attr_e('No', 'ml-slider');?>"></i></td>
76
+ <td><i class="dashicons dashicons-yes" aria-label="<?php esc_attr_e('Yes', 'ml-slider');?>"></i></td>
77
+ </tr>
78
+ <tr>
79
+ <td><i class="metaslider-premium-image"><svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-layers"><polygon points="12 2 2 7 12 12 22 7 12 2"/><polyline points="2 17 12 22 22 17"/><polyline points="2 12 12 17 22 12"/></svg></i>
80
+ <h4><?php _e('Add slide layers', 'ml-slider');?></h4>
81
+ <p><?php _e('Add layers to your slides with over 50 available transition effects.', 'ml-slider');?></p></td>
82
+ <td><i class="dashicons dashicons-no-alt" aria-label="<?php esc_attr_e('No', 'ml-slider');?>"></i></td>
83
+ <td><i class="dashicons dashicons-yes" aria-label="<?php esc_attr_e('Yes', 'ml-slider');?>"></i></td>
84
+ </tr>
85
+ <tr>
86
+ <td><i class="metaslider-premium-image"><svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-list"><line x1="8" y1="6" x2="21" y2="6"/><line x1="8" y1="12" x2="21" y2="12"/><line x1="8" y1="18" x2="21" y2="18"/><line x1="3" y1="6" x2="3" y2="6"/><line x1="3" y1="12" x2="3" y2="12"/><line x1="3" y1="18" x2="3" y2="18"/></svg></i>
87
+ <h4><?php _e('Post feed slides', 'ml-slider');?></h4>
88
+ <p><?php printf(__('Easily build slides based on your %s posts.', 'ml-slider'), 'WordPress');?></p></td>
89
+ <td><i class="dashicons dashicons-no-alt" aria-label="<?php esc_attr_e('No', 'ml-slider');?>"></i></td>
90
+ <td><i class="dashicons dashicons-yes" aria-label="<?php esc_attr_e('Yes', 'ml-slider');?>"></i></td>
91
+ </tr>
92
+ <tr>
93
+ <td><i class="metaslider-premium-image"><svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-mail"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><polyline points="22,6 12,13 2,6"/></svg></i>
94
+ <h4><?php _e('Premium support', 'ml-slider');?></h4>
95
+ <p><?php _e('Have your specific queries addressed directly by our experts', 'ml-slider');?></p></td>
96
+ <td><i class="dashicons dashicons-no-alt" aria-label="<?php esc_attr_e('No', 'ml-slider');?>"></i></td>
97
+ <td><i class="dashicons dashicons-yes" aria-label="<?php esc_attr_e('Yes', 'ml-slider');?>"></i></td>
98
+ </tr>
99
+ </tbody>
100
+ <tfoot>
101
+ <tr>
102
+ <td></td>
103
+ <td class="metaslider_installed_status"><?php _e('Installed', 'ml-slider');?></td>
104
+ <td class="metaslider_installed_status"><?php echo metaslider_optimize_url("https://www.metaslider.com/upgrade/", __('Upgrade now', 'ml-slider'));?></td>
105
+ </tr>
106
+ </tfoot>
107
+ </table>
108
+ </div>
109
+ <div class="metaslider_col metaslider_half_width metaslider_plugin_family_cont">
110
+ <?php
111
+
112
+ // If any return false, that means they don't have all the plugins
113
+ if (in_array(false, $installed_plugins, true)) { ?>
114
+ <h2 class="ms-addon-headers"><?php _e("More Professional-Quality Plugins for your Website", 'ml-slider');?></h2>
115
+ <?php }
116
+
117
+ if (!$installed_plugins['updraftplus']) {?>
118
+ <div class="postbox">
119
+ <div class="inside">
120
+ <?php
121
+ echo metaslider_optimize_url(wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=updraftplus'), 'install-plugin_updraftplus'), null, '<img class="addons" alt="'.esc_attr("UpdraftPlus").'" src="'. esc_url(METASLIDER_ADMIN_URL.'images/features/updraftplus_logo.png') .'">');
122
+ echo metaslider_optimize_url(wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=updraftplus'), 'install-plugin_updraftplus'), null, '<h3>'.sprintf(__('%s – the ultimate protection for your site, hard work and business', 'ml-slider'), 'UpdraftPlus').'</h3>', 'other-plugin-title');
123
+ ?>
124
+ <p><?php printf(__("If you’ve got a %s website, you need a backup.", 'ml-slider'), 'WordPress');?></p>
125
+ <p><?php _e("Hacking, server crashes, dodgy updates or simple user error can ruin everything.", 'ml-slider');?></p>
126
+ <p><?php printf(__("With %s, you can rest assured that if the worst does happen, it's no big deal. rather than losing everything, you can simply restore the backup and be up and running again in no time at all.", 'ml-slider'), 'UpdraftPlus');?></p>
127
+ <p><?php _e("You can also migrate your website with few clicks without hassle.", 'ml-slider');?></p>
128
+ <p><?php printf(__("With a long-standing reputation for excellence and outstanding reviews, it’s no wonder that %s is the world’s most popular %s backup plugin.", 'ml-slider'), 'UpdraftPlus', 'WordPress');?></p>
129
+ <?php echo metaslider_optimize_url(wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=updraftplus'), 'install-plugin_updraftplus'), __('Try for free', 'ml-slider')); ?>
130
+ </div>
131
+ </div>
132
+ <?php }
133
+ if (!$installed_plugins['updraftcentral']) {?>
134
+ <div class="postbox">
135
+ <div class="inside">
136
+ <?php echo metaslider_optimize_url(wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=updraftcentral'), 'install-plugin_updraftcentral'), null, '<img class="addons" alt="'.sprintf(esc_attr__("%s Dashboard", 'ml-slider'), 'UpdraftCentral').'" src="'. METASLIDER_ADMIN_URL.'images/features/updraftcentral_logo.png' .'">');
137
+ echo metaslider_optimize_url(wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=updraftcentral'), 'install-plugin_updraftcentral'), null, '<h3>'.sprintf(__('%s – save hours managing multiple WP sites from one place', 'ml-slider'), 'UpdraftCentral').'</h3>', 'other-plugin-title'); ?>
138
+ <p><?php printf(__("If you manage a few %s sites, you need UpdraftCentral.", 'ml-slider'), 'WordPress');?></p>
139
+ <p><?php printf(__("%s is a powerful tool that allows you to efficiently manage, update, backup and even restore multiple websites from just one location. You can also manage users and comments on all the sites at once, and through its central login feature, you can access each WP-dashboard with a single click.", 'ml-slider'), 'UpdraftCentral'); ?></p>
140
+ <p><?php printf(__("With a wide range of useful features, including automated backup schedules and sophisticated one click updates, UpdraftCentral is sure to boost to your productivity and save you time.", 'ml-slider'), 'UpdraftCentral'); ?></p>
141
+ <?php echo metaslider_optimize_url(wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=updraftcentral'), 'install-plugin_updraftcentral'), __('Try for free', 'ml-slider')); ?>
142
+ </div>
143
+ </div>
144
+ <?php }
145
+ if (!$installed_plugins['wp-optimize']) {?>
146
+ <div class="postbox">
147
+ <div class="inside">
148
+ <?php echo metaslider_optimize_url(wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=wp-optimize'), 'install-plugin_wp-optimize'), null, '<img class="addons" alt="'.esc_attr("WP-Optimize").'" src="'. METASLIDER_ADMIN_URL.'images/features/wpo_logo.png' .'">');
149
+ echo metaslider_optimize_url(wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=wp-optimize'), 'install-plugin_wp-optimize'), null, '<h3>'.sprintf(__('%s – faster, fitter, cleaner WP sites for optimal performance.', 'ml-slider'), 'WP-Optimize').'</h3>', 'other-plugin-title'); ?>
150
+ <p><?php printf(__("%s, the #1 optimization plugin, keeps your %s site at prime speed by cleaning the database without the need for %s.", 'ml-slider'), 'WP-Optimize', 'WordPress', 'phpMyAdmin'); ?></p>
151
+ <p><?php printf(__("Incredibly simple to use, %s clears out old webpage revisions, spam, trash and unapproved comments, all of which take up megabytes of valuable space and leave your database sluggish and ultimately unfit for purpose.", 'ml-slider'), 'WP-Optimize'); ?></p>
152
+ <p><?php printf(__("%s has a load of valuable features, including automated weekly clean up scheduling, the retention of a set number of weeks’ data, a display of how much space can be cleared, the enabling / disabling of trackbacks and comments for all published posts, and an ‘administrators only’ security feature.", 'ml-slider'), 'WP-Optimize'); ?></p>
153
+ <?php echo metaslider_optimize_url(wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=wp-optimize'), 'install-plugin_wp-optimize'), __('Try for free', 'ml-slider')); ?>
154
+ </div>
155
+ </div>
156
+ <?php }
157
+ if (!$installed_plugins['keyy']) {?>
158
+ <div class="postbox">
159
+ <div class="inside">
160
+ <?php echo metaslider_optimize_url(wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=keyy'), 'install-plugin_keyy'), null, '<img class="addons" alt="'.sprintf(esc_attr__("%s Two-Factor Authentication", 'ml-slider'), 'Keyy').'" src="'. METASLIDER_ADMIN_URL.'images/features/keyy_logo.png' .'">');
161
+ echo metaslider_optimize_url(wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=keyy'), 'install-plugin_keyy'), null, '<h3>'.sprintf(__('%s – instant &amp; secure logins with a wave of your phone', 'ml-slider'), 'Keyy').'</h3>', 'other-plugin-title'); ?>
162
+ <p><?php printf(__("%s is a unique 2-factor authentication plugin that allows you to log in to your website with just a wave of your smartphone. It represents the ultimate UX, doing away with the need for usernames, passwords and other 2FA tokens.", 'ml-slider'), 'Keyy');?></p>
163
+ <p><?php printf(__("Using innovative RSA public-key cryptography, %s is highly secure and prevents password-based hacking risks such as brute-forcing, key-logging, shoulder-surfing and connection sniffing.", 'ml-slider'), 'Keyy'); ?></p>
164
+ <p><?php printf(__("Logging in with %s is simple. Once users have installed the app onto their smartphone and secured it using a fingerprint or 4-number pin, they just open the app, point it at the moving on-screen barcode and voila!", 'ml-slider'), 'Keyy'); ?></p>
165
+ <?php echo metaslider_optimize_url(wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=keyy'), 'install-plugin_keyy'), __('Try for free', 'ml-slider')); ?>
166
+ </div>
167
+ </div>
168
+ <?php } ?>
169
+ </div>
assets/metaslider/admin.css DELETED
@@ -1,948 +0,0 @@
1
- .metaslider.wrap div.updated,
2
- .metaslider.wrap div.error {
3
- clear: both
4
- }
5
-
6
- .metaslider #post-body.columns-2 #postbox-container-1 {
7
- margin-right: -320px;
8
- width: 300px;
9
- }
10
-
11
- .metaslider #poststuff #post-body.columns-2 {
12
- margin-right: 320px;
13
- }
14
-
15
- .rtl .metaslider #post-body.columns-2 #postbox-container-1 {
16
- margin-left: -320px;
17
- margin-right: 0;
18
- }
19
-
20
- .rtl .metaslider #poststuff #post-body.columns-2 {
21
- margin-left: 320px;
22
- margin-right: 0;
23
- }
24
-
25
-
26
- .metaslider .left input,
27
- .metaslider .left textarea {
28
- border: 1px solid #ccc;
29
- border-radius: 0;
30
- resize: none;
31
- box-shadow: inherit;
32
- }
33
-
34
- .media-frame-menu .separator {
35
- display: none
36
- }
37
-
38
- .msTipsy .tipsy-arrow-s {
39
- border-top-color: #555
40
- }
41
-
42
- .msTipsy .tipsy-arrow-w {
43
- border-right-color: #555
44
- }
45
-
46
- .msTipsy .tipsy-arrow-n {
47
- border-bottom-color: #555
48
- }
49
-
50
- .msTipsy .tipsy-inner {
51
- color: white;
52
- background-color: #555;
53
- }
54
-
55
- .msTipsy .tipsy-arrow-e {
56
- border-left-color: #555
57
- }
58
-
59
- #cboxLoadedContent {
60
- overflow: hidden !important
61
- }
62
-
63
- #cboxLoadedContent iframe {
64
- border: 0 none;
65
- display: block;
66
- height: 100%;
67
- width: 100%;
68
- }
69
-
70
- .metaslider .right input[type=submit] {
71
- margin: 0 3px
72
- }
73
-
74
- .metaslider #poststuff .right .configuration {
75
- padding: 7px 7px 7px 12px;
76
- line-height: 27px;
77
- float: left;
78
- width: 100%;
79
- box-sizing: border-box;
80
- }
81
-
82
- .metaslider #poststuff .left h3 {
83
- padding: 7px 5px;
84
- line-height: 27px;
85
- margin: 0;
86
- font-size: 14px;
87
- }
88
-
89
- .metaslider #poststuff .left th {
90
- padding: 0 7px;
91
- }
92
-
93
- .metaslider .left table tr.slide input.url {
94
- width: 100%;
95
- margin: 0;
96
- padding: 4px;
97
- }
98
-
99
- .bubble {
100
- position: relative;
101
- height: 20px;
102
- padding: 0px 5px;
103
- background: #b6e026;
104
- border: #b6e026 solid 2px;
105
- -webkit-border-radius: 5px;
106
- -moz-border-radius: 5px;
107
- border-radius: 5px;
108
- display: inline-block;
109
- text-align: center;
110
- vertical-align: middle;
111
- line-height: 20px;
112
- margin-left: 6px;
113
- color: black;
114
- text-shadow: none;
115
- bottom: 2px;
116
- }
117
-
118
- .bubble:after {
119
- content: "";
120
- position: absolute;
121
- top: 5px;
122
- left: -6px;
123
- border-style: solid;
124
- border-width: 5px 6px 5px 0;
125
- border-color: transparent #b6e026;
126
- display: block;
127
- width: 0;
128
- z-index: 1;
129
- }
130
-
131
- .bubble:before {
132
- content: "";
133
- position: absolute;
134
- top: 4px;
135
- left: -9px;
136
- border-style: solid;
137
- border-width: 6px 7px 6px 0;
138
- border-color: transparent #b6e026;
139
- display: block;
140
- width: 0;
141
- z-index: 0;
142
- }
143
-
144
- .metaslider .section {
145
- cursor: pointer
146
- }
147
-
148
- .metaslider .hidden {
149
- display: none
150
- }
151
-
152
- .metaslider .tipsy-tooltip {
153
- cursor: default
154
- }
155
-
156
- .metaslider .ui-sortable-helper {
157
- box-shadow: 3px 3px 5px #cccccc
158
- }
159
-
160
- .metaslider .left table {
161
- width: 100%
162
- }
163
-
164
- .metaslider .left table thead input {
165
- margin-left: 5px
166
- }
167
-
168
- .metaslider .left table thead .add-slide .wp-media-buttons-icon {
169
- background: url('../../../../../wp-admin/images/media-button.png') no-repeat top left;
170
- display: inline-block;
171
- width: 16px;
172
- height: 16px;
173
- vertical-align: text-top;
174
- margin: 0 2px;
175
- }
176
-
177
- .metaslider .left table tr.slide {
178
- height: 167px
179
- }
180
-
181
- .metaslider .left table tr.slide:nth-child(even) {
182
- background: white
183
- }
184
-
185
- .metaslider .left table tr.slide:nth-child(odd) {
186
- background: #f9f9f9
187
- }
188
-
189
- .metaslider .left table tr.slide textarea {
190
- width: 100%;
191
- height: 60px;
192
- margin: 0 0 5px 0;
193
- padding: 2px 5px;
194
- }
195
-
196
- .metaslider .left table tr.slide td.col-1 {
197
- cursor: move
198
- }
199
-
200
- .metaslider .left table tr.slide td.col-1 .thumb {
201
- position: relative;
202
- height: 150px;
203
- width: 150px;
204
- background-size: auto 150px;
205
- background-position: center;
206
- border: 1px solid #ddd;
207
- }
208
-
209
- .metaslider .left table tr.slide td.col-1 .thumb .delete-slide {
210
- position: absolute;
211
- top: 0px;
212
- left: 0px;
213
- background: transparent;
214
- color: red;
215
- width: 18px;
216
- height: 18px;
217
- float: left;
218
- text-align: center;
219
- opacity: 0;
220
- overflow:hidden;
221
- transition: opacity .25s ease-in-out;
222
- -moz-transition: opacity .25s ease-in-out;
223
- -webkit-transition: opacity .25s ease-in-out;
224
- }
225
-
226
- .metaslider .left table tr.slide td.col-1:hover .delete-slide {
227
- opacity: 1;
228
- }
229
-
230
- .metaslider .left table tr.slide td.col-1 .thumb .change-image {
231
- position: absolute;
232
- top: 0px;
233
- right: 2px;
234
- background: transparent;
235
- color: #2ea2cc;
236
- width: 18px;
237
- height: 18px;
238
- float: left;
239
- text-align: center;
240
- opacity: 0;
241
- transition: opacity .25s ease-in-out;
242
- -moz-transition: opacity .25s ease-in-out;
243
- -webkit-transition: opacity .25s ease-in-out;
244
- overflow:hidden;
245
- cursor: pointer;
246
- }
247
-
248
- .metaslider .left table tr.slide td.col-1:hover .change-image {
249
- opacity: 1;
250
- }
251
-
252
-
253
- .metaslider .left table tr.slide td.col-1 .thumb .slide-details {
254
- bottom: 0;
255
- left: 0;
256
- position: absolute;
257
- background: #333;
258
- color: white;
259
- padding: 5px;
260
- font-size: 12px;
261
- opacity: 0.8;
262
- word-wrap: break-word;
263
- width: 140px;
264
- padding: 3px 5px;
265
- }
266
-
267
-
268
- .branch-3-5 .metaslider .left table tr.slide .tabs-content .new_window,
269
- .branch-3-6 .metaslider .left table tr.slide .tabs-content .new_window,
270
- .branch-3-7 .metaslider .left table tr.slide .tabs-content .new_window {
271
- right: 6px;
272
- bottom: 20px;
273
- }
274
-
275
- .branch-3-5 .metaslider .left table tr.slide .tabs-content .new_window label,
276
- .branch-3-6 .metaslider .left table tr.slide .tabs-content .new_window label,
277
- .branch-3-7 .metaslider .left table tr.slide .tabs-content .new_window label {
278
- line-height: 18px;
279
- vertical-align: top;
280
- }
281
-
282
- .branch-3-5 .metaslider .left table tr.slide .tabs-content .new_window input,
283
- .branch-3-6 .metaslider .left table tr.slide .tabs-content .new_window input,
284
- .branch-3-7 .metaslider .left table tr.slide .tabs-content .new_window input {
285
- margin: -2px 0 0 4px;
286
- }
287
-
288
- .metaslider .left table tr.slide .tabs-content .new_window {
289
- position: relative;
290
- float: right;
291
- padding: 0px;
292
- color: #a9a9a9;
293
- line-height: 20px;
294
- bottom: 22px;
295
- right: 0;
296
- }
297
-
298
- .rtl .metaslider .left table tr.slide .tabs-content .new_window {
299
- position: relative;
300
- float: left;
301
- }
302
-
303
-
304
- .metaslider .left table tr.slide .tabs-content .new_window input {
305
- margin-left: 3px
306
- }
307
-
308
- .rtl .metaslider .left table tr.slide .tabs-content .new_window input {
309
- margin-right: 3px
310
- }
311
-
312
- .metaslider .left table tr.slide .tabs-content .new_window label {
313
- width: 120px;
314
- text-align: right;
315
- font-size: 11px;
316
- }
317
-
318
- .metaslider tr.radio {
319
- display: table-row;
320
- }
321
- .metaslider .left table td {
322
- border-top: 0;
323
- border-bottom: 1px solid #e1e1e1;
324
- padding: 12px;
325
- }
326
-
327
- .metaslider .left table td.col-2 {
328
- padding: 12px 12px 12px 0;
329
- }
330
-
331
- .rtl .metaslider .left table td.col-2 {
332
- padding: 12px 0 12px 12px;
333
- }
334
-
335
- .metaslider .right .highlight {
336
- background: transparent;
337
- border: 0;
338
- font-weight: bold;
339
- }
340
-
341
- /* *
342
- * Change background color for label next to checked radio button
343
- * to make it look like highlighted button
344
- ================================================== */
345
-
346
- .metaslider .right .slider-lib-row input[type=radio]:checked + label {
347
- background-image: none;
348
- background-color: #d0d0d0;
349
- }
350
-
351
- .metaslider .right .slider-lib-row input[type=radio] {
352
- display: none
353
- }
354
-
355
- .ie8 .metaslider .right .slider-lib-row input[type=radio] {
356
- display: inline
357
- }
358
-
359
- .metaslider .right .slider-lib-row input[type=radio] + label {
360
- display: inline-block;
361
- margin: -2px;
362
- padding: 4px 0;
363
- margin-bottom: 0;
364
- font-size: 11px;
365
- line-height: 20px;
366
- color: #333;
367
- text-align: center;
368
- vertical-align: middle;
369
- cursor: pointer;
370
- background-color: #f5f5f5;
371
- background-image: -moz-linear-gradient(top,#fff,#e6e6e6);
372
- background-image: -webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));
373
- background-image: -webkit-linear-gradient(top,#fff,#e6e6e6);
374
- background-image: -o-linear-gradient(top,#fff,#e6e6e6);
375
- background-image: linear-gradient(to bottom,#fff,#e6e6e6);
376
- background-repeat: repeat-x;
377
- border: 1px solid #ddd;
378
- border-color: #e6e6e6 #e6e6e6 #bfbfbf;
379
- border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);
380
- border-bottom-color: #b3b3b3;
381
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);
382
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
383
- -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);
384
- -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);
385
- box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);
386
- width: 24%;
387
- }
388
-
389
- input[type=radio]:checked + label {
390
- background-image: none;
391
- outline: 0;
392
- -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);
393
- -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);
394
- box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);
395
- background-color: #e0e0e0;
396
- }
397
-
398
- .metaslider .right #nivo + label:hover,
399
- .metaslider .right #nivo:checked + label {
400
- color: white;
401
- background: #b6e026;
402
- background: -moz-linear-gradient(top, #b6e026 0%, #abdc28 100%);
403
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #b6e026), color-stop(100%, #abdc28));
404
- background: -webkit-linear-gradient(top, #b6e026 0%, #abdc28 100%);
405
- background: -o-linear-gradient(top, #b6e026 0%, #abdc28 100%);
406
- background: -ms-linear-gradient(top, #b6e026 0%, #abdc28 100%);
407
- background: linear-gradient(to bottom, #b6e026 0%, #abdc28 100%);
408
- }
409
-
410
- .metaslider .right #responsive + label:hover,
411
- .metaslider .right #responsive:checked + label,
412
- .metaslider .right #responsive:checked {
413
- color: white;
414
- background: #ff5db1; /* Old browsers */
415
- background: -moz-linear-gradient(top, #ff5db1 0%, #ef017c 100%); /* FF3.6+ */
416
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ff5db1), color-stop(100%,#ef017c)); /* Chrome,Safari4+ */
417
- background: -webkit-linear-gradient(top, #ff5db1 0%,#ef017c 100%); /* Chrome10+,Safari5.1+ */
418
- background: -o-linear-gradient(top, #ff5db1 0%,#ef017c 100%); /* Opera 11.10+ */
419
- background: -ms-linear-gradient(top, #ff5db1 0%,#ef017c 100%); /* IE10+ */
420
- background: linear-gradient(to bottom, #ff5db1 0%,#ef017c 100%); /* W3C */
421
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ff5db1', endColorstr='#ef017c',GradientType=0 ); /* IE6-9 */
422
- }
423
-
424
- .metaslider .right #coin + label:hover,
425
- .metaslider .right #coin:checked + label {
426
- color: white;
427
- background: #ffd65e;
428
- background: -moz-linear-gradient(top, #ffd65e 0%, #febf04 100%);
429
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffd65e), color-stop(100%, #febf04));
430
- background: -webkit-linear-gradient(top, #ffd65e 0%, #febf04 100%);
431
- background: -o-linear-gradient(top, #ffd65e 0%, #febf04 100%);
432
- background: -ms-linear-gradient(top, #ffd65e 0%, #febf04 100%);
433
- background: linear-gradient(to bottom, #ffd65e 0%, #febf04 100%);
434
- }
435
-
436
- .metaslider .right #flex + label:hover,
437
- .metaslider .right #flex:checked + label {
438
- color: white;
439
- background: #00b7ea;
440
- background: -moz-linear-gradient(top, #00b7ea 0%, #009ec3 100%);
441
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #00b7ea), color-stop(100%, #009ec3));
442
- background: -webkit-linear-gradient(top, #00b7ea 0%, #009ec3 100%);
443
- background: -o-linear-gradient(top, #00b7ea 0%, #009ec3 100%);
444
- background: -ms-linear-gradient(top, #00b7ea 0%, #009ec3 100%);
445
- background: linear-gradient(to bottom, #00b7ea 0%, #009ec3 100%);
446
- }
447
-
448
- .metaslider .right .slider-lib-row {
449
- padding: 17px 0 9px 0;
450
- text-align: center;
451
- }
452
-
453
- .metaslider .right #save {
454
- margin-right: 0
455
- }
456
- .rtl .metaslider .right #save {
457
- margin-right: 4px;
458
- margin-left: 0;
459
- }
460
-
461
- .metaslider .right .number input:focus {
462
- outline: none;
463
- outline-style: none;
464
- box-shadow: none;
465
- border-color: #ddd;
466
- }
467
-
468
- .metaslider .right .number .after,
469
- .metaslider .right .number input {
470
- display: inline-block;
471
- float: left;
472
- height: 26px;
473
- margin: 0;
474
- }
475
-
476
- .rtl .metaslider .right .number .after,
477
- .rtl .metaslider .right .number input {
478
- float: right;
479
- }
480
- .rtl .metaslider .right .number .after {
481
- border-left: 1px solid #ddd;
482
- border-right: 0;
483
- }
484
- .rtl .metaslider .right .number input {
485
- border-right: 1px solid #ddd;
486
- border-left: 0;
487
- }
488
-
489
- .metaslider .right .radio ul {
490
- margin: 0;
491
- }
492
- .metaslider .right .radio li {
493
- margin: 0 0 2px 0;
494
- clear: both;
495
- }
496
- .metaslider .right .radio input[type="radio"] {
497
- margin-top: 0;
498
- }
499
- .rtl .metaslider .right .radio input[type="radio"] {
500
- float: right;
501
- }
502
-
503
- .metaslider .right .number input {
504
- width: 70px;
505
- margin-right: 0;
506
- box-shadow: none;
507
- border-right: 0;
508
- }
509
-
510
- .metaslider .right .number .after {
511
- border: 1px solid #ddd;
512
- border-left: 0;
513
- box-shadow: none;
514
- font-size: 11px;
515
- height: 24px;
516
- line-height: 24px;
517
- padding: 0 3px;
518
- background: white;
519
- }
520
-
521
- .metaslider .right input[type="text"],
522
- .metaslider .right select {
523
- width: 130px
524
- }
525
-
526
- .metaslider .right .ms-postbox {
527
- position: relative;
528
- min-width: 255px;
529
- border: 1px solid #e5e5e5;
530
- -webkit-box-shadow: 0 1px 1px rgba(0,0,0,.04);
531
- box-shadow: 0 1px 1px rgba(0,0,0,.04);
532
- background: #fff;
533
- margin-bottom: 20px;
534
- padding: 0;
535
- line-height: 1;
536
- }
537
-
538
- .metaslider #poststuff .right .ms-postbox .inside {
539
- padding: 8px 12px 12px 12px;
540
- margin: 0;
541
- }
542
-
543
- .ms-postbox .handlediv {
544
- float: right;
545
- width: 27px;
546
- height: 30px;
547
- cursor: pointer;
548
- color: #aaa;
549
- }
550
-
551
- .ms-postbox .handlediv:before {
552
- right: 12px;
553
- font: 400 20px/1 dashicons;
554
- speak: none;
555
- display: inline-block;
556
- padding: 8px 10px;
557
- top: 0;
558
- position: relative;
559
- -webkit-font-smoothing: antialiased;
560
- -moz-osx-font-smoothing: grayscale;
561
- text-decoration: none!important;
562
- content: '\f142';
563
- }
564
-
565
- .ms-postbox.closed .handlediv:before {
566
- content: '\f140';
567
- }
568
-
569
- .metaslider .shortcode .inside {
570
- padding: 15px 10px
571
- }
572
-
573
- .metaslider .social .inside {
574
- padding: 10px
575
- }
576
-
577
- .metaslider .social .inside ul.info {
578
- width: 100%;
579
- margin: 0;
580
- height: 20px;
581
- }
582
-
583
- .metaslider .social .inside ul.info li {
584
- display: inline;
585
- float: left;
586
- text-align: right;
587
- }
588
-
589
- .metaslider .shortcode input[type=text],
590
- .metaslider .shortcode input[type=text]:active,
591
- .metaslider .shortcode textarea,
592
- .metaslider .shortcode textarea:active {
593
- font-family: monospace;
594
- font-size: 11px;
595
- width: 100%;
596
- background: transparent;
597
- border: 0;
598
- box-shadow: none;
599
- }
600
-
601
- .metaslider .shortcode textarea {
602
- height: 65px
603
- }
604
-
605
- .metaslider .shortcode ul.tabs {
606
- margin: 0
607
- }
608
-
609
- .metaslider .shortcode ul.tabs li.selected {
610
- background: #fdfdfd;
611
- border-bottom: 1px solid #fdfdfd;
612
- }
613
-
614
- .metaslider .shortcode .tabs-content {
615
- clear: both;
616
- background: #fdfdfd;
617
- border-left: 1px solid #ccc;
618
- border-right: 1px solid #ccc;
619
- border-bottom: 1px solid #ccc;
620
- padding: 10px;
621
- }
622
-
623
- .metaslider .right .ms-postbox table {
624
- border: 0;
625
- width: 100%;
626
- }
627
-
628
- .metaslider .right .ms-postbox table textarea {
629
- width: 100%;
630
- height: 100px;
631
- font-family: monospace;
632
- background: #272822;
633
- color: #a6e22e;
634
- }
635
-
636
- .metaslider .right .ms-postbox h3 {
637
- cursor: inherit
638
- }
639
-
640
- .metaslider .right .ms-postbox.ms-toggle h3 {
641
- cursor: pointer
642
- }
643
-
644
- .metaslider .right table {
645
- margin: 0 0 5px 0
646
- }
647
-
648
- .metaslider .right table td {
649
- vertical-align: middle;
650
- padding: 8px 4px;
651
- border: 0;
652
- height: 21px;
653
- }
654
-
655
- .metaslider table td,
656
- .metaslider table td input[type=text],
657
- .metaslider table td input[type=number],
658
- .metaslider table td select,
659
- .metaslider table td textarea,
660
- .metaslider table td label {
661
- font-size: 12px
662
- }
663
-
664
- .metaslider select {
665
- height: auto
666
- }
667
-
668
- .metaslider .nav-tab-wrapper {
669
- padding: 0;
670
- width: 100%;
671
- float: left;
672
- margin: 20px 0;
673
- }
674
-
675
- .metaslider .nav-tab {
676
- background: white;
677
- padding: 9px 13px;
678
- font-weight: normal;
679
- margin: 0 4px 0 0;
680
- }
681
-
682
- .metaslider .nav-tab:hover {
683
- background: transparent
684
- }
685
- .branch-3-5 .metaslider .nav-tab-active,
686
- .branch-3-6 .metaslider .nav-tab-active,
687
- .branch-3-7 .metaslider .nav-tab-active {
688
- border-bottom: 1px solid white;
689
- }
690
-
691
- .metaslider .nav-tab-active {
692
- background: transparent;
693
- padding: 6px 6px 5px;
694
- border-bottom: 1px solid #f1f1f1;
695
- margin-top: auto;
696
- position: relative;
697
- top: 1px;
698
- }
699
-
700
- .metaslider .nav-tab-active input {
701
- min-width: 100px;
702
- padding: 3px 13px 3px 5px;
703
- margin: 0;
704
- border: 0;
705
- width: 100px;
706
- font-size: 13px;
707
- background: transparent;
708
- box-shadow: none;
709
- }
710
-
711
- .metaslider .nav-tab-active input:hover,
712
- .metaslider .nav-tab-active input:focus {
713
- -webkit-box-shadow: inset 2px 2px 2px 0px #dddddd;
714
- -moz-box-shadow: inset 2px 2px 2px 0px #dddddd;
715
- box-shadow: inset 2px 2px 2px 0px #dddddd;
716
- background: white url(edit.png) no-repeat 98% center;
717
- }
718
-
719
- .metaslider .warning {
720
- background-color: #ffebe8;
721
- border: 1px solid #c00;
722
- margin-bottom: 5px;
723
- border-radius: 3px;
724
- padding: 5px 10px;
725
- }
726
-
727
- input:-ms-input-placeholder {
728
- color: LightGray
729
- }
730
-
731
- textarea:-ms-input-placeholder {
732
- color: LightGray
733
- }
734
-
735
- .attachment-display-settings {
736
- display: none
737
- }
738
-
739
- .metaslider .tabs-content,
740
- .metaslider .tabs-content ul,
741
- .metaslider .tabs-content li {
742
- font-size: 12px
743
- }
744
-
745
- .metaslider .tabs-content input,
746
- .metaslider .tabs-content select {
747
- font-size: 11px
748
- }
749
-
750
- .metaslider .left .tabs-content {
751
- clear: both;
752
- }
753
-
754
- .metaslider .tabs-content .row {
755
- float: left;
756
- clear: both;
757
- width: 100%;
758
- vertical-align: middle;
759
- margin-bottom: 6px;
760
- }
761
-
762
- .metaslider .tabs-content .row.last {
763
- margin-bottom: 0;
764
- }
765
-
766
- .metaslider .tabs-content .row label {
767
- color: #999;
768
- display: inline-block;
769
- text-indent: 3px;
770
- }
771
-
772
- .metaslider .tabs-content .row input {
773
- margin-right: 5px;
774
- margin-bottom: 0px;
775
- margin-left: 0px;
776
- }
777
-
778
- .metaslider .tabs-content .row input[type=text] {
779
- width: 100%
780
- }
781
-
782
- .metaslider .tabs-content ul {
783
- margin: 0
784
- }
785
-
786
- .metaslider .tabs-content li {
787
- margin: 0 0 3px 0
788
- }
789
-
790
- .metaslider .tabs-content select {
791
- font-size: 11px
792
- }
793
-
794
- .metaslider .tabs-content p {
795
- font-style: italic;
796
- color: #999999;
797
- }
798
-
799
- .metaslider ul.tabs {
800
- float: left;
801
- width: 100%;
802
- margin: 0 0 10px 0;
803
- border-bottom: 1px solid #ccc;
804
- }
805
-
806
- .metaslider ul.tabs li {
807
- margin: 0 0 0 5px;
808
- cursor: pointer;
809
- padding: 3px 5px;
810
- display: inline-block;
811
- line-height: 14px;
812
- color: #ccc;
813
- position: relative;
814
- top: 1px;
815
- border: 1px solid transparent;
816
- }
817
-
818
- .metaslider ul.tabs li:hover {
819
- color: #333
820
- }
821
-
822
- .metaslider ul.tabs li.selected {
823
- font-weight: bold;
824
- color: #666;
825
- border: 1px solid #ccc;
826
- border-bottom: 1px solid white;
827
- }
828
-
829
- .metaslider .left table tr.slide:nth-child(odd) ul.tabs li.selected {
830
- border-bottom: 1px solid #f9f9f9
831
- }
832
-
833
- .metaslider .dropdown_container {
834
- margin: 40px 0 10px 0;
835
- }
836
- #screen-meta-links #screen-options-switch-view-wrap {
837
- float: right;
838
- height: 28px;
839
- margin: 0 0 0 6px;
840
- border: 1px solid #ddd;
841
- border-top: 0;
842
- background: #fff;
843
- -webkit-box-shadow: 0 1px 1px -1px rgba(0,0,0,.1);
844
- box-shadow: 0 1px 1px -1px rgba(0,0,0,.1);
845
- }
846
-
847
- #screen-meta-links #screen-options-switch-view-wrap a {
848
- padding: 3px 6px 3px 8px;
849
- display: block;
850
- font-size: 13px;
851
- height: 22px;
852
- line-height: 22px;
853
- text-decoration: none;
854
- z-index: 1;
855
- color: #777;
856
- }
857
-
858
- #screen-meta-links #screen-options-link-wrap a {
859
- padding: 3px 6px;
860
- text-decoration: none;
861
- line-height: 28px;
862
- }
863
- #screen-meta-links #screen-options-link-wrap a:before {
864
- line-height: 28px;
865
- }
866
-
867
- #screen-meta-links #screen-options-link-wrap a:after,
868
- #screen-meta-links #screen-options-switch-view-wrap a:after {
869
- content: '';
870
- }
871
- #screen-meta-links #screen-options-link-wrap a:before,
872
- #screen-meta-links #screen-options-switch-view-wrap a:before {
873
- padding: 0px 8px 0 0;
874
- }
875
-
876
- .metaslider_gopro li:before {
877
- top: 4px;
878
- font: 400 20px/1 dashicons;
879
- speak: none;
880
- display: inline-block;
881
- position: relative;
882
- -webkit-font-smoothing: antialiased;
883
- -moz-osx-font-smoothing: grayscale;
884
- text-decoration: none!important;
885
- content: '\f147';
886
- color: #03b0d8;
887
- }
888
-
889
- #adminmenu .toplevel_page_metaslider .wp-menu-image img {
890
- opacity: 1;
891
- }
892
-
893
-
894
- .metaslider_pro {
895
- margin-top: 50px;
896
- }
897
- .metaslider_pro p {
898
- text-align: center;
899
- font-size: 1.2em;
900
- }
901
-
902
- .metaslider_pro .probutton,
903
- .metaslider_pro .probutton:hover {
904
- width: 36%;
905
- margin: 20px 32% 10px 32%;
906
- float: left;
907
- font-size: 1.4em;
908
- padding: 15px 0;
909
- border-color: #3793B7;
910
- background-color: #41add7;
911
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #41add7), color-stop(100%, #218cb7));
912
- background-image: -webkit-linear-gradient(top, #41add7, #218cb7);
913
- background-image: -moz-linear-gradient(top, #41add7, #218cb7);
914
- background-image: -o-linear-gradient(top, #41add7, #218cb7);
915
- background-image: linear-gradient(top, #41add7, #218cb7);
916
- -webkit-box-shadow: inset 0 1px rgba(255, 255, 255, 0.2), 0 1px 3px rgba(0, 0, 0, 0.2);
917
- -moz-box-shadow: inset 0 1px rgba(255, 255, 255, 0.2), 0 1px 3px rgba(0, 0, 0, 0.2);
918
- box-shadow: inset 0 1px rgba(255, 255, 255, 0.2), 0 1px 3px rgba(0, 0, 0, 0.2);
919
- border-radius: 4px;
920
- -webkit-box-shadow: inset 0 0 2px 0 rgba(57, 140, 255, 0.8);
921
- box-shadow: inset 0 0 2px 0 rgba(57, 140, 255, 0.8);
922
- color: #fff;
923
- font-family: 'PT Sans', helvetica, arial, sans-serif;
924
- text-shadow: 0 -1px 1px #1a5ad9;
925
- color: white;
926
- text-align: center;
927
- text-decoration: none;
928
- border-radius: 5px;
929
- line-height: 2em;
930
- }
931
-
932
- .metaslider_pro .super {
933
- text-transform: uppercase;
934
- font-size: 0.7em;
935
- vertical-align: top;
936
- line-height: 2em;
937
- }
938
-
939
- .metaslider_pro .subtext {
940
- float: left;
941
- width: 100%;
942
- text-align: center;
943
- font-style: italic;
944
- }
945
-
946
- .metaslider_pro .logo {
947
- text-transform: uppercase
948
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/metaslider/admin.js DELETED
@@ -1,388 +0,0 @@
1
- jQuery(document).ready(function($) {
2
-
3
- var add_slide_frame;
4
- var change_slide_frame;
5
-
6
- jQuery('.metaslider .add-slide').on('click', function(event){
7
- event.preventDefault();
8
-
9
- // If the media frame already exists, reopen it.
10
- if ( add_slide_frame ) {
11
- add_slide_frame.open();
12
- return;
13
- }
14
-
15
- // Create the media frame.
16
- add_slide_frame = wp.media.frames.file_frame = wp.media({
17
- multiple: 'add',
18
- frame: 'post',
19
- library: {type: 'image'}
20
- });
21
-
22
- // When an image is selected, run a callback.
23
- add_slide_frame.on('insert', function() {
24
-
25
- jQuery(".metaslider .spinner").show().css('visibility', 'visible');
26
- jQuery(".metaslider input[type=submit]").attr('disabled', 'disabled');
27
-
28
- var selection = add_slide_frame.state().get('selection');
29
- var slide_ids = [];
30
-
31
- selection.map(function(attachment) {
32
- attachment = attachment.toJSON();
33
- slide_ids.push(attachment.id);
34
- });
35
-
36
- var data = {
37
- action: 'create_image_slide',
38
- slider_id: metaslider_slider_id,
39
- selection: slide_ids,
40
- _wpnonce: metaslider.addslide_nonce
41
- };
42
-
43
- jQuery.post(metaslider.ajaxurl, data, function(response) {
44
- jQuery(".metaslider .left table").append(response);
45
- jQuery(".metaslider .left table").trigger('resizeSlides');
46
- });
47
- });
48
-
49
- add_slide_frame.open();
50
-
51
- // Remove the Media Library tab (media_upload_tabs filter is broken in 3.6)
52
- jQuery(".media-menu a:contains('Media Library')").remove();
53
-
54
- });
55
-
56
-
57
- jQuery('.metaslider .change-image').on('click', function(event){
58
-
59
- event.preventDefault();
60
-
61
- var $this = jQuery(this);
62
- var slide_from = $this.attr('data-slide-id');
63
-
64
- // Create the media frame.
65
- change_slide_frame = wp.media.frames.file_frame = wp.media({
66
- title: metaslider.change_image,
67
- library: {type: 'image'},
68
- button: {
69
- text: $this.attr('data-button-text') // button text
70
- }
71
- });
72
-
73
- // When an image is selected, run a callback.
74
- change_slide_frame.on('select', function() {
75
-
76
- jQuery(".metaslider .spinner").show().css('visibility', 'visible');
77
- jQuery(".metaslider input[type=submit]").attr('disabled', 'disabled');
78
-
79
- var selection = change_slide_frame.state().get('selection');
80
- var slide_ids = [];
81
-
82
- selection.map(function(attachment) {
83
- attachment = attachment.toJSON();
84
- slide_to = attachment.id;
85
- slide_thumb = attachment.sizes.thumbnail.url;
86
- });
87
-
88
- var data = {
89
- action: 'change_slide_image',
90
- _wpnonce: metaslider.changeslide_nonce,
91
- slide_from: slide_from,
92
- slide_to: slide_to
93
- };
94
-
95
- if (data.slide_from !== data.slide_to) {
96
-
97
- jQuery.post(metaslider.ajaxurl, data, function(response) {
98
-
99
- response = JSON.parse(response);
100
-
101
- if (response.status == 'success') {
102
- $this.closest('div.thumb').css('background-image', 'url(' + slide_thumb + ')');
103
- jQuery(".metaslider .left table").trigger('resizeSlides');
104
- } else {
105
- alert(response.msg);
106
- }
107
-
108
- });
109
-
110
- }
111
-
112
- });
113
-
114
- change_slide_frame.open();
115
-
116
- });
117
-
118
- jQuery("#screen-options-link-wrap").appendTo("#screen-meta-links").show();
119
-
120
- jQuery("#screen-options-switch-view-wrap").appendTo("#screen-meta-links").show();
121
-
122
- // Enable the correct options for this slider type
123
- var switchType = function(slider) {
124
- jQuery('.metaslider .option:not(.' + slider + ')').attr('disabled', 'disabled').parents('tr').hide();
125
- jQuery('.metaslider .option.' + slider).removeAttr('disabled').parents('tr').show();
126
- jQuery('.metaslider input.radio:not(.' + slider + ')').attr('disabled', 'disabled');
127
- jQuery('.metaslider input.radio.' + slider).removeAttr('disabled');
128
-
129
- jQuery('.metaslider .showNextWhenChecked:visible').parent().parent().next('tr').hide();
130
- jQuery('.metaslider .showNextWhenChecked:visible:checked').parent().parent().next('tr').show();
131
-
132
- // make sure that the selected option is available for this slider type
133
- if (jQuery('.effect option:selected').attr('disabled') === 'disabled') {
134
- jQuery('.effect option:enabled:first').attr('selected', 'selected');
135
- }
136
-
137
- // make sure that the selected option is available for this slider type
138
- if (jQuery('.theme option:selected').attr('disabled') === 'disabled') {
139
- jQuery('.theme option:enabled:first').attr('selected', 'selected');
140
- }
141
- };
142
-
143
- // enable the correct options on page load
144
- switchType(jQuery(".metaslider .select-slider:checked").attr("rel"));
145
-
146
- var toggleNextRow = function(checkbox) {
147
- if(checkbox.is(':checked')){
148
- checkbox.parent().parent().next("tr").show();
149
- } else {
150
- checkbox.parent().parent().next("tr").hide();
151
- }
152
- }
153
-
154
- toggleNextRow(jQuery(".metaslider .showNextWhenChecked"));
155
-
156
- jQuery(".metaslider .showNextWhenChecked").on("change", function() {
157
- toggleNextRow(jQuery(this));
158
- });
159
-
160
- // mark the slide for resizing when the crop position has changed
161
- jQuery(".metaslider").on('change', '.left tr.slide .crop_position', function() {
162
- jQuery(this).closest('tr').data('crop_changed', true);
163
- });
164
-
165
- // handle slide libary switching
166
- jQuery(".metaslider .select-slider").on("click", function() {
167
- switchType(jQuery(this).attr("rel"));
168
- });
169
-
170
- // return a helper with preserved width of cells
171
- var metaslider_sortable_helper = function(e, ui) {
172
- ui.children().each(function() {
173
- jQuery(this).width(jQuery(this).width());
174
- });
175
- return ui;
176
- };
177
-
178
- // drag and drop slides, update the slide order on drop
179
- jQuery(".metaslider .left table tbody").sortable({
180
- helper: metaslider_sortable_helper,
181
- handle: "td.col-1",
182
- stop: function() {
183
- jQuery(".metaslider .left table").trigger("updateSlideOrder");
184
- jQuery(".metaslider form #ms-save").click();
185
- }
186
- });
187
-
188
- // bind an event to the slides table to update the menu order of each slide
189
- jQuery(".metaslider .left table").live("updateSlideOrder", function(event) {
190
- jQuery("tr", this).each(function() {
191
- jQuery("input.menu_order", jQuery(this)).val(jQuery(this).index());
192
- });
193
- });
194
-
195
- // bind an event to the slides table to update the menu order of each slide
196
- jQuery(".metaslider .left table").live("resizeSlides", function(event) {
197
- var slideshow_width = jQuery("input.width").val();
198
- var slideshow_height = jQuery("input.height").val();
199
-
200
- jQuery("tr.slide input[name='resize_slide_id']", this).each(function() {
201
- $this = jQuery(this);
202
-
203
- var thumb_width = $this.attr("data-width");
204
- var thumb_height = $this.attr("data-height");
205
- var slide_row = jQuery(this).closest('tr');
206
- var crop_changed = slide_row.data('crop_changed');
207
-
208
- if (thumb_width != slideshow_width || thumb_height != slideshow_height || crop_changed === true ) {
209
- $this.attr("data-width", slideshow_width);
210
- $this.attr("data-height", slideshow_height);
211
-
212
- var data = {
213
- action: "resize_image_slide",
214
- slider_id: window.parent.metaslider_slider_id,
215
- slide_id: $this.attr("data-slide_id"),
216
- _wpnonce: metaslider.resize_nonce
217
- };
218
-
219
- jQuery.ajax({
220
- type: "POST",
221
- data : data,
222
- async: false,
223
- cache: false,
224
- url: metaslider.ajaxurl,
225
- success: function(data) {
226
- if (crop_changed === true) {
227
- slide_row.data('crop_changed', false);
228
- }
229
-
230
- if (console && console.log) {
231
- console.log(data);
232
- }
233
- }
234
- });
235
- }
236
- });
237
- });
238
-
239
- jQuery(document).ajaxStop(function() {
240
- jQuery(".metaslider .spinner").hide().css('visibility', '');
241
- jQuery(".metaslider input[type=submit]").removeAttr("disabled");
242
- });
243
-
244
-
245
- jQuery(".useWithCaution").on("change", function(){
246
- if(!this.checked) {
247
- return alert(metaslider.useWithCaution);
248
- }
249
- });
250
-
251
- // helptext tooltips
252
- jQuery(".tipsy-tooltip").tipsy({className: 'msTipsy', live: true, delayIn: 500, html: true, gravity: 'e'});
253
- jQuery(".tipsy-tooltip-top").tipsy({live: true, delayIn: 500, html: true, gravity: 's'});
254
-
255
- // Select input field contents when clicked
256
- jQuery(".metaslider .shortcode input, .metaslider .shortcode textarea").on('click', function() {
257
- this.select();
258
- });
259
-
260
- // return lightbox width
261
- var getLightboxWidth = function() {
262
- var width = parseInt(jQuery('input.width').val(), 10);
263
-
264
- if (jQuery('.carouselMode').is(':checked')) {
265
- width = '75%';
266
- }
267
-
268
- return width;
269
- };
270
-
271
- // return lightbox height
272
- var getLightboxHeight = function() {
273
- var height = parseInt(jQuery('input.height').val(), 10);
274
- var thumb_height = parseInt(jQuery('input.thumb_height').val(), 10);
275
-
276
- if (isNaN(height)) {
277
- height = '70%';
278
- } else {
279
- height = height + 50;
280
-
281
- if (!isNaN(thumb_height)) {
282
- height = height + thumb_height;
283
- }
284
- }
285
-
286
- return height;
287
- };
288
-
289
-
290
- // IE10 treats placeholder text as the actual value of a textarea
291
- // http://stackoverflow.com/questions/13764607/html5-placeholder-attribute-on-textarea-via-jquery-in-ie10
292
- var fixIE10PlaceholderText = function() {
293
- jQuery("textarea").each(function() {
294
- if (jQuery(this).val() == jQuery(this).attr('placeholder')) {
295
- jQuery(this).val('');
296
- }
297
- });
298
- }
299
-
300
- jQuery(".metaslider .ms-toggle .hndle, .metaslider .ms-toggle .handlediv").on('click', function() {
301
- jQuery(this).parent().toggleClass('closed');
302
- });
303
-
304
- jQuery(".metaslider").on('click', 'ul.tabs li', function() {
305
- var tab = jQuery(this);
306
- tab.parent().parent().children('.tabs-content').children('div.tab').hide();
307
- tab.parent().parent().children('.tabs-content').children('div.'+tab.attr('rel')).show();
308
- tab.siblings().removeClass("selected");
309
- tab.addClass("selected");
310
- });
311
-
312
-
313
- // show the confirm dialogue
314
- jQuery(".metaslider").on('click', '.delete-slider', function() {
315
- return confirm(metaslider.confirm);
316
- });
317
-
318
- // delete a slide using ajax (avoid losing changes)
319
- jQuery(".metaslider").on('click', '.delete-slide', function(e) {
320
- e.preventDefault();
321
-
322
- var link = jQuery(this);
323
-
324
- if (confirm(metaslider.confirm)) {
325
- jQuery.get( link.attr('href') , function( data ) {
326
- link.closest('tr').fadeOut(400, function() {
327
- jQuery(this).remove();
328
- });
329
- });
330
- }
331
- });
332
-
333
- // AJAX save & preview
334
- jQuery(".metaslider form").find("input[type=submit]").on("click", function(e) {
335
- e.preventDefault();
336
-
337
- jQuery(".metaslider .spinner").show().css('visibility', 'visible');
338
- jQuery(".metaslider input[type=submit]").attr("disabled", "disabled");
339
-
340
- // update slide order
341
- jQuery(".metaslider .left table").trigger('updateSlideOrder');
342
-
343
- fixIE10PlaceholderText();
344
-
345
- // get some values from elements on the page:
346
- var the_form = jQuery(this).parents("form");
347
- var data = the_form.serialize();
348
- var url = the_form.attr("action");
349
- var button = e.target;
350
-
351
- jQuery.ajax({
352
- type: "POST",
353
- data : data,
354
- cache: false,
355
- url: url,
356
- success: function(data) {
357
- var response = jQuery(data);
358
-
359
- jQuery.when(jQuery(".metaslider .left table").trigger("resizeSlides")).done(function() {
360
-
361
- jQuery("button[data-thumb]", response).each(function() {
362
- var $this = jQuery(this);
363
- var editor_id = $this.attr("data-editor_id");
364
- jQuery("button[data-editor_id=" + editor_id + "]")
365
- .attr("data-thumb", $this.attr("data-thumb"))
366
- .attr("data-width", $this.attr("data-width"))
367
- .attr("data-height", $this.attr("data-height"));
368
- });
369
-
370
- fixIE10PlaceholderText();
371
-
372
- if (button.id === "ms-preview") {
373
- jQuery.colorbox({
374
- iframe: true,
375
- href: metaslider.iframeurl + "&slider_id=" + jQuery(button).data("slider_id"),
376
- transition: "elastic",
377
- innerHeight: getLightboxHeight(),
378
- innerWidth: getLightboxWidth(),
379
- scrolling: false,
380
- fastIframe: false
381
- });
382
- }
383
-
384
- });
385
- }
386
- });
387
- });
388
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/metaslider/public.css CHANGED
@@ -1,11 +1,7 @@
1
  /**
2
- * The files in /assets are unmodified.
3
- * This file contains
4
- * - resets, in an attempt to ensure sliders display properly in all themes
5
- * - modifications to the default sliders CSS
6
  */
7
 
8
- /* general resets */
9
  .metaslider {
10
  position: relative;
11
  z-index: 0;
@@ -68,39 +64,11 @@
68
  width: auto;
69
  }
70
 
71
- /** quick resets **/
72
- .article .metaslider ul,
73
- .article .metaslider ol,
74
- .article .metaslider li,
75
- .article .metaslider img,
76
- .art-article .metaslider ul,
77
- .art-article .metaslider ol,
78
- .art-article .metaslider li,
79
- .art-article .metaslider img,
80
- #widgets .metaslider ul,
81
- #widgets .metaslider ol,
82
- #widgets .metaslider li,
83
- #widgets .metaslider img,
84
- .entry .metaslider ul,
85
- .entry .metaslider ol,
86
- .entry .metaslider li,
87
- .entry .metaslider img,
88
- #content .metaslider ul,
89
- #content .metaslider ol,
90
- #content .metaslider li,
91
- #content .metaslider img,
92
- .entry-content .metaslider ul,
93
- .entry-content .metaslider ol,
94
- .entry-content .metaslider li,
95
- .entry-content .metaslider img,
96
- .metaslider .flexslider ul,
97
- .metaslider .flexslider .slides li,
98
- .metaslider .flexslider .slides ul,
99
- .metaslider .flexslider .slides ol,
100
- .metaslider .flexslider .flex-direction-nav,
101
- .metaslider .flexslider .flex-direction-nav li,
102
- *[class*='-article'] .metaslider img {
103
  border: 0;
 
104
  margin: 0;
105
  list-style-type: none;
106
  list-style: none;
@@ -110,7 +78,98 @@
110
  max-height: none;
111
  }
112
 
 
 
 
113
  .metaslider .slides img {
114
  width: 100%;
115
  display: block;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
  }
1
  /**
2
+ * The following styles will provide an attempt to normalize the sliders
 
 
 
3
  */
4
 
 
5
  .metaslider {
6
  position: relative;
7
  z-index: 0;
64
  width: auto;
65
  }
66
 
67
+ .metaslider .slider-wrapper .nivo-directionNav a,
68
+ .metaslider .slider-wrapper .nivo-controlNav a,
69
+ .metaslider .slider-wrapper img {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  border: 0;
71
+ box-shadow: none;
72
  margin: 0;
73
  list-style-type: none;
74
  list-style: none;
78
  max-height: none;
79
  }
80
 
81
+ .metaslider .slides {
82
+ display: inline-block;
83
+ }
84
  .metaslider .slides img {
85
  width: 100%;
86
  display: block;
87
+ }
88
+
89
+ /* Flexslider */
90
+
91
+ /* Arrow styles to use background images (old style) */
92
+ /* which makes it compatible with the theme builder */
93
+ .flexslider {
94
+ margin: 0;
95
+ }
96
+
97
+ .flex-control-nav {
98
+ width: auto;
99
+ position: static;
100
+ text-align: center;
101
+ padding: 10px;
102
+ height: 11px;
103
+ }
104
+
105
+ .flex-direction-nav a:before {
106
+ content:none!important;
107
+ }
108
+ .flex-direction-nav a {
109
+ width: 30px;
110
+ height: 30px;
111
+ margin: -20px 0 0;
112
+ box-shadow: none!important;
113
+ display: block;
114
+ background: url('../sliders/flexslider/bg_direction_nav.png') no-repeat 0 0;
115
+ position: absolute;
116
+ top: 50%;
117
+ z-index: 10;
118
+ cursor: pointer;
119
+ text-indent: -9999px;
120
+ opacity: 0;
121
+ -webkit-transition: all .3s ease;
122
+ -moz-transition: opacity .25s ease-in-out;
123
+ transition: all .3s ease;
124
+ }
125
+ .flex-direction-nav .flex-next {
126
+ background-position: 100% 0;
127
+
128
+ /* Fix for single character text */
129
+ text-indent: 9999px;
130
+ }
131
+ .flexslider:hover .flex-next {
132
+ opacity: 0.8;
133
+ right: 5px;
134
+ }
135
+ .flexslider:hover .flex-prev {
136
+ opacity: 0.8;
137
+ left: 5px;
138
+
139
+ /* Fix for single character text */
140
+ text-indent: -9999px;
141
+ }
142
+ .flexslider:hover .flex-next:hover,
143
+ .flexslider:hover .flex-prev:hover {
144
+ opacity: 1;
145
+ }
146
+ .flex-direction-nav .flex-disabled {
147
+ cursor: default;
148
+ pointer-events: none;
149
+ }
150
+ .flex-control-nav a {
151
+ box-shadow: none !important;
152
+ }
153
+
154
+ /* Responsive Slides */
155
+ .rslides_nav,
156
+ .rslides_tabs a {
157
+ box-shadow: none !important;
158
+ }
159
+
160
+ .metaslider .rslides_nav:focus,
161
+ .metaslider .rslides_nav:hover {
162
+ color: #ffffff;
163
+ }
164
+
165
+ /* Coin Slider */
166
+ .metaslider .coin-slider {
167
+
168
+ /* This keeps the slider from spilling out the container */
169
+ max-width: 100%;
170
+ overflow:hidden;
171
+ }
172
+ .metaslider .coin-slider .cs-buttons a,
173
+ .metaslider .coin-slider > a {
174
+ box-shadow: none !important;
175
  }
assets/sliders/flexslider/LICENSE.md ADDED
@@ -0,0 +1,339 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 2, June 1991
3
+
4
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
5
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+ Preamble
10
+
11
+ The licenses for most software are designed to take away your
12
+ freedom to share and change it. By contrast, the GNU General Public
13
+ License is intended to guarantee your freedom to share and change free
14
+ software--to make sure the software is free for all its users. This
15
+ General Public License applies to most of the Free Software
16
+ Foundation's software and to any other program whose authors commit to
17
+ using it. (Some other Free Software Foundation software is covered by
18
+ the GNU Lesser General Public License instead.) You can apply it to
19
+ your programs, too.
20
+
21
+ When we speak of free software, we are referring to freedom, not
22
+ price. Our General Public Licenses are designed to make sure that you
23
+ have the freedom to distribute copies of free software (and charge for
24
+ this service if you wish), that you receive source code or can get it
25
+ if you want it, that you can change the software or use pieces of it
26
+ in new free programs; and that you know you can do these things.
27
+
28
+ To protect your rights, we need to make restrictions that forbid
29
+ anyone to deny you these rights or to ask you to surrender the rights.
30
+ These restrictions translate to certain responsibilities for you if you
31
+ distribute copies of the software, or if you modify it.
32
+
33
+ For example, if you distribute copies of such a program, whether
34
+ gratis or for a fee, you must give the recipients all the rights that
35
+ you have. You must make sure that they, too, receive or can get the
36
+ source code. And you must show them these terms so they know their
37
+ rights.
38
+
39
+ We protect your rights with two steps: (1) copyright the software, and
40
+ (2) offer you this license which gives you legal permission to copy,
41
+ distribute and/or modify the software.
42
+
43
+ Also, for each author's protection and ours, we want to make certain
44
+ that everyone understands that there is no warranty for this free
45
+ software. If the software is modified by someone else and passed on, we
46
+ want its recipients to know that what they have is not the original, so
47
+ that any problems introduced by others will not reflect on the original
48
+ authors' reputations.
49
+
50
+ Finally, any free program is threatened constantly by software
51
+ patents. We wish to avoid the danger that redistributors of a free
52
+ program will individually obtain patent licenses, in effect making the
53
+ program proprietary. To prevent this, we have made it clear that any
54
+ patent must be licensed for everyone's free use or not licensed at all.
55
+
56
+ The precise terms and conditions for copying, distribution and
57
+ modification follow.
58
+
59
+ GNU GENERAL PUBLIC LICENSE
60
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
+
62
+ 0. This License applies to any program or other work which contains
63
+ a notice placed by the copyright holder saying it may be distributed
64
+ under the terms of this General Public License. The "Program", below,
65
+ refers to any such program or work, and a "work based on the Program"
66
+ means either the Program or any derivative work under copyright law:
67
+ that is to say, a work containing the Program or a portion of it,
68
+ either verbatim or with modifications and/or translated into another
69
+ language. (Hereinafter, translation is included without limitation in
70
+ the term "modification".) Each licensee is addressed as "you".
71
+
72
+ Activities other than copying, distribution and modification are not
73
+ covered by this License; they are outside its scope. The act of
74
+ running the Program is not restricted, and the output from the Program
75
+ is covered only if its contents constitute a work based on the
76
+ Program (independent of having been made by running the Program).
77
+ Whether that is true depends on what the Program does.
78
+
79
+ 1. You may copy and distribute verbatim copies of the Program's
80
+ source code as you receive it, in any medium, provided that you
81
+ conspicuously and appropriately publish on each copy an appropriate
82
+ copyright notice and disclaimer of warranty; keep intact all the
83
+ notices that refer to this License and to the absence of any warranty;
84
+ and give any other recipients of the Program a copy of this License
85
+ along with the Program.
86
+
87
+ You may charge a fee for the physical act of transferring a copy, and
88
+ you may at your option offer warranty protection in exchange for a fee.
89
+
90
+ 2. You may modify your copy or copies of the Program or any portion
91
+ of it, thus forming a work based on the Program, and copy and
92
+ distribute such modifications or work under the terms of Section 1
93
+ above, provided that you also meet all of these conditions:
94
+
95
+ a) You must cause the modified files to carry prominent notices
96
+ stating that you changed the files and the date of any change.
97
+
98
+ b) You must cause any work that you distribute or publish, that in
99
+ whole or in part contains or is derived from the Program or any
100
+ part thereof, to be licensed as a whole at no charge to all third
101
+ parties under the terms of this License.
102
+
103
+ c) If the modified program normally reads commands interactively
104
+ when run, you must cause it, when started running for such
105
+ interactive use in the most ordinary way, to print or display an
106
+ announcement including an appropriate copyright notice and a
107
+ notice that there is no warranty (or else, saying that you provide
108
+ a warranty) and that users may redistribute the program under
109
+ these conditions, and telling the user how to view a copy of this
110
+ License. (Exception: if the Program itself is interactive but
111
+ does not normally print such an announcement, your work based on
112
+ the Program is not required to print an announcement.)
113
+
114
+ These requirements apply to the modified work as a whole. If
115
+ identifiable sections of that work are not derived from the Program,
116
+ and can be reasonably considered independent and separate works in
117
+ themselves, then this License, and its terms, do not apply to those
118
+ sections when you distribute them as separate works. But when you
119
+ distribute the same sections as part of a whole which is a work based
120
+ on the Program, the distribution of the whole must be on the terms of
121
+ this License, whose permissions for other licensees extend to the
122
+ entire whole, and thus to each and every part regardless of who wrote it.
123
+
124
+ Thus, it is not the intent of this section to claim rights or contest
125
+ your rights to work written entirely by you; rather, the intent is to
126
+ exercise the right to control the distribution of derivative or
127
+ collective works based on the Program.
128
+
129
+ In addition, mere aggregation of another work not based on the Program
130
+ with the Program (or with a work based on the Program) on a volume of
131
+ a storage or distribution medium does not bring the other work under
132
+ the scope of this License.
133
+
134
+ 3. You may copy and distribute the Program (or a work based on it,
135
+ under Section 2) in object code or executable form under the terms of
136
+ Sections 1 and 2 above provided that you also do one of the following:
137
+
138
+ a) Accompany it with the complete corresponding machine-readable
139
+ source code, which must be distributed under the terms of Sections
140
+ 1 and 2 above on a medium customarily used for software interchange; or,
141
+
142
+ b) Accompany it with a written offer, valid for at least three
143
+ years, to give any third party, for a charge no more than your
144
+ cost of physically performing source distribution, a complete
145
+ machine-readable copy of the corresponding source code, to be
146
+ distributed under the terms of Sections 1 and 2 above on a medium
147
+ customarily used for software interchange; or,
148
+
149
+ c) Accompany it with the information you received as to the offer
150
+ to distribute corresponding source code. (This alternative is
151
+ allowed only for noncommercial distribution and only if you
152
+ received the program in object code or executable form with such
153
+ an offer, in accord with Subsection b above.)
154
+
155
+ The source code for a work means the preferred form of the work for
156
+ making modifications to it. For an executable work, complete source
157
+ code means all the source code for all modules it contains, plus any
158
+ associated interface definition files, plus the scripts used to
159
+ control compilation and installation of the executable. However, as a
160
+ special exception, the source code distributed need not include
161
+ anything that is normally distributed (in either source or binary
162
+ form) with the major components (compiler, kernel, and so on) of the
163
+ operating system on which the executable runs, unless that component
164
+ itself accompanies the executable.
165
+
166
+ If distribution of executable or object code is made by offering
167
+ access to copy from a designated place, then offering equivalent
168
+ access to copy the source code from the same place counts as
169
+ distribution of the source code, even though third parties are not
170
+ compelled to copy the source along with the object code.
171
+
172
+ 4. You may not copy, modify, sublicense, or distribute the Program
173
+ except as expressly provided under this License. Any attempt
174
+ otherwise to copy, modify, sublicense or distribute the Program is
175
+ void, and will automatically terminate your rights under this License.
176
+ However, parties who have received copies, or rights, from you under
177
+ this License will not have their licenses terminated so long as such
178
+ parties remain in full compliance.
179
+
180
+ 5. You are not required to accept this License, since you have not
181
+ signed it. However, nothing else grants you permission to modify or
182
+ distribute the Program or its derivative works. These actions are
183
+ prohibited by law if you do not accept this License. Therefore, by
184
+ modifying or distributing the Program (or any work based on the
185
+ Program), you indicate your acceptance of this License to do so, and
186
+ all its terms and conditions for copying, distributing or modifying
187
+ the Program or works based on it.
188
+
189
+ 6. Each time you redistribute the Program (or any work based on the
190
+ Program), the recipient automatically receives a license from the
191
+ original licensor to copy, distribute or modify the Program subject to
192
+ these terms and conditions. You may not impose any further
193
+ restrictions on the recipients' exercise of the rights granted herein.
194
+ You are not responsible for enforcing compliance by third parties to
195
+ this License.
196
+
197
+ 7. If, as a consequence of a court judgment or allegation of patent
198
+ infringement or for any other reason (not limited to patent issues),
199
+ conditions are imposed on you (whether by court order, agreement or
200
+ otherwise) that contradict the conditions of this License, they do not
201
+ excuse you from the conditions of this License. If you cannot
202
+ distribute so as to satisfy simultaneously your obligations under this
203
+ License and any other pertinent obligations, then as a consequence you
204
+ may not distribute the Program at all. For example, if a patent
205
+ license would not permit royalty-free redistribution of the Program by
206
+ all those who receive copies directly or indirectly through you, then
207
+ the only way you could satisfy both it and this License would be to
208
+ refrain entirely from distribution of the Program.
209
+
210
+ If any portion of this section is held invalid or unenforceable under
211
+ any particular circumstance, the balance of the section is intended to
212
+ apply and the section as a whole is intended to apply in other
213
+ circumstances.
214
+
215
+ It is not the purpose of this section to induce you to infringe any
216
+ patents or other property right claims or to contest validity of any
217
+ such claims; this section has the sole purpose of protecting the
218
+ integrity of the free software distribution system, which is
219
+ implemented by public license practices. Many people have made
220
+ generous contributions to the wide range of software distributed
221
+ through that system in reliance on consistent application of that
222
+ system; it is up to the author/donor to decide if he or she is willing
223
+ to distribute software through any other system and a licensee cannot
224
+ impose that choice.
225
+
226
+ This section is intended to make thoroughly clear what is believed to
227
+ be a consequence of the rest of this License.
228
+
229
+ 8. If the distribution and/or use of the Program is restricted in
230
+ certain countries either by patents or by copyrighted interfaces, the
231
+ original copyright holder who places the Program under this License
232
+ may add an explicit geographical distribution limitation excluding
233
+ those countries, so that distribution is permitted only in or among
234
+ countries not thus excluded. In such case, this License incorporates
235
+ the limitation as if written in the body of this License.
236
+
237
+ 9. The Free Software Foundation may publish revised and/or new versions
238
+ of the General Public License from time to time. Such new versions will
239
+ be similar in spirit to the present version, but may differ in detail to
240
+ address new problems or concerns.
241
+
242
+ Each version is given a distinguishing version number. If the Program
243
+ specifies a version number of this License which applies to it and "any
244
+ later version", you have the option of following the terms and conditions
245
+ either of that version or of any later version published by the Free
246
+ Software Foundation. If the Program does not specify a version number of
247
+ this License, you may choose any version ever published by the Free Software
248
+ Foundation.
249
+
250
+ 10. If you wish to incorporate parts of the Program into other free
251
+ programs whose distribution conditions are different, write to the author
252
+ to ask for permission. For software which is copyrighted by the Free
253
+ Software Foundation, write to the Free Software Foundation; we sometimes
254
+ make exceptions for this. Our decision will be guided by the two goals
255
+ of preserving the free status of all derivatives of our free software and
256
+ of promoting the sharing and reuse of software generally.
257
+
258
+ NO WARRANTY
259
+
260
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268
+ REPAIR OR CORRECTION.
269
+
270
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278
+ POSSIBILITY OF SUCH DAMAGES.
279
+
280
+ END OF TERMS AND CONDITIONS
281
+
282
+ How to Apply These Terms to Your New Programs
283
+
284
+ If you develop a new program, and you want it to be of the greatest
285
+ possible use to the public, the best way to achieve this is to make it
286
+ free software which everyone can redistribute and change under these terms.
287
+
288
+ To do so, attach the following notices to the program. It is safest
289
+ to attach them to the start of each source file to most effectively
290
+ convey the exclusion of warranty; and each file should have at least
291
+ the "copyright" line and a pointer to where the full notice is found.
292
+
293
+ {description}
294
+ Copyright (C) {year} {fullname}
295
+
296
+ This program is free software; you can redistribute it and/or modify
297
+ it under the terms of the GNU General Public License as published by
298
+ the Free Software Foundation; either version 2 of the License, or
299
+ (at your option) any later version.
300
+
301
+ This program is distributed in the hope that it will be useful,
302
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
303
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304
+ GNU General Public License for more details.
305
+
306
+ You should have received a copy of the GNU General Public License along
307
+ with this program; if not, write to the Free Software Foundation, Inc.,
308
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
309
+
310
+ Also add information on how to contact you by electronic and paper mail.
311
+
312
+ If the program is interactive, make it output a short notice like this
313
+ when it starts in an interactive mode:
314
+
315
+ Gnomovision version 69, Copyright (C) year name of author
316
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317
+ This is free software, and you are welcome to redistribute it
318
+ under certain conditions; type `show c' for details.
319
+
320
+ The hypothetical commands `show w' and `show c' should show the appropriate
321
+ parts of the General Public License. Of course, the commands you use may
322
+ be called something other than `show w' and `show c'; they could even be
323
+ mouse-clicks or menu items--whatever suits your program.
324
+
325
+ You should also get your employer (if you work as a programmer) or your
326
+ school, if any, to sign a "copyright disclaimer" for the program, if
327
+ necessary. Here is a sample; alter the names:
328
+
329
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
331
+
332
+ {signature of Ty Coon}, 1 April 1989
333
+ Ty Coon, President of Vice
334
+
335
+ This General Public License does not permit incorporating your program into
336
+ proprietary programs. If your program is a subroutine library, you may
337
+ consider it more useful to permit linking proprietary applications with the
338
+ library. If this is what you want to do, use the GNU Lesser General
339
+ Public License instead of this License.
assets/sliders/flexslider/flexslider.css CHANGED
@@ -1,161 +1,275 @@
1
  /*
2
- * jQuery FlexSlider v2.0
3
  * http://www.woothemes.com/flexslider/
4
  *
5
  * Copyright 2012 WooThemes
6
- * Free to use under the GPLv2 license.
7
  * http://www.gnu.org/licenses/gpl-2.0.html
8
  *
9
  * Contributing author: Tyler Smith (@mbmufffin)
 
10
  */
11
-
12
-
13
- /* Browser Resets */
14
- .flex-container a:active,
15
- .flexslider a:active,
16
- .flex-container a:focus,
17
- .flexslider a:focus {outline: none;}
 
 
 
 
 
 
 
 
 
 
18
  .slides,
 
19
  .flex-control-nav,
20
- .flex-direction-nav {margin: 0; padding: 0; list-style: none;}
21
-
22
- /* FlexSlider Necessary Styles
23
- *********************************/
24
- .flexslider {margin: 0; padding: 0;}
25
- /*.flexslider .slides > li {display: none; -webkit-backface-visibility: hidden;} /* Hide the slides before the JS is loaded. Avoids image jumping */
26
- .flexslider .slides img {width: 100%; display: block;}
27
- .flex-pauseplay span {text-transform: capitalize;}
28
-
29
- /* Clearfix for the .slides element */
30
- .slides:after {content: "."; display: block; clear: both; visibility: hidden; line-height: 0; height: 0;}
31
- html[xmlns] .slides {display: block;}
32
- * html .slides {height: 1%;}
33
-
34
- /* No JavaScript Fallback */
35
- /* If you are not using another script, such as Modernizr, make sure you
36
- * include js that eliminates this class on page load */
37
- .no-js .slides > li:first-child {display: block;}
38
-
39
-
40
- /* FlexSlider Default Theme
41
- *********************************/
42
- .flexslider {margin: 0 0 60px; background: #fff; border: 4px solid #fff; position: relative; -webkit-border-radius: 4px; -moz-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; box-shadow: 0 1px 4px rgba(0,0,0,.2); -webkit-box-shadow: 0 1px 4px rgba(0,0,0,.2); -moz-box-shadow: 0 1px 4px rgba(0,0,0,.2); -o-box-shadow: 0 1px 4px rgba(0,0,0,.2); zoom: 1;}
43
- .flex-viewport {max-height: 2000px; -webkit-transition: all 1s ease; -moz-transition: all 1s ease; transition: all 1s ease;}
44
- .loading .flex-viewport {max-height: 300px;}
45
- .flexslider .slides {zoom: 1;}
46
-
47
- .carousel li {margin-right: 5px}
48
-
49
-
50
- /* Direction Nav */
51
- .flex-direction-nav {*height: 0;}
52
- .flex-direction-nav a {width: 30px; height: 30px; margin: -20px 0 0; display: block; background: url(bg_direction_nav.png) no-repeat 0 0; position: absolute; top: 50%; z-index: 10; cursor: pointer; text-indent: -9999px; opacity: 0; -webkit-transition: all .3s ease;}
53
- .flex-direction-nav .flex-next {background-position: 100% 0; right: -36px; }
54
- .flex-direction-nav .flex-prev {left: -36px;}
55
- .flexslider:hover .flex-next {opacity: 0.8; right: 5px;}
56
- .flexslider:hover .flex-prev {opacity: 0.8; left: 5px;}
57
- .flexslider:hover .flex-next:hover, .flexslider:hover .flex-prev:hover {opacity: 1;}
58
- .flex-direction-nav .flex-disabled {cursor: default; pointer-events: none;}
59
-
60
- /* Control Nav */
61
- .flex-control-nav {width: 100%; position: absolute; bottom: -40px; text-align: center;}
62
- .flex-control-nav li {margin: 0 6px; display: inline-block; zoom: 1; *display: inline;}
63
- .flex-control-paging li a {width: 11px; height: 11px; display: block; background: #666; background: rgba(0,0,0,0.5); cursor: pointer; text-indent: -9999px; -webkit-border-radius: 20px; -moz-border-radius: 20px; -o-border-radius: 20px; border-radius: 20px; box-shadow: inset 0 0 3px rgba(0,0,0,0.3);}
64
- .flex-control-paging li a:hover { background: #333; background: rgba(0,0,0,0.7); }
65
- .flex-control-paging li a.flex-active { background: #000; background: rgba(0,0,0,0.9); cursor: default; }
66
-
67
- .flex-control-thumbs {margin: 5px 0 0; position: static; overflow: hidden;}
68
- .flex-control-thumbs li {}
69
- .flex-control-thumbs img {margin: 10px 5px 0; display: inline-block; opacity: .7; cursor: pointer;}
70
- .flex-control-thumbs img:hover {opacity: 1;}
71
- .flex-control-thumbs .flex-active {opacity: 1; cursor: default;}
72
-
73
- @media screen and (max-width: 860px) {
74
- .flex-direction-nav .flex-prev {opacity: 1; left: 0;}
75
- .flex-direction-nav .flex-next {opacity: 1; right: 0;}
76
- }
77
-
78
- /** Custom Meta Slider CSS **/
79
- .metaslider .flexslider {
80
- background: none;
81
- box-shadow: none;
82
- -webkit-box-shadow: none;
83
- -moz-box-shadow: none;
84
- -o-box-shadow: none;
85
- border: 0;
86
- margin: 0 0 40px 0;
87
- max-width: none;
88
- max-height: none;
89
- }
90
-
91
- .flex-control-nav {
92
- bottom: -30px;
93
- line-height: 11px;
94
  }
95
-
96
- /** move margin from list items to anchors */
97
- .flex-control-nav li {
98
- margin: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  }
100
-
101
- .flex-control-nav li a {
102
- margin: 0 6px;
103
- padding: 0;
104
  }
105
-
106
- .flexslider .slides li {
107
- position: relative;
108
- height: auto;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
  }
110
-
111
- /** fix for users with RTL languages */
112
  .flex-viewport {
113
- direction: ltr;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
  }
115
-
116
- /** add transition effects to firefox **/
117
  .flex-direction-nav a {
118
- -moz-transition: all .3s ease;
119
- transition: all .3s ease;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
  }
121
-
122
- .flexslider .slides p {
123
- margin: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
124
  }
125
-
126
  .flex-control-nav {
127
- margin: auto;
128
- }
129
-
130
- .metaslider .flexslider.filmstrip {
131
- margin-top: 10px;
132
- }
133
-
134
- .metaslider .flexslider.filmstrip .slides li {
135
- cursor: pointer;
136
- opacity: 0.5;
137
- }
138
-
139
- .metaslider .flexslider.filmstrip .slides li.flex-active-slide,
140
- .metaslider .flexslider.filmstrip .slides li:hover,
141
- .metaslider .flexslider.filmstrip .slides li:focus {
142
- opacity: 1.0 !important;
143
- }
144
-
145
- .metaslider .flex-control-thumbs li {
146
- width: auto;
147
- }
148
-
149
- .metaslider ol.flex-control-thumbs img,
150
- #content .metaslider ol.flex-control-thumbs img {
151
- margin: 10px 5px 0;
152
- width: auto;
153
- }
154
-
155
- .metaslider.nav-hidden .flexslider {
156
- margin-bottom: 0;
157
- }
158
-
159
- .metaslider.nav-hidden.add-margin .flexslider {
160
- margin-bottom: 40px;
161
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  /*
2
+ * jQuery FlexSlider v2.6.4
3
  * http://www.woothemes.com/flexslider/
4
  *
5
  * Copyright 2012 WooThemes
6
+ * Free to use under the GPLv2 and later license.
7
  * http://www.gnu.org/licenses/gpl-2.0.html
8
  *
9
  * Contributing author: Tyler Smith (@mbmufffin)
10
+ *
11
  */
12
+ /* ====================================================================================================================
13
+ * FONT-FACE
14
+ * ====================================================================================================================*/
15
+ @font-face {
16
+ font-family: 'flexslider-icon';
17
+ src: url('fonts/flexslider-icon.eot');
18
+ src: url('fonts/flexslider-icon.eot?#iefix') format('embedded-opentype'), url('fonts/flexslider-icon.woff') format('woff'), url('fonts/flexslider-icon.ttf') format('truetype'), url('fonts/flexslider-icon.svg#flexslider-icon') format('svg');
19
+ font-weight: normal;
20
+ font-style: normal;
21
+ }
22
+ /* ====================================================================================================================
23
+ * RESETS
24
+ * ====================================================================================================================*/
25
+ .flex-container a:hover,
26
+ .flex-slider a:hover {
27
+ outline: none;
28
+ }
29
  .slides,
30
+ .slides > li,
31
  .flex-control-nav,
32
+ .flex-direction-nav {
33
+ margin: 0;
34
+ padding: 0;
35
+ list-style: none;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  }
37
+ .flex-pauseplay span {
38
+ text-transform: capitalize;
39
+ }
40
+ /* ====================================================================================================================
41
+ * BASE STYLES
42
+ * ====================================================================================================================*/
43
+ .flexslider {
44
+ margin: 0;
45
+ padding: 0;
46
+ }
47
+ .flexslider .slides > li {
48
+ display: none;
49
+ -webkit-backface-visibility: hidden;
50
+ }
51
+ .flexslider .slides img {
52
+ width: 100%;
53
+ display: block;
54
+ }
55
+ .flexslider .slides:after {
56
+ content: "\0020";
57
+ display: block;
58
+ clear: both;
59
+ visibility: hidden;
60
+ line-height: 0;
61
+ height: 0;
62
+ }
63
+ html[xmlns] .flexslider .slides {
64
+ display: block;
65
  }
66
+ * html .flexslider .slides {
67
+ height: 1%;
 
 
68
  }
69
+ .no-js .flexslider .slides > li:first-child {
70
+ display: block;
71
+ }
72
+ /* ====================================================================================================================
73
+ * DEFAULT THEME
74
+ * ====================================================================================================================*/
75
+ .flexslider {
76
+ margin: 0 0 60px;
77
+ background: #fff;
78
+ border: 4px solid #fff;
79
+ position: relative;
80
+ zoom: 1;
81
+ -webkit-border-radius: 4px;
82
+ -moz-border-radius: 4px;
83
+ border-radius: 4px;
84
+ -webkit-box-shadow: '' 0 1px 4px rgba(0, 0, 0, 0.2);
85
+ -moz-box-shadow: '' 0 1px 4px rgba(0, 0, 0, 0.2);
86
+ -o-box-shadow: '' 0 1px 4px rgba(0, 0, 0, 0.2);
87
+ box-shadow: '' 0 1px 4px rgba(0, 0, 0, 0.2);
88
+ }
89
+ .flexslider .slides {
90
+ zoom: 1;
91
+ }
92
+ .flexslider .slides img {
93
+ height: auto;
94
+ -moz-user-select: none;
95
  }
 
 
96
  .flex-viewport {
97
+ max-height: 2000px;
98
+ -webkit-transition: all 1s ease;
99
+ -moz-transition: all 1s ease;
100
+ -ms-transition: all 1s ease;
101
+ -o-transition: all 1s ease;
102
+ transition: all 1s ease;
103
+ }
104
+ .loading .flex-viewport {
105
+ max-height: 300px;
106
+ }
107
+ .carousel li {
108
+ margin-right: 5px;
109
+ }
110
+ .flex-direction-nav {
111
+ *height: 0;
112
  }
 
 
113
  .flex-direction-nav a {
114
+ text-decoration: none;
115
+ display: block;
116
+ width: 40px;
117
+ height: 40px;
118
+ margin: -20px 0 0;
119
+ position: absolute;
120
+ top: 50%;
121
+ z-index: 10;
122
+ overflow: hidden;
123
+ opacity: 0;
124
+ cursor: pointer;
125
+ color: rgba(0, 0, 0, 0.8);
126
+ text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3);
127
+ -webkit-transition: all 0.3s ease-in-out;
128
+ -moz-transition: all 0.3s ease-in-out;
129
+ -ms-transition: all 0.3s ease-in-out;
130
+ -o-transition: all 0.3s ease-in-out;
131
+ transition: all 0.3s ease-in-out;
132
+ }
133
+ .flex-direction-nav a:before {
134
+ font-family: "flexslider-icon";
135
+ font-size: 40px;
136
+ display: inline-block;
137
+ content: '\f001';
138
+ color: rgba(0, 0, 0, 0.8);
139
+ text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3);
140
+ }
141
+ .flex-direction-nav a.flex-next:before {
142
+ content: '\f002';
143
+ }
144
+ .flex-direction-nav .flex-prev {
145
+ left: -50px;
146
+ }
147
+ .flex-direction-nav .flex-next {
148
+ right: -50px;
149
+ text-align: right;
150
  }
151
+ .flexslider:hover .flex-direction-nav .flex-prev {
152
+ opacity: 0.7;
153
+ left: 10px;
154
+ }
155
+ .flexslider:hover .flex-direction-nav .flex-prev:hover {
156
+ opacity: 1;
157
+ }
158
+ .flexslider:hover .flex-direction-nav .flex-next {
159
+ opacity: 0.7;
160
+ right: 10px;
161
+ }
162
+ .flexslider:hover .flex-direction-nav .flex-next:hover {
163
+ opacity: 1;
164
+ }
165
+ .flex-direction-nav .flex-disabled {
166
+ opacity: 0!important;
167
+ filter: alpha(opacity=0);
168
+ cursor: default;
169
+ z-index: -1;
170
+ }
171
+ .flex-pauseplay a {
172
+ display: block;
173
+ width: 20px;
174
+ height: 20px;
175
+ position: absolute;
176
+ bottom: 5px;
177
+ left: 10px;
178
+ opacity: 0.8;
179
+ z-index: 10;
180
+ overflow: hidden;
181
+ cursor: pointer;
182
+ color: #000;
183
+ }
184
+ .flex-pauseplay a:before {
185
+ font-family: "flexslider-icon";
186
+ font-size: 20px;
187
+ display: inline-block;
188
+ content: '\f004';
189
+ }
190
+ .flex-pauseplay a:hover {
191
+ opacity: 1;
192
+ }
193
+ .flex-pauseplay a.flex-play:before {
194
+ content: '\f003';
195
  }
 
196
  .flex-control-nav {
197
+ width: 100%;
198
+ position: absolute;
199
+ bottom: -40px;
200
+ text-align: center;
201
+ }
202
+ .flex-control-nav li {
203
+ margin: 0 6px;
204
+ display: inline-block;
205
+ zoom: 1;
206
+ *display: inline;
207
+ }
208
+ .flex-control-paging li a {
209
+ width: 11px;
210
+ height: 11px;
211
+ display: block;
212
+ background: #666;
213
+ background: rgba(0, 0, 0, 0.5);
214
+ cursor: pointer;
215
+ text-indent: -9999px;
216
+ -webkit-box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.3);
217
+ -moz-box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.3);
218
+ -o-box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.3);
219
+ box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.3);
220
+ -webkit-border-radius: 20px;
221
+ -moz-border-radius: 20px;
222
+ border-radius: 20px;
223
+ }
224
+ .flex-control-paging li a:hover {
225
+ background: #333;
226
+ background: rgba(0, 0, 0, 0.7);
227
+ }
228
+ .flex-control-paging li a.flex-active {
229
+ background: #000;
230
+ background: rgba(0, 0, 0, 0.9);
231
+ cursor: default;
232
+ }
233
+ .flex-control-thumbs {
234
+ margin: 5px 0 0;
235
+ position: static;
236
+ overflow: hidden;
237
+ }
238
+ .flex-control-thumbs li {
239
+ width: 25%;
240
+ float: left;
241
+ margin: 0;
242
+ }
243
+ .flex-control-thumbs img {
244
+ width: 100%;
245
+ height: auto;
246
+ display: block;
247
+ opacity: .7;
248
+ cursor: pointer;
249
+ -moz-user-select: none;
250
+ -webkit-transition: all 1s ease;
251
+ -moz-transition: all 1s ease;
252
+ -ms-transition: all 1s ease;
253
+ -o-transition: all 1s ease;
254
+ transition: all 1s ease;
255
+ }
256
+ .flex-control-thumbs img:hover {
257
+ opacity: 1;
258
+ }
259
+ .flex-control-thumbs .flex-active {
260
+ opacity: 1;
261
+ cursor: default;
262
+ }
263
+ /* ====================================================================================================================
264
+ * RESPONSIVE
265
+ * ====================================================================================================================*/
266
+ @media screen and (max-width: 860px) {
267
+ .flex-direction-nav .flex-prev {
268
+ opacity: 1;
269
+ left: 10px;
270
+ }
271
+ .flex-direction-nav .flex-next {
272
+ opacity: 1;
273
+ right: 10px;
274
+ }
275
+ }
assets/sliders/flexslider/flexslider.min.css ADDED
@@ -0,0 +1 @@
 
1
+ @font-face{font-family:'flexslider-icon';src:url('fonts/flexslider-icon.eot');src:url('fonts/flexslider-icon.eot?#iefix') format('embedded-opentype'),url('fonts/flexslider-icon.woff') format('woff'),url('fonts/flexslider-icon.ttf') format('truetype'),url('fonts/flexslider-icon.svg#flexslider-icon') format('svg');font-weight:normal;font-style:normal}.flex-container a:hover,.flex-slider a:hover{outline:0}.slides,.slides>li,.flex-control-nav,.flex-direction-nav{margin:0;padding:0;list-style:none}.flex-pauseplay span{text-transform:capitalize}.flexslider{margin:0;padding:0}.flexslider .slides>li{display:none;-webkit-backface-visibility:hidden}.flexslider .slides img{width:100%;display:block}.flexslider .slides:after{content:"\0020";display:block;clear:both;visibility:hidden;line-height:0;height:0}html[xmlns] .flexslider .slides{display:block}* html .flexslider .slides{height:1%}.no-js .flexslider .slides>li:first-child{display:block}.flexslider{margin:0 0 60px;background:#fff;border:4px solid #fff;position:relative;zoom:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:'' 0 1px 4px rgba(0,0,0,0.2);-moz-box-shadow:'' 0 1px 4px rgba(0,0,0,0.2);-o-box-shadow:'' 0 1px 4px rgba(0,0,0,0.2);box-shadow:'' 0 1px 4px rgba(0,0,0,0.2)}.flexslider .slides{zoom:1}.flexslider .slides img{height:auto;-moz-user-select:none}.flex-viewport{max-height:2000px;-webkit-transition:all 1s ease;-moz-transition:all 1s ease;-ms-transition:all 1s ease;-o-transition:all 1s ease;transition:all 1s ease}.loading .flex-viewport{max-height:300px}.carousel li{margin-right:5px}.flex-direction-nav{*height:0}.flex-direction-nav a{text-decoration:none;display:block;width:40px;height:40px;margin:-20px 0 0;position:absolute;top:50%;z-index:10;overflow:hidden;opacity:0;cursor:pointer;color:rgba(0,0,0,0.8);text-shadow:1px 1px 0 rgba(255,255,255,0.3);-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-ms-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.flex-direction-nav a:before{font-family:"flexslider-icon";font-size:40px;display:inline-block;content:'\f001';color:rgba(0,0,0,0.8);text-shadow:1px 1px 0 rgba(255,255,255,0.3)}.flex-direction-nav a.flex-next:before{content:'\f002'}.flex-direction-nav .flex-prev{left:-50px}.flex-direction-nav .flex-next{right:-50px;text-align:right}.flexslider:hover .flex-direction-nav .flex-prev{opacity:.7;left:10px}.flexslider:hover .flex-direction-nav .flex-prev:hover{opacity:1}.flexslider:hover .flex-direction-nav .flex-next{opacity:.7;right:10px}.flexslider:hover .flex-direction-nav .flex-next:hover{opacity:1}.flex-direction-nav .flex-disabled{opacity:0 !important;filter:alpha(opacity=0);cursor:default;z-index:-1}.flex-pauseplay a{display:block;width:20px;height:20px;position:absolute;bottom:5px;left:10px;opacity:.8;z-index:10;overflow:hidden;cursor:pointer;color:#000}.flex-pauseplay a:before{font-family:"flexslider-icon";font-size:20px;display:inline-block;content:'\f004'}.flex-pauseplay a:hover{opacity:1}.flex-pauseplay a.flex-play:before{content:'\f003'}.flex-control-nav{width:100%;position:absolute;bottom:-40px;text-align:center}.flex-control-nav li{margin:0 6px;display:inline-block;zoom:1;*display:inline}.flex-control-paging li a{width:11px;height:11px;display:block;background:#666;background:rgba(0,0,0,0.5);cursor:pointer;text-indent:-9999px;-webkit-box-shadow:inset 0 0 3px rgba(0,0,0,0.3);-moz-box-shadow:inset 0 0 3px rgba(0,0,0,0.3);-o-box-shadow:inset 0 0 3px rgba(0,0,0,0.3);box-shadow:inset 0 0 3px rgba(0,0,0,0.3);-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px}.flex-control-paging li a:hover{background:#333;background:rgba(0,0,0,0.7)}.flex-control-paging li a.flex-active{background:#000;background:rgba(0,0,0,0.9);cursor:default}.flex-control-thumbs{margin:5px 0 0;position:static;overflow:hidden}.flex-control-thumbs li{width:25%;float:left;margin:0}.flex-control-thumbs img{width:100%;height:auto;display:block;opacity:.7;cursor:pointer;-moz-user-select:none;-webkit-transition:all 1s ease;-moz-transition:all 1s ease;-ms-transition:all 1s ease;-o-transition:all 1s ease;transition:all 1s ease}.flex-control-thumbs img:hover{opacity:1}.flex-control-thumbs .flex-active{opacity:1;cursor:default}@media screen and (max-width:860px){.flex-direction-nav .flex-prev{opacity:1;left:10px}.flex-direction-nav .flex-next{opacity:1;right:10px}}
assets/sliders/flexslider/{jquery.flexslider-min.js → jquery.flexslider.js} RENAMED
@@ -1,16 +1,13 @@
1
  /*
2
- * jQuery FlexSlider v2.2.2
3
  * Copyright 2012 WooThemes
4
  * Contributing Author: Tyler Smith
5
- * Modifications applied:
6
- * 905: https://github.com/woothemes/FlexSlider/pull/1044
7
- * 928: https://github.com/woothemes/FlexSlider/issues/1043
8
- * 1082: fadeFirstslide set to false by default.
9
- * 398: https://github.com/woothemes/FlexSlider/issues/1110
10
  */
11
  ;
12
  (function ($) {
13
 
 
 
14
  //FlexSlider: Object Instance
15
  $.flexslider = function(el, options) {
16
  var slider = $(el);
@@ -21,8 +18,7 @@
21
  var namespace = slider.vars.namespace,
22
  msGesture = window.navigator && window.navigator.msPointerEnabled && window.MSGesture,
23
  touch = (( "ontouchstart" in window ) || msGesture || window.DocumentTouch && document instanceof DocumentTouch) && slider.vars.touch,
24
- // depricating this idea, as devices are being released with both of these events
25
- //eventType = (touch) ? "touchend" : "click",
26
  eventType = "click touchend MSPointerUp keyup",
27
  watchedEvent = "",
28
  watchedEventClearTimer,
@@ -31,8 +27,7 @@
31
  carousel = (slider.vars.itemWidth > 0),
32
  fade = slider.vars.animation === "fade",
33
  asNav = slider.vars.asNavFor !== "",
34
- methods = {},
35
- focused = true;
36
 
37
  // Store a reference to the slider object
38
  $.data(el, "flexslider", slider);
@@ -43,7 +38,7 @@
43
  slider.animating = false;
44
  // Get current slide and make sure it is a number
45
  slider.currentSlide = parseInt( ( slider.vars.startAt ? slider.vars.startAt : 0), 10 );
46
- if ( isNaN( slider.currentSlide ) ) slider.currentSlide = 0;
47
  slider.animatingTo = slider.currentSlide;
48
  slider.atEnd = (slider.currentSlide === 0 || slider.currentSlide === slider.last);
49
  slider.containerSelector = slider.vars.selector.substr(0,slider.vars.selector.search(' '));
@@ -53,7 +48,7 @@
53
  // SYNC:
54
  slider.syncExists = $(slider.vars.sync).length > 0;
55
  // SLIDE:
56
- if (slider.vars.animation === "slide") slider.vars.animation = "swing";
57
  slider.prop = (vertical) ? "top" : "marginLeft";
58
  slider.args = {};
59
  // SLIDESHOW:
@@ -81,6 +76,9 @@
81
  // MANUAL:
82
  if (slider.vars.manualControls !== "") slider.manualControls = $(slider.vars.manualControls).length > 0 && $(slider.vars.manualControls);
83
 
 
 
 
84
  // RANDOMIZE:
85
  if (slider.vars.randomize) {
86
  slider.slides.sort(function() { return (Math.round(Math.random())-0.5); });
@@ -93,10 +91,10 @@
93
  slider.setup("init");
94
 
95
  // CONTROLNAV:
96
- if (slider.vars.controlNav) methods.controlNav.setup();
97
 
98
  // DIRECTIONNAV:
99
- if (slider.vars.directionNav) methods.directionNav.setup();
100
 
101
  // KEYBOARD:
102
  if (slider.vars.keyboard && ($(slider.containerSelector).length === 1 || slider.vars.multipleKeyboard)) {
@@ -119,18 +117,18 @@
119
  }
120
 
121
  // PAUSEPLAY
122
- if (slider.vars.pausePlay) methods.pausePlay.setup();
123
 
124
  //PAUSE WHEN INVISIBLE
125
- if (slider.vars.slideshow && slider.vars.pauseInvisible) methods.pauseInvisible.init();
126
 
127
  // SLIDSESHOW
128
  if (slider.vars.slideshow) {
129
  if (slider.vars.pauseOnHover) {
130
  slider.hover(function() {
131
- if (!slider.manualPlay && !slider.manualPause) slider.pause();
132
  }, function() {
133
- if (!slider.manualPause && !slider.manualPlay && !slider.stopped) slider.play();
134
  });
135
  }
136
  // initialize animation
@@ -141,13 +139,13 @@
141
  }
142
 
143
  // ASNAV:
144
- if (asNav) methods.asNav.setup();
145
 
146
  // TOUCH
147
- if (touch && slider.vars.touch) methods.touch();
148
 
149
  // FADE&&SMOOTHHEIGHT || SLIDE:
150
- if (!fade || (fade && slider.vars.smoothHeight)) $(window).bind("resize orientationchange focus", methods.resize);
151
 
152
  slider.find("img").attr("draggable", "false");
153
 
@@ -183,8 +181,9 @@
183
  that._gesture.target = that;
184
  that.addEventListener("MSPointerDown", function (e){
185
  e.preventDefault();
186
- if(e.currentTarget._gesture)
187
- e.currentTarget._gesture.addPointer(e.pointerId);
 
188
  }, false);
189
  that.addEventListener("MSGestureTap", function (e){
190
  e.preventDefault();
@@ -218,10 +217,12 @@
218
  if (slider.pagingCount > 1) {
219
  for (var i = 0; i < slider.pagingCount; i++) {
220
  slide = slider.slides.eq(i);
221
- item = (slider.vars.controlNav === "thumbnails") ? '<img src="' + slide.attr( 'data-thumb' ) + '"/>' : '<a>' + j + '</a>';
 
 
222
  if ( 'thumbnails' === slider.vars.controlNav && true === slider.vars.thumbCaptions ) {
223
  var captn = slide.attr( 'data-thumbcaption' );
224
- if ( '' != captn && undefined != captn ) item += '<span class="' + namespace + 'caption">' + captn + '</span>';
225
  }
226
  slider.controlNavScaffold.append('<li>' + item + '</li>');
227
  j++;
@@ -288,7 +289,7 @@
288
  },
289
  update: function(action, pos) {
290
  if (slider.pagingCount > 1 && action === "add") {
291
- slider.controlNavScaffold.append($('<li><a>' + slider.count + '</a></li>'));
292
  } else if (slider.pagingCount === 1) {
293
  slider.controlNavScaffold.find('li').remove();
294
  } else {
@@ -300,10 +301,13 @@
300
  },
301
  directionNav: {
302
  setup: function() {
303
- var directionNavScaffold = $('<ul class="' + namespace + 'direction-nav"><li><a class="' + namespace + 'prev" href="#">' + slider.vars.prevText + '</a></li><li><a class="' + namespace + 'next" href="#">' + slider.vars.nextText + '</a></li></ul>');
304
 
 
 
 
305
  // CONTROLSCONTAINER:
306
- if (slider.controlsContainer) {
307
  $(slider.controlsContainer).append(directionNavScaffold);
308
  slider.directionNav = $('.' + namespace + 'direction-nav li a', slider.controlsContainer);
309
  } else {
@@ -348,7 +352,7 @@
348
  },
349
  pausePlay: {
350
  setup: function() {
351
- var pausePlayScaffold = $('<div class="' + namespace + 'pauseplay"><a></a></div>');
352
 
353
  // CONTROLSCONTAINER:
354
  if (slider.controlsContainer) {
@@ -394,14 +398,16 @@
394
  cwidth,
395
  dx,
396
  startT,
 
 
 
397
  scrolling = false,
398
  localX = 0,
399
  localY = 0,
400
  accDx = 0;
401
 
402
  if(!msGesture){
403
-
404
- function onTouchStart(e) {
405
  if (slider.animating) {
406
  e.preventDefault();
407
  } else if ( ( window.navigator.msPointerEnabled ) || e.touches.length === 1 ) {
@@ -426,11 +432,9 @@
426
  el.addEventListener('touchmove', onTouchMove, false);
427
  el.addEventListener('touchend', onTouchEnd, false);
428
  }
429
- }
430
-
431
- el.addEventListener('touchstart', onTouchStart, false);
432
 
433
- function onTouchMove(e) {
434
  // Local vars for X and Y points.
435
 
436
  localX = e.touches[0].pageX;
@@ -450,9 +454,9 @@
450
  slider.setProps(offset + dx, "setTouch");
451
  }
452
  }
453
- }
454
 
455
- function onTouchEnd(e) {
456
  // finish the touch by undoing the touch session
457
  el.removeEventListener('touchmove', onTouchMove, false);
458
 
@@ -463,16 +467,32 @@
463
  if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) {
464
  slider.flexAnimate(target, slider.vars.pauseOnAction);
465
  } else {
466
- if (!fade) slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true);
467
  }
468
  }
469
  el.removeEventListener('touchend', onTouchEnd, false);
470
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
471
  startX = null;
472
  startY = null;
473
  dx = null;
474
  offset = null;
475
- }
 
 
476
  }else{
477
  el.style.msTouchAction = "none";
478
  el._gesture = new MSGesture();
@@ -548,9 +568,23 @@
548
  if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) {
549
  slider.flexAnimate(target, slider.vars.pauseOnAction);
550
  } else {
551
- if (!fade) slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true);
552
  }
553
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
554
 
555
  startX = null;
556
  startY = null;
@@ -562,7 +596,7 @@
562
  },
563
  resize: function() {
564
  if (!slider.animating && slider.is(':visible')) {
565
- if (!carousel) slider.doMath();
566
 
567
  if (fade) {
568
  // SMOOTH HEIGHT:
@@ -577,7 +611,7 @@
577
  slider.setProps(slider.h, "setTotal");
578
  } else {
579
  // SMOOTH HEIGHT:
580
- if (slider.vars.smoothHeight) methods.smoothHeight();
581
  slider.newSlides.width(slider.computedW);
582
  slider.setProps(slider.computedW, "setTotal");
583
  }
@@ -586,7 +620,7 @@
586
  smoothHeight: function(dur) {
587
  if (!vertical || fade) {
588
  var $obj = (fade) ? slider : slider.viewport;
589
- (dur) ? $obj.animate({"height": slider.slides.eq(slider.animatingTo).height()}, dur) : $obj.height(slider.slides.eq(slider.animatingTo).height());
590
  }
591
  },
592
  sync: function(action) {
@@ -600,7 +634,8 @@
600
  }
601
  },
602
  uniqueID: function($clone) {
603
- $clone.find( '[id]' ).each(function() {
 
604
  var $this = $(this);
605
  $this.attr( 'id', $this.attr( 'id' ) + '_clone' );
606
  });
@@ -609,29 +644,52 @@
609
  pauseInvisible: {
610
  visProp: null,
611
  init: function() {
612
- var prefixes = ['webkit','moz','ms','o'];
613
-
614
- if ('hidden' in document) return 'hidden';
615
- for (var i = 0; i < prefixes.length; i++) {
616
- if ((prefixes[i] + 'Hidden') in document)
617
- methods.pauseInvisible.visProp = prefixes[i] + 'Hidden';
618
- }
619
- if (methods.pauseInvisible.visProp) {
620
- var evtname = methods.pauseInvisible.visProp.replace(/[H|h]idden/,'') + 'visibilitychange';
621
  document.addEventListener(evtname, function() {
622
  if (methods.pauseInvisible.isHidden()) {
623
- if(slider.startTimeout) clearTimeout(slider.startTimeout); //If clock is ticking, stop timer and prevent from starting while invisible
624
- else slider.pause(); //Or just pause
 
 
 
625
  }
626
  else {
627
- if(slider.started) slider.play(); //Initiated before, just play
628
- else (slider.vars.initDelay > 0) ? setTimeout(slider.play, slider.vars.initDelay) : slider.play(); //Didn't init before: simply init or wait for it
 
 
 
 
 
 
 
629
  }
630
  });
631
  }
632
  },
633
  isHidden: function() {
634
- return document[methods.pauseInvisible.visProp] || false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
635
  }
636
  },
637
  setToClearWatchedEvent: function() {
@@ -673,33 +731,33 @@
673
  slider.animatingTo = target;
674
 
675
  // SLIDESHOW:
676
- if (pause) slider.pause();
677
 
678
  // API: before() animation Callback
679
  slider.vars.before(slider);
680
 
681
  // SYNC:
682
- if (slider.syncExists && !fromNav) methods.sync("animate");
683
 
684
  // CONTROLNAV
685
- if (slider.vars.controlNav) methods.controlNav.active();
686
 
687
  // !CAROUSEL:
688
  // CANDIDATE: slide active class (for add/remove slide)
689
- if (!carousel) slider.slides.removeClass(namespace + 'active-slide').eq(target).addClass(namespace + 'active-slide');
690
 
691
  // INFINITE LOOP:
692
  // CANDIDATE: atEnd
693
  slider.atEnd = target === 0 || target === slider.last;
694
 
695
  // DIRECTIONNAV:
696
- if (slider.vars.directionNav) methods.directionNav.update();
697
 
698
  if (target === slider.last) {
699
  // API: end() of cycle Callback
700
  slider.vars.end(slider);
701
  // SLIDESHOW && !INFINITE LOOP:
702
- if (!slider.vars.animationLoop) slider.pause();
703
  }
704
 
705
  // SLIDE:
@@ -709,7 +767,6 @@
709
 
710
  // INFINITE LOOP / REVERSE:
711
  if (carousel) {
712
- //margin = (slider.vars.itemWidth > slider.w) ? slider.vars.itemMargin * 2 : slider.vars.itemMargin;
713
  margin = slider.vars.itemMargin;
714
  calcNext = ((slider.itemW + margin) * slider.move) * slider.animatingTo;
715
  slideString = (calcNext > slider.limit && slider.visible !== 1) ? slider.limit : calcNext;
@@ -726,7 +783,7 @@
726
  slider.animating = false;
727
  slider.currentSlide = slider.animatingTo;
728
  }
729
-
730
  // Unbind previous transitionEnd events and re-bind new transitionEnd event
731
  slider.container.unbind("webkitTransitionEnd transitionend");
732
  slider.container.bind("webkitTransitionEnd transitionend", function() {
@@ -747,12 +804,8 @@
747
  }
748
  } else { // FADE:
749
  if (!touch) {
750
- //slider.slides.eq(slider.currentSlide).fadeOut(slider.vars.animationSpeed, slider.vars.easing);
751
- //slider.slides.eq(target).fadeIn(slider.vars.animationSpeed, slider.vars.easing, slider.wrapup);
752
-
753
  slider.slides.eq(slider.currentSlide).css({"zIndex": 1}).animate({"opacity": 0}, slider.vars.animationSpeed, slider.vars.easing);
754
  slider.slides.eq(target).css({"zIndex": 2}).animate({"opacity": 1}, slider.vars.animationSpeed, slider.vars.easing, slider.wrapup);
755
-
756
  } else {
757
  slider.slides.eq(slider.currentSlide).css({ "opacity": 0, "zIndex": 1 });
758
  slider.slides.eq(target).css({ "opacity": 1, "zIndex": 2 });
@@ -760,7 +813,7 @@
760
  }
761
  }
762
  // SMOOTH HEIGHT:
763
- if (slider.vars.smoothHeight) methods.smoothHeight(slider.vars.animationSpeed);
764
  }
765
  };
766
  slider.wrapup = function(dimension) {
@@ -780,7 +833,7 @@
780
 
781
  // SLIDESHOW:
782
  slider.animateSlides = function() {
783
- if (!slider.animating && focused ) slider.flexAnimate(slider.getTarget("next"));
784
  };
785
  // SLIDESHOW:
786
  slider.pause = function() {
@@ -788,19 +841,19 @@
788
  slider.animatedSlides = null;
789
  slider.playing = false;
790
  // PAUSEPLAY:
791
- if (slider.vars.pausePlay) methods.pausePlay.update("play");
792
  // SYNC:
793
- if (slider.syncExists) methods.sync("pause");
794
  };
795
  // SLIDESHOW:
796
  slider.play = function() {
797
- if (slider.playing) clearInterval(slider.animatedSlides);
798
  slider.animatedSlides = slider.animatedSlides || setInterval(slider.animateSlides, slider.vars.slideshowSpeed);
799
  slider.started = slider.playing = true;
800
  // PAUSEPLAY:
801
- if (slider.vars.pausePlay) methods.pausePlay.update("pause");
802
  // SYNC:
803
- if (slider.syncExists) methods.sync("play");
804
  };
805
  // STOP:
806
  slider.stop = function () {
@@ -860,7 +913,7 @@
860
  }
861
 
862
  slider.args[slider.prop] = target;
863
- if (slider.transitions || dur === undefined) slider.container.css(slider.args);
864
 
865
  slider.container.css('transform',target);
866
  };
@@ -887,10 +940,9 @@
887
  slider.cloneCount = 2;
888
  slider.cloneOffset = 1;
889
  // clear out old clones
890
- if (type !== "init") slider.container.find('.clone').remove();
891
- // slider.container.append(slider.slides.first().clone().addClass('clone').attr('aria-hidden', 'true')).prepend(slider.slides.last().clone().addClass('clone').attr('aria-hidden', 'true'));
892
- methods.uniqueID( slider.slides.first().clone().addClass('clone').attr('aria-hidden', 'true') ).appendTo( slider.container );
893
- methods.uniqueID( slider.slides.last().clone().addClass('clone').attr('aria-hidden', 'true') ).prependTo( slider.container );
894
  }
895
  slider.newSlides = $(slider.vars.selector, slider);
896
 
@@ -905,14 +957,13 @@
905
  slider.setProps(sliderOffset * slider.h, "init");
906
  }, (type === "init") ? 100 : 0);
907
  } else {
908
- slider.newSlides.css({"width": slider.computedW, "float": "left", "display": "block"});
909
  slider.container.width((slider.count + slider.cloneCount) * 200 + "%");
910
  slider.setProps(sliderOffset * slider.computedW, "init");
911
  setTimeout(function(){
912
  slider.doMath();
913
- slider.newSlides.css({"width": slider.computedW, "float": "left", "display": "block"});
914
  // SMOOTH HEIGHT:
915
- if (slider.vars.smoothHeight) methods.smoothHeight();
916
  }, (type === "init") ? 100 : 0);
917
  }
918
  } else { // FADE:
@@ -927,15 +978,14 @@
927
  }
928
  } else {
929
  slider.slides.css({ "opacity": 0, "display": "block", "webkitTransition": "opacity " + slider.vars.animationSpeed / 1000 + "s ease", "zIndex": 1 }).eq(slider.currentSlide).css({ "opacity": 1, "zIndex": 2});
930
- slider.slides.css("transition", "opacity " + slider.vars.animationSpeed / 1000 + "s ease");
931
  }
932
  }
933
  // SMOOTH HEIGHT:
934
- if (slider.vars.smoothHeight) methods.smoothHeight();
935
  }
936
  // !CAROUSEL:
937
  // CANDIDATE: active slide
938
- if (!carousel) slider.slides.removeClass(namespace + "active-slide").eq(slider.currentSlide).addClass(namespace + "active-slide");
939
 
940
  //FlexSlider: init() Callback
941
  slider.vars.init(slider);
@@ -954,6 +1004,7 @@
954
  // CAROUSEL:
955
  if (carousel) {
956
  slider.itemT = slider.vars.itemWidth + slideMargin;
 
957
  slider.minW = (minItems) ? minItems * slider.itemT : slider.w;
958
  slider.maxW = (maxItems) ? (maxItems * slider.itemT) - slideMargin : slider.w;
959
  slider.itemW = (slider.minW > slider.w) ? (slider.w - (slideMargin * (minItems - 1)))/minItems :
@@ -968,10 +1019,12 @@
968
  (slider.vars.itemWidth > slider.w) ? (slider.itemW * (slider.count - 1)) + (slideMargin * (slider.count - 1)) : ((slider.itemW + slideMargin) * slider.count) - slider.w - slideMargin;
969
  } else {
970
  slider.itemW = slider.w;
 
971
  slider.pagingCount = slider.count;
972
  slider.last = slider.count - 1;
973
  }
974
  slider.computedW = slider.itemW - slider.boxPadding;
 
975
  };
976
 
977
  slider.update = function(pos, action) {
@@ -1000,7 +1053,7 @@
1000
  }
1001
  }
1002
  // update directionNav
1003
- if (slider.vars.directionNav) methods.directionNav.update();
1004
 
1005
  };
1006
 
@@ -1082,19 +1135,19 @@
1082
  animationSpeed: 600, //Integer: Set the speed of animations, in milliseconds
1083
  initDelay: 0, //{NEW} Integer: Set an initialization delay, in milliseconds
1084
  randomize: false, //Boolean: Randomize slide order
1085
- fadeFirstSlide: false, //Boolean: Fade in the first slide when animation type is "fade"
1086
  thumbCaptions: false, //Boolean: Whether or not to put captions on thumbnails when using the "thumbnails" controlNav.
1087
 
1088
  // Usability features
1089
  pauseOnAction: true, //Boolean: Pause the slideshow when interacting with control elements, highly recommended.
1090
  pauseOnHover: false, //Boolean: Pause the slideshow when hovering over slider, then resume when no longer hovering
1091
- pauseInvisible: true, //{NEW} Boolean: Pause the slideshow when tab is invisible, resume when visible. Provides better UX, lower CPU usage.
1092
  useCSS: true, //{NEW} Boolean: Slider will use CSS3 transitions if available
1093
  touch: true, //{NEW} Boolean: Allow touch swipe navigation of the slider on touch-enabled devices
1094
  video: false, //{NEW} Boolean: If using video in the slider, will prevent CSS3 3D Transforms to avoid graphical glitches
1095
 
1096
  // Primary Controls
1097
- controlNav: true, //Boolean: Create navigation for paging control of each clide? Note: Leave true for manualControls usage
1098
  directionNav: true, //Boolean: Create navigation for previous/next navigation? (true/false)
1099
  prevText: "Previous", //String: Set the text for the "previous" directionNav item
1100
  nextText: "Next", //String: Set the text for the "next" directionNav item
@@ -1110,6 +1163,7 @@
1110
  // Special properties
1111
  controlsContainer: "", //{UPDATED} jQuery Object/Selector: Declare which container the navigation elements should be appended too. Default container is the FlexSlider element. Example use would be $(".flexslider-container"). Property is ignored if given element is not found.
1112
  manualControls: "", //{UPDATED} jQuery Object/Selector: Declare custom control navigation. Examples would be $(".flex-control-nav li") or "#tabs-nav li img", etc. The number of elements in your controlNav should match the number of slides/tabs.
 
1113
  sync: "", //{NEW} Selector: Mirror the actions performed on this slider with another slider. Use with care.
1114
  asNavFor: "", //{NEW} Selector: Internal property exposed for turning the slider into a thumbnail navigation for another slider
1115
 
@@ -1133,7 +1187,7 @@
1133
 
1134
  //FlexSlider: Plugin Function
1135
  $.fn.flexslider = function(options) {
1136
- if (options === undefined) options = {};
1137
 
1138
  if (typeof options === "object") {
1139
  return this.each(function() {
@@ -1141,9 +1195,9 @@
1141
  selector = (options.selector) ? options.selector : ".slides > li",
1142
  $slides = $this.find(selector);
1143
 
1144
- if ( ( $slides.length === 1 && options.allowOneSlide === true ) || $slides.length === 0 ) {
1145
  $slides.fadeIn(400);
1146
- if (options.start) options.start($this);
1147
  } else if ($this.data('flexslider') === undefined) {
1148
  new $.flexslider(this, options);
1149
  }
@@ -1158,8 +1212,8 @@
1158
  case "next": $slider.flexAnimate($slider.getTarget("next"), true); break;
1159
  case "prev":
1160
  case "previous": $slider.flexAnimate($slider.getTarget("prev"), true); break;
1161
- default: if (typeof options === "number") $slider.flexAnimate(options, true);
1162
  }
1163
  }
1164
  };
1165
- })(jQuery);
1
  /*
2
+ * jQuery FlexSlider v2.6.4
3
  * Copyright 2012 WooThemes
4
  * Contributing Author: Tyler Smith
 
 
 
 
 
5
  */
6
  ;
7
  (function ($) {
8
 
9
+ var focused = true;
10
+
11
  //FlexSlider: Object Instance
12
  $.flexslider = function(el, options) {
13
  var slider = $(el);
18
  var namespace = slider.vars.namespace,
19
  msGesture = window.navigator && window.navigator.msPointerEnabled && window.MSGesture,
20
  touch = (( "ontouchstart" in window ) || msGesture || window.DocumentTouch && document instanceof DocumentTouch) && slider.vars.touch,
21
+ // deprecating this idea, as devices are being released with both of these events
 
22
  eventType = "click touchend MSPointerUp keyup",
23
  watchedEvent = "",
24
  watchedEventClearTimer,
27
  carousel = (slider.vars.itemWidth > 0),
28
  fade = slider.vars.animation === "fade",
29
  asNav = slider.vars.asNavFor !== "",
30
+ methods = {};
 
31
 
32
  // Store a reference to the slider object
33
  $.data(el, "flexslider", slider);
38
  slider.animating = false;
39
  // Get current slide and make sure it is a number
40
  slider.currentSlide = parseInt( ( slider.vars.startAt ? slider.vars.startAt : 0), 10 );
41
+ if ( isNaN( slider.currentSlide ) ) { slider.currentSlide = 0; }
42
  slider.animatingTo = slider.currentSlide;
43
  slider.atEnd = (slider.currentSlide === 0 || slider.currentSlide === slider.last);
44
  slider.containerSelector = slider.vars.selector.substr(0,slider.vars.selector.search(' '));
48
  // SYNC:
49
  slider.syncExists = $(slider.vars.sync).length > 0;
50
  // SLIDE:
51
+ if (slider.vars.animation === "slide") { slider.vars.animation = "swing"; }
52
  slider.prop = (vertical) ? "top" : "marginLeft";
53
  slider.args = {};
54
  // SLIDESHOW:
76
  // MANUAL:
77
  if (slider.vars.manualControls !== "") slider.manualControls = $(slider.vars.manualControls).length > 0 && $(slider.vars.manualControls);
78
 
79
+ // CUSTOM DIRECTION NAV:
80
+ if (slider.vars.customDirectionNav !== "") slider.customDirectionNav = $(slider.vars.customDirectionNav).length === 2 && $(slider.vars.customDirectionNav);
81
+
82
  // RANDOMIZE:
83
  if (slider.vars.randomize) {
84
  slider.slides.sort(function() { return (Math.round(Math.random())-0.5); });
91
  slider.setup("init");
92
 
93
  // CONTROLNAV:
94
+ if (slider.vars.controlNav) { methods.controlNav.setup(); }
95
 
96
  // DIRECTIONNAV:
97
+ if (slider.vars.directionNav) { methods.directionNav.setup(); }
98
 
99
  // KEYBOARD:
100
  if (slider.vars.keyboard && ($(slider.containerSelector).length === 1 || slider.vars.multipleKeyboard)) {
117
  }
118
 
119
  // PAUSEPLAY
120
+ if (slider.vars.pausePlay) { methods.pausePlay.setup(); }
121
 
122
  //PAUSE WHEN INVISIBLE
123
+ if (slider.vars.slideshow && slider.vars.pauseInvisible) { methods.pauseInvisible.init(); }
124
 
125
  // SLIDSESHOW
126
  if (slider.vars.slideshow) {
127
  if (slider.vars.pauseOnHover) {
128
  slider.hover(function() {
129
+ if (!slider.manualPlay && !slider.manualPause) { slider.pause(); }
130
  }, function() {
131
+ if (!slider.manualPause && !slider.manualPlay && !slider.stopped) { slider.play(); }
132
  });
133
  }
134
  // initialize animation
139
  }
140
 
141
  // ASNAV:
142
+ if (asNav) { methods.asNav.setup(); }
143
 
144
  // TOUCH
145
+ if (touch && slider.vars.touch) { methods.touch(); }
146
 
147
  // FADE&&SMOOTHHEIGHT || SLIDE:
148
+ if (!fade || (fade && slider.vars.smoothHeight)) { $(window).bind("resize orientationchange focus", methods.resize()); }
149
 
150
  slider.find("img").attr("draggable", "false");
151
 
181
  that._gesture.target = that;
182
  that.addEventListener("MSPointerDown", function (e){
183
  e.preventDefault();
184
+ if(e.currentTarget._gesture) {
185
+ e.currentTarget._gesture.addPointer(e.pointerId);
186
+ }
187
  }, false);
188
  that.addEventListener("MSGestureTap", function (e){
189
  e.preventDefault();
217
  if (slider.pagingCount > 1) {
218
  for (var i = 0; i < slider.pagingCount; i++) {
219
  slide = slider.slides.eq(i);
220
+ if ( undefined === slide.attr( 'data-thumb-alt' ) ) { slide.attr( 'data-thumb-alt', '' ); }
221
+ var altText = ( '' !== slide.attr( 'data-thumb-alt' ) ) ? altText = ' alt="' + slide.attr( 'data-thumb-alt' ) + '"' : '';
222
+ item = (slider.vars.controlNav === "thumbnails") ? '<img src="' + slide.attr( 'data-thumb' ) + '"' + altText + '/>' : '<a href="#">' + j + '</a>';
223
  if ( 'thumbnails' === slider.vars.controlNav && true === slider.vars.thumbCaptions ) {
224
  var captn = slide.attr( 'data-thumbcaption' );
225
+ if ( '' !== captn && undefined !== captn ) { item += '<span class="' + namespace + 'caption">' + captn + '</span>'; }
226
  }
227
  slider.controlNavScaffold.append('<li>' + item + '</li>');
228
  j++;
289
  },
290
  update: function(action, pos) {
291
  if (slider.pagingCount > 1 && action === "add") {
292
+ slider.controlNavScaffold.append($('<li><a href="#">' + slider.count + '</a></li>'));
293
  } else if (slider.pagingCount === 1) {
294
  slider.controlNavScaffold.find('li').remove();
295
  } else {
301
  },
302
  directionNav: {
303
  setup: function() {
304
+ var directionNavScaffold = $('<ul class="' + namespace + 'direction-nav"><li class="' + namespace + 'nav-prev"><a class="' + namespace + 'prev" href="#">' + slider.vars.prevText + '</a></li><li class="' + namespace + 'nav-next"><a class="' + namespace + 'next" href="#">' + slider.vars.nextText + '</a></li></ul>');
305
 
306
+ // CUSTOM DIRECTION NAV:
307
+ if (slider.customDirectionNav) {
308
+ slider.directionNav = slider.customDirectionNav;
309
  // CONTROLSCONTAINER:
310
+ } else if (slider.controlsContainer) {
311
  $(slider.controlsContainer).append(directionNavScaffold);
312
  slider.directionNav = $('.' + namespace + 'direction-nav li a', slider.controlsContainer);
313
  } else {
352
  },
353
  pausePlay: {
354
  setup: function() {
355
+ var pausePlayScaffold = $('<div class="' + namespace + 'pauseplay"><a href="#"></a></div>');
356
 
357
  // CONTROLSCONTAINER:
358
  if (slider.controlsContainer) {
398
  cwidth,
399
  dx,
400
  startT,
401
+ onTouchStart,
402
+ onTouchMove,
403
+ onTouchEnd,
404
  scrolling = false,
405
  localX = 0,
406
  localY = 0,
407
  accDx = 0;
408
 
409
  if(!msGesture){
410
+ onTouchStart = function(e) {
 
411
  if (slider.animating) {
412
  e.preventDefault();
413
  } else if ( ( window.navigator.msPointerEnabled ) || e.touches.length === 1 ) {
432
  el.addEventListener('touchmove', onTouchMove, false);
433
  el.addEventListener('touchend', onTouchEnd, false);
434
  }
435
+ };
 
 
436
 
437
+ onTouchMove = function(e) {
438
  // Local vars for X and Y points.
439
 
440
  localX = e.touches[0].pageX;
454
  slider.setProps(offset + dx, "setTouch");
455
  }
456
  }
457
+ };
458
 
459
+ onTouchEnd = function(e) {
460
  // finish the touch by undoing the touch session
461
  el.removeEventListener('touchmove', onTouchMove, false);
462
 
467
  if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) {
468
  slider.flexAnimate(target, slider.vars.pauseOnAction);
469
  } else {
470
+ if (!fade) { slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true); }
471
  }
472
  }
473
  el.removeEventListener('touchend', onTouchEnd, false);
474
 
475
+ if (dx && scrolling) {
476
+
477
+ // (scroll) Resume autoplay if slideshow is enabled
478
+ slider.vars.slideshow && slider.play();
479
+ } else if (dx) {
480
+
481
+ // (swipe) Resume if pauseOnAction:false, else end slideshow
482
+ !slider.vars.pauseOnAction && slider.play() || (slider.vars.slideshow = false);
483
+ } else {
484
+
485
+ // ("click") Resume if pauseOnAction:false, slideshow:true
486
+ (slider.vars.slideshow && !slider.vars.pauseOnAction) && slider.play() || (slider.vars.slideshow = false);
487
+ }
488
+
489
  startX = null;
490
  startY = null;
491
  dx = null;
492
  offset = null;
493
+ };
494
+
495
+ el.addEventListener('touchstart', onTouchStart, false);
496
  }else{
497
  el.style.msTouchAction = "none";
498
  el._gesture = new MSGesture();
568
  if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) {
569
  slider.flexAnimate(target, slider.vars.pauseOnAction);
570
  } else {
571
+ if (!fade) { slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true); }
572
  }
573
  }
574
+
575
+ if (dx && scrolling) {
576
+
577
+ // (scroll) Resume autoplay if slideshow is enabled
578
+ slider.vars.slideshow && slider.play();
579
+ } else if (dx) {
580
+
581
+ // (swipe) Resume if pauseOnAction:false, else end slideshow
582
+ !slider.vars.pauseOnAction && slider.play() || (slider.vars.slideshow = false);
583
+ } else {
584
+
585
+ // ("click") Resume if pauseOnAction:false, slideshow:true
586
+ (slider.vars.slideshow && !slider.vars.pauseOnAction) && slider.play() || (slider.vars.slideshow = false);
587
+ }
588
 
589
  startX = null;
590
  startY = null;
596
  },
597
  resize: function() {
598
  if (!slider.animating && slider.is(':visible')) {
599
+ if (!carousel) { slider.doMath(); }
600
 
601
  if (fade) {
602
  // SMOOTH HEIGHT:
611
  slider.setProps(slider.h, "setTotal");
612
  } else {
613
  // SMOOTH HEIGHT:
614
+ if (slider.vars.smoothHeight) { methods.smoothHeight(); }
615
  slider.newSlides.width(slider.computedW);
616
  slider.setProps(slider.computedW, "setTotal");
617
  }
620
  smoothHeight: function(dur) {
621
  if (!vertical || fade) {
622
  var $obj = (fade) ? slider : slider.viewport;
623
+ (dur) ? $obj.animate({"height": slider.slides.eq(slider.animatingTo).innerHeight()}, dur) : $obj.innerHeight(slider.slides.eq(slider.animatingTo).innerHeight());
624
  }
625
  },
626
  sync: function(action) {
634
  }
635
  },
636
  uniqueID: function($clone) {
637
+ // Append _clone to current level and children elements with id attributes
638
+ $clone.filter( '[id]' ).add($clone.find( '[id]' )).each(function() {
639
  var $this = $(this);
640
  $this.attr( 'id', $this.attr( 'id' ) + '_clone' );
641
  });
644
  pauseInvisible: {
645
  visProp: null,
646
  init: function() {
647
+ var visProp = methods.pauseInvisible.getHiddenProp();
648
+ if (visProp) {
649
+ var evtname = visProp.replace(/[H|h]idden/,'') + 'visibilitychange';
 
 
 
 
 
 
650
  document.addEventListener(evtname, function() {
651
  if (methods.pauseInvisible.isHidden()) {
652
+ if(slider.startTimeout) {
653
+ clearTimeout(slider.startTimeout); //If clock is ticking, stop timer and prevent from starting while invisible
654
+ } else {
655
+ slider.pause(); //Or just pause
656
+ }
657
  }
658
  else {
659
+ if(slider.started) {
660
+ slider.play(); //Initiated before, just play
661
+ } else {
662
+ if (slider.vars.initDelay > 0) {
663
+ setTimeout(slider.play, slider.vars.initDelay);
664
+ } else {
665
+ slider.play(); //Didn't init before: simply init or wait for it
666
+ }
667
+ }
668
  }
669
  });
670
  }
671
  },
672
  isHidden: function() {
673
+ var prop = methods.pauseInvisible.getHiddenProp();
674
+ if (!prop) {
675
+ return false;
676
+ }
677
+ return document[prop];
678
+ },
679
+ getHiddenProp: function() {
680
+ var prefixes = ['webkit','moz','ms','o'];
681
+ // if 'hidden' is natively supported just return it
682
+ if ('hidden' in document) {
683
+ return 'hidden';
684
+ }
685
+ // otherwise loop over all the known prefixes until we find one
686
+ for ( var i = 0; i < prefixes.length; i++ ) {
687
+ if ((prefixes[i] + 'Hidden') in document) {
688
+ return prefixes[i] + 'Hidden';
689
+ }
690
+ }
691
+ // otherwise it's not supported
692
+ return null;
693
  }
694
  },
695
  setToClearWatchedEvent: function() {
731
  slider.animatingTo = target;
732
 
733
  // SLIDESHOW:
734
+ if (pause) { slider.pause(); }
735
 
736
  // API: before() animation Callback
737
  slider.vars.before(slider);
738
 
739
  // SYNC:
740
+ if (slider.syncExists && !fromNav) { methods.sync("animate"); }
741
 
742
  // CONTROLNAV
743
+ if (slider.vars.controlNav) { methods.controlNav.active(); }
744
 
745
  // !CAROUSEL:
746
  // CANDIDATE: slide active class (for add/remove slide)
747
+ if (!carousel) { slider.slides.removeClass(namespace + 'active-slide').eq(target).addClass(namespace + 'active-slide'); }
748
 
749
  // INFINITE LOOP:
750
  // CANDIDATE: atEnd
751
  slider.atEnd = target === 0 || target === slider.last;
752
 
753
  // DIRECTIONNAV:
754
+ if (slider.vars.directionNav) { methods.directionNav.update(); }
755
 
756
  if (target === slider.last) {
757
  // API: end() of cycle Callback
758
  slider.vars.end(slider);
759
  // SLIDESHOW && !INFINITE LOOP:
760
+ if (!slider.vars.animationLoop) { slider.pause(); }
761
  }
762
 
763
  // SLIDE:
767
 
768
  // INFINITE LOOP / REVERSE:
769
  if (carousel) {
 
770
  margin = slider.vars.itemMargin;
771
  calcNext = ((slider.itemW + margin) * slider.move) * slider.animatingTo;
772
  slideString = (calcNext > slider.limit && slider.visible !== 1) ? slider.limit : calcNext;
783
  slider.animating = false;
784
  slider.currentSlide = slider.animatingTo;
785
  }
786
+
787
  // Unbind previous transitionEnd events and re-bind new transitionEnd event
788
  slider.container.unbind("webkitTransitionEnd transitionend");
789
  slider.container.bind("webkitTransitionEnd transitionend", function() {
804
  }
805
  } else { // FADE:
806
  if (!touch) {
 
 
 
807
  slider.slides.eq(slider.currentSlide).css({"zIndex": 1}).animate({"opacity": 0}, slider.vars.animationSpeed, slider.vars.easing);
808
  slider.slides.eq(target).css({"zIndex": 2}).animate({"opacity": 1}, slider.vars.animationSpeed, slider.vars.easing, slider.wrapup);
 
809
  } else {
810
  slider.slides.eq(slider.currentSlide).css({ "opacity": 0, "zIndex": 1 });
811
  slider.slides.eq(target).css({ "opacity": 1, "zIndex": 2 });
813
  }
814
  }
815
  // SMOOTH HEIGHT:
816
+ if (slider.vars.smoothHeight) { methods.smoothHeight(slider.vars.animationSpeed); }
817
  }
818
  };
819
  slider.wrapup = function(dimension) {
833
 
834
  // SLIDESHOW:
835
  slider.animateSlides = function() {
836
+ if (!slider.animating && focused ) { slider.flexAnimate(slider.getTarget("next")); }
837
  };
838
  // SLIDESHOW:
839
  slider.pause = function() {
841
  slider.animatedSlides = null;
842
  slider.playing = false;
843
  // PAUSEPLAY:
844
+ if (slider.vars.pausePlay) { methods.pausePlay.update("play"); }
845
  // SYNC:
846
+ if (slider.syncExists) { methods.sync("pause"); }
847
  };
848
  // SLIDESHOW:
849
  slider.play = function() {
850
+ if (slider.playing) { clearInterval(slider.animatedSlides); }
851
  slider.animatedSlides = slider.animatedSlides || setInterval(slider.animateSlides, slider.vars.slideshowSpeed);
852
  slider.started = slider.playing = true;
853
  // PAUSEPLAY:
854
+ if (slider.vars.pausePlay) { methods.pausePlay.update("pause"); }
855
  // SYNC:
856
+ if (slider.syncExists) { methods.sync("play"); }
857
  };
858
  // STOP:
859
  slider.stop = function () {
913
  }
914
 
915
  slider.args[slider.prop] = target;
916
+ if (slider.transitions || dur === undefined) { slider.container.css(slider.args); }
917
 
918
  slider.container.css('transform',target);
919
  };
940
  slider.cloneCount = 2;
941
  slider.cloneOffset = 1;
942
  // clear out old clones
943
+ if (type !== "init") { slider.container.find('.clone').remove(); }
944
+ slider.container.append(methods.uniqueID(slider.slides.first().clone().addClass('clone')).attr('aria-hidden', 'true'))
945
+ .prepend(methods.uniqueID(slider.slides.last().clone().addClass('clone')).attr('aria-hidden', 'true'));
 
946
  }
947
  slider.newSlides = $(slider.vars.selector, slider);
948
 
957
  slider.setProps(sliderOffset * slider.h, "init");
958
  }, (type === "init") ? 100 : 0);
959
  } else {
 
960
  slider.container.width((slider.count + slider.cloneCount) * 200 + "%");
961
  slider.setProps(sliderOffset * slider.computedW, "init");
962
  setTimeout(function(){
963
  slider.doMath();
964
+ slider.newSlides.css({"width": slider.computedW, "marginRight" : slider.computedM, "float": "left", "display": "block"});
965
  // SMOOTH HEIGHT:
966
+ if (slider.vars.smoothHeight) { methods.smoothHeight(); }
967
  }, (type === "init") ? 100 : 0);
968
  }
969
  } else { // FADE:
978
  }
979
  } else {
980
  slider.slides.css({ "opacity": 0, "display": "block", "webkitTransition": "opacity " + slider.vars.animationSpeed / 1000 + "s ease", "zIndex": 1 }).eq(slider.currentSlide).css({ "opacity": 1, "zIndex": 2});
 
981
  }
982
  }
983
  // SMOOTH HEIGHT:
984
+ if (slider.vars.smoothHeight) { methods.smoothHeight(); }
985
  }
986
  // !CAROUSEL:
987
  // CANDIDATE: active slide
988
+ if (!carousel) { slider.slides.removeClass(namespace + "active-slide").eq(slider.currentSlide).addClass(namespace + "active-slide"); }
989
 
990
  //FlexSlider: init() Callback
991
  slider.vars.init(slider);
1004
  // CAROUSEL:
1005
  if (carousel) {
1006
  slider.itemT = slider.vars.itemWidth + slideMargin;
1007
+ slider.itemM = slideMargin;
1008
  slider.minW = (minItems) ? minItems * slider.itemT : slider.w;
1009
  slider.maxW = (maxItems) ? (maxItems * slider.itemT) - slideMargin : slider.w;
1010
  slider.itemW = (slider.minW > slider.w) ? (slider.w - (slideMargin * (minItems - 1)))/minItems :
1019
  (slider.vars.itemWidth > slider.w) ? (slider.itemW * (slider.count - 1)) + (slideMargin * (slider.count - 1)) : ((slider.itemW + slideMargin) * slider.count) - slider.w - slideMargin;
1020
  } else {
1021
  slider.itemW = slider.w;
1022
+ slider.itemM = slideMargin;
1023
  slider.pagingCount = slider.count;
1024
  slider.last = slider.count - 1;
1025
  }
1026
  slider.computedW = slider.itemW - slider.boxPadding;
1027
+ slider.computedM = slider.itemM;
1028
  };
1029
 
1030
  slider.update = function(pos, action) {
1053
  }
1054
  }
1055
  // update directionNav
1056
+ if (slider.vars.directionNav) { methods.directionNav.update(); }
1057
 
1058
  };
1059
 
1135
  animationSpeed: 600, //Integer: Set the speed of animations, in milliseconds
1136
  initDelay: 0, //{NEW} Integer: Set an initialization delay, in milliseconds
1137
  randomize: false, //Boolean: Randomize slide order
1138
+ fadeFirstSlide: true, //Boolean: Fade in the first slide when animation type is "fade"
1139
  thumbCaptions: false, //Boolean: Whether or not to put captions on thumbnails when using the "thumbnails" controlNav.
1140
 
1141
  // Usability features
1142
  pauseOnAction: true, //Boolean: Pause the slideshow when interacting with control elements, highly recommended.
1143
  pauseOnHover: false, //Boolean: Pause the slideshow when hovering over slider, then resume when no longer hovering
1144
+ pauseInvisible: true, //{NEW} Boolean: Pause the slideshow when tab is invisible, resume when visible. Provides better UX, lower CPU usage.
1145
  useCSS: true, //{NEW} Boolean: Slider will use CSS3 transitions if available
1146
  touch: true, //{NEW} Boolean: Allow touch swipe navigation of the slider on touch-enabled devices
1147
  video: false, //{NEW} Boolean: If using video in the slider, will prevent CSS3 3D Transforms to avoid graphical glitches
1148
 
1149
  // Primary Controls
1150
+ controlNav: true, //Boolean: Create navigation for paging control of each slide? Note: Leave true for manualControls usage
1151
  directionNav: true, //Boolean: Create navigation for previous/next navigation? (true/false)
1152
  prevText: "Previous", //String: Set the text for the "previous" directionNav item
1153
  nextText: "Next", //String: Set the text for the "next" directionNav item
1163
  // Special properties
1164
  controlsContainer: "", //{UPDATED} jQuery Object/Selector: Declare which container the navigation elements should be appended too. Default container is the FlexSlider element. Example use would be $(".flexslider-container"). Property is ignored if given element is not found.
1165
  manualControls: "", //{UPDATED} jQuery Object/Selector: Declare custom control navigation. Examples would be $(".flex-control-nav li") or "#tabs-nav li img", etc. The number of elements in your controlNav should match the number of slides/tabs.
1166
+ customDirectionNav: "", //{NEW} jQuery Object/Selector: Custom prev / next button. Must be two jQuery elements. In order to make the events work they have to have the classes "prev" and "next" (plus namespace)
1167
  sync: "", //{NEW} Selector: Mirror the actions performed on this slider with another slider. Use with care.
1168
  asNavFor: "", //{NEW} Selector: Internal property exposed for turning the slider into a thumbnail navigation for another slider
1169
 
1187
 
1188
  //FlexSlider: Plugin Function
1189
  $.fn.flexslider = function(options) {
1190
+ if (options === undefined) { options = {}; }
1191
 
1192
  if (typeof options === "object") {
1193
  return this.each(function() {
1195
  selector = (options.selector) ? options.selector : ".slides > li",
1196
  $slides = $this.find(selector);
1197
 
1198
+ if ( ( $slides.length === 1 && options.allowOneSlide === false ) || $slides.length === 0 ) {
1199
  $slides.fadeIn(400);
1200
+ if (options.start) { options.start($this); }
1201
  } else if ($this.data('flexslider') === undefined) {
1202
  new $.flexslider(this, options);
1203
  }
1212
  case "next": $slider.flexAnimate($slider.getTarget("next"), true); break;
1213
  case "prev":
1214
  case "previous": $slider.flexAnimate($slider.getTarget("prev"), true); break;
1215
+ default: if (typeof options === "number") { $slider.flexAnimate(options, true); }
1216
  }
1217
  }
1218
  };
1219
+ })(jQuery);
assets/sliders/flexslider/jquery.flexslider.min.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(e){var t=!0;e.flexslider=function(a,n){var i=e(a);i.vars=e.extend({},e.flexslider.defaults,n);var s,r=i.vars.namespace,o=window.navigator&&window.navigator.msPointerEnabled&&window.MSGesture,l=("ontouchstart"in window||o||window.DocumentTouch&&document instanceof DocumentTouch)&&i.vars.touch,c="click touchend MSPointerUp keyup",d="",u="vertical"===i.vars.direction,v=i.vars.reverse,p=i.vars.itemWidth>0,m="fade"===i.vars.animation,f=""!==i.vars.asNavFor,g={};e.data(a,"flexslider",i),g={init:function(){i.animating=!1,i.currentSlide=parseInt(i.vars.startAt?i.vars.startAt:0,10),isNaN(i.currentSlide)&&(i.currentSlide=0),i.animatingTo=i.currentSlide,i.atEnd=0===i.currentSlide||i.currentSlide===i.last,i.containerSelector=i.vars.selector.substr(0,i.vars.selector.search(" ")),i.slides=e(i.vars.selector,i),i.container=e(i.containerSelector,i),i.count=i.slides.length,i.syncExists=e(i.vars.sync).length>0,"slide"===i.vars.animation&&(i.vars.animation="swing"),i.prop=u?"top":"marginLeft",i.args={},i.manualPause=!1,i.stopped=!1,i.started=!1,i.startTimeout=null,i.transitions=!i.vars.video&&!m&&i.vars.useCSS&&function(){var e=document.createElement("div"),t=["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"];for(var a in t)if(void 0!==e.style[t[a]])return i.pfx=t[a].replace("Perspective","").toLowerCase(),i.prop="-"+i.pfx+"-transform",!0;return!1}(),i.ensureAnimationEnd="",""!==i.vars.controlsContainer&&(i.controlsContainer=e(i.vars.controlsContainer).length>0&&e(i.vars.controlsContainer)),""!==i.vars.manualControls&&(i.manualControls=e(i.vars.manualControls).length>0&&e(i.vars.manualControls)),""!==i.vars.customDirectionNav&&(i.customDirectionNav=2===e(i.vars.customDirectionNav).length&&e(i.vars.customDirectionNav)),i.vars.randomize&&(i.slides.sort(function(){return Math.round(Math.random())-.5}),i.container.empty().append(i.slides)),i.doMath(),i.setup("init"),i.vars.controlNav&&g.controlNav.setup(),i.vars.directionNav&&g.directionNav.setup(),i.vars.keyboard&&(1===e(i.containerSelector).length||i.vars.multipleKeyboard)&&e(document).bind("keyup",function(e){var t=e.keyCode;if(!i.animating&&(39===t||37===t)){var a=39===t?i.getTarget("next"):37===t&&i.getTarget("prev");i.flexAnimate(a,i.vars.pauseOnAction)}}),i.vars.mousewheel&&i.bind("mousewheel",function(e,t,a,n){e.preventDefault();var s=t<0?i.getTarget("next"):i.getTarget("prev");i.flexAnimate(s,i.vars.pauseOnAction)}),i.vars.pausePlay&&g.pausePlay.setup(),i.vars.slideshow&&i.vars.pauseInvisible&&g.pauseInvisible.init(),i.vars.slideshow&&(i.vars.pauseOnHover&&i.hover(function(){i.manualPlay||i.manualPause||i.pause()},function(){i.manualPause||i.manualPlay||i.stopped||i.play()}),i.vars.pauseInvisible&&g.pauseInvisible.isHidden()||(i.vars.initDelay>0?i.startTimeout=setTimeout(i.play,i.vars.initDelay):i.play())),f&&g.asNav.setup(),l&&i.vars.touch&&g.touch(),(!m||m&&i.vars.smoothHeight)&&e(window).bind("resize orientationchange focus",g.resize()),i.find("img").attr("draggable","false"),setTimeout(function(){i.vars.start(i)},200)},asNav:{setup:function(){i.asNav=!0,i.animatingTo=Math.floor(i.currentSlide/i.move),i.currentItem=i.currentSlide,i.slides.removeClass(r+"active-slide").eq(i.currentItem).addClass(r+"active-slide"),o?(a._slider=i,i.slides.each(function(){var t=this;t._gesture=new MSGesture,t._gesture.target=t,t.addEventListener("MSPointerDown",function(e){e.preventDefault(),e.currentTarget._gesture&&e.currentTarget._gesture.addPointer(e.pointerId)},!1),t.addEventListener("MSGestureTap",function(t){t.preventDefault();var a=e(this),n=a.index();e(i.vars.asNavFor).data("flexslider").animating||a.hasClass("active")||(i.direction=i.currentItem<n?"next":"prev",i.flexAnimate(n,i.vars.pauseOnAction,!1,!0,!0))})})):i.slides.on(c,function(t){t.preventDefault();var a=e(this),n=a.index(),s=a.offset().left-e(i).scrollLeft();s<=0&&a.hasClass(r+"active-slide")?i.flexAnimate(i.getTarget("prev"),!0):e(i.vars.asNavFor).data("flexslider").animating||a.hasClass(r+"active-slide")||(i.direction=i.currentItem<n?"next":"prev",i.flexAnimate(n,i.vars.pauseOnAction,!1,!0,!0))})}},controlNav:{setup:function(){i.manualControls?g.controlNav.setupManual():g.controlNav.setupPaging()},setupPaging:function(){var t,a,n="thumbnails"===i.vars.controlNav?"control-thumbs":"control-paging",s=1;if(i.controlNavScaffold=e('<ol class="'+r+"control-nav "+r+n+'"></ol>'),i.pagingCount>1)for(var o=0;o<i.pagingCount;o++){a=i.slides.eq(o),void 0===a.attr("data-thumb-alt")&&a.attr("data-thumb-alt","");var l=""!==a.attr("data-thumb-alt")?l=' alt="'+a.attr("data-thumb-alt")+'"':"";if(t="thumbnails"===i.vars.controlNav?'<img src="'+a.attr("data-thumb")+'"'+l+"/>":'<a href="#">'+s+"</a>","thumbnails"===i.vars.controlNav&&!0===i.vars.thumbCaptions){var u=a.attr("data-thumbcaption");""!==u&&void 0!==u&&(t+='<span class="'+r+'caption">'+u+"</span>")}i.controlNavScaffold.append("<li>"+t+"</li>"),s++}i.controlsContainer?e(i.controlsContainer).append(i.controlNavScaffold):i.append(i.controlNavScaffold),g.controlNav.set(),g.controlNav.active(),i.controlNavScaffold.delegate("a, img",c,function(t){if(t.preventDefault(),""===d||d===t.type){var a=e(this),n=i.controlNav.index(a);a.hasClass(r+"active")||(i.direction=n>i.currentSlide?"next":"prev",i.flexAnimate(n,i.vars.pauseOnAction))}""===d&&(d=t.type),g.setToClearWatchedEvent()})},setupManual:function(){i.controlNav=i.manualControls,g.controlNav.active(),i.controlNav.bind(c,function(t){if(t.preventDefault(),""===d||d===t.type){var a=e(this),n=i.controlNav.index(a);a.hasClass(r+"active")||(n>i.currentSlide?i.direction="next":i.direction="prev",i.flexAnimate(n,i.vars.pauseOnAction))}""===d&&(d=t.type),g.setToClearWatchedEvent()})},set:function(){var t="thumbnails"===i.vars.controlNav?"img":"a";i.controlNav=e("."+r+"control-nav li "+t,i.controlsContainer?i.controlsContainer:i)},active:function(){i.controlNav.removeClass(r+"active").eq(i.animatingTo).addClass(r+"active")},update:function(t,a){i.pagingCount>1&&"add"===t?i.controlNavScaffold.append(e('<li><a href="#">'+i.count+"</a></li>")):1===i.pagingCount?i.controlNavScaffold.find("li").remove():i.controlNav.eq(a).closest("li").remove(),g.controlNav.set(),i.pagingCount>1&&i.pagingCount!==i.controlNav.length?i.update(a,t):g.controlNav.active()}},directionNav:{setup:function(){var t=e('<ul class="'+r+'direction-nav"><li class="'+r+'nav-prev"><a class="'+r+'prev" href="#">'+i.vars.prevText+'</a></li><li class="'+r+'nav-next"><a class="'+r+'next" href="#">'+i.vars.nextText+"</a></li></ul>");i.customDirectionNav?i.directionNav=i.customDirectionNav:i.controlsContainer?(e(i.controlsContainer).append(t),i.directionNav=e("."+r+"direction-nav li a",i.controlsContainer)):(i.append(t),i.directionNav=e("."+r+"direction-nav li a",i)),g.directionNav.update(),i.directionNav.bind(c,function(t){t.preventDefault();var a;""!==d&&d!==t.type||(a=e(this).hasClass(r+"next")?i.getTarget("next"):i.getTarget("prev"),i.flexAnimate(a,i.vars.pauseOnAction)),""===d&&(d=t.type),g.setToClearWatchedEvent()})},update:function(){var e=r+"disabled";1===i.pagingCount?i.directionNav.addClass(e).attr("tabindex","-1"):i.vars.animationLoop?i.directionNav.removeClass(e).removeAttr("tabindex"):0===i.animatingTo?i.directionNav.removeClass(e).filter("."+r+"prev").addClass(e).attr("tabindex","-1"):i.animatingTo===i.last?i.directionNav.removeClass(e).filter("."+r+"next").addClass(e).attr("tabindex","-1"):i.directionNav.removeClass(e).removeAttr("tabindex")}},pausePlay:{setup:function(){var t=e('<div class="'+r+'pauseplay"><a href="#"></a></div>');i.controlsContainer?(i.controlsContainer.append(t),i.pausePlay=e("."+r+"pauseplay a",i.controlsContainer)):(i.append(t),i.pausePlay=e("."+r+"pauseplay a",i)),g.pausePlay.update(i.vars.slideshow?r+"pause":r+"play"),i.pausePlay.bind(c,function(t){t.preventDefault(),""!==d&&d!==t.type||(e(this).hasClass(r+"pause")?(i.manualPause=!0,i.manualPlay=!1,i.pause()):(i.manualPause=!1,i.manualPlay=!0,i.play())),""===d&&(d=t.type),g.setToClearWatchedEvent()})},update:function(e){"play"===e?i.pausePlay.removeClass(r+"pause").addClass(r+"play").html(i.vars.playText):i.pausePlay.removeClass(r+"play").addClass(r+"pause").html(i.vars.pauseText)}},touch:function(){function e(e){e.stopPropagation(),i.animating?e.preventDefault():(i.pause(),a._gesture.addPointer(e.pointerId),w=0,c=u?i.h:i.w,f=Number(new Date),l=p&&v&&i.animatingTo===i.last?0:p&&v?i.limit-(i.itemW+i.vars.itemMargin)*i.move*i.animatingTo:p&&i.currentSlide===i.last?i.limit:p?(i.itemW+i.vars.itemMargin)*i.move*i.currentSlide:v?(i.last-i.currentSlide+i.cloneOffset)*c:(i.currentSlide+i.cloneOffset)*c)}function t(e){e.stopPropagation();var t=e.target._slider;if(t){var n=-e.translationX,i=-e.translationY;return w+=u?i:n,d=w,y=u?Math.abs(w)<Math.abs(-n):Math.abs(w)<Math.abs(-i),e.detail===e.MSGESTURE_FLAG_INERTIA?void setImmediate(function(){a._gesture.stop()}):void((!y||Number(new Date)-f>500)&&(e.preventDefault(),!m&&t.transitions&&(t.vars.animationLoop||(d=w/(0===t.currentSlide&&w<0||t.currentSlide===t.last&&w>0?Math.abs(w)/c+2:1)),t.setProps(l+d,"setTouch"))))}}function n(e){e.stopPropagation();var t=e.target._slider;if(t){if(t.animatingTo===t.currentSlide&&!y&&null!==d){var a=v?-d:d,n=a>0?t.getTarget("next"):t.getTarget("prev");t.canAdvance(n)&&(Number(new Date)-f<550&&Math.abs(a)>50||Math.abs(a)>c/2)?t.flexAnimate(n,t.vars.pauseOnAction):m||t.flexAnimate(t.currentSlide,t.vars.pauseOnAction,!0)}d&&y?t.vars.slideshow&&t.play():d?!t.vars.pauseOnAction&&t.play()||(t.vars.slideshow=!1):t.vars.slideshow&&!t.vars.pauseOnAction&&t.play()||(t.vars.slideshow=!1),s=null,r=null,d=null,l=null,w=0}}var s,r,l,c,d,f,g,h,S,y=!1,x=0,b=0,w=0;o?(a.style.msTouchAction="none",a._gesture=new MSGesture,a._gesture.target=a,a.addEventListener("MSPointerDown",e,!1),a._slider=i,a.addEventListener("MSGestureChange",t,!1),a.addEventListener("MSGestureEnd",n,!1)):(g=function(e){i.animating?e.preventDefault():(window.navigator.msPointerEnabled||1===e.touches.length)&&(i.pause(),c=u?i.h:i.w,f=Number(new Date),x=e.touches[0].pageX,b=e.touches[0].pageY,l=p&&v&&i.animatingTo===i.last?0:p&&v?i.limit-(i.itemW+i.vars.itemMargin)*i.move*i.animatingTo:p&&i.currentSlide===i.last?i.limit:p?(i.itemW+i.vars.itemMargin)*i.move*i.currentSlide:v?(i.last-i.currentSlide+i.cloneOffset)*c:(i.currentSlide+i.cloneOffset)*c,s=u?b:x,r=u?x:b,a.addEventListener("touchmove",h,!1),a.addEventListener("touchend",S,!1))},h=function(e){x=e.touches[0].pageX,b=e.touches[0].pageY,d=u?s-b:s-x,y=u?Math.abs(d)<Math.abs(x-r):Math.abs(d)<Math.abs(b-r);var t=500;(!y||Number(new Date)-f>t)&&(e.preventDefault(),!m&&i.transitions&&(i.vars.animationLoop||(d/=0===i.currentSlide&&d<0||i.currentSlide===i.last&&d>0?Math.abs(d)/c+2:1),i.setProps(l+d,"setTouch")))},S=function(e){if(a.removeEventListener("touchmove",h,!1),i.animatingTo===i.currentSlide&&!y&&null!==d){var t=v?-d:d,n=t>0?i.getTarget("next"):i.getTarget("prev");i.canAdvance(n)&&(Number(new Date)-f<550&&Math.abs(t)>50||Math.abs(t)>c/2)?i.flexAnimate(n,i.vars.pauseOnAction):m||i.flexAnimate(i.currentSlide,i.vars.pauseOnAction,!0)}a.removeEventListener("touchend",S,!1),d&&y?i.vars.slideshow&&i.play():d?!i.vars.pauseOnAction&&i.play()||(i.vars.slideshow=!1):i.vars.slideshow&&!i.vars.pauseOnAction&&i.play()||(i.vars.slideshow=!1),s=null,r=null,d=null,l=null},a.addEventListener("touchstart",g,!1))},resize:function(){!i.animating&&i.is(":visible")&&(p||i.doMath(),m?g.smoothHeight():p?(i.slides.width(i.computedW),i.update(i.pagingCount),i.setProps()):u?(i.viewport.height(i.h),i.setProps(i.h,"setTotal")):(i.vars.smoothHeight&&g.smoothHeight(),i.newSlides.width(i.computedW),i.setProps(i.computedW,"setTotal")))},smoothHeight:function(e){if(!u||m){var t=m?i:i.viewport;e?t.animate({height:i.slides.eq(i.animatingTo).innerHeight()},e):t.innerHeight(i.slides.eq(i.animatingTo).innerHeight())}},sync:function(t){var a=e(i.vars.sync).data("flexslider"),n=i.animatingTo;switch(t){case"animate":a.flexAnimate(n,i.vars.pauseOnAction,!1,!0);break;case"play":a.playing||a.asNav||a.play();break;case"pause":a.pause()}},uniqueID:function(t){return t.filter("[id]").add(t.find("[id]")).each(function(){var t=e(this);t.attr("id",t.attr("id")+"_clone")}),t},pauseInvisible:{visProp:null,init:function(){var e=g.pauseInvisible.getHiddenProp();if(e){var t=e.replace(/[H|h]idden/,"")+"visibilitychange";document.addEventListener(t,function(){g.pauseInvisible.isHidden()?i.startTimeout?clearTimeout(i.startTimeout):i.pause():i.started?i.play():i.vars.initDelay>0?setTimeout(i.play,i.vars.initDelay):i.play()})}},isHidden:function(){var e=g.pauseInvisible.getHiddenProp();return!!e&&document[e]},getHiddenProp:function(){var e=["webkit","moz","ms","o"];if("hidden"in document)return"hidden";for(var t=0;t<e.length;t++)if(e[t]+"Hidden"in document)return e[t]+"Hidden";return null}},setToClearWatchedEvent:function(){clearTimeout(s),s=setTimeout(function(){d=""},3e3)}},i.flexAnimate=function(t,a,n,s,o){if(i.vars.animationLoop||t===i.currentSlide||(i.direction=t>i.currentSlide?"next":"prev"),f&&1===i.pagingCount&&(i.direction=i.currentItem<t?"next":"prev"),!i.animating&&(i.canAdvance(t,o)||n)&&i.is(":visible")){if(f&&s){var c=e(i.vars.asNavFor).data("flexslider");if(i.atEnd=0===t||t===i.count-1,c.flexAnimate(t,!0,!1,!0,o),i.direction=i.currentItem<t?"next":"prev",c.direction=i.direction,Math.ceil((t+1)/i.visible)-1===i.currentSlide||0===t)return i.currentItem=t,i.slides.removeClass(r+"active-slide").eq(t).addClass(r+"active-slide"),!1;i.currentItem=t,i.slides.removeClass(r+"active-slide").eq(t).addClass(r+"active-slide"),t=Math.floor(t/i.visible)}if(i.animating=!0,i.animatingTo=t,a&&i.pause(),i.vars.before(i),i.syncExists&&!o&&g.sync("animate"),i.vars.controlNav&&g.controlNav.active(),p||i.slides.removeClass(r+"active-slide").eq(t).addClass(r+"active-slide"),i.atEnd=0===t||t===i.last,i.vars.directionNav&&g.directionNav.update(),t===i.last&&(i.vars.end(i),i.vars.animationLoop||i.pause()),m)l?(i.slides.eq(i.currentSlide).css({opacity:0,zIndex:1}),i.slides.eq(t).css({opacity:1,zIndex:2}),i.wrapup(y)):(i.slides.eq(i.currentSlide).css({zIndex:1}).animate({opacity:0},i.vars.animationSpeed,i.vars.easing),i.slides.eq(t).css({zIndex:2}).animate({opacity:1},i.vars.animationSpeed,i.vars.easing,i.wrapup));else{var d,h,S,y=u?i.slides.filter(":first").height():i.computedW;p?(d=i.vars.itemMargin,S=(i.itemW+d)*i.move*i.animatingTo,h=S>i.limit&&1!==i.visible?i.limit:S):h=0===i.currentSlide&&t===i.count-1&&i.vars.animationLoop&&"next"!==i.direction?v?(i.count+i.cloneOffset)*y:0:i.currentSlide===i.last&&0===t&&i.vars.animationLoop&&"prev"!==i.direction?v?0:(i.count+1)*y:v?(i.count-1-t+i.cloneOffset)*y:(t+i.cloneOffset)*y,i.setProps(h,"",i.vars.animationSpeed),i.transitions?(i.vars.animationLoop&&i.atEnd||(i.animating=!1,i.currentSlide=i.animatingTo),i.container.unbind("webkitTransitionEnd transitionend"),i.container.bind("webkitTransitionEnd transitionend",function(){clearTimeout(i.ensureAnimationEnd),i.wrapup(y)}),clearTimeout(i.ensureAnimationEnd),i.ensureAnimationEnd=setTimeout(function(){i.wrapup(y)},i.vars.animationSpeed+100)):i.container.animate(i.args,i.vars.animationSpeed,i.vars.easing,function(){i.wrapup(y)})}i.vars.smoothHeight&&g.smoothHeight(i.vars.animationSpeed)}},i.wrapup=function(e){m||p||(0===i.currentSlide&&i.animatingTo===i.last&&i.vars.animationLoop?i.setProps(e,"jumpEnd"):i.currentSlide===i.last&&0===i.animatingTo&&i.vars.animationLoop&&i.setProps(e,"jumpStart")),i.animating=!1,i.currentSlide=i.animatingTo,i.vars.after(i)},i.animateSlides=function(){!i.animating&&t&&i.flexAnimate(i.getTarget("next"))},i.pause=function(){clearInterval(i.animatedSlides),i.animatedSlides=null,i.playing=!1,i.vars.pausePlay&&g.pausePlay.update("play"),i.syncExists&&g.sync("pause")},i.play=function(){i.playing&&clearInterval(i.animatedSlides),i.animatedSlides=i.animatedSlides||setInterval(i.animateSlides,i.vars.slideshowSpeed),i.started=i.playing=!0,i.vars.pausePlay&&g.pausePlay.update("pause"),i.syncExists&&g.sync("play")},i.stop=function(){i.pause(),i.stopped=!0},i.canAdvance=function(e,t){var a=f?i.pagingCount-1:i.last;return!!t||(!(!f||i.currentItem!==i.count-1||0!==e||"prev"!==i.direction)||(!f||0!==i.currentItem||e!==i.pagingCount-1||"next"===i.direction)&&(!(e===i.currentSlide&&!f)&&(!!i.vars.animationLoop||(!i.atEnd||0!==i.currentSlide||e!==a||"next"===i.direction)&&(!i.atEnd||i.currentSlide!==a||0!==e||"next"!==i.direction))))},i.getTarget=function(e){return i.direction=e,"next"===e?i.currentSlide===i.last?0:i.currentSlide+1:0===i.currentSlide?i.last:i.currentSlide-1},i.setProps=function(e,t,a){var n=function(){var a=e?e:(i.itemW+i.vars.itemMargin)*i.move*i.animatingTo,n=function(){if(p)return"setTouch"===t?e:v&&i.animatingTo===i.last?0:v?i.limit-(i.itemW+i.vars.itemMargin)*i.move*i.animatingTo:i.animatingTo===i.last?i.limit:a;switch(t){case"setTotal":return v?(i.count-1-i.currentSlide+i.cloneOffset)*e:(i.currentSlide+i.cloneOffset)*e;case"setTouch":return v?e:e;case"jumpEnd":return v?e:i.count*e;case"jumpStart":return v?i.count*e:e;default:return e}}();return n*-1+"px"}();i.transitions&&(n=u?"translate3d(0,"+n+",0)":"translate3d("+n+",0,0)",a=void 0!==a?a/1e3+"s":"0s",i.container.css("-"+i.pfx+"-transition-duration",a),i.container.css("transition-duration",a)),i.args[i.prop]=n,(i.transitions||void 0===a)&&i.container.css(i.args),i.container.css("transform",n)},i.setup=function(t){if(m)i.slides.css({width:"100%","float":"left",marginRight:"-100%",position:"relative"}),"init"===t&&(l?i.slides.css({opacity:0,display:"block",webkitTransition:"opacity "+i.vars.animationSpeed/1e3+"s ease",zIndex:1}).eq(i.currentSlide).css({opacity:1,zIndex:2}):0==i.vars.fadeFirstSlide?i.slides.css({opacity:0,display:"block",zIndex:1}).eq(i.currentSlide).css({zIndex:2}).css({opacity:1}):i.slides.css({opacity:0,display:"block",zIndex:1}).eq(i.currentSlide).css({zIndex:2}).animate({opacity:1},i.vars.animationSpeed,i.vars.easing)),i.vars.smoothHeight&&g.smoothHeight();else{var a,n;"init"===t&&(i.viewport=e('<div class="'+r+'viewport"></div>').css({overflow:"hidden",position:"relative"}).appendTo(i).append(i.container),i.cloneCount=0,i.cloneOffset=0,v&&(n=e.makeArray(i.slides).reverse(),i.slides=e(n),i.container.empty().append(i.slides))),i.vars.animationLoop&&!p&&(i.cloneCount=2,i.cloneOffset=1,"init"!==t&&i.container.find(".clone").remove(),i.container.append(g.uniqueID(i.slides.first().clone().addClass("clone")).attr("aria-hidden","true")).prepend(g.uniqueID(i.slides.last().clone().addClass("clone")).attr("aria-hidden","true"))),i.newSlides=e(i.vars.selector,i),a=v?i.count-1-i.currentSlide+i.cloneOffset:i.currentSlide+i.cloneOffset,u&&!p?(i.container.height(200*(i.count+i.cloneCount)+"%").css("position","absolute").width("100%"),setTimeout(function(){i.newSlides.css({display:"block"}),i.doMath(),i.viewport.height(i.h),i.setProps(a*i.h,"init")},"init"===t?100:0)):(i.container.width(200*(i.count+i.cloneCount)+"%"),i.setProps(a*i.computedW,"init"),setTimeout(function(){i.doMath(),i.newSlides.css({width:i.computedW,marginRight:i.computedM,"float":"left",display:"block"}),i.vars.smoothHeight&&g.smoothHeight()},"init"===t?100:0))}p||i.slides.removeClass(r+"active-slide").eq(i.currentSlide).addClass(r+"active-slide"),i.vars.init(i)},i.doMath=function(){var e=i.slides.first(),t=i.vars.itemMargin,a=i.vars.minItems,n=i.vars.maxItems;i.w=void 0===i.viewport?i.width():i.viewport.width(),i.h=e.height(),i.boxPadding=e.outerWidth()-e.width(),p?(i.itemT=i.vars.itemWidth+t,i.itemM=t,i.minW=a?a*i.itemT:i.w,i.maxW=n?n*i.itemT-t:i.w,i.itemW=i.minW>i.w?(i.w-t*(a-1))/a:i.maxW<i.w?(i.w-t*(n-1))/n:i.vars.itemWidth>i.w?i.w:i.vars.itemWidth,i.visible=Math.floor(i.w/i.itemW),i.move=i.vars.move>0&&i.vars.move<i.visible?i.vars.move:i.visible,i.pagingCount=Math.ceil((i.count-i.visible)/i.move+1),i.last=i.pagingCount-1,i.limit=1===i.pagingCount?0:i.vars.itemWidth>i.w?i.itemW*(i.count-1)+t*(i.count-1):(i.itemW+t)*i.count-i.w-t):(i.itemW=i.w,i.itemM=t,i.pagingCount=i.count,i.last=i.count-1),i.computedW=i.itemW-i.boxPadding,i.computedM=i.itemM},i.update=function(e,t){i.doMath(),p||(e<i.currentSlide?i.currentSlide+=1:e<=i.currentSlide&&0!==e&&(i.currentSlide-=1),i.animatingTo=i.currentSlide),i.vars.controlNav&&!i.manualControls&&("add"===t&&!p||i.pagingCount>i.controlNav.length?g.controlNav.update("add"):("remove"===t&&!p||i.pagingCount<i.controlNav.length)&&(p&&i.currentSlide>i.last&&(i.currentSlide-=1,i.animatingTo-=1),g.controlNav.update("remove",i.last))),i.vars.directionNav&&g.directionNav.update()},i.addSlide=function(t,a){var n=e(t);i.count+=1,i.last=i.count-1,u&&v?void 0!==a?i.slides.eq(i.count-a).after(n):i.container.prepend(n):void 0!==a?i.slides.eq(a).before(n):i.container.append(n),i.update(a,"add"),i.slides=e(i.vars.selector+":not(.clone)",i),i.setup(),i.vars.added(i)},i.removeSlide=function(t){var a=isNaN(t)?i.slides.index(e(t)):t;i.count-=1,i.last=i.count-1,isNaN(t)?e(t,i.slides).remove():u&&v?i.slides.eq(i.last).remove():i.slides.eq(t).remove(),i.doMath(),i.update(a,"remove"),i.slides=e(i.vars.selector+":not(.clone)",i),i.setup(),i.vars.removed(i)},g.init()},e(window).blur(function(e){t=!1}).focus(function(e){t=!0}),e.flexslider.defaults={namespace:"flex-",selector:".slides > li",animation:"fade",easing:"swing",direction:"horizontal",reverse:!1,animationLoop:!0,smoothHeight:!1,startAt:0,slideshow:!0,slideshowSpeed:7e3,animationSpeed:600,initDelay:0,randomize:!1,fadeFirstSlide:!0,thumbCaptions:!1,pauseOnAction:!0,pauseOnHover:!1,pauseInvisible:!0,useCSS:!0,touch:!0,video:!1,controlNav:!0,directionNav:!0,prevText:"Previous",nextText:"Next",keyboard:!0,multipleKeyboard:!1,mousewheel:!1,pausePlay:!1,pauseText:"Pause",playText:"Play",controlsContainer:"",manualControls:"",customDirectionNav:"",sync:"",asNavFor:"",itemWidth:0,itemMargin:0,minItems:1,maxItems:0,move:0,allowOneSlide:!0,start:function(){},before:function(){},after:function(){},end:function(){},added:function(){},removed:function(){},init:function(){}},e.fn.flexslider=function(t){if(void 0===t&&(t={}),"object"==typeof t)return this.each(function(){var a=e(this),n=t.selector?t.selector:".slides > li",i=a.find(n);1===i.length&&t.allowOneSlide===!1||0===i.length?(i.fadeIn(400),t.start&&t.start(a)):void 0===a.data("flexslider")&&new e.flexslider(this,t)});var a=e(this).data("flexslider");switch(t){case"play":a.play();break;case"pause":a.pause();break;case"stop":a.stop();break;case"next":a.flexAnimate(a.getTarget("next"),!0);break;case"prev":case"previous":a.flexAnimate(a.getTarget("prev"),!0);break;default:"number"==typeof t&&a.flexAnimate(t,!0)}}}(jQuery);
assets/sliders/nivoslider/jquery.nivo.slider.pack.js CHANGED
@@ -6,7 +6,7 @@
6
  * Free to use and abuse under the MIT license.
7
  * http://www.opensource.org/licenses/mit-license.php
8
  *
9
- * Meta Slider modifications: caption taken from 'data-title' attribute instead of 'title' attribute.
10
  */
11
 
12
  (function(e){var t=function(t,n){var r=e.extend({},e.fn.nivoSlider.defaults,n);var i={currentSlide:0,currentImage:"",totalSlides:0,running:false,paused:false,stop:false,controlNavEl:false};var s=e(t);s.data("nivo:vars",i).addClass("nivoSlider");var o=s.children();o.each(function(){var t=e(this);var n="";if(!t.is("img")){if(t.is("a")){t.addClass("nivo-imageLink");n=t}t=t.find("img:first")}var r=r===0?t.attr("width"):t.width(),s=s===0?t.attr("height"):t.height();if(n!==""){n.css("display","none")}t.css("display","none");i.totalSlides++});if(r.randomStart){r.startSlide=Math.floor(Math.random()*i.totalSlides)}if(r.startSlide>0){if(r.startSlide>=i.totalSlides){r.startSlide=i.totalSlides-1}i.currentSlide=r.startSlide}if(e(o[i.currentSlide]).is("img")){i.currentImage=e(o[i.currentSlide])}else{i.currentImage=e(o[i.currentSlide]).find("img:first")}if(e(o[i.currentSlide]).is("a")){e(o[i.currentSlide]).css("display","block")}var u=e("<img/>").addClass("nivo-main-image");u.attr("src",i.currentImage.attr("src")).show();s.append(u);e(window).resize(function(){s.children("img").width(s.width());u.attr("src",i.currentImage.attr("src"));u.stop().height("auto");e(".nivo-slice").remove();e(".nivo-box").remove()});s.append(e('<div class="nivo-caption"></div>'));var a=function(t){var n=e(".nivo-caption",s);if(i.currentImage.attr("data-title")!=""&&i.currentImage.attr("data-title")!=undefined){var r=i.currentImage.attr("data-title");if(r.substr(0,1)=="#")r=e(r).html();if(n.css("display")=="block"){setTimeout(function(){n.html(r)},t.animSpeed)}else{n.html(r);n.stop().fadeIn(t.animSpeed)}}else{n.stop().fadeOut(t.animSpeed)}};a(r);var f=0;if(!r.manualAdvance&&o.length>1){f=setInterval(function(){d(s,o,r,false)},r.pauseTime)}if(r.directionNav){s.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+r.prevText+'</a><a class="nivo-nextNav">'+r.nextText+"</a></div>");e(s).on("click","a.nivo-prevNav",function(){if(i.running){return false}clearInterval(f);f="";i.currentSlide-=2;d(s,o,r,"prev")});e(s).on("click","a.nivo-nextNav",function(){if(i.running){return false}clearInterval(f);f="";d(s,o,r,"next")})}if(r.controlNav){i.controlNavEl=e('<div class="nivo-controlNav"></div>');s.after(i.controlNavEl);for(var l=0;l<o.length;l++){if(r.controlNavThumbs){i.controlNavEl.addClass("nivo-thumbs-enabled");var c=o.eq(l);if(!c.is("img")){c=c.find("img:first")}if(c.attr("data-thumb"))i.controlNavEl.append('<a class="nivo-control" rel="'+l+'"><img src="'+c.attr("data-thumb")+'" alt="" /></a>')}else{i.controlNavEl.append('<a class="nivo-control" rel="'+l+'">'+(l+1)+"</a>")}}e("a:eq("+i.currentSlide+")",i.controlNavEl).addClass("active");e("a",i.controlNavEl).bind("click",function(){if(i.running)return false;if(e(this).hasClass("active"))return false;clearInterval(f);f="";u.attr("src",i.currentImage.attr("src"));i.currentSlide=e(this).attr("rel")-1;d(s,o,r,"control")})}if(r.pauseOnHover){s.hover(function(){i.paused=true;clearInterval(f);f=""},function(){i.paused=false;if(f===""&&!r.manualAdvance){f=setInterval(function(){d(s,o,r,false)},r.pauseTime)}})}s.bind("nivo:animFinished",function(){u.attr("src",i.currentImage.attr("src"));i.running=false;e(o).each(function(){if(e(this).is("a")){e(this).css("display","none")}});if(e(o[i.currentSlide]).is("a")){e(o[i.currentSlide]).css("display","block")}if(f===""&&!i.paused&&!r.manualAdvance){f=setInterval(function(){d(s,o,r,false)},r.pauseTime)}r.afterChange.call(this)});var h=function(t,n,r){if(e(r.currentImage).parent().is("a"))e(r.currentImage).parent().css("display","block");e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").width(t.width()).css("visibility","hidden").show();var i=e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").parent().is("a")?e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").parent().height():e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").height();for(var s=0;s<n.slices;s++){var o=Math.round(t.width()/n.slices);if(s===n.slices-1){t.append(e('<div class="nivo-slice" name="'+s+'"><img src="'+r.currentImage.attr("src")+'" style="position:absolute; width:'+t.width()+"px; height:auto; display:block !important; top:0; left:-"+(o+s*o-o)+'px;" /></div>').css({left:o*s+"px",width:t.width()-o*s+"px",height:i+"px",opacity:"0",overflow:"hidden"}))}else{t.append(e('<div class="nivo-slice" name="'+s+'"><img src="'+r.currentImage.attr("src")+'" style="position:absolute; width:'+t.width()+"px; height:auto; display:block !important; top:0; left:-"+(o+s*o-o)+'px;" /></div>').css({left:o*s+"px",width:o+"px",height:i+"px",opacity:"0",overflow:"hidden"}))}}e(".nivo-slice",t).height(i);u.stop().animate({height:e(r.currentImage).height()},n.animSpeed)};var p=function(t,n,r){if(e(r.currentImage).parent().is("a"))e(r.currentImage).parent().css("display","block");e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").width(t.width()).css("visibility","hidden").show();var i=Math.round(t.width()/n.boxCols),s=Math.round(e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").height()/n.boxRows);for(var o=0;o<n.boxRows;o++){for(var a=0;a<n.boxCols;a++){if(a===n.boxCols-1){t.append(e('<div class="nivo-box" name="'+a+'" rel="'+o+'"><img src="'+r.currentImage.attr("src")+'" style="position:absolute; width:'+t.width()+"px; height:auto; display:block; top:-"+s*o+"px; left:-"+i*a+'px;" /></div>').css({opacity:0,left:i*a+"px",top:s*o+"px",width:t.width()-i*a+"px"}));e('.nivo-box[name="'+a+'"]',t).height(e('.nivo-box[name="'+a+'"] img',t).height()+"px")}else{t.append(e('<div class="nivo-box" name="'+a+'" rel="'+o+'"><img src="'+r.currentImage.attr("src")+'" style="position:absolute; width:'+t.width()+"px; height:auto; display:block; top:-"+s*o+"px; left:-"+i*a+'px;" /></div>').css({opacity:0,left:i*a+"px",top:s*o+"px",width:i+"px"}));e('.nivo-box[name="'+a+'"]',t).height(e('.nivo-box[name="'+a+'"] img',t).height()+"px")}}}u.stop().animate({height:e(r.currentImage).height()},n.animSpeed)};var d=function(t,n,r,i){var s=t.data("nivo:vars");if(s&&s.currentSlide===s.totalSlides-1){r.lastSlide.call(this)}if((!s||s.stop)&&!i){return false}r.beforeChange.call(this);if(!i){u.attr("src",s.currentImage.attr("src"))}else{if(i==="prev"){u.attr("src",s.currentImage.attr("src"))}if(i==="next"){u.attr("src",s.currentImage.attr("src"))}}s.currentSlide++;if(s.currentSlide===s.totalSlides){s.currentSlide=0;r.slideshowEnd.call(this)}if(s.currentSlide<0){s.currentSlide=s.totalSlides-1}if(e(n[s.currentSlide]).is("img")){s.currentImage=e(n[s.currentSlide])}else{s.currentImage=e(n[s.currentSlide]).find("img:first")}if(r.controlNav){e("a",s.controlNavEl).removeClass("active");e("a:eq("+s.currentSlide+")",s.controlNavEl).addClass("active")}a(r);e(".nivo-slice",t).remove();e(".nivo-box",t).remove();var o=r.effect,f="";if(r.effect==="random"){f=new Array("sliceDownRight","sliceDownLeft","sliceUpRight","sliceUpLeft","sliceUpDown","sliceUpDownLeft","fold","fade","boxRandom","boxRain","boxRainReverse","boxRainGrow","boxRainGrowReverse");o=f[Math.floor(Math.random()*(f.length+1))];if(o===undefined){o="fade"}}if(r.effect.indexOf(",")!==-1){f=r.effect.split(",");o=f[Math.floor(Math.random()*f.length)];if(o===undefined){o="fade"}}if(s.currentImage.attr("data-transition")){o=s.currentImage.attr("data-transition")}s.running=true;var l=0,c=0,d="",m="",g="",y="";if(o==="sliceDown"||o==="sliceDownRight"||o==="sliceDownLeft"){h(t,r,s);l=0;c=0;d=e(".nivo-slice",t);if(o==="sliceDownLeft"){d=e(".nivo-slice",t)._reverse()}d.each(function(){var n=e(this);n.css({top:"0px"});if(c===r.slices-1){setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed)},100+l)}l+=50;c++})}else if(o==="sliceUp"||o==="sliceUpRight"||o==="sliceUpLeft"){h(t,r,s);l=0;c=0;d=e(".nivo-slice",t);if(o==="sliceUpLeft"){d=e(".nivo-slice",t)._reverse()}d.each(function(){var n=e(this);n.css({bottom:"0px"});if(c===r.slices-1){setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed)},100+l)}l+=50;c++})}else if(o==="sliceUpDown"||o==="sliceUpDownRight"||o==="sliceUpDownLeft"){h(t,r,s);l=0;c=0;var b=0;d=e(".nivo-slice",t);if(o==="sliceUpDownLeft"){d=e(".nivo-slice",t)._reverse()}d.each(function(){var n=e(this);if(c===0){n.css("top","0px");c++}else{n.css("bottom","0px");c=0}if(b===r.slices-1){setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed)},100+l)}l+=50;b++})}else if(o==="fold"){h(t,r,s);l=0;c=0;e(".nivo-slice",t).each(function(){var n=e(this);var i=n.width();n.css({top:"0px",width:"0px"});if(c===r.slices-1){setTimeout(function(){n.animate({width:i,opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({width:i,opacity:"1.0"},r.animSpeed)},100+l)}l+=50;c++})}else if(o==="fade"){h(t,r,s);m=e(".nivo-slice:first",t);m.css({width:t.width()+"px"});m.animate({opacity:"1.0"},r.animSpeed*2,"",function(){t.trigger("nivo:animFinished")})}else if(o==="slideInRight"){h(t,r,s);m=e(".nivo-slice:first",t);m.css({width:"0px",opacity:"1"});m.animate({width:t.width()+"px"},r.animSpeed*2,"",function(){t.trigger("nivo:animFinished")})}else if(o==="slideInLeft"){h(t,r,s);m=e(".nivo-slice:first",t);m.css({width:"0px",opacity:"1",left:"",right:"0px"});m.animate({width:t.width()+"px"},r.animSpeed*2,"",function(){m.css({left:"0px",right:""});t.trigger("nivo:animFinished")})}else if(o==="boxRandom"){p(t,r,s);g=r.boxCols*r.boxRows;c=0;l=0;y=v(e(".nivo-box",t));y.each(function(){var n=e(this);if(c===g-1){setTimeout(function(){n.animate({opacity:"1"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1"},r.animSpeed)},100+l)}l+=20;c++})}else if(o==="boxRain"||o==="boxRainReverse"||o==="boxRainGrow"||o==="boxRainGrowReverse"){p(t,r,s);g=r.boxCols*r.boxRows;c=0;l=0;var w=0;var E=0;var S=[];S[w]=[];y=e(".nivo-box",t);if(o==="boxRainReverse"||o==="boxRainGrowReverse"){y=e(".nivo-box",t)._reverse()}y.each(function(){S[w][E]=e(this);E++;if(E===r.boxCols){w++;E=0;S[w]=[]}});for(var x=0;x<r.boxCols*2;x++){var T=x;for(var N=0;N<r.boxRows;N++){if(T>=0&&T<r.boxCols){(function(n,i,s,u,a){var f=e(S[n][i]);var l=f.width();var c=f.height();if(o==="boxRainGrow"||o==="boxRainGrowReverse"){f.width(0).height(0)}if(u===a-1){setTimeout(function(){f.animate({opacity:"1",width:l,height:c},r.animSpeed/1.3,"",function(){t.trigger("nivo:animFinished")})},100+s)}else{setTimeout(function(){f.animate({opacity:"1",width:l,height:c},r.animSpeed/1.3)},100+s)}})(N,T,l,c,g);c++}T--}l+=100}}};var v=function(e){for(var t,n,r=e.length;r;t=parseInt(Math.random()*r,10),n=e[--r],e[r]=e[t],e[t]=n);return e};var m=function(e){if(this.console&&typeof console.log!=="undefined"){console.log(e)}};this.stop=function(){if(!e(t).data("nivo:vars").stop){e(t).data("nivo:vars").stop=true;m("Stop Slider")}};this.start=function(){if(e(t).data("nivo:vars").stop){e(t).data("nivo:vars").stop=false;m("Start Slider")}};r.afterLoad.call(this);return this};e.fn.nivoSlider=function(n){return this.each(function(r,i){var s=e(this);if(s.data("nivoslider")){return s.data("nivoslider")}var o=new t(this,n);s.data("nivoslider",o)})};e.fn.nivoSlider.defaults={effect:"random",slices:15,boxCols:8,boxRows:4,animSpeed:500,pauseTime:3e3,startSlide:0,directionNav:true,controlNav:true,controlNavThumbs:false,pauseOnHover:true,manualAdvance:false,prevText:"Prev",nextText:"Next",randomStart:false,beforeChange:function(){},afterChange:function(){},slideshowEnd:function(){},lastSlide:function(){},afterLoad:function(){}};e.fn._reverse=[].reverse})(jQuery)
6
  * Free to use and abuse under the MIT license.
7
  * http://www.opensource.org/licenses/mit-license.php
8
  *
9
+ * MetaSlider modifications: caption taken from 'data-title' attribute instead of 'title' attribute.
10
  */
11
 
12
  (function(e){var t=function(t,n){var r=e.extend({},e.fn.nivoSlider.defaults,n);var i={currentSlide:0,currentImage:"",totalSlides:0,running:false,paused:false,stop:false,controlNavEl:false};var s=e(t);s.data("nivo:vars",i).addClass("nivoSlider");var o=s.children();o.each(function(){var t=e(this);var n="";if(!t.is("img")){if(t.is("a")){t.addClass("nivo-imageLink");n=t}t=t.find("img:first")}var r=r===0?t.attr("width"):t.width(),s=s===0?t.attr("height"):t.height();if(n!==""){n.css("display","none")}t.css("display","none");i.totalSlides++});if(r.randomStart){r.startSlide=Math.floor(Math.random()*i.totalSlides)}if(r.startSlide>0){if(r.startSlide>=i.totalSlides){r.startSlide=i.totalSlides-1}i.currentSlide=r.startSlide}if(e(o[i.currentSlide]).is("img")){i.currentImage=e(o[i.currentSlide])}else{i.currentImage=e(o[i.currentSlide]).find("img:first")}if(e(o[i.currentSlide]).is("a")){e(o[i.currentSlide]).css("display","block")}var u=e("<img/>").addClass("nivo-main-image");u.attr("src",i.currentImage.attr("src")).show();s.append(u);e(window).resize(function(){s.children("img").width(s.width());u.attr("src",i.currentImage.attr("src"));u.stop().height("auto");e(".nivo-slice").remove();e(".nivo-box").remove()});s.append(e('<div class="nivo-caption"></div>'));var a=function(t){var n=e(".nivo-caption",s);if(i.currentImage.attr("data-title")!=""&&i.currentImage.attr("data-title")!=undefined){var r=i.currentImage.attr("data-title");if(r.substr(0,1)=="#")r=e(r).html();if(n.css("display")=="block"){setTimeout(function(){n.html(r)},t.animSpeed)}else{n.html(r);n.stop().fadeIn(t.animSpeed)}}else{n.stop().fadeOut(t.animSpeed)}};a(r);var f=0;if(!r.manualAdvance&&o.length>1){f=setInterval(function(){d(s,o,r,false)},r.pauseTime)}if(r.directionNav){s.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+r.prevText+'</a><a class="nivo-nextNav">'+r.nextText+"</a></div>");e(s).on("click","a.nivo-prevNav",function(){if(i.running){return false}clearInterval(f);f="";i.currentSlide-=2;d(s,o,r,"prev")});e(s).on("click","a.nivo-nextNav",function(){if(i.running){return false}clearInterval(f);f="";d(s,o,r,"next")})}if(r.controlNav){i.controlNavEl=e('<div class="nivo-controlNav"></div>');s.after(i.controlNavEl);for(var l=0;l<o.length;l++){if(r.controlNavThumbs){i.controlNavEl.addClass("nivo-thumbs-enabled");var c=o.eq(l);if(!c.is("img")){c=c.find("img:first")}if(c.attr("data-thumb"))i.controlNavEl.append('<a class="nivo-control" rel="'+l+'"><img src="'+c.attr("data-thumb")+'" alt="" /></a>')}else{i.controlNavEl.append('<a class="nivo-control" rel="'+l+'">'+(l+1)+"</a>")}}e("a:eq("+i.currentSlide+")",i.controlNavEl).addClass("active");e("a",i.controlNavEl).bind("click",function(){if(i.running)return false;if(e(this).hasClass("active"))return false;clearInterval(f);f="";u.attr("src",i.currentImage.attr("src"));i.currentSlide=e(this).attr("rel")-1;d(s,o,r,"control")})}if(r.pauseOnHover){s.hover(function(){i.paused=true;clearInterval(f);f=""},function(){i.paused=false;if(f===""&&!r.manualAdvance){f=setInterval(function(){d(s,o,r,false)},r.pauseTime)}})}s.bind("nivo:animFinished",function(){u.attr("src",i.currentImage.attr("src"));i.running=false;e(o).each(function(){if(e(this).is("a")){e(this).css("display","none")}});if(e(o[i.currentSlide]).is("a")){e(o[i.currentSlide]).css("display","block")}if(f===""&&!i.paused&&!r.manualAdvance){f=setInterval(function(){d(s,o,r,false)},r.pauseTime)}r.afterChange.call(this)});var h=function(t,n,r){if(e(r.currentImage).parent().is("a"))e(r.currentImage).parent().css("display","block");e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").width(t.width()).css("visibility","hidden").show();var i=e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").parent().is("a")?e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").parent().height():e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").height();for(var s=0;s<n.slices;s++){var o=Math.round(t.width()/n.slices);if(s===n.slices-1){t.append(e('<div class="nivo-slice" name="'+s+'"><img src="'+r.currentImage.attr("src")+'" style="position:absolute; width:'+t.width()+"px; height:auto; display:block !important; top:0; left:-"+(o+s*o-o)+'px;" /></div>').css({left:o*s+"px",width:t.width()-o*s+"px",height:i+"px",opacity:"0",overflow:"hidden"}))}else{t.append(e('<div class="nivo-slice" name="'+s+'"><img src="'+r.currentImage.attr("src")+'" style="position:absolute; width:'+t.width()+"px; height:auto; display:block !important; top:0; left:-"+(o+s*o-o)+'px;" /></div>').css({left:o*s+"px",width:o+"px",height:i+"px",opacity:"0",overflow:"hidden"}))}}e(".nivo-slice",t).height(i);u.stop().animate({height:e(r.currentImage).height()},n.animSpeed)};var p=function(t,n,r){if(e(r.currentImage).parent().is("a"))e(r.currentImage).parent().css("display","block");e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").width(t.width()).css("visibility","hidden").show();var i=Math.round(t.width()/n.boxCols),s=Math.round(e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").height()/n.boxRows);for(var o=0;o<n.boxRows;o++){for(var a=0;a<n.boxCols;a++){if(a===n.boxCols-1){t.append(e('<div class="nivo-box" name="'+a+'" rel="'+o+'"><img src="'+r.currentImage.attr("src")+'" style="position:absolute; width:'+t.width()+"px; height:auto; display:block; top:-"+s*o+"px; left:-"+i*a+'px;" /></div>').css({opacity:0,left:i*a+"px",top:s*o+"px",width:t.width()-i*a+"px"}));e('.nivo-box[name="'+a+'"]',t).height(e('.nivo-box[name="'+a+'"] img',t).height()+"px")}else{t.append(e('<div class="nivo-box" name="'+a+'" rel="'+o+'"><img src="'+r.currentImage.attr("src")+'" style="position:absolute; width:'+t.width()+"px; height:auto; display:block; top:-"+s*o+"px; left:-"+i*a+'px;" /></div>').css({opacity:0,left:i*a+"px",top:s*o+"px",width:i+"px"}));e('.nivo-box[name="'+a+'"]',t).height(e('.nivo-box[name="'+a+'"] img',t).height()+"px")}}}u.stop().animate({height:e(r.currentImage).height()},n.animSpeed)};var d=function(t,n,r,i){var s=t.data("nivo:vars");if(s&&s.currentSlide===s.totalSlides-1){r.lastSlide.call(this)}if((!s||s.stop)&&!i){return false}r.beforeChange.call(this);if(!i){u.attr("src",s.currentImage.attr("src"))}else{if(i==="prev"){u.attr("src",s.currentImage.attr("src"))}if(i==="next"){u.attr("src",s.currentImage.attr("src"))}}s.currentSlide++;if(s.currentSlide===s.totalSlides){s.currentSlide=0;r.slideshowEnd.call(this)}if(s.currentSlide<0){s.currentSlide=s.totalSlides-1}if(e(n[s.currentSlide]).is("img")){s.currentImage=e(n[s.currentSlide])}else{s.currentImage=e(n[s.currentSlide]).find("img:first")}if(r.controlNav){e("a",s.controlNavEl).removeClass("active");e("a:eq("+s.currentSlide+")",s.controlNavEl).addClass("active")}a(r);e(".nivo-slice",t).remove();e(".nivo-box",t).remove();var o=r.effect,f="";if(r.effect==="random"){f=new Array("sliceDownRight","sliceDownLeft","sliceUpRight","sliceUpLeft","sliceUpDown","sliceUpDownLeft","fold","fade","boxRandom","boxRain","boxRainReverse","boxRainGrow","boxRainGrowReverse");o=f[Math.floor(Math.random()*(f.length+1))];if(o===undefined){o="fade"}}if(r.effect.indexOf(",")!==-1){f=r.effect.split(",");o=f[Math.floor(Math.random()*f.length)];if(o===undefined){o="fade"}}if(s.currentImage.attr("data-transition")){o=s.currentImage.attr("data-transition")}s.running=true;var l=0,c=0,d="",m="",g="",y="";if(o==="sliceDown"||o==="sliceDownRight"||o==="sliceDownLeft"){h(t,r,s);l=0;c=0;d=e(".nivo-slice",t);if(o==="sliceDownLeft"){d=e(".nivo-slice",t)._reverse()}d.each(function(){var n=e(this);n.css({top:"0px"});if(c===r.slices-1){setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed)},100+l)}l+=50;c++})}else if(o==="sliceUp"||o==="sliceUpRight"||o==="sliceUpLeft"){h(t,r,s);l=0;c=0;d=e(".nivo-slice",t);if(o==="sliceUpLeft"){d=e(".nivo-slice",t)._reverse()}d.each(function(){var n=e(this);n.css({bottom:"0px"});if(c===r.slices-1){setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed)},100+l)}l+=50;c++})}else if(o==="sliceUpDown"||o==="sliceUpDownRight"||o==="sliceUpDownLeft"){h(t,r,s);l=0;c=0;var b=0;d=e(".nivo-slice",t);if(o==="sliceUpDownLeft"){d=e(".nivo-slice",t)._reverse()}d.each(function(){var n=e(this);if(c===0){n.css("top","0px");c++}else{n.css("bottom","0px");c=0}if(b===r.slices-1){setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed)},100+l)}l+=50;b++})}else if(o==="fold"){h(t,r,s);l=0;c=0;e(".nivo-slice",t).each(function(){var n=e(this);var i=n.width();n.css({top:"0px",width:"0px"});if(c===r.slices-1){setTimeout(function(){n.animate({width:i,opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({width:i,opacity:"1.0"},r.animSpeed)},100+l)}l+=50;c++})}else if(o==="fade"){h(t,r,s);m=e(".nivo-slice:first",t);m.css({width:t.width()+"px"});m.animate({opacity:"1.0"},r.animSpeed*2,"",function(){t.trigger("nivo:animFinished")})}else if(o==="slideInRight"){h(t,r,s);m=e(".nivo-slice:first",t);m.css({width:"0px",opacity:"1"});m.animate({width:t.width()+"px"},r.animSpeed*2,"",function(){t.trigger("nivo:animFinished")})}else if(o==="slideInLeft"){h(t,r,s);m=e(".nivo-slice:first",t);m.css({width:"0px",opacity:"1",left:"",right:"0px"});m.animate({width:t.width()+"px"},r.animSpeed*2,"",function(){m.css({left:"0px",right:""});t.trigger("nivo:animFinished")})}else if(o==="boxRandom"){p(t,r,s);g=r.boxCols*r.boxRows;c=0;l=0;y=v(e(".nivo-box",t));y.each(function(){var n=e(this);if(c===g-1){setTimeout(function(){n.animate({opacity:"1"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1"},r.animSpeed)},100+l)}l+=20;c++})}else if(o==="boxRain"||o==="boxRainReverse"||o==="boxRainGrow"||o==="boxRainGrowReverse"){p(t,r,s);g=r.boxCols*r.boxRows;c=0;l=0;var w=0;var E=0;var S=[];S[w]=[];y=e(".nivo-box",t);if(o==="boxRainReverse"||o==="boxRainGrowReverse"){y=e(".nivo-box",t)._reverse()}y.each(function(){S[w][E]=e(this);E++;if(E===r.boxCols){w++;E=0;S[w]=[]}});for(var x=0;x<r.boxCols*2;x++){var T=x;for(var N=0;N<r.boxRows;N++){if(T>=0&&T<r.boxCols){(function(n,i,s,u,a){var f=e(S[n][i]);var l=f.width();var c=f.height();if(o==="boxRainGrow"||o==="boxRainGrowReverse"){f.width(0).height(0)}if(u===a-1){setTimeout(function(){f.animate({opacity:"1",width:l,height:c},r.animSpeed/1.3,"",function(){t.trigger("nivo:animFinished")})},100+s)}else{setTimeout(function(){f.animate({opacity:"1",width:l,height:c},r.animSpeed/1.3)},100+s)}})(N,T,l,c,g);c++}T--}l+=100}}};var v=function(e){for(var t,n,r=e.length;r;t=parseInt(Math.random()*r,10),n=e[--r],e[r]=e[t],e[t]=n);return e};var m=function(e){if(this.console&&typeof console.log!=="undefined"){console.log(e)}};this.stop=function(){if(!e(t).data("nivo:vars").stop){e(t).data("nivo:vars").stop=true;m("Stop Slider")}};this.start=function(){if(e(t).data("nivo:vars").stop){e(t).data("nivo:vars").stop=false;m("Start Slider")}};r.afterLoad.call(this);return this};e.fn.nivoSlider=function(n){return this.each(function(r,i){var s=e(this);if(s.data("nivoslider")){return s.data("nivoslider")}var o=new t(this,n);s.data("nivoslider",o)})};e.fn.nivoSlider.defaults={effect:"random",slices:15,boxCols:8,boxRows:4,animSpeed:500,pauseTime:3e3,startSlide:0,directionNav:true,controlNav:true,controlNavThumbs:false,pauseOnHover:true,manualAdvance:false,prevText:"Prev",nextText:"Next",randomStart:false,beforeChange:function(){},afterChange:function(){},slideshowEnd:function(){},lastSlide:function(){},afterLoad:function(){}};e.fn._reverse=[].reverse})(jQuery)
inc/metaslider.imagehelper.class.php CHANGED
@@ -12,44 +12,46 @@ class MetaSliderImageHelper {
12
  private $crop_type = 'smart';
13
  private $container_width; // slideshow width
14
  private $container_height; // slideshow height
15
- private $id; // slide/attachment ID
16
  private $url;
17
  private $path; // path to attachment on server
18
  private $use_image_editor;
19
- private $slide_id;
 
 
 
 
 
 
 
 
 
20
 
21
  /**
22
  * Constructor
23
  *
24
- * @param integer $slide_id
25
- * @param integer $width - required width of image
26
- * @param integer $height - required height of image
27
- * @param string $smart_crop
 
 
28
  */
29
- public function __construct( $slide_id, $width, $height, $crop_type, $use_image_editor = true ) {
30
-
31
- $upload_dir = wp_upload_dir();
32
-
33
- if ( get_post_type( $slide_id ) === 'attachment' ) {
34
- $this->id = $slide_id;
35
- $this->slide_id = $slide_id;
36
- } else {
37
- $this->id = get_post_thumbnail_id( $slide_id );
38
- $this->slide_id = $slide_id;
39
- }
40
-
41
- $this->url = apply_filters("metaslider_attachment_url", $upload_dir['baseurl'] . "/" . get_post_meta( $this->id, '_wp_attached_file', true ), $this->id);
42
- $this->path = get_attached_file( $this->id );
43
  $this->container_width = $width;
44
  $this->container_height = $height;
45
  $this->use_image_editor = $use_image_editor;
46
  $this->set_crop_type($crop_type);
47
-
48
- $meta = wp_get_attachment_metadata( $this->id );
49
-
50
- $is_valid = isset( $meta['width'], $meta['height'] );
51
-
52
- if ( ! $is_valid ) {
53
  $this->use_image_editor = false;
54
  }
55
  }
@@ -270,22 +272,19 @@ class MetaSliderImageHelper {
270
  $size = array();
271
 
272
  // try and get the image size from metadata
273
- $meta = wp_get_attachment_metadata( $this->id );
274
-
275
- if ( isset( $meta['width'], $meta['height'] ) ) {
276
  return $meta;
277
  }
 
278
 
279
- if ( $this->use_image_editor ) {
280
  // get the size from the image itself
281
- $image = wp_get_image_editor( $this->path );
282
-
283
- if ( ! is_wp_error( $image ) ) {
284
  $size = $image->get_size();
285
  return $size;
286
  }
287
  }
288
-
289
  return false;
290
  }
291
 
@@ -313,55 +312,56 @@ class MetaSliderImageHelper {
313
  * @param array $dest_size
314
  * @return string
315
  */
316
- private function resize_image( $orig_size, $dest_size, $dest_file_name ) {
 
317
  // load image
318
- $image = wp_get_image_editor( $this->path );
319
 
320
  // editor will return an error if the path is invalid
321
- if ( is_wp_error( $image ) ) {
322
  return $this->url;
323
  }
324
 
325
  $crop_position = $this->get_crop_position();
326
 
327
- $dims = image_resize_dimensions( $orig_size['width'], $orig_size['height'], $dest_size['width'], $dest_size['height'], $crop_position );
328
 
329
- if ( $dims ) {
330
- list( $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h ) = $dims;
331
- $image->crop( $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h );
332
  }
333
 
334
- $saved = $image->save( $dest_file_name );
335
 
336
- if ( is_wp_error( $saved ) ) {
337
  return $this->url;
338
  }
339
 
340
  // Record the new size so that the file is correctly removed when the media file is deleted.
341
- $backup_sizes = get_post_meta( $this->id, '_wp_attachment_backup_sizes', true );
342
 
343
- if ( ! is_array( $backup_sizes ) ) {
344
  $backup_sizes = array();
345
  }
346
 
347
  $backup_sizes["resized-{$dest_size['width']}x{$dest_size['height']}"] = $saved;
348
- update_post_meta( $this->id, '_wp_attachment_backup_sizes', $backup_sizes );
349
 
350
  // Update recorded image sizes in the metadata
351
- $meta_sizes = get_post_meta( $this->id, '_wp_attachment_metadata', true );
352
 
353
- if ( ! is_array( $meta_sizes ) ) {
354
  $meta_sizes = array();
355
  }
356
 
357
  $temp_saved = $saved; // working copy of $saved
358
  unset( $temp_saved['path'] ); // path does not belong in the meta data
359
  $meta_sizes['sizes']["meta-slider-resized-{$dest_size['width']}x{$dest_size['height']}"] = $temp_saved;
360
- update_post_meta( $this->id, '_wp_attachment_metadata', $meta_sizes );
361
 
362
- $url = str_replace( basename( $this->url ), basename( $saved['path'] ), $this->url );
363
 
364
- do_action( "metaslider_after_resize_image", $this->id, $dest_size['width'], $dest_size['height'], $url );
365
 
366
  return $url;
367
  }
12
  private $crop_type = 'smart';
13
  private $container_width; // slideshow width
14
  private $container_height; // slideshow height
 
15
  private $url;
16
  private $path; // path to attachment on server
17
  private $use_image_editor;
18
+
19
+ /**
20
+ * @property integer $slide_id The ID of the image
21
+ */
22
+ private $slide_id;
23
+
24
+ /**
25
+ * @property integer $image_id The ID of the image
26
+ */
27
+ public $image_id;
28
 
29
  /**
30
  * Constructor
31
  *
32
+ * @param integer $slide_id - The ID of the current slide
33
+ * @param integer $width - Required width of image
34
+ * @param integer $height - Required height of image
35
+ * @param string $crop_type - The method used for cropping
36
+ * @param bool $use_image_editor - Whether to use the image editor
37
+ * @param integer $image_id - used when the slide in admin is a looped item (i.e. post type)
38
  */
39
+ public function __construct($slide_id, $width, $height, $crop_type, $use_image_editor = true, $image_id = null) {
40
+ // There's a chance that $slide_id might be an $image_id
41
+ // if the user has an older version of the pro plugin (<2.7)
42
+ if ('attachment' == get_post_type($slide_id)) { $image_id = $slide_id; }
43
+
44
+ $this->image_id = !is_null($image_id) ? $image_id : get_post_thumbnail_id($slide_id);
45
+ $this->slide_id = $slide_id;
46
+ $this->url = apply_filters("metaslider_attachment_url", wp_get_attachment_url($this->image_id), $this->image_id);
47
+ $this->path = get_attached_file($this->image_id);
 
 
 
 
 
48
  $this->container_width = $width;
49
  $this->container_height = $height;
50
  $this->use_image_editor = $use_image_editor;
51
  $this->set_crop_type($crop_type);
52
+ $meta = wp_get_attachment_metadata($this->image_id);
53
+ $is_valid = isset($meta['width'], $meta['height']);
54
+ if (!$is_valid) {
 
 
 
55
  $this->use_image_editor = false;
56
  }
57
  }
272
  $size = array();
273
 
274
  // try and get the image size from metadata
275
+ $meta = wp_get_attachment_metadata($this->image_id);
276
+ if (isset($meta['width'], $meta['height'])) {
 
277
  return $meta;
278
  }
279
+ if ($this->use_image_editor) {
280
 
 
281
  // get the size from the image itself
282
+ $image = wp_get_image_editor($this->path);
283
+ if (!is_wp_error($image)) {
 
284
  $size = $image->get_size();
285
  return $size;
286
  }
287
  }
 
288
  return false;
289
  }
290
 
312
  * @param array $dest_size
313
  * @return string
314
  */
315
+ private function resize_image($orig_size, $dest_size, $dest_file_name) {
316
+
317
  // load image
318
+ $image = wp_get_image_editor($this->path);
319
 
320
  // editor will return an error if the path is invalid
321
+ if (is_wp_error($image)) {
322
  return $this->url;
323
  }
324
 
325
  $crop_position = $this->get_crop_position();
326
 
327
+ $dims = image_resize_dimensions($orig_size['width'], $orig_size['height'], $dest_size['width'], $dest_size['height'], $crop_position);
328
 
329
+ if ($dims) {
330
+ list($dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h) = $dims;
331
+ $image->crop($src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h);
332
  }
333
 
334
+ $saved = $image->save($dest_file_name);
335
 
336
+ if (is_wp_error($saved)) {
337
  return $this->url;
338
  }
339
 
340
  // Record the new size so that the file is correctly removed when the media file is deleted.
341
+ $backup_sizes = get_post_meta($this->image_id, '_wp_attachment_backup_sizes', true);
342
 
343
+ if (!is_array($backup_sizes)) {
344
  $backup_sizes = array();
345
  }
346
 
347
  $backup_sizes["resized-{$dest_size['width']}x{$dest_size['height']}"] = $saved;
348
+ update_post_meta($this->image_id, '_wp_attachment_backup_sizes', $backup_sizes);
349
 
350
  // Update recorded image sizes in the metadata
351
+ $meta_sizes = get_post_meta($this->image_id, '_wp_attachment_metadata', true);
352
 
353
+ if (!is_array($meta_sizes)) {
354
  $meta_sizes = array();
355
  }
356
 
357
  $temp_saved = $saved; // working copy of $saved
358
  unset( $temp_saved['path'] ); // path does not belong in the meta data
359
  $meta_sizes['sizes']["meta-slider-resized-{$dest_size['width']}x{$dest_size['height']}"] = $temp_saved;
360
+ update_post_meta($this->image_id, '_wp_attachment_metadata', $meta_sizes);
361
 
362
+ $url = str_replace(basename($this->url), basename($saved['path']), $this->url);
363
 
364
+ do_action("metaslider_after_resize_image", $this->image_id, $dest_size['width'], $dest_size['height'], $url);
365
 
366
  return $url;
367
  }
inc/metaslider.systemcheck.class.php CHANGED
@@ -61,7 +61,7 @@ class MetaSliderSystemCheck {
61
  }
62
 
63
  if ( !function_exists( 'wp_enqueue_media' ) ) {
64
- $error = "Meta Slider requires WordPress 3.5 or above. Please upgrade your WordPress installation.";
65
  $this->printMessage( $error, 'wordPressVersion' );
66
  } else {
67
  $this->options['wordPressVersion'] = false;
@@ -77,7 +77,7 @@ class MetaSliderSystemCheck {
77
  }
78
 
79
  if ( ( !extension_loaded( 'gd' ) || !function_exists( 'gd_info' ) ) && ( !extension_loaded( 'imagick' ) || !class_exists( 'Imagick' ) || !class_exists( 'ImagickPixel' ) ) ) {
80
- $error = "Meta Slider requires the GD or ImageMagick PHP extension. Please contact your hosting provider";
81
  $this->printMessage( $error, 'imageLibrary' );
82
  } else {
83
  $this->options['imageLibrary'] = false;
61
  }
62
 
63
  if ( !function_exists( 'wp_enqueue_media' ) ) {
64
+ $error = "MetaSlider requires WordPress 3.5 or above. Please upgrade your WordPress installation.";
65
  $this->printMessage( $error, 'wordPressVersion' );
66
  } else {
67
  $this->options['wordPressVersion'] = false;
77
  }
78
 
79
  if ( ( !extension_loaded( 'gd' ) || !function_exists( 'gd_info' ) ) && ( !extension_loaded( 'imagick' ) || !class_exists( 'Imagick' ) || !class_exists( 'ImagickPixel' ) ) ) {
80
+ $error = "MetaSlider requires the GD or ImageMagick PHP extension. Please contact your hosting provider";
81
  $this->printMessage( $error, 'imageLibrary' );
82
  } else {
83
  $this->options['imageLibrary'] = false;
inc/metaslider.widget.class.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * Adds Meta Slider widget.
4
  */
5
 
6
  if ( ! defined( 'ABSPATH' ) ) {
@@ -15,8 +15,8 @@ class MetaSlider_Widget extends WP_Widget {
15
  public function __construct() {
16
  parent::__construct(
17
  'metaslider_widget', // Base ID
18
- 'Meta Slider', // Name
19
- array( 'description' => __( 'Meta Slider', 'ml-slider' ) ) // Args
20
  );
21
  }
22
 
1
  <?php
2
  /**
3
+ * Adds MetaSlider widget.
4
  */
5
 
6
  if ( ! defined( 'ABSPATH' ) ) {
15
  public function __construct() {
16
  parent::__construct(
17
  'metaslider_widget', // Base ID
18
+ 'MetaSlider', // Name
19
+ array( 'description' => __( 'MetaSlider', 'ml-slider' ) ) // Args
20
  );
21
  }
22
 
inc/slide/metaslide.class.php CHANGED
@@ -20,7 +20,7 @@ class MetaSlide {
20
  */
21
  public function __construct() {
22
 
23
- add_action( 'wp_ajax_change_slide_image', array( $this, 'ajax_change_slide_image' ) );
24
 
25
  }
26
 
@@ -64,63 +64,66 @@ class MetaSlide {
64
 
65
 
66
  /**
67
- * Change the slide image.
68
  *
69
- * This creates a copy of the selected (new) image and assigns the copy to our existing media file/slide.
 
 
 
70
  */
71
- public function ajax_change_slide_image() {
72
 
73
- if ( ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'metaslider_changeslide' ) ) {
74
- wp_die( json_encode( array(
75
- 'status' => 'fail',
76
- 'msg' => __( "Security check failed. Refresh page and try again.", "ml-slider" )
77
- )
78
- ));
79
  }
80
 
81
- $slide_from = absint( $_POST['slide_from'] );
82
- $slide_to = absint( $_POST['slide_to'] );
83
-
84
- // find the paths for the image we want to change to
85
-
86
- // Absolute path
87
- $abs_path = get_attached_file( $slide_to );
88
- $abs_path_parts = pathinfo( $abs_path );
89
- $abs_file_directory = $abs_path_parts['dirname'];
90
-
91
- // Relative path
92
- $rel_path = get_post_meta( $slide_to, '_wp_attached_file', true );
93
- $rel_path_parts = pathinfo( $rel_path );
94
- $rel_file_directory = $rel_path_parts['dirname'];
95
-
96
- // old file name
97
- $file_name = $abs_path_parts['basename'];
98
-
99
- // new file name
100
- $dest_file_name = wp_unique_filename( $abs_file_directory, $file_name );
101
-
102
- // generate absolute and relative paths for the new file name
103
- $dest_abs_path = trailingslashit($abs_file_directory) . $dest_file_name;
104
- $dest_rel_path = trailingslashit($rel_file_directory) . $dest_file_name;
105
 
106
- // make a copy of the image
107
- if ( @ copy( $abs_path, $dest_abs_path ) ) {
108
- // update the path on our slide
109
- update_post_meta( $slide_from, '_wp_attached_file', $dest_rel_path );
110
- wp_update_attachment_metadata( $slide_from, wp_generate_attachment_metadata( $slide_from, $dest_abs_path ) );
111
- update_attached_file( $slide_from, $dest_rel_path );
112
 
113
- wp_die( json_encode( array(
114
- 'status' => 'success'
115
- )
116
- ));
117
  }
118
-
119
- wp_die( json_encode( array(
120
- 'status' => 'fail',
121
- 'msg' => __( "File copy failed. Please check upload directory permissions.", "ml-slider" )
122
- )
123
- ));
 
 
 
 
 
124
  }
125
 
126
 
@@ -225,43 +228,46 @@ class MetaSlide {
225
  * Create a new post for a slide. Tag a featured image to it.
226
  *
227
  * @since 3.4
228
- * @param string $attachment_id - Media File ID to use for the slide
229
  * @param string $type - the slide type identifier
230
  * @param int $slider_id - the parent slideshow ID
231
- * @return int $id - the ID of the newly created slide
232
  */
233
- public function insert_slide($attachment_id, $type, $slider_id) {
234
-
235
- $id = wp_insert_post( array(
236
- 'post_title' => __( "Slider {$slider_id} - {$type}", "ml-slider" ),
 
 
237
  'post_status' => 'publish',
238
  'post_type' => 'ml-slide'
239
  )
240
  );
241
 
242
- if ( $attachment_id ) {
243
- set_post_thumbnail( $id, $attachment_id );
 
244
  }
245
 
246
- if ( $type === 'image' ) {
247
- // copy across alt text
248
- $alt = get_post_meta( $attachment_id, '_wp_attachment_image_alt', true );
249
- add_post_meta( $id, '_wp_attachment_image_alt', $alt );
250
-
251
- // copy across caption
252
- $caption = get_the_excerpt( $attachment_id );
253
-
254
- wp_update_post( array(
255
- 'ID' => $id,
 
 
256
  'post_excerpt' => $caption
257
- ) );
258
  }
259
-
260
- $this->add_or_update_or_delete_meta( $id, 'type', $type );
261
-
262
- return $id;
263
-
264
  }
 
265
 
266
  /**
267
  * Tag the slide attachment to the slider tax category
@@ -308,7 +314,7 @@ class MetaSlide {
308
 
309
  $selected = $pos == 0 ? "class='selected'" : "";
310
 
311
- $return .= "<li {$selected} rel='tab-{$pos}'>{$tab['title']}</li>";
312
 
313
  }
314
 
@@ -320,23 +326,37 @@ class MetaSlide {
320
 
321
  /**
322
  * Generate the HTML for the delete button
 
323
  */
324
  public function get_delete_button_html() {
 
 
325
 
326
- $url = wp_nonce_url( admin_url( "admin-post.php?action=metaslider_delete_slide&slider_id={$this->slider->ID}&slide_id={$this->slide->ID}" ), "metaslider_delete_slide" );
327
-
328
- return "<a title='" . __("Delete slide", "ml-slider") . "' class='tipsy-tooltip-top delete-slide dashicons dashicons-trash' href='{$url}'>" . __("Delete slide", "ml-slider") . "</a>";
329
-
 
 
330
  }
331
 
332
  /**
333
- * Generate the HTML for the change slide image button
 
334
  */
335
- public function get_change_image_button_html() {
336
 
337
- return apply_filters("metaslider_change_image_button_html", "", $this->slide);
 
 
 
338
 
339
- //return "<a title='" . __("Change slide image", "ml-slider") . "' class='tipsy-tooltip-top change-image dashicons dashicons-edit' data-button-text='" . __("Change slide image", "ml-slider") . "' data-slide-id='{$this->slide->ID}'>" . __("Change slide image", "ml-slider") . "</a>";
 
 
 
 
 
340
  }
341
 
342
  /**
20
  */
21
  public function __construct() {
22
 
23
+ add_action( 'wp_ajax_update_slide_image', array( $this, 'ajax_update_slide_image' ) );
24
 
25
  }
26
 
64
 
65
 
66
  /**
67
+ * Updates the slide meta value to a new image.
68
  *
69
+ * @param int $slide_id The id of the slide being updated
70
+ * @param int $image_id The id of the new image to use
71
+ *
72
+ * @return array|WP_error The status message and if success, the thumbnail link
73
  */
74
+ protected function update_slide_image($slide_id, $image_id) {
75
 
76
+ /*
77
+ * Verifies that the $image_id is an actual image
78
+ */
79
+ if (!($image_url = wp_get_attachment_image_url($image_id))) {
80
+ return new WP_Error('update_failed', __('The requested image does not exist. Please try again.', 'ml-slider'), array('status' => 409));
 
81
  }
82
 
83
+ /*
84
+ * Verifies that the $slide_id is an actual slide (it currently has an image)
85
+ */
86
+ if (!($image_id_old = intval(get_post_meta($slide_id, '_thumbnail_id', true)))) {
87
+ return new WP_Error('update_failed', __('The requested slide does not exist or something is wrong with the current image. Please try again or remove this slide.', 'ml-slider'), array('status' => 409));
88
+ }
89
+
90
+ /*
91
+ * Updates and verifies that it worked. Checks that either the image is the same,
92
+ * or that the update was successful
93
+ */
94
+ if (($image_id === $image_id_old) || update_post_meta($slide_id, '_thumbnail_id', $image_id, $image_id_old)) {
95
+ return array(
96
+ 'message' => __('The image was successfully updated.', 'ml-slider'),
97
+ 'img_url' => $image_url
98
+ );
99
+ }
100
+
101
+ return new WP_Error('update_failed', __('There was an error updating the image. Please try again', 'ml-slider'), array('status' => 409));
102
+ }
 
 
 
 
103
 
104
+ /**
105
+ * Ajax wrapper to update the slide image.
106
+ *
107
+ * @return String The status message and if success, the thumbnail link (JSON)
108
+ */
109
+ public function ajax_update_slide_image() {
110
 
111
+ if (!wp_verify_nonce($_REQUEST['_wpnonce'], 'metaslider_update_slide_image')) {
112
+ return wp_send_json_error(array(
113
+ 'message' => __('The security check failed. Please refresh the page and try again.', 'ml-slider')
114
+ ), 401);
115
  }
116
+
117
+ $result = $this->update_slide_image(
118
+ absint($_POST['slide_id']), absint($_POST['image_id'])
119
+ );
120
+
121
+ if (is_wp_error($result)) {
122
+ return wp_send_json_error(array(
123
+ 'message' => $result->get_error_message()
124
+ ), 409);
125
+ }
126
+ return wp_send_json_success($result, 200);
127
  }
128
 
129
 
228
  * Create a new post for a slide. Tag a featured image to it.
229
  *
230
  * @since 3.4
231
+ * @param string $media_id - Media File ID to use for the slide
232
  * @param string $type - the slide type identifier
233
  * @param int $slider_id - the parent slideshow ID
234
+ * @return int $slide_id - the ID of the newly created slide
235
  */
236
+ public function insert_slide($media_id, $type, $slider_id) {
237
+
238
+ // Store the post in the database (without translation)
239
+ $slide_id = wp_insert_post(
240
+ array(
241
+ 'post_title' => "Slider {$slider_id} - {$type}",
242
  'post_status' => 'publish',
243
  'post_type' => 'ml-slide'
244
  )
245
  );
246
 
247
+ // Send back a friendlier error message
248
+ if (is_wp_error($slide_id)) {
249
+ return new WP_Error('create_failed', __('There was an error while updating the database. Please try again.', 'ml-slider'), array('status' => 409));
250
  }
251
 
252
+ // Set the image to the slide
253
+ set_post_thumbnail($slide_id, $media_id);
254
+
255
+ // Check if the post is an image and add some extra info
256
+ if ('image' == $type) {
257
+ $alt = get_post_meta($media_id, '_wp_attachment_image_alt', true);
258
+ add_post_meta($slide_id, '_wp_attachment_image_alt', $alt);
259
+ $caption = has_excerpt($media_id) ? get_the_excerpt($media_id) : '';
260
+
261
+ // Update the post and caption
262
+ wp_update_post(array(
263
+ 'ID' => $slide_id,
264
  'post_excerpt' => $caption
265
+ ));
266
  }
267
+ $this->add_or_update_or_delete_meta($slide_id, 'type', $type);
268
+ return $slide_id;
 
 
 
269
  }
270
+
271
 
272
  /**
273
  * Tag the slide attachment to the slider tax category
314
 
315
  $selected = $pos == 0 ? "class='selected'" : "";
316
 
317
+ $return .= "<li {$selected} ><a tabindex='0' href='#' data-tab_id='tab-{$pos}'>{$tab['title']}</a></li>";
318
 
319
  }
320
 
326
 
327
  /**
328
  * Generate the HTML for the delete button
329
+ * @return string
330
  */
331
  public function get_delete_button_html() {
332
+ return "<button class='delete-slide alignright' title='" . __("Delete Slide", "ml-slider") . "' data-slide-id='{$this->slide->ID}'><i><svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-x'><line x1='18' y1='6' x2='6' y2='18'/><line x1='6' y1='6' x2='18' y2='18'/></svg></i></button>";
333
+ }
334
 
335
+ /**
336
+ * Generate the HTML for the undelete button
337
+ * @return string
338
+ */
339
+ public function get_undelete_button_html() {
340
+ return "<a href='#' onclick='return false;' class='trash-view-restore' data-slide-id='{$this->slide->ID}'>" . __('Restore', 'default') . "</a>";
341
  }
342
 
343
  /**
344
+ * Generate the HTML for the perminant button
345
+ * @return string
346
  */
347
+ public function get_perminant_delete_button_html() {
348
 
349
+ // TODO allow for a perminant delete button
350
+ $url = wp_nonce_url(admin_url("post.php?ml-slide={$this->slide->ID}&action=delete"));
351
+ return "<a href='{$url}' class='trash-view-perminant-delete' data-slide-id='{$this->slide->ID}'>" . __('Delete Permanently', 'default') . "</a>";
352
+ }
353
 
354
+ /**
355
+ * Generates the HTML for the update slide image button
356
+ * @return string The html for the edit button on a slide image
357
+ */
358
+ public function get_update_image_button_html() {
359
+ return "<button class='update-image alignright' data-button-text='" . __("Update slide image", "ml-slider") . "' title='" . __("Update slide image", "ml-slider") . "' data-slide-id='{$this->slide->ID}'><i><svg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-edit-2'><polygon points='16 3 21 8 8 21 3 21 3 16 16 3'/></svg></i></button>";
360
  }
361
 
362
  /**
inc/slide/metaslide.image.class.php CHANGED
@@ -13,59 +13,125 @@ class MetaImageSlide extends MetaSlide {
13
  * Register slide type
14
  */
15
  public function __construct() {
16
-
17
  parent::__construct();
18
-
19
- add_filter( 'metaslider_get_image_slide', array( $this, 'get_slide' ), 10, 2 );
20
- add_action( 'metaslider_save_image_slide', array( $this, 'save_slide' ), 5, 3 );
21
- add_action( 'wp_ajax_create_image_slide', array( $this, 'ajax_create_slide' ) );
22
- add_action( 'wp_ajax_resize_image_slide', array( $this, 'ajax_resize_slide' ) );
23
-
24
  }
25
 
26
-
27
  /**
28
- * Create a new slide and echo the admin HTML
 
 
 
 
 
 
 
29
  */
30
- public function ajax_create_slide() {
31
- // security check
32
- if ( ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'metaslider_addslide' ) ) {
33
- echo "<tr><td colspan='2'>" . __( "Security check failed. Refresh page and try again.", 'ml-slider' ) . "</td></tr>";
34
- wp_die();
 
 
 
 
 
 
35
  }
36
 
37
- $slider_id = absint( $_POST['slider_id'] );
38
- $selection = $_POST['selection'];
 
 
 
 
 
 
 
 
 
39
 
40
- if ( is_array( $selection ) && count( $selection ) && $slider_id > 0 ) {
 
 
 
 
 
 
 
 
 
 
 
 
41
 
42
- foreach ( $selection as $attachment_id ) {
 
 
43
 
44
- if ( ! wp_attachment_is_image( $attachment_id ) ) {
 
45
 
46
- echo "<tr><td colspan='2'>ID: {$slide_id} \"" . get_the_title( $slide_id ) . "\" - " . __( "Failed to add slide. Slide is not an image.", 'ml-slider' ) . "</td></tr>";
 
 
 
47
 
48
- } else {
 
 
 
49
 
50
- $new_slide_id = $this->insert_slide( $attachment_id, 'image', $slider_id );
 
 
51
 
52
- $this->set_slide( $new_slide_id );
53
- $this->set_slider( $slider_id );
54
- $this->tag_slide_to_slider();
55
 
56
- // override the width and height to kick off the AJAX image resizing on save
57
- $this->settings['width'] = 0;
58
- $this->settings['height'] = 0;
 
 
 
 
59
 
60
- echo $this->get_admin_slide();
 
 
 
 
61
 
62
- }
63
- }
 
 
 
 
64
  }
65
 
66
- wp_die();
 
 
 
 
 
 
 
 
 
 
 
 
67
  }
68
 
 
69
  /**
70
  * Create a new slide and echo the admin HTML
71
  */
@@ -110,21 +176,36 @@ class MetaImageSlide extends MetaSlide {
110
  // get some slide settings
111
  $thumb = $this->get_thumb();
112
  $slide_label = apply_filters( "metaslider_image_slide_label", __( "Image Slide", "ml-slider" ), $this->slide, $this->settings );
113
-
114
  // slide row HTML
115
- $row = "<tr class='slide image flex responsive nivo coin'>
116
  <td class='col-1'>
117
- <div class='thumb' style='background-image: url({$thumb})'>
118
- " . $this->get_delete_button_html() . "
119
- " . $this->get_change_image_button_html() . "
120
- <span class='slide-details'>{$slide_label}</span>
 
 
 
 
 
 
 
 
 
 
 
 
 
121
  </div>
122
  </td>
123
  <td class='col-2'>
124
- " . $this->get_admin_slide_tabs_html() . "
125
- <input type='hidden' name='attachment[{$this->slide->ID}][type]' value='image' />
126
- <input type='hidden' class='menu_order' name='attachment[{$this->slide->ID}][menu_order]' value='{$this->slide->menu_order}' />
127
- <input type='hidden' name='resize_slide_id' data-slide_id='{$this->slide->ID}' data-width='{$this->settings['width']}' data-height='{$this->settings['height']}' />
 
 
128
  </td>
129
  </tr>";
130
 
@@ -147,7 +228,7 @@ class MetaImageSlide extends MetaSlide {
147
  $general_tab = "<textarea name='attachment[{$slide_id}][post_excerpt]' placeholder='" . __( "Caption", "ml-slider" ) . "'>{$caption}</textarea>
148
  <input class='url' type='text' name='attachment[{$slide_id}][url]' placeholder='" . __( "URL", "ml-slider" ) . "' value='{$url}' />
149
  <div class='new_window'>
150
- <label>" . __( "New Window", "ml-slider" ) . "<input type='checkbox' name='attachment[{$slide_id}][new_window]' {$target} /></label>
151
  </div>";
152
 
153
  if ( ! $this->is_valid_image() ) {
@@ -156,10 +237,7 @@ class MetaImageSlide extends MetaSlide {
156
  $general_tab = "<div class='warning'>{$message}</div>" . $general_tab;
157
  }
158
 
159
- $seo_tab = "<div class='row'><label>" . __( "Image Title Text", "ml-slider" ) . "</label></div>
160
- <div class='row'><input type='text' size='50' name='attachment[{$slide_id}][title]' value='{$title}' /></div>
161
- <div class='row'><label>" . __( "Image Alt Text", "ml-slider" ) . "</label></div>
162
- <div class='row'><input type='text' size='50' name='attachment[{$slide_id}][alt]' value='{$alt}' /></div>";
163
 
164
  $tabs = array(
165
  'general' => array(
13
  * Register slide type
14
  */
15
  public function __construct() {
 
16
  parent::__construct();
17
+ add_filter('metaslider_get_image_slide', array($this, 'get_slide' ), 10, 2);
18
+ add_action('metaslider_save_image_slide', array($this, 'save_slide' ), 5, 3);
19
+ add_action('wp_ajax_create_image_slide', array($this, 'ajax_create_image_slides'));
20
+ add_action('wp_ajax_resize_image_slide', array($this, 'ajax_resize_slide'));
 
 
21
  }
22
 
 
23
  /**
24
+ * Creates one or more slide.
25
+ * Currently this is used via an ajax call, but plans to keep this only called
26
+ * by PHP methods, such as in an import situation.
27
+ *
28
+ * @param int $slider_id The id of the slider
29
+ * @param array $data The data information for the new slide
30
+ *
31
+ * @return int | WP_error The status message and if success, the count
32
  */
33
+ protected function create_slides($slider_id, $data) {
34
+ $errors = array();
35
+ foreach ($data as $slide_data) {
36
+
37
+ // TODO check type and create slides based on that type
38
+ // $method = 'create_' . $slide['type'] . '_slide';
39
+ // $this->slider->add_slide($this->{$method}());
40
+ $message = $this->add_slide($slider_id, $slide_data);
41
+ if (is_wp_error($message)) {
42
+ array_push($errors, $message);
43
+ }
44
  }
45
 
46
+ // We don't bail on an error, so we need to send back a list of errors, if any
47
+ if (count($errors)) {
48
+ $error_response = new WP_Error('create_failed', 'We experienced some errors while adding slides.', array('status' => 409));
49
+ foreach($errors as $message) {
50
+ $error_response->add('create_failed', $message, array('status' => 409));
51
+ }
52
+ return $error_response;
53
+ }
54
+
55
+ return count($data);
56
+ }
57
 
58
+ /**
59
+ * Adds a single slide.
60
+ * TODO refactor and put this in a Slider class
61
+ *
62
+ * @param int $slider_id The id of the slider
63
+ * @param array $data The data information for the new slide
64
+ *
65
+ * @return string | WP_error The status message and if success, echo string for now
66
+ */
67
+ protected function add_slide($slider_id, $data) {
68
+
69
+ // For now this only handles images, so check it's an image
70
+ if (!wp_attachment_is_image($data['id'])) {
71
 
72
+ // TODO this is the old way to handle errors
73
+ // Remove this later and handle errors using data returns
74
+ echo "<tr><td colspan='2'>ID: {$data['id']} \"" . get_the_title( $data['id'] ) . "\" - " . __( "Failed to add slide. Slide is not an image.", 'ml-slider' ) . "</td></tr>";
75
 
76
+ return new WP_Error('create_failed', __('This isn\'t an accepted image. Please try again.', 'ml-slider'), array('status' => 409));
77
+ }
78
 
79
+ $slide_id = $this->insert_slide($data['id'], $data['type'], $slider_id);
80
+ if (is_wp_error($slide_id)) {
81
+ return $slide_id;
82
+ }
83
 
84
+ // TODO refactor these and investigate why they are needed (legacy?)
85
+ $this->set_slide($slide_id);
86
+ $this->set_slider($slider_id);
87
+ $this->tag_slide_to_slider();
88
 
89
+ // TODO investigate if this is really needed
90
+ $this->settings['width'] = 0;
91
+ $this->settings['height'] = 0;
92
 
93
+ // TODO refactor to have a view file and return data
94
+ echo $this->get_admin_slide();
95
+ }
96
 
97
+ /**
98
+ * Ajax wrapper to create multiple slides.
99
+ * TODO: depricate this in favor of only allowing single slide creation
100
+ *
101
+ * @return string The status message and if success, the count of slides added
102
+ */
103
+ public function ajax_create_image_slides() {
104
 
105
+ if (!wp_verify_nonce($_REQUEST['_wpnonce'], 'metaslider_create_slide')) {
106
+ return wp_send_json_error(array(
107
+ 'message' => __('The security check failed. Please refresh the page and try again.', 'ml-slider')
108
+ ), 401);
109
+ }
110
 
111
+ // TODO create a slide object class with data requirements and types
112
+ function make_image_slide_data($image_id) {
113
+ return array(
114
+ 'type' => 'image',
115
+ 'id' => absint($image_id)
116
+ );
117
  }
118
 
119
+ $result = $this->create_slides(
120
+ absint($_POST['slider_id']), array_map('make_image_slide_data',$_POST['selection'])
121
+ );
122
+
123
+ // TODO for now leave these out since it "echos" the slide...
124
+ // if (is_wp_error($result)) {
125
+ // return wp_send_json_error(array(
126
+ // 'messages' => $result->get_error_messages()
127
+ // ), 409);
128
+ // }
129
+
130
+ // return wp_send_json_success($result, 200);
131
+
132
  }
133
 
134
+
135
  /**
136
  * Create a new slide and echo the admin HTML
137
  */
176
  // get some slide settings
177
  $thumb = $this->get_thumb();
178
  $slide_label = apply_filters( "metaslider_image_slide_label", __( "Image Slide", "ml-slider" ), $this->slide, $this->settings );
179
+
180
  // slide row HTML
181
+ $row = "<tr id='slide-{$this->slide->ID}' class='slide image flex responsive nivo coin'>
182
  <td class='col-1'>
183
+ <div class='metaslider-ui-controls ui-sortable-handle'>
184
+ <h4 class='slide-details'>{$slide_label}</h4>";
185
+ if (metaslider_this_is_trash($this->slide)) {
186
+ $row .= '<div class="row-actions trash-btns">';
187
+ $row .= "<span class='untrash'>{$this->get_undelete_button_html()}</span>";
188
+ // $row .= ' | ';
189
+ // $row .= "<span class='delete'>{$this->get_perminant_delete_button_html()}</span>";
190
+ $row .= '</div>';
191
+ } else {
192
+ $row .= $this->get_delete_button_html();
193
+ $row .= $this->get_update_image_button_html();
194
+ }
195
+ $row .= "</div>
196
+ <div class='metaslider-ui-inner'>
197
+ <button class='update-image image-button' data-button-text='" . __("Update slide image", "ml-slider") . "' title='" . __("Update slide image", "ml-slider") . "' data-slide-id='{$this->slide->ID}'>
198
+ <div class='thumb' style='background-image: url({$thumb})'></div>
199
+ </button>
200
  </div>
201
  </td>
202
  <td class='col-2'>
203
+ <div class='metaslider-ui-inner'>
204
+ " . $this->get_admin_slide_tabs_html() . "
205
+ <input type='hidden' name='attachment[{$this->slide->ID}][type]' value='image' />
206
+ <input type='hidden' class='menu_order' name='attachment[{$this->slide->ID}][menu_order]' value='{$this->slide->menu_order}' />
207
+ <input type='hidden' name='resize_slide_id' data-slide_id='{$this->slide->ID}' data-width='{$this->settings['width']}' data-height='{$this->settings['height']}' />
208
+ </div>
209
  </td>
210
  </tr>";
211
 
228
  $general_tab = "<textarea name='attachment[{$slide_id}][post_excerpt]' placeholder='" . __( "Caption", "ml-slider" ) . "'>{$caption}</textarea>
229
  <input class='url' type='text' name='attachment[{$slide_id}][url]' placeholder='" . __( "URL", "ml-slider" ) . "' value='{$url}' />
230
  <div class='new_window'>
231
+ <label>" . __( "New Window", "ml-slider" ) . "<input tabindex='0' type='checkbox' name='attachment[{$slide_id}][new_window]' {$target} /></label>
232
  </div>";
233
 
234
  if ( ! $this->is_valid_image() ) {
237
  $general_tab = "<div class='warning'>{$message}</div>" . $general_tab;
238
  }
239
 
240
+ $seo_tab = sprintf("<div class='row'><label>%s</label><input tabindex='0' type='text' size='50' name='attachment[%s][title]' value='%s'></div><div class='row'><label>%s</label><input tabindex='0' type='text' size='50' name='attachment[%s][alt]' value='%s'></div>", __("Image Title Text", "ml-slider"), $slide_id, $title, __("Image Alt Text", "ml-slider"), $slide_id, $alt);
 
 
 
241
 
242
  $tabs = array(
243
  'general' => array(
inc/slider/metaslider.class.php CHANGED
@@ -105,8 +105,8 @@ class MetaSlider {
105
  'direction' => 'horizontal',
106
  'reverse' => false,
107
  'animationSpeed' => 600,
108
- 'prevText' => '<',
109
- 'nextText' => '>',
110
  'slices' => 15,
111
  'center' => false,
112
  'smartCrop' => true,
@@ -128,6 +128,7 @@ class MetaSlider {
128
 
129
  /**
130
  * The main query for extracting the slides for the slideshow
 
131
  */
132
  public function get_slides() {
133
  $args = array(
@@ -148,11 +149,13 @@ class MetaSlider {
148
  )
149
  );
150
 
151
- $args = apply_filters( 'metaslider_populate_slides_args', $args, $this->id, $this->settings );
152
-
153
- $query = new WP_Query( $args );
 
154
 
155
- return $query;
 
156
  }
157
 
158
  /**
@@ -212,18 +215,15 @@ class MetaSlider {
212
  * @return string HTML & Javascrpt
213
  */
214
  public function render_public_slides() {
215
- $html[] = '<!-- meta slider -->';
216
  $html[] = '<div style="' . $this->get_container_style() . '" class="' . esc_attr($this->get_container_class()) .'">';
217
  $html[] = ' ' . $this->get_inline_css();
218
  $html[] = ' <div id="' . $this->get_container_id() . '">';
219
  $html[] = ' ' . $this->get_html();
220
  $html[] = ' ' . $this->get_html_after();
221
  $html[] = ' </div>';
222
- $html[] = ' <script type="text/javascript">';
223
- $html[] = ' ' . $this->get_inline_javascript();
224
- $html[] = ' </script>';
225
  $html[] = '</div>';
226
- $html[] = '<!--// meta slider-->';
227
 
228
  $slideshow = implode( "\n", $html );
229
 
@@ -445,8 +445,10 @@ class MetaSlider {
445
  * Include slider assets, JS and CSS paths are specified by child classes.
446
  */
447
  public function enqueue_scripts() {
448
- if ( $this->get_setting( 'printJs' ) == 'true' ) {
449
- wp_enqueue_script( 'metaslider-' . $this->get_setting( 'type' ) . '-slider', METASLIDER_ASSETS_URL . $this->js_path, array( 'jquery' ), METASLIDER_VERSION );
 
 
450
  }
451
 
452
  if ( $this->get_setting( 'printCss' ) == 'true' ) {
105
  'direction' => 'horizontal',
106
  'reverse' => false,
107
  'animationSpeed' => 600,
108
+ 'prevText' => __('Previous', 'ml-slider'),
109
+ 'nextText' => __('Next', 'ml-slider'),
110
  'slices' => 15,
111
  'center' => false,
112
  'smartCrop' => true,
128
 
129
  /**
130
  * The main query for extracting the slides for the slideshow
131
+ * @return WP_Query
132
  */
133
  public function get_slides() {
134
  $args = array(
149
  )
150
  );
151
 
152
+ // if there is a var set to include the trashed slides, then include it
153
+ if (metaslider_viewing_trashed_slides($this->id)) {
154
+ $args['post_status'] = array('trash');
155
+ }
156
 
157
+ $args = apply_filters('metaslider_populate_slides_args', $args, $this->id, $this->settings);
158
+ return new WP_Query($args);
159
  }
160
 
161
  /**
215
  * @return string HTML & Javascrpt
216
  */
217
  public function render_public_slides() {
218
+ $html[] = '<!-- MetaSlider -->';
219
  $html[] = '<div style="' . $this->get_container_style() . '" class="' . esc_attr($this->get_container_class()) .'">';
220
  $html[] = ' ' . $this->get_inline_css();
221
  $html[] = ' <div id="' . $this->get_container_id() . '">';
222
  $html[] = ' ' . $this->get_html();
223
  $html[] = ' ' . $this->get_html_after();
224
  $html[] = ' </div>';
 
 
 
225
  $html[] = '</div>';
226
+ $html[] = '<!--// MetaSlider-->';
227
 
228
  $slideshow = implode( "\n", $html );
229
 
445
  * Include slider assets, JS and CSS paths are specified by child classes.
446
  */
447
  public function enqueue_scripts() {
448
+ if ('true' == $this->get_setting('printJs')) {
449
+ $handle = 'metaslider-' . $this->get_setting('type') . '-slider';
450
+ wp_enqueue_script($handle, METASLIDER_ASSETS_URL . $this->js_path, array('jquery'), METASLIDER_VERSION);
451
+ wp_add_inline_script($handle, $this->get_inline_javascript());
452
  }
453
 
454
  if ( $this->get_setting( 'printCss' ) == 'true' ) {
inc/slider/metaslider.flex.class.php CHANGED
@@ -10,7 +10,7 @@ if ( ! defined( 'ABSPATH' ) ) {
10
  class MetaFlexSlider extends MetaSlider {
11
 
12
  protected $js_function = 'flexslider';
13
- protected $js_path = 'sliders/flexslider/jquery.flexslider-min.js';
14
  protected $css_path = 'sliders/flexslider/flexslider.css';
15
 
16
  /**
@@ -169,7 +169,7 @@ class MetaFlexSlider extends MetaSlider {
169
  $return_value .= "\n <ul class=\"slides\">";
170
 
171
  foreach ( $this->slides as $slide ) {
172
- // backwards compatibility with older versions of Meta Slider Pro (< v2.0)
173
  // MS Pro < 2.0 does not include the <li>
174
  // MS Pro 2.0+ returns the <li>
175
  if ( strpos( $slide, '<li' ) === 0 ) {
10
  class MetaFlexSlider extends MetaSlider {
11
 
12
  protected $js_function = 'flexslider';
13
+ protected $js_path = 'sliders/flexslider/jquery.flexslider.min.js';
14
  protected $css_path = 'sliders/flexslider/flexslider.css';
15
 
16
  /**
169
  $return_value .= "\n <ul class=\"slides\">";
170
 
171
  foreach ( $this->slides as $slide ) {
172
+ // backwards compatibility with older versions of MetaSlider Pro (< v2.0)
173
  // MS Pro < 2.0 does not include the <li>
174
  // MS Pro 2.0+ returns the <li>
175
  if ( strpos( $slide, '<li' ) === 0 ) {
languages/ml-slider-de_DE.po CHANGED
@@ -556,8 +556,8 @@ msgid "Add slider"
556
  msgstr "Diashow hinzufügen"
557
 
558
  #: ../ml-slider.php:1669
559
- msgid "Insert Meta Slider"
560
- msgstr "Meta Slider Diashow einfügen"
561
 
562
  #: ../ml-slider.php:1671
563
  msgid "Choose slideshow"
@@ -580,8 +580,8 @@ msgid "Upgrade to Pro $39"
580
  msgstr "Upgrade auf Pro $39"
581
 
582
  #: ../inc/metaslider.widget.class.php:18
583
- msgid "Meta Slider"
584
- msgstr "Meta Slider"
585
 
586
  #: ../inc/metaslider.widget.class.php:108
587
  msgid "Title:"
556
  msgstr "Diashow hinzufügen"
557
 
558
  #: ../ml-slider.php:1669
559
+ msgid "Insert MetaSlider"
560
+ msgstr "MetaSlider Diashow einfügen"
561
 
562
  #: ../ml-slider.php:1671
563
  msgid "Choose slideshow"
580
  msgstr "Upgrade auf Pro $39"
581
 
582
  #: ../inc/metaslider.widget.class.php:18
583
+ msgid "MetaSlider"
584
+ msgstr "MetaSlider"
585
 
586
  #: ../inc/metaslider.widget.class.php:108
587
  msgid "Title:"
languages/ml-slider-es_ES.po CHANGED
@@ -547,7 +547,7 @@ msgid "Add slider"
547
  msgstr "Añadir al pase"
548
 
549
  #: ../ml-slider.php:1258
550
- msgid "Insert Meta Slider"
551
  msgstr ""
552
 
553
  #: ../ml-slider.php:1260
@@ -560,8 +560,8 @@ msgid "No slideshows found"
560
  msgstr "No se han encontrado pases de diapositiva"
561
 
562
  #: ../inc/metaslider.widget.class.php:18
563
- msgid "Meta Slider"
564
- msgstr "Meta Slider"
565
 
566
  #: ../inc/metaslider.widget.class.php:111
567
  msgid "Title:"
547
  msgstr "Añadir al pase"
548
 
549
  #: ../ml-slider.php:1258
550
+ msgid "Insert MetaSlider"
551
  msgstr ""
552
 
553
  #: ../ml-slider.php:1260
560
  msgstr "No se han encontrado pases de diapositiva"
561
 
562
  #: ../inc/metaslider.widget.class.php:18
563
+ msgid "MetaSlider"
564
+ msgstr "MetaSlider"
565
 
566
  #: ../inc/metaslider.widget.class.php:111
567
  msgid "Title:"
languages/ml-slider-fa_IR.po CHANGED
@@ -16,8 +16,8 @@ msgstr ""
16
  "X-Poedit-SearchPath-1: ..\n"
17
 
18
  #: ../inc/metaslider.widget.class.php:18
19
- msgid "Meta Slider"
20
- msgstr "اسلایدر"
21
 
22
  #: ../inc/metaslider.widget.class.php:108
23
  msgid "Title:"
@@ -588,7 +588,7 @@ msgid "Add slider"
588
  msgstr "قرار دادن اسلایدر"
589
 
590
  #: ../ml-slider.php:1499
591
- msgid "Insert Meta Slider"
592
  msgstr "قرار دادن اسلایدر"
593
 
594
  #: ../ml-slider.php:1501
16
  "X-Poedit-SearchPath-1: ..\n"
17
 
18
  #: ../inc/metaslider.widget.class.php:18
19
+ msgid "MetaSlider"
20
+ msgstr "MetaSlider"
21
 
22
  #: ../inc/metaslider.widget.class.php:108
23
  msgid "Title:"
588
  msgstr "قرار دادن اسلایدر"
589
 
590
  #: ../ml-slider.php:1499
591
+ msgid "Insert MetaSlider"
592
  msgstr "قرار دادن اسلایدر"
593
 
594
  #: ../ml-slider.php:1501
languages/ml-slider-fr_FR.po CHANGED
@@ -550,7 +550,7 @@ msgid "Add slider"
550
  msgstr "Ajouter au diaporama"
551
 
552
  #: ../ml-slider.php:1258
553
- msgid "Insert Meta Slider"
554
  msgstr ""
555
 
556
  #: ../ml-slider.php:1260
@@ -563,8 +563,8 @@ msgid "No slideshows found"
563
  msgstr ""
564
 
565
  #: ../inc/metaslider.widget.class.php:18
566
- msgid "Meta Slider"
567
- msgstr "Meta Slider"
568
 
569
  #: ../inc/metaslider.widget.class.php:111
570
  msgid "Title:"
@@ -655,5 +655,5 @@ msgstr ""
655
  #~ msgid "More Slide Types"
656
  #~ msgstr "Autres types de diapositive"
657
 
658
- #~ msgid "Support Meta Slider"
659
- #~ msgstr "Soutenir Meta Slider"
550
  msgstr "Ajouter au diaporama"
551
 
552
  #: ../ml-slider.php:1258
553
+ msgid "Insert MetaSlider"
554
  msgstr ""
555
 
556
  #: ../ml-slider.php:1260
563
  msgstr ""
564
 
565
  #: ../inc/metaslider.widget.class.php:18
566
+ msgid "MetaSlider"
567
+ msgstr "MetaSlider"
568
 
569
  #: ../inc/metaslider.widget.class.php:111
570
  msgid "Title:"
655
  #~ msgid "More Slide Types"
656
  #~ msgstr "Autres types de diapositive"
657
 
658
+ #~ msgid "Support MetaSlider"
659
+ #~ msgstr "Soutenir MetaSlider"
languages/ml-slider-he_IL.po CHANGED
@@ -5,7 +5,7 @@ msgid ""
5
  msgstr ""
6
  "Content-Type: text/plain; charset=UTF-8\n"
7
  "Content-Transfer-Encoding: 8bit\n"
8
- "Project-Id-Version: Meta Slider 2.9\n"
9
  "POT-Creation-Date: \n"
10
  "PO-Revision-Date: \n"
11
  "Last-Translator: Ahrale <contact@atar4u.com>\n"
@@ -103,7 +103,7 @@ msgstr "הוספת תמונה"
103
  msgid "Slides"
104
  msgstr "תמונות"
105
 
106
- # $goPro = "<div style='display: none;' id='screen-options-link-wrap'><a target='_blank' class='show-settings' href='{$link}'>Meta Slider v" . METASLIDER_VERSION . " - " .
107
  # __( 'Upgrade to Pro $39', "metaslider" ) .
108
  # "</a></div>";
109
  # wpml-name: 6cc60379c4000862e626d36dced83abc
@@ -125,10 +125,10 @@ msgid "Choose slideshow"
125
  msgstr "בחר מצגת"
126
 
127
  # if ( count( $sliders ) ) {
128
- # echo "<h3 style='margin-bottom: 20px;'>" . __( "Insert Meta Slider", "metaslider" ) . "</h3>";
129
  # echo "<select id='metaslider-select'>";
130
  # wpml-name: e43f681fefa2d68c5d924b83d1e478a8
131
- msgid "Insert Meta Slider"
132
  msgstr "הוסף מצגת"
133
 
134
  # '/metaslider/matchalabs.png); background-repeat: no-repeat; background-position: left bottom;"></span> ' .
@@ -926,7 +926,7 @@ msgstr "בטוח?"
926
 
927
  # 'id' => 'documentation',
928
  # 'title' => __( 'Documentation', 'metaslider' ),
929
- # 'content' => "<p><a href='http://www.metaslider.com/documentation/' target='blank'>Meta Slider Documentation</a></p>",
930
  # wpml-name: 5b6cf869265c13af8566f192b4ab3d2a
931
  msgid "Documentation"
932
  msgstr "תיעוד"
@@ -1036,9 +1036,9 @@ msgstr "בחירת מצגת:"
1036
  msgid "Title:"
1037
  msgstr "כותרת:"
1038
 
1039
- # 'Meta Slider', // Name
1040
- # array( 'description' => __( 'Meta Slider', 'metaslider' ) ) // Args
1041
  # );
1042
  # wpml-name: 94a7bae84ef2816494be4af66c577bfc
1043
- msgid "Meta Slider"
1044
  msgstr "מצגת שקופיות"
5
  msgstr ""
6
  "Content-Type: text/plain; charset=UTF-8\n"
7
  "Content-Transfer-Encoding: 8bit\n"
8
+ "Project-Id-Version: MetaSlider 2.9\n"
9
  "POT-Creation-Date: \n"
10
  "PO-Revision-Date: \n"
11
  "Last-Translator: Ahrale <contact@atar4u.com>\n"
103
  msgid "Slides"
104
  msgstr "תמונות"
105
 
106
+ # $goPro = "<div style='display: none;' id='screen-options-link-wrap'><a target='_blank' class='show-settings' href='{$link}'>MetaSlider v" . METASLIDER_VERSION . " - " .
107
  # __( 'Upgrade to Pro $39', "metaslider" ) .
108
  # "</a></div>";
109
  # wpml-name: 6cc60379c4000862e626d36dced83abc
125
  msgstr "בחר מצגת"
126
 
127
  # if ( count( $sliders ) ) {
128
+ # echo "<h3 style='margin-bottom: 20px;'>" . __( "Insert MetaSlider", "metaslider" ) . "</h3>";
129
  # echo "<select id='metaslider-select'>";
130
  # wpml-name: e43f681fefa2d68c5d924b83d1e478a8
131
+ msgid "Insert MetaSlider"
132
  msgstr "הוסף מצגת"
133
 
134
  # '/metaslider/matchalabs.png); background-repeat: no-repeat; background-position: left bottom;"></span> ' .
926
 
927
  # 'id' => 'documentation',
928
  # 'title' => __( 'Documentation', 'metaslider' ),
929
+ # 'content' => "<p><a href='http://www.metaslider.com/documentation/' target='blank'>MetaSlider Documentation</a></p>",
930
  # wpml-name: 5b6cf869265c13af8566f192b4ab3d2a
931
  msgid "Documentation"
932
  msgstr "תיעוד"
1036
  msgid "Title:"
1037
  msgstr "כותרת:"
1038
 
1039
+ # 'MetaSlider', // Name
1040
+ # array( 'description' => __( 'MetaSlider', 'metaslider' ) ) // Args
1041
  # );
1042
  # wpml-name: 94a7bae84ef2816494be4af66c577bfc
1043
+ msgid "MetaSlider"
1044
  msgstr "מצגת שקופיות"
languages/ml-slider-hr_HR.po CHANGED
@@ -543,8 +543,8 @@ msgid "Add slider"
543
  msgstr "Dodaj slider"
544
 
545
  #: ../ml-slider.php:1258
546
- msgid "Insert Meta Slider"
547
- msgstr "Unesi Meta Slider"
548
 
549
  #: ../ml-slider.php:1260
550
  msgid "Choose slideshow"
@@ -555,8 +555,8 @@ msgid "No slideshows found"
555
  msgstr "Slideshowi nisu pronađeni"
556
 
557
  #: ../inc/metaslider.widget.class.php:18
558
- msgid "Meta Slider"
559
- msgstr "Meta Slider"
560
 
561
  #: ../inc/metaslider.widget.class.php:111
562
  msgid "Title:"
543
  msgstr "Dodaj slider"
544
 
545
  #: ../ml-slider.php:1258
546
+ msgid "Insert MetaSlider"
547
+ msgstr "Unesi MetaSlider"
548
 
549
  #: ../ml-slider.php:1260
550
  msgid "Choose slideshow"
555
  msgstr "Slideshowi nisu pronađeni"
556
 
557
  #: ../inc/metaslider.widget.class.php:18
558
+ msgid "MetaSlider"
559
+ msgstr "MetaSlider"
560
 
561
  #: ../inc/metaslider.widget.class.php:111
562
  msgid "Title:"
languages/ml-slider-hu_HU.po CHANGED
@@ -539,8 +539,8 @@ msgid "Add slider"
539
  msgstr "Slider hozzáadása"
540
 
541
  #: ../ml-slider.php:1258
542
- msgid "Insert Meta Slider"
543
- msgstr "Meta Slider beillesztése"
544
 
545
  #: ../ml-slider.php:1260
546
  msgid "Choose slideshow"
@@ -551,8 +551,8 @@ msgid "No slideshows found"
551
  msgstr "Nincs találat"
552
 
553
  #: ../inc/metaslider.widget.class.php:18
554
- msgid "Meta Slider"
555
- msgstr "Meta Slider"
556
 
557
  #: ../inc/metaslider.widget.class.php:111
558
  msgid "Title:"
539
  msgstr "Slider hozzáadása"
540
 
541
  #: ../ml-slider.php:1258
542
+ msgid "Insert MetaSlider"
543
+ msgstr "MetaSlider beillesztése"
544
 
545
  #: ../ml-slider.php:1260
546
  msgid "Choose slideshow"
551
  msgstr "Nincs találat"
552
 
553
  #: ../inc/metaslider.widget.class.php:18
554
+ msgid "MetaSlider"
555
+ msgstr "MetaSlider"
556
 
557
  #: ../inc/metaslider.widget.class.php:111
558
  msgid "Title:"
languages/ml-slider-ja.po CHANGED
@@ -35,8 +35,8 @@ msgstr ""
35
  "X-Poedit-SearchPath-1: ..\n"
36
 
37
  #: ../inc/metaslider.widget.class.php:18
38
- msgid "Meta Slider"
39
- msgstr "Meta Slider"
40
 
41
  #: ../inc/metaslider.widget.class.php:108
42
  msgid "Title:"
@@ -614,8 +614,8 @@ msgid "Add slider"
614
  msgstr "スライダーを追加"
615
 
616
  #: ../ml-slider.php:1499
617
- msgid "Insert Meta Slider"
618
- msgstr "Meta Slider を挿入"
619
 
620
  #: ../ml-slider.php:1501
621
  msgid "Choose slideshow"
35
  "X-Poedit-SearchPath-1: ..\n"
36
 
37
  #: ../inc/metaslider.widget.class.php:18
38
+ msgid "MetaSlider"
39
+ msgstr "MetaSlider"
40
 
41
  #: ../inc/metaslider.widget.class.php:108
42
  msgid "Title:"
614
  msgstr "スライダーを追加"
615
 
616
  #: ../ml-slider.php:1499
617
+ msgid "Insert MetaSlider"
618
+ msgstr "MetaSlider を挿入"
619
 
620
  #: ../ml-slider.php:1501
621
  msgid "Choose slideshow"
languages/ml-slider-nb_NO.po CHANGED
@@ -541,7 +541,7 @@ msgid "Add slider"
541
  msgstr "Legg til lysbildeserie"
542
 
543
  #: ../ml-slider.php:1258
544
- msgid "Insert Meta Slider"
545
  msgstr "Sett inn Meta Lysbildeserie"
546
 
547
  #: ../ml-slider.php:1260
@@ -553,8 +553,8 @@ msgid "No slideshows found"
553
  msgstr "Ingen slideshow funnet"
554
 
555
  #: ../inc/metaslider.widget.class.php:18
556
- msgid "Meta Slider"
557
- msgstr "Meta Lysbildeserie"
558
 
559
  #: ../inc/metaslider.widget.class.php:111
560
  msgid "Title:"
541
  msgstr "Legg til lysbildeserie"
542
 
543
  #: ../ml-slider.php:1258
544
+ msgid "Insert MetaSlider"
545
  msgstr "Sett inn Meta Lysbildeserie"
546
 
547
  #: ../ml-slider.php:1260
553
  msgstr "Ingen slideshow funnet"
554
 
555
  #: ../inc/metaslider.widget.class.php:18
556
+ msgid "MetaSlider"
557
+ msgstr "MetaSlider"
558
 
559
  #: ../inc/metaslider.widget.class.php:111
560
  msgid "Title:"
languages/ml-slider-nl_NL.po CHANGED
@@ -541,8 +541,8 @@ msgid "Add slider"
541
  msgstr "Slider toevoegen"
542
 
543
  #: ../ml-slider.php:1258
544
- msgid "Insert Meta Slider"
545
- msgstr "Meta Slider invoegen"
546
 
547
  #: ../ml-slider.php:1260
548
  msgid "Choose slideshow"
@@ -553,7 +553,7 @@ msgid "No slideshows found"
553
  msgstr "geen slideshows gevonden"
554
 
555
  #: ../inc/metaslider.widget.class.php:18
556
- msgid "Meta Slider"
557
  msgstr ""
558
 
559
  #: ../inc/metaslider.widget.class.php:111
541
  msgstr "Slider toevoegen"
542
 
543
  #: ../ml-slider.php:1258
544
+ msgid "Insert MetaSlider"
545
+ msgstr "MetaSlider invoegen"
546
 
547
  #: ../ml-slider.php:1260
548
  msgid "Choose slideshow"
553
  msgstr "geen slideshows gevonden"
554
 
555
  #: ../inc/metaslider.widget.class.php:18
556
+ msgid "MetaSlider"
557
  msgstr ""
558
 
559
  #: ../inc/metaslider.widget.class.php:111
languages/ml-slider-pl_PL.po CHANGED
@@ -543,7 +543,7 @@ msgid "Add slider"
543
  msgstr "Dodaj do slidera"
544
 
545
  #: ../ml-slider.php:1258
546
- msgid "Insert Meta Slider"
547
  msgstr ""
548
 
549
  #: ../ml-slider.php:1260
@@ -556,8 +556,8 @@ msgid "No slideshows found"
556
  msgstr "Nie znaleziono składników pokazu"
557
 
558
  #: ../inc/metaslider.widget.class.php:18
559
- msgid "Meta Slider"
560
- msgstr "Meta S;lider"
561
 
562
  #: ../inc/metaslider.widget.class.php:111
563
  msgid "Title:"
543
  msgstr "Dodaj do slidera"
544
 
545
  #: ../ml-slider.php:1258
546
+ msgid "Insert MetaSlider"
547
  msgstr ""
548
 
549
  #: ../ml-slider.php:1260
556
  msgstr "Nie znaleziono składników pokazu"
557
 
558
  #: ../inc/metaslider.widget.class.php:18
559
+ msgid "MetaSlider"
560
+ msgstr "MetaSlider"
561
 
562
  #: ../inc/metaslider.widget.class.php:111
563
  msgid "Title:"
languages/ml-slider-pt_BR.po CHANGED
@@ -564,8 +564,8 @@ msgid "Add slider"
564
  msgstr "Adicionar apresentação"
565
 
566
  #: ../ml-slider.php:1602
567
- msgid "Insert Meta Slider"
568
- msgstr "Inserir Meta Slider"
569
 
570
  #: ../ml-slider.php:1604
571
  msgid "Choose slideshow"
@@ -584,8 +584,8 @@ msgid "Upgrade to Pro $39"
584
  msgstr "Atualize para Pro US$39"
585
 
586
  #: ../inc/metaslider.widget.class.php:18
587
- msgid "Meta Slider"
588
- msgstr "Meta Slider"
589
 
590
  #: ../inc/metaslider.widget.class.php:108
591
  msgid "Title:"
564
  msgstr "Adicionar apresentação"
565
 
566
  #: ../ml-slider.php:1602
567
+ msgid "Insert MetaSlider"
568
+ msgstr "Inserir MetaSlider"
569
 
570
  #: ../ml-slider.php:1604
571
  msgid "Choose slideshow"
584
  msgstr "Atualize para Pro US$39"
585
 
586
  #: ../inc/metaslider.widget.class.php:18
587
+ msgid "MetaSlider"
588
+ msgstr "MetaSlider"
589
 
590
  #: ../inc/metaslider.widget.class.php:108
591
  msgid "Title:"
languages/ml-slider-ro_RO.po CHANGED
@@ -540,8 +540,8 @@ msgid "Add slider"
540
  msgstr "Adăugare diapozitiv"
541
 
542
  #: ../ml-slider.php:1258
543
- msgid "Insert Meta Slider"
544
- msgstr "Inserare Meta Slider"
545
 
546
  #: ../ml-slider.php:1260
547
  msgid "Choose slideshow"
@@ -552,8 +552,8 @@ msgid "No slideshows found"
552
  msgstr "Nici un diapozitiv găsit"
553
 
554
  #: ../inc/metaslider.widget.class.php:18
555
- msgid "Meta Slider"
556
- msgstr "Meta Slider"
557
 
558
  #: ../inc/metaslider.widget.class.php:111
559
  msgid "Title:"
540
  msgstr "Adăugare diapozitiv"
541
 
542
  #: ../ml-slider.php:1258
543
+ msgid "Insert MetaSlider"
544
+ msgstr "Inserare MetaSlider"
545
 
546
  #: ../ml-slider.php:1260
547
  msgid "Choose slideshow"
552
  msgstr "Nici un diapozitiv găsit"
553
 
554
  #: ../inc/metaslider.widget.class.php:18
555
+ msgid "MetaSlider"
556
+ msgstr "MetaSlider"
557
 
558
  #: ../inc/metaslider.widget.class.php:111
559
  msgid "Title:"
languages/ml-slider-ru_RU.po CHANGED
@@ -1,6 +1,6 @@
1
  msgid ""
2
  msgstr ""
3
- "Project-Id-Version: Meta Slider v3.2.1\n"
4
  "Report-Msgid-Bugs-To: \n"
5
  "POT-Creation-Date: \n"
6
  "PO-Revision-Date: 2015-01-15 17:46:23+0000\n"
@@ -24,7 +24,7 @@ msgstr ""
24
  #: inc/metaslider.widget.class.php:18
25
  #: ml-slider.php:0
26
  #@ metaslider
27
- msgid "Meta Slider"
28
  msgstr "Мета слайдер"
29
 
30
  #: inc/metaslider.widget.class.php:108
@@ -722,7 +722,7 @@ msgstr "Добавить слайдер"
722
 
723
  #: ml-slider.php:1671
724
  #@ metaslider
725
- msgid "Insert Meta Slider"
726
  msgstr "Вставить Мета Слайдер"
727
 
728
  #: ml-slider.php:1673
1
  msgid ""
2
  msgstr ""
3
+ "Project-Id-Version: MetaSlider v3.2.1\n"
4
  "Report-Msgid-Bugs-To: \n"
5
  "POT-Creation-Date: \n"
6
  "PO-Revision-Date: 2015-01-15 17:46:23+0000\n"
24
  #: inc/metaslider.widget.class.php:18
25
  #: ml-slider.php:0
26
  #@ metaslider
27
+ msgid "MetaSlider"
28
  msgstr "Мета слайдер"
29
 
30
  #: inc/metaslider.widget.class.php:108
722
 
723
  #: ml-slider.php:1671
724
  #@ metaslider
725
+ msgid "Insert MetaSlider"
726
  msgstr "Вставить Мета Слайдер"
727
 
728
  #: ml-slider.php:1673
languages/ml-slider-uk.po CHANGED
@@ -19,8 +19,8 @@ msgstr ""
19
  "X-Poedit-SearchPath-1: ..\n"
20
 
21
  #: ../inc/metaslider.widget.class.php:19
22
- msgid "Meta Slider"
23
- msgstr "Meta Slider"
24
 
25
  #: ../inc/metaslider.widget.class.php:109
26
  msgid "Title:"
@@ -682,8 +682,8 @@ msgid "Add slider"
682
  msgstr "Додати слайдер"
683
 
684
  #: ../ml-slider.php:1784
685
- msgid "Insert Meta Slider"
686
- msgstr "Вставити Meta Slider"
687
 
688
  #: ../ml-slider.php:1786
689
  msgid "Choose slideshow"
19
  "X-Poedit-SearchPath-1: ..\n"
20
 
21
  #: ../inc/metaslider.widget.class.php:19
22
+ msgid "MetaSlider"
23
+ msgstr "MetaSlider"
24
 
25
  #: ../inc/metaslider.widget.class.php:109
26
  msgid "Title:"
682
  msgstr "Додати слайдер"
683
 
684
  #: ../ml-slider.php:1784
685
+ msgid "Insert MetaSlider"
686
+ msgstr "Вставити MetaSlider"
687
 
688
  #: ../ml-slider.php:1786
689
  msgid "Choose slideshow"
languages/ml-slider-zh_CN.po CHANGED
@@ -554,7 +554,7 @@ msgid "Add slider"
554
  msgstr "添加幻灯片"
555
 
556
  #: ../ml-slider.php:1672
557
- msgid "Insert Meta Slider"
558
  msgstr "插入梅塔幻灯片"
559
 
560
  #: ../ml-slider.php:1674
@@ -578,8 +578,8 @@ msgid "Upgrade to Pro $39"
578
  msgstr "升级到专业版(19美金)"
579
 
580
  #: ../inc/metaslider.widget.class.php:18
581
- msgid "Meta Slider"
582
- msgstr "梅塔幻灯片"
583
 
584
  #: ../inc/metaslider.widget.class.php:108
585
  msgid "Title:"
554
  msgstr "添加幻灯片"
555
 
556
  #: ../ml-slider.php:1672
557
+ msgid "Insert MetaSlider"
558
  msgstr "插入梅塔幻灯片"
559
 
560
  #: ../ml-slider.php:1674
578
  msgstr "升级到专业版(19美金)"
579
 
580
  #: ../inc/metaslider.widget.class.php:18
581
+ msgid "MetaSlider"
582
+ msgstr "MetaSlider"
583
 
584
  #: ../inc/metaslider.widget.class.php:108
585
  msgid "Title:"
languages/ml-slider-zh_TW.po CHANGED
@@ -540,7 +540,7 @@ msgid "Add slider"
540
  msgstr "添加到幻燈片"
541
 
542
  #: ../ml-slider.php:1258
543
- msgid "Insert Meta Slider"
544
  msgstr ""
545
 
546
  #: ../ml-slider.php:1260
@@ -553,8 +553,8 @@ msgid "No slideshows found"
553
  msgstr "沒有幻燈片"
554
 
555
  #: ../inc/metaslider.widget.class.php:18
556
- msgid "Meta Slider"
557
- msgstr "多彩幻燈片"
558
 
559
  #: ../inc/metaslider.widget.class.php:111
560
  msgid "Title:"
540
  msgstr "添加到幻燈片"
541
 
542
  #: ../ml-slider.php:1258
543
+ msgid "Insert MetaSlider"
544
  msgstr ""
545
 
546
  #: ../ml-slider.php:1260
553
  msgstr "沒有幻燈片"
554
 
555
  #: ../inc/metaslider.widget.class.php:18
556
+ msgid "MetaSlider"
557
+ msgstr "MetaSlider"
558
 
559
  #: ../inc/metaslider.widget.class.php:111
560
  msgid "Title:"
languages/ml-slider.mo DELETED
Binary file
languages/ml-slider.po DELETED
@@ -1,676 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: metaslider\n"
4
- "POT-Creation-Date: 2015-02-17 14:47-0000\n"
5
- "PO-Revision-Date: 2015-02-17 14:47-0000\n"
6
- "Last-Translator: \n"
7
- "Language-Team: \n"
8
- "MIME-Version: 1.0\n"
9
- "Content-Type: text/plain; charset=UTF-8\n"
10
- "Content-Transfer-Encoding: 8bit\n"
11
- "X-Generator: Poedit 1.5.7\n"
12
- "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
13
- "X-Poedit-Basepath: .\n"
14
- "X-Poedit-SearchPath-0: .\n"
15
- "X-Poedit-SearchPath-1: ..\n"
16
-
17
- #: ../ml-slider.php:283 ../ml-slider.php:284
18
- msgid "Go Pro!"
19
- msgstr ""
20
-
21
- #: ../ml-slider.php:412
22
- msgid "Documentation"
23
- msgstr ""
24
-
25
- #: ../ml-slider.php:465 ../inc/slide/metaslide.image.class.php:147
26
- msgid "URL"
27
- msgstr ""
28
-
29
- #: ../ml-slider.php:466 ../inc/slide/metaslide.image.class.php:146
30
- msgid "Caption"
31
- msgstr ""
32
-
33
- #: ../ml-slider.php:467 ../inc/slide/metaslide.image.class.php:149
34
- msgid "New Window"
35
- msgstr ""
36
-
37
- #: ../ml-slider.php:468
38
- msgid "Are you sure?"
39
- msgstr ""
40
-
41
- #: ../ml-slider.php:470
42
- msgid "Select replacement image"
43
- msgstr ""
44
-
45
- #: ../ml-slider.php:475
46
- msgid ""
47
- "Caution: This setting is for advanced developers only. If you're unsure, "
48
- "leave it checked."
49
- msgstr ""
50
-
51
- #: ../ml-slider.php:538
52
- msgid "Image"
53
- msgstr ""
54
-
55
- #: ../ml-slider.php:539
56
- msgid "Add to slider"
57
- msgstr ""
58
-
59
- #: ../ml-slider.php:703
60
- msgid "New Slider"
61
- msgstr ""
62
-
63
- #: ../ml-slider.php:1015
64
- msgid "Switch to Dropdown view"
65
- msgstr ""
66
-
67
- #: ../ml-slider.php:1015
68
- msgid "Dropdown"
69
- msgstr ""
70
-
71
- #: ../ml-slider.php:1036
72
- msgid "New slideshow created. Click 'Add Slide' to get started!"
73
- msgstr ""
74
-
75
- #: ../ml-slider.php:1040
76
- msgid "Switch to Tab view"
77
- msgstr ""
78
-
79
- #: ../ml-slider.php:1040
80
- msgid "Tabs"
81
- msgstr ""
82
-
83
- #: ../ml-slider.php:1042
84
- msgid "Select Slider"
85
- msgstr ""
86
-
87
- #: ../ml-slider.php:1061
88
- msgid "or"
89
- msgstr ""
90
-
91
- #: ../ml-slider.php:1062
92
- msgid "Add New Slideshow"
93
- msgstr ""
94
-
95
- #: ../ml-slider.php:1068
96
- msgid "Create your first slideshow"
97
- msgstr ""
98
-
99
- #: ../ml-slider.php:1130
100
- msgid "Slides"
101
- msgstr ""
102
-
103
- #: ../ml-slider.php:1134 ../ml-slider.php:1135
104
- msgid "Add Slide"
105
- msgstr ""
106
-
107
- #: ../ml-slider.php:1158
108
- msgid "Settings"
109
- msgstr ""
110
-
111
- #: ../ml-slider.php:1159
112
- msgid "Save"
113
- msgstr ""
114
-
115
- #: ../ml-slider.php:1160
116
- msgid "Save & Preview"
117
- msgstr ""
118
-
119
- #: ../ml-slider.php:1173
120
- msgid "Flex Slider"
121
- msgstr ""
122
-
123
- #: ../ml-slider.php:1174
124
- msgid "R. Slides"
125
- msgstr ""
126
-
127
- #: ../ml-slider.php:1175
128
- msgid "Nivo Slider"
129
- msgstr ""
130
-
131
- #: ../ml-slider.php:1176
132
- msgid "Coin Slider"
133
- msgstr ""
134
-
135
- #: ../ml-slider.php:1187 ../ml-slider.php:1426
136
- msgid "Width"
137
- msgstr ""
138
-
139
- #: ../ml-slider.php:1189
140
- msgid "Slideshow width"
141
- msgstr ""
142
-
143
- #: ../ml-slider.php:1190 ../ml-slider.php:1203 ../ml-slider.php:1353
144
- msgid "px"
145
- msgstr ""
146
-
147
- #: ../ml-slider.php:1200 ../ml-slider.php:1439
148
- msgid "Height"
149
- msgstr ""
150
-
151
- #: ../ml-slider.php:1202
152
- msgid "Slideshow height"
153
- msgstr ""
154
-
155
- #: ../ml-slider.php:1209
156
- msgid "Effect"
157
- msgstr ""
158
-
159
- #: ../ml-slider.php:1211
160
- msgid "Slide transition effect"
161
- msgstr ""
162
-
163
- #: ../ml-slider.php:1213 ../ml-slider.php:1358
164
- msgid "Random"
165
- msgstr ""
166
-
167
- #: ../ml-slider.php:1214
168
- msgid "Swirl"
169
- msgstr ""
170
-
171
- #: ../ml-slider.php:1215
172
- msgid "Rain"
173
- msgstr ""
174
-
175
- #: ../ml-slider.php:1216
176
- msgid "Straight"
177
- msgstr ""
178
-
179
- #: ../ml-slider.php:1217
180
- msgid "Slide Down"
181
- msgstr ""
182
-
183
- #: ../ml-slider.php:1218
184
- msgid "Slice Up"
185
- msgstr ""
186
-
187
- #: ../ml-slider.php:1219
188
- msgid "Slide Up Left"
189
- msgstr ""
190
-
191
- #: ../ml-slider.php:1220
192
- msgid "Slice Up Down"
193
- msgstr ""
194
-
195
- #: ../ml-slider.php:1221
196
- msgid "Slide Up Down Left"
197
- msgstr ""
198
-
199
- #: ../ml-slider.php:1222
200
- msgid "Fold"
201
- msgstr ""
202
-
203
- #: ../ml-slider.php:1223
204
- msgid "Fade"
205
- msgstr ""
206
-
207
- #: ../ml-slider.php:1224
208
- msgid "Slide In Right"
209
- msgstr ""
210
-
211
- #: ../ml-slider.php:1225
212
- msgid "Slide In Left"
213
- msgstr ""
214
-
215
- #: ../ml-slider.php:1226
216
- msgid "Box Random"
217
- msgstr ""
218
-
219
- #: ../ml-slider.php:1227
220
- msgid "Box Rain"
221
- msgstr ""
222
-
223
- #: ../ml-slider.php:1228
224
- msgid "Box Rain Reverse"
225
- msgstr ""
226
-
227
- #: ../ml-slider.php:1229
228
- msgid "Box Rain Grow Reverse"
229
- msgstr ""
230
-
231
- #: ../ml-slider.php:1230
232
- msgid "Slide"
233
- msgstr ""
234
-
235
- #: ../ml-slider.php:1237
236
- msgid "Theme"
237
- msgstr ""
238
-
239
- #: ../ml-slider.php:1239
240
- msgid "Slideshow theme"
241
- msgstr ""
242
-
243
- #: ../ml-slider.php:1241
244
- msgid "Default"
245
- msgstr ""
246
-
247
- #: ../ml-slider.php:1242
248
- msgid "Dark (Nivo)"
249
- msgstr ""
250
-
251
- #: ../ml-slider.php:1243
252
- msgid "Light (Nivo)"
253
- msgstr ""
254
-
255
- #: ../ml-slider.php:1244
256
- msgid "Bar (Nivo)"
257
- msgstr ""
258
-
259
- #: ../ml-slider.php:1250
260
- msgid "Arrows"
261
- msgstr ""
262
-
263
- #: ../ml-slider.php:1253
264
- msgid "Show the previous/next arrows"
265
- msgstr ""
266
-
267
- #: ../ml-slider.php:1258
268
- msgid "Navigation"
269
- msgstr ""
270
-
271
- #: ../ml-slider.php:1261
272
- msgid "Show the slide navigation bullets"
273
- msgstr ""
274
-
275
- #: ../ml-slider.php:1263
276
- msgid "Hidden"
277
- msgstr ""
278
-
279
- #: ../ml-slider.php:1264
280
- msgid "Dots"
281
- msgstr ""
282
-
283
- #: ../ml-slider.php:1275
284
- msgid "Title"
285
- msgstr ""
286
-
287
- #: ../ml-slider.php:1276
288
- msgid "Slideshow title"
289
- msgstr ""
290
-
291
- #: ../ml-slider.php:1290
292
- msgid "Advanced Settings"
293
- msgstr ""
294
-
295
- #: ../ml-slider.php:1299
296
- msgid "Stretch"
297
- msgstr ""
298
-
299
- #: ../ml-slider.php:1301
300
- msgid "100% wide output"
301
- msgstr ""
302
-
303
- #: ../ml-slider.php:1303
304
- msgid "Stretch the slideshow output to fill it's parent container"
305
- msgstr ""
306
-
307
- #: ../ml-slider.php:1308
308
- msgid "Center align"
309
- msgstr ""
310
-
311
- #: ../ml-slider.php:1311
312
- msgid "Center align the slideshow"
313
- msgstr ""
314
-
315
- #: ../ml-slider.php:1316
316
- msgid "Auto play"
317
- msgstr ""
318
-
319
- #: ../ml-slider.php:1319
320
- msgid "Transition between slides automatically"
321
- msgstr ""
322
-
323
- #: ../ml-slider.php:1324
324
- msgid "Image Crop"
325
- msgstr ""
326
-
327
- #: ../ml-slider.php:1328
328
- msgid "Smart Crop"
329
- msgstr ""
330
-
331
- #: ../ml-slider.php:1329
332
- msgid "Standard"
333
- msgstr ""
334
-
335
- #: ../ml-slider.php:1330
336
- msgid "Disabled"
337
- msgstr ""
338
-
339
- #: ../ml-slider.php:1331
340
- msgid "Disabled (Smart Pad)"
341
- msgstr ""
342
-
343
- #: ../ml-slider.php:1333
344
- msgid ""
345
- "Smart Crop ensures your responsive slides are cropped to a ratio that "
346
- "results in a consistent slideshow size"
347
- msgstr ""
348
-
349
- #: ../ml-slider.php:1338
350
- msgid "Carousel mode"
351
- msgstr ""
352
-
353
- #: ../ml-slider.php:1341
354
- msgid "Display multiple slides at once. Slideshow output will be 100% wide."
355
- msgstr ""
356
-
357
- #: ../ml-slider.php:1349
358
- msgid "Carousel margin"
359
- msgstr ""
360
-
361
- #: ../ml-slider.php:1352
362
- msgid "Pixel margin between slides in carousel."
363
- msgstr ""
364
-
365
- #: ../ml-slider.php:1361
366
- msgid "Randomise the order of the slides"
367
- msgstr ""
368
-
369
- #: ../ml-slider.php:1366
370
- msgid "Hover pause"
371
- msgstr ""
372
-
373
- #: ../ml-slider.php:1369
374
- msgid ""
375
- "Pause the slideshow when hovering over slider, then resume when no longer "
376
- "hovering."
377
- msgstr ""
378
-
379
- #: ../ml-slider.php:1374
380
- msgid "Reverse"
381
- msgstr ""
382
-
383
- #: ../ml-slider.php:1377
384
- msgid "Reverse the animation direction"
385
- msgstr ""
386
-
387
- #: ../ml-slider.php:1387
388
- msgid "Slide delay"
389
- msgstr ""
390
-
391
- #: ../ml-slider.php:1389
392
- msgid "How long to display each slide, in milliseconds"
393
- msgstr ""
394
-
395
- #: ../ml-slider.php:1390 ../ml-slider.php:1403 ../ml-slider.php:1416
396
- #: ../ml-slider.php:1492 ../ml-slider.php:1518
397
- msgid "ms"
398
- msgstr ""
399
-
400
- #: ../ml-slider.php:1400
401
- msgid "Animation speed"
402
- msgstr ""
403
-
404
- #: ../ml-slider.php:1402
405
- msgid "Set the speed of animations, in milliseconds"
406
- msgstr ""
407
-
408
- #: ../ml-slider.php:1413 ../ml-slider.php:1415
409
- msgid "Number of slices"
410
- msgstr ""
411
-
412
- #: ../ml-slider.php:1426 ../ml-slider.php:1428 ../ml-slider.php:1439
413
- #: ../ml-slider.php:1441
414
- msgid "Number of squares"
415
- msgstr ""
416
-
417
- #: ../ml-slider.php:1447
418
- msgid "Slide direction"
419
- msgstr ""
420
-
421
- #: ../ml-slider.php:1449
422
- msgid "Select the sliding direction"
423
- msgstr ""
424
-
425
- #: ../ml-slider.php:1452
426
- msgid "Horizontal"
427
- msgstr ""
428
-
429
- #: ../ml-slider.php:1453
430
- msgid "Vertical"
431
- msgstr ""
432
-
433
- #: ../ml-slider.php:1459
434
- msgid "Easing"
435
- msgstr ""
436
-
437
- #: ../ml-slider.php:1461
438
- msgid "Animation easing effect"
439
- msgstr ""
440
-
441
- #: ../ml-slider.php:1468
442
- msgid "Previous text"
443
- msgstr ""
444
-
445
- #: ../ml-slider.php:1470
446
- msgid "Set the text for the 'previous' direction item"
447
- msgstr ""
448
-
449
- #: ../ml-slider.php:1476
450
- msgid "Next text"
451
- msgstr ""
452
-
453
- #: ../ml-slider.php:1478
454
- msgid "Set the text for the 'next' direction item"
455
- msgstr ""
456
-
457
- #: ../ml-slider.php:1489
458
- msgid "Square delay"
459
- msgstr ""
460
-
461
- #: ../ml-slider.php:1491
462
- msgid "Delay between squares in ms"
463
- msgstr ""
464
-
465
- #: ../ml-slider.php:1502
466
- msgid "Opacity"
467
- msgstr ""
468
-
469
- #: ../ml-slider.php:1504
470
- msgid "Opacity of title and navigation"
471
- msgstr ""
472
-
473
- #: ../ml-slider.php:1515
474
- msgid "Caption speed"
475
- msgstr ""
476
-
477
- #: ../ml-slider.php:1517
478
- msgid "Set the fade in speed of the caption"
479
- msgstr ""
480
-
481
- #: ../ml-slider.php:1524
482
- msgid "Developer options"
483
- msgstr ""
484
-
485
- #: ../ml-slider.php:1529
486
- msgid "CSS classes"
487
- msgstr ""
488
-
489
- #: ../ml-slider.php:1531
490
- msgid ""
491
- "Specify any custom CSS Classes you would like to be added to the slider "
492
- "wrapper"
493
- msgstr ""
494
-
495
- #: ../ml-slider.php:1537
496
- msgid "Print CSS"
497
- msgstr ""
498
-
499
- #: ../ml-slider.php:1540
500
- msgid "Uncheck this is you would like to include your own CSS"
501
- msgstr ""
502
-
503
- #: ../ml-slider.php:1545
504
- msgid "Print JS"
505
- msgstr ""
506
-
507
- #: ../ml-slider.php:1548
508
- msgid "Uncheck this is you would like to include your own Javascript"
509
- msgstr ""
510
-
511
- #: ../ml-slider.php:1553
512
- msgid "No conflict mode"
513
- msgstr ""
514
-
515
- #: ../ml-slider.php:1556
516
- msgid "Delay adding the flexslider class to the slideshow"
517
- msgstr ""
518
-
519
- #: ../ml-slider.php:1570
520
- msgid "Usage"
521
- msgstr ""
522
-
523
- #: ../ml-slider.php:1573
524
- msgid "Shortcode"
525
- msgstr ""
526
-
527
- #: ../ml-slider.php:1574
528
- msgid "Template Include"
529
- msgstr ""
530
-
531
- #: ../ml-slider.php:1578
532
- msgid "Copy & paste the shortcode directly into any WordPress post or page."
533
- msgstr ""
534
-
535
- #: ../ml-slider.php:1581
536
- msgid ""
537
- "Copy & paste this code into a template file to include the slideshow within "
538
- "your theme."
539
- msgstr ""
540
-
541
- #: ../ml-slider.php:1615
542
- msgid "Delete Slider"
543
- msgstr ""
544
-
545
- #: ../ml-slider.php:1635
546
- msgid "Select slideshow to insert into post"
547
- msgstr ""
548
-
549
- #: ../ml-slider.php:1638
550
- msgid "Add slider"
551
- msgstr ""
552
-
553
- #: ../ml-slider.php:1672
554
- msgid "Insert Meta Slider"
555
- msgstr ""
556
-
557
- #: ../ml-slider.php:1674
558
- msgid "Choose slideshow"
559
- msgstr ""
560
-
561
- #: ../ml-slider.php:1679
562
- msgid "Insert slideshow"
563
- msgstr ""
564
-
565
- #: ../ml-slider.php:1681 ../inc/metaslider.widget.class.php:121
566
- msgid "No slideshows found"
567
- msgstr ""
568
-
569
- #: ../ml-slider.php:1698
570
- msgid "Go Pro"
571
- msgstr ""
572
-
573
- #: ../ml-slider.php:1717
574
- msgid "Upgrade to Pro $39"
575
- msgstr ""
576
-
577
- #: ../inc/metaslider.widget.class.php:18
578
- msgid "Meta Slider"
579
- msgstr ""
580
-
581
- #: ../inc/metaslider.widget.class.php:108
582
- msgid "Title:"
583
- msgstr ""
584
-
585
- #: ../inc/metaslider.widget.class.php:111
586
- msgid "Select Slider:"
587
- msgstr ""
588
-
589
- #: ../inc/slide/metaslide.class.php:71
590
- #: ../inc/slide/metaslide.image.class.php:27
591
- msgid "Security check failed. Refresh page and try again."
592
- msgstr ""
593
-
594
- #: ../inc/slide/metaslide.class.php:116
595
- msgid "File copy failed. Please check upload directory permissions."
596
- msgstr ""
597
-
598
- #: ../inc/slide/metaslide.class.php:275
599
- msgid "Delete slide"
600
- msgstr ""
601
-
602
- #: ../inc/slide/metaslide.image.class.php:43
603
- msgid "Failed to add slide. Slide already exists in slideshow."
604
- msgstr ""
605
-
606
- #: ../inc/slide/metaslide.image.class.php:47
607
- msgid "Failed to add slide. Slide is not of type 'image'."
608
- msgstr ""
609
-
610
- #: ../inc/slide/metaslide.image.class.php:111
611
- msgid "Image Slide"
612
- msgstr ""
613
-
614
- #: ../inc/slide/metaslide.image.class.php:153
615
- msgid "Warning: Image data does not exist. Please re-upload the image."
616
- msgstr ""
617
-
618
- #: ../inc/slide/metaslide.image.class.php:158
619
- msgid "Image Title Text"
620
- msgstr ""
621
-
622
- #: ../inc/slide/metaslide.image.class.php:160
623
- msgid "Image Alt Text"
624
- msgstr ""
625
-
626
- #: ../inc/slide/metaslide.image.class.php:165
627
- msgid "General"
628
- msgstr ""
629
-
630
- #: ../inc/slide/metaslide.image.class.php:169
631
- msgid "SEO"
632
- msgstr ""
633
-
634
- #: ../inc/slide/metaslide.image.class.php:182
635
- msgid "Crop Position"
636
- msgstr ""
637
-
638
- #: ../inc/slide/metaslide.image.class.php:185
639
- msgid "Top Left"
640
- msgstr ""
641
-
642
- #: ../inc/slide/metaslide.image.class.php:186
643
- msgid "Top Center"
644
- msgstr ""
645
-
646
- #: ../inc/slide/metaslide.image.class.php:187
647
- msgid "Top Right"
648
- msgstr ""
649
-
650
- #: ../inc/slide/metaslide.image.class.php:188
651
- msgid "Center Left"
652
- msgstr ""
653
-
654
- #: ../inc/slide/metaslide.image.class.php:189
655
- msgid "Center Center"
656
- msgstr ""
657
-
658
- #: ../inc/slide/metaslide.image.class.php:190
659
- msgid "Center Right"
660
- msgstr ""
661
-
662
- #: ../inc/slide/metaslide.image.class.php:191
663
- msgid "Bottom Left"
664
- msgstr ""
665
-
666
- #: ../inc/slide/metaslide.image.class.php:192
667
- msgid "Bottom Center"
668
- msgstr ""
669
-
670
- #: ../inc/slide/metaslide.image.class.php:193
671
- msgid "Bottom Right"
672
- msgstr ""
673
-
674
- #: ../inc/slide/metaslide.image.class.php:198
675
- msgid "Crop"
676
- msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
languages/ml-slider.pot ADDED
@@ -0,0 +1,1226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2017 ml-slider
2
+ # This file is distributed under the same license as the ml-slider package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: ml-slider\n"
6
+ "Report-Msgid-Bugs-To: http://example.com\n"
7
+ "MIME-Version: 1.0\n"
8
+ "Content-Type: text/plain; charset=UTF-8\n"
9
+ "Content-Transfer-Encoding: 8bit\n"
10
+ "PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n"
11
+ "Last-Translator: John Doe <mail@example.com>\n"
12
+ "Language-Team: Team Updraft <mail@example.com>\n"
13
+ "X-Poedit-Basepath: ..\n"
14
+ "X-Poedit-SourceCharset: UTF-8\n"
15
+ "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
16
+ "X-Poedit-SearchPath-0: .\n"
17
+ "X-Poedit-SearchPathExcluded-0: *.js\n"
18
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
19
+
20
+ #: src/admin/Notices.php:63
21
+ msgid "Always backup WordPress to avoid losing your site!"
22
+ msgstr ""
23
+
24
+ #: src/admin/Notices.php:64
25
+ msgid "UpdraftPlus is the world's #1 backup plugin from the makers of MetaSlider. Backup to the cloud, on a schedule and restore with 1 click!"
26
+ msgstr ""
27
+
28
+ #: src/admin/Notices.php:74
29
+ msgid "Keyy: Instant and secure logon with a wave of your phone"
30
+ msgstr ""
31
+
32
+ #: src/admin/Notices.php:75
33
+ msgid "No more forgotten passwords. Find out more about our revolutionary new WordPress plugin"
34
+ msgstr ""
35
+
36
+ #: src/admin/Notices.php:85
37
+ msgid "Save Time and Money. Manage multiple WordPress sites from one location."
38
+ msgstr ""
39
+
40
+ #: src/admin/Notices.php:86
41
+ msgid "UpdraftCentral is a highly efficient way to take backup, update and manage multiple WP sites from one location"
42
+ msgstr ""
43
+
44
+ #: src/admin/Notices.php:96
45
+ msgid "Like MetaSlider and have a minute to spare?"
46
+ msgstr ""
47
+
48
+ #: src/admin/Notices.php:97
49
+ msgid "Please help MetaSlider by giving a positive review at wordpress.org."
50
+ msgstr ""
51
+
52
+ #: src/admin/Notices.php:106
53
+ msgid "Help us to get even better MetaSlider"
54
+ msgstr ""
55
+
56
+ #: src/admin/Notices.php:107
57
+ msgid "Let us know how you use MetaSlider by answering 4 simple questions. We will make MetaSlider to suit you better."
58
+ msgstr ""
59
+
60
+ #: src/admin/Notices.php:116
61
+ msgid "Spice up your site with animated layers and video slides"
62
+ msgstr ""
63
+
64
+ #: src/admin/Notices.php:117
65
+ msgid "With the MetaSlider Add-on pack you can give your slideshows a professional look!"
66
+ msgstr ""
67
+
68
+ #: src/admin/Notices.php:126
69
+ msgid "Increase your revenue and conversion with video slides and many more features"
70
+ msgstr ""
71
+
72
+ #: src/admin/Notices.php:127
73
+ msgid "Upgrade today to benefit from many more premium features. Find out more."
74
+ msgstr ""
75
+
76
+ #: src/admin/Notices.php:136
77
+ msgid "Can you translate? Want to improve MetaSlider for speakers of your language?"
78
+ msgstr ""
79
+
80
+ #: src/admin/Notices.php:137
81
+ msgid "Please go here for instructions - it is easy."
82
+ msgstr ""
83
+
84
+ #: src/admin/Notices.php:147
85
+ msgid "Thank you for installing MetaSlider"
86
+ msgstr ""
87
+
88
+ #: src/admin/Notices.php:148
89
+ msgid "Supercharge & secure your WordPress site with our other top plugins:"
90
+ msgstr ""
91
+
92
+ #: src/admin/Notices.php:165
93
+ msgid "We’re making changes and need your help."
94
+ msgstr ""
95
+
96
+ #: src/admin/Notices.php:166
97
+ msgid "If you could spare a minute, we would like to ask you 4 easy questions about how you use MetaSlider. Your voice is important to us!"
98
+ msgstr ""
99
+
100
+ #: src/admin/Notices.php:171
101
+ msgid "forever"
102
+ msgstr ""
103
+
104
+ #: src/admin/Notices.php:186
105
+ msgid "Black Friday - 50% off the MetaSlider Add-on Pack until November 30th"
106
+ msgstr ""
107
+
108
+ #: src/admin/Notices.php:187, src/admin/Notices.php:200, src/admin/Notices.php:213, src/admin/Notices.php:226, src/admin/Notices.php:239
109
+ msgid "To benefit, use this discount code:"
110
+ msgstr ""
111
+
112
+ #: src/admin/Notices.php:195, src/admin/Notices.php:208, src/admin/Notices.php:221, src/admin/Notices.php:234, src/admin/Notices.php:247
113
+ msgid "until next year"
114
+ msgstr ""
115
+
116
+ #: src/admin/Notices.php:199
117
+ msgid "Christmas sale - 50% off the MetaSlider Add-on Pack until December 25th"
118
+ msgstr ""
119
+
120
+ #: src/admin/Notices.php:212
121
+ msgid "Happy New Year - 50% off the MetaSlider Add-on Pack until January 1st"
122
+ msgstr ""
123
+
124
+ #: src/admin/Notices.php:225
125
+ msgid "Spring sale - 50% off the MetaSlider Add-on Pack until April 31st"
126
+ msgstr ""
127
+
128
+ #: src/admin/Notices.php:238
129
+ msgid "Summer sale - 50% off the MetaSlider Add-on Pack until July 31st"
130
+ msgstr ""
131
+
132
+ #: src/admin/Notices.php:261
133
+ msgid "Increase your conversion rate with video slides and many more options."
134
+ msgstr ""
135
+
136
+ #: src/admin/Notices.php:268
137
+ msgid "offers unparalleled choice and flexibility, allowing you to select one or a combination of over a dozen optimization options."
138
+ msgstr ""
139
+
140
+ #: src/admin/Notices.php:275
141
+ msgid "provides personal support, the ability to copy sites, more storage destinations, encrypted backups for security, multiple backup destinations, better reporting, no adverts and plenty more."
142
+ msgstr ""
143
+
144
+ #: src/admin/Notices.php:282
145
+ msgid "simplifies backups and restoration. It is the world's highest ranking and most popular scheduled backup plugin, with over a million currently-active installs."
146
+ msgstr ""
147
+
148
+ #: src/admin/Notices.php:289
149
+ msgid "auto-clean your WordPress database so that it runs at maximum efficiency."
150
+ msgstr ""
151
+
152
+ #: src/admin/Notices.php:296
153
+ msgid "Simple & secure login with a wave of your phone."
154
+ msgstr ""
155
+
156
+ #: src/admin/Notices.php:303
157
+ msgid "is a highly efficient way to manage, update and backup multiple websites from one place."
158
+ msgstr ""
159
+
160
+ #: src/admin/Notices.php:508
161
+ msgid "weeks"
162
+ msgstr ""
163
+
164
+ #: src/admin/Notices.php:523
165
+ msgid "Get UpdraftPlus"
166
+ msgstr ""
167
+
168
+ #: src/admin/Notices.php:524
169
+ msgid "Get Keyy"
170
+ msgstr ""
171
+
172
+ #: src/admin/Notices.php:525
173
+ msgid "Optimize today"
174
+ msgstr ""
175
+
176
+ #: src/admin/Notices.php:526
177
+ msgid "Get UpdraftCentral"
178
+ msgstr ""
179
+
180
+ #: src/admin/Notices.php:527
181
+ msgid "Let's Start"
182
+ msgstr ""
183
+
184
+ #: src/admin/Notices.php:528
185
+ msgid "Review MetaSlider"
186
+ msgstr ""
187
+
188
+ #: src/admin/Notices.php:529
189
+ msgid "Find out more"
190
+ msgstr ""
191
+
192
+ #: src/admin/Notices.php:530
193
+ msgid "Sign up"
194
+ msgstr ""
195
+
196
+ #: src/admin/Notices.php:531
197
+ msgid "Go there"
198
+ msgstr ""
199
+
200
+ #: src/admin/Notices.php:533
201
+ msgid "Read more"
202
+ msgstr ""
203
+
204
+ #: src/admin/Notices.php:546, src/admin/Tour.php:119, src/inc/slide/metaslide.class.php:113, src/inc/slide/metaslide.image.class.php:107, src/ml-slider.php:1229, src/ml-slider.php:1321
205
+ msgid "The security check failed. Please refresh the page and try again."
206
+ msgstr ""
207
+
208
+ #: src/admin/Notices.php:552
209
+ msgid "This item does not exist. Please refresh the page and try again."
210
+ msgstr ""
211
+
212
+ #: src/admin/Notices.php:565
213
+ msgid "The option was successfully updated"
214
+ msgstr ""
215
+
216
+ #: src/admin/Notices.php:618
217
+ msgid "The requested data does not exist."
218
+ msgstr ""
219
+
220
+ #: src/admin/Notices.php:636
221
+ msgid "The attempt to update the option failed."
222
+ msgstr ""
223
+
224
+ #: src/admin/Pages.php:71, src/inc/slide/metaslide.image.class.php:229
225
+ msgid "URL"
226
+ msgstr ""
227
+
228
+ #: src/admin/Pages.php:72, src/inc/slide/metaslide.image.class.php:228
229
+ msgid "Caption"
230
+ msgstr ""
231
+
232
+ #: src/admin/Pages.php:73, src/inc/slide/metaslide.image.class.php:231
233
+ msgid "New Window"
234
+ msgstr ""
235
+
236
+ #: src/admin/Pages.php:74
237
+ msgid "Are you sure?"
238
+ msgstr ""
239
+
240
+ #: src/admin/Pages.php:75
241
+ msgid "Undo"
242
+ msgstr ""
243
+
244
+ #: src/admin/Pages.php:76
245
+ msgid "Slide restored"
246
+ msgstr ""
247
+
248
+ #: src/admin/Pages.php:77
249
+ msgid "Slide deleted"
250
+ msgstr ""
251
+
252
+ #: src/admin/Pages.php:78
253
+ msgid "Press to undo"
254
+ msgstr ""
255
+
256
+ #: src/admin/Pages.php:80
257
+ msgid "Select replacement image"
258
+ msgstr ""
259
+
260
+ #: src/admin/Pages.php:88
261
+ msgid "Caution: This setting is for advanced developers only. If you're unsure, leave it checked."
262
+ msgstr ""
263
+
264
+ #: src/admin/Tour.php:38
265
+ msgid "Welcome"
266
+ msgstr ""
267
+
268
+ #: src/admin/Tour.php:39
269
+ msgid "Thanks for using the MetaSlider WordPress plugin. It looks like you don’t have any slideshows yet! To get started, click above to add your first one."
270
+ msgstr ""
271
+
272
+ #: src/admin/Tour.php:45, src/ml-slider.php:2019
273
+ msgid "Learn More"
274
+ msgstr ""
275
+
276
+ #: src/admin/Tour.php:46, src/inc/slider/metaslider.class.php:109
277
+ msgid "Next"
278
+ msgstr ""
279
+
280
+ #: src/admin/Tour.php:47
281
+ msgid "Skip this step"
282
+ msgstr ""
283
+
284
+ #: src/admin/Tour.php:51
285
+ msgid "Add A Slide"
286
+ msgstr ""
287
+
288
+ #: src/admin/Tour.php:52
289
+ msgid "Congratulations! Now that you've created a slideshow, click here to add a slide."
290
+ msgstr ""
291
+
292
+ #: src/admin/Tour.php:55
293
+ msgid "Select Slide Type"
294
+ msgstr ""
295
+
296
+ #: src/admin/Tour.php:56
297
+ msgid "Premium users that have the Add-on Pack activated can access additional slide types!"
298
+ msgstr ""
299
+
300
+ #: src/admin/Tour.php:59
301
+ msgid "Select Media"
302
+ msgstr ""
303
+
304
+ #: src/admin/Tour.php:60
305
+ msgid "After you have selected your media from the left, click below to continue."
306
+ msgstr ""
307
+
308
+ #: src/admin/Tour.php:63, src/ml-slider.php:2675
309
+ msgid "Preview Slideshow"
310
+ msgstr ""
311
+
312
+ #: src/admin/Tour.php:64
313
+ msgid "Now that you have some slides set, you can preview your slideshow by clicking here."
314
+ msgstr ""
315
+
316
+ #: src/admin/Tour.php:67
317
+ msgid "Adjust Settings"
318
+ msgstr ""
319
+
320
+ #: src/admin/Tour.php:68
321
+ msgid "If you need to adjust the settings for this slideshow, you may do so here."
322
+ msgstr ""
323
+
324
+ #: src/admin/Tour.php:71
325
+ msgid "Shortcode Usage"
326
+ msgstr ""
327
+
328
+ #: src/admin/Tour.php:72
329
+ msgid "You are all set! If you want to add the slideshow to a post, you may use this shortcode."
330
+ msgstr ""
331
+
332
+ #: src/admin/Tour.php:76
333
+ msgid "Congratulations!"
334
+ msgstr ""
335
+
336
+ #: src/admin/Tour.php:77
337
+ msgid "You've completed the tour and are ready to add great slideshows to your website. Don't forget, if you want your slideshows to really stand out, pick up the add-on pack today. "
338
+ msgstr ""
339
+
340
+ #: src/admin/Tour.php:126
341
+ msgid "This method does not exist. Please refresh the page and try again."
342
+ msgstr ""
343
+
344
+ #: src/admin/views/notices/dashboard-notice.php:9, src/admin/views/notices/header-notice.php:11
345
+ msgid "Hide this ad (%s)"
346
+ msgstr ""
347
+
348
+ #: src/admin/views/notices/header-notice.php:6
349
+ msgid "Logo"
350
+ msgstr ""
351
+
352
+ #: src/admin/views/pages/upgrade.php:14
353
+ msgid "Comparison Chart"
354
+ msgstr ""
355
+
356
+ #: src/admin/views/pages/upgrade.php:19, src/admin/views/pages/upgrade.php:20
357
+ msgid "logo"
358
+ msgstr ""
359
+
360
+ #: src/admin/views/pages/upgrade.php:19
361
+ msgid "free"
362
+ msgstr ""
363
+
364
+ #: src/admin/views/pages/upgrade.php:20, src/ml-slider.php:619, src/ml-slider.php:3801
365
+ msgid "Add-ons"
366
+ msgstr ""
367
+
368
+ #: src/admin/views/pages/upgrade.php:20
369
+ msgid "pro"
370
+ msgstr ""
371
+
372
+ #: src/admin/views/pages/upgrade.php:26, src/admin/views/pages/upgrade.php:103
373
+ msgid "Installed"
374
+ msgstr ""
375
+
376
+ #: src/admin/views/pages/upgrade.php:27, src/admin/views/pages/upgrade.php:104
377
+ msgid "Upgrade now"
378
+ msgstr ""
379
+
380
+ #: src/admin/views/pages/upgrade.php:31
381
+ msgid "Create unlimited slideshows"
382
+ msgstr ""
383
+
384
+ #: src/admin/views/pages/upgrade.php:32
385
+ msgid "Create and manage as many slideshows as you need."
386
+ msgstr ""
387
+
388
+ #: src/admin/views/pages/upgrade.php:33, src/admin/views/pages/upgrade.php:34, src/admin/views/pages/upgrade.php:40, src/admin/views/pages/upgrade.php:41, src/admin/views/pages/upgrade.php:47, src/admin/views/pages/upgrade.php:48, src/admin/views/pages/upgrade.php:54, src/admin/views/pages/upgrade.php:55, src/admin/views/pages/upgrade.php:62, src/admin/views/pages/upgrade.php:69, src/admin/views/pages/upgrade.php:76, src/admin/views/pages/upgrade.php:83, src/admin/views/pages/upgrade.php:90, src/admin/views/pages/upgrade.php:97
389
+ msgid "Yes"
390
+ msgstr ""
391
+
392
+ #: src/admin/views/pages/upgrade.php:38
393
+ msgid "Multiple slideshow types"
394
+ msgstr ""
395
+
396
+ #: src/admin/views/pages/upgrade.php:39
397
+ msgid "Including %s, %s and we will soon be adding more."
398
+ msgstr ""
399
+
400
+ #: src/admin/views/pages/upgrade.php:45
401
+ msgid "Regular updates"
402
+ msgstr ""
403
+
404
+ #: src/admin/views/pages/upgrade.php:46
405
+ msgid "Our word to keep %s compatible with the latest versions of %s."
406
+ msgstr ""
407
+
408
+ #: src/admin/views/pages/upgrade.php:52
409
+ msgid "Intelligent image cropping"
410
+ msgstr ""
411
+
412
+ #: src/admin/views/pages/upgrade.php:53
413
+ msgid "Unique %s functionality ensures your slides are perfectly resized."
414
+ msgstr ""
415
+
416
+ #: src/admin/views/pages/upgrade.php:59
417
+ msgid "Thumbnail navigation"
418
+ msgstr ""
419
+
420
+ #: src/admin/views/pages/upgrade.php:60
421
+ msgid "Easily allow users to navigate your slideshows by thumbnails."
422
+ msgstr ""
423
+
424
+ #: src/admin/views/pages/upgrade.php:61, src/admin/views/pages/upgrade.php:68, src/admin/views/pages/upgrade.php:75, src/admin/views/pages/upgrade.php:82, src/admin/views/pages/upgrade.php:89, src/admin/views/pages/upgrade.php:96
425
+ msgid "No"
426
+ msgstr ""
427
+
428
+ #: src/admin/views/pages/upgrade.php:66
429
+ msgid "Add video slides"
430
+ msgstr ""
431
+
432
+ #: src/admin/views/pages/upgrade.php:67
433
+ msgid "Easily include responsive high definition %s and %s videos."
434
+ msgstr ""
435
+
436
+ #: src/admin/views/pages/upgrade.php:73
437
+ msgid "%s overlay slides"
438
+ msgstr ""
439
+
440
+ #: src/admin/views/pages/upgrade.php:74
441
+ msgid "Create completely customized %s slides using the inline editor."
442
+ msgstr ""
443
+
444
+ #: src/admin/views/pages/upgrade.php:80
445
+ msgid "Add slide layers"
446
+ msgstr ""
447
+
448
+ #: src/admin/views/pages/upgrade.php:81
449
+ msgid "Add layers to your slides with over 50 available transition effects."
450
+ msgstr ""
451
+
452
+ #: src/admin/views/pages/upgrade.php:87
453
+ msgid "Post feed slides"
454
+ msgstr ""
455
+
456
+ #: src/admin/views/pages/upgrade.php:88
457
+ msgid "Easily build slides based on your %s posts."
458
+ msgstr ""
459
+
460
+ #: src/admin/views/pages/upgrade.php:94
461
+ msgid "Premium support"
462
+ msgstr ""
463
+
464
+ #: src/admin/views/pages/upgrade.php:95
465
+ msgid "Have your specific queries addressed directly by our experts"
466
+ msgstr ""
467
+
468
+ #: src/admin/views/pages/upgrade.php:114
469
+ msgid "More Professional-Quality Plugins for your Website"
470
+ msgstr ""
471
+
472
+ #: src/admin/views/pages/upgrade.php:122
473
+ msgid "%s – the ultimate protection for your site, hard work and business"
474
+ msgstr ""
475
+
476
+ #: src/admin/views/pages/upgrade.php:124
477
+ msgid "If you’ve got a %s website, you need a backup."
478
+ msgstr ""
479
+
480
+ #: src/admin/views/pages/upgrade.php:125
481
+ msgid "Hacking, server crashes, dodgy updates or simple user error can ruin everything."
482
+ msgstr ""
483
+
484
+ #: src/admin/views/pages/upgrade.php:126
485
+ msgid "With %s, you can rest assured that if the worst does happen, it's no big deal. rather than losing everything, you can simply restore the backup and be up and running again in no time at all."
486
+ msgstr ""
487
+
488
+ #: src/admin/views/pages/upgrade.php:127
489
+ msgid "You can also migrate your website with few clicks without hassle."
490
+ msgstr ""
491
+
492
+ #: src/admin/views/pages/upgrade.php:128
493
+ msgid "With a long-standing reputation for excellence and outstanding reviews, it’s no wonder that %s is the world’s most popular %s backup plugin."
494
+ msgstr ""
495
+
496
+ #: src/admin/views/pages/upgrade.php:129, src/admin/views/pages/upgrade.php:141, src/admin/views/pages/upgrade.php:153, src/admin/views/pages/upgrade.php:165
497
+ msgid "Try for free"
498
+ msgstr ""
499
+
500
+ #: src/admin/views/pages/upgrade.php:136
501
+ msgid "%s Dashboard"
502
+ msgstr ""
503
+
504
+ #: src/admin/views/pages/upgrade.php:137
505
+ msgid "%s – save hours managing multiple WP sites from one place"
506
+ msgstr ""
507
+
508
+ #: src/admin/views/pages/upgrade.php:138
509
+ msgid "If you manage a few %s sites, you need UpdraftCentral."
510
+ msgstr ""
511
+
512
+ #: src/admin/views/pages/upgrade.php:139
513
+ msgid "%s is a powerful tool that allows you to efficiently manage, update, backup and even restore multiple websites from just one location. You can also manage users and comments on all the sites at once, and through its central login feature, you can access each WP-dashboard with a single click."
514
+ msgstr ""
515
+
516
+ #: src/admin/views/pages/upgrade.php:140
517
+ msgid "With a wide range of useful features, including automated backup schedules and sophisticated one click updates, UpdraftCentral is sure to boost to your productivity and save you time."
518
+ msgstr ""
519
+
520
+ #: src/admin/views/pages/upgrade.php:149
521
+ msgid "%s – faster, fitter, cleaner WP sites for optimal performance."
522
+ msgstr ""
523
+
524
+ #: src/admin/views/pages/upgrade.php:150
525
+ msgid "%s, the #1 optimization plugin, keeps your %s site at prime speed by cleaning the database without the need for %s."
526
+ msgstr ""
527
+
528
+ #: src/admin/views/pages/upgrade.php:151
529
+ msgid "Incredibly simple to use, %s clears out old webpage revisions, spam, trash and unapproved comments, all of which take up megabytes of valuable space and leave your database sluggish and ultimately unfit for purpose."
530
+ msgstr ""
531
+
532
+ #: src/admin/views/pages/upgrade.php:152
533
+ msgid "%s has a load of valuable features, including automated weekly clean up scheduling, the retention of a set number of weeks’ data, a display of how much space can be cleared, the enabling / disabling of trackbacks and comments for all published posts, and an ‘administrators only’ security feature."
534
+ msgstr ""
535
+
536
+ #: src/admin/views/pages/upgrade.php:160
537
+ msgid "%s Two-Factor Authentication"
538
+ msgstr ""
539
+
540
+ #: src/admin/views/pages/upgrade.php:161
541
+ msgid "%s – instant &amp; secure logins with a wave of your phone"
542
+ msgstr ""
543
+
544
+ #: src/admin/views/pages/upgrade.php:162
545
+ msgid "%s is a unique 2-factor authentication plugin that allows you to log in to your website with just a wave of your smartphone. It represents the ultimate UX, doing away with the need for usernames, passwords and other 2FA tokens."
546
+ msgstr ""
547
+
548
+ #: src/admin/views/pages/upgrade.php:163
549
+ msgid "Using innovative RSA public-key cryptography, %s is highly secure and prevents password-based hacking risks such as brute-forcing, key-logging, shoulder-surfing and connection sniffing."
550
+ msgstr ""
551
+
552
+ #: src/admin/views/pages/upgrade.php:164
553
+ msgid "Logging in with %s is simple. Once users have installed the app onto their smartphone and secured it using a fingerprint or 4-number pin, they just open the app, point it at the moving on-screen barcode and voila!"
554
+ msgstr ""
555
+
556
+ #: src/inc/metaslider.widget.class.php:19
557
+ msgid "MetaSlider"
558
+ msgstr ""
559
+
560
+ #: src/inc/metaslider.widget.class.php:109
561
+ msgid "Title:"
562
+ msgstr ""
563
+
564
+ #: src/inc/metaslider.widget.class.php:112
565
+ msgid "Select Slider:"
566
+ msgstr ""
567
+
568
+ #: src/inc/metaslider.widget.class.php:122, src/ml-slider.php:3693
569
+ msgid "No slideshows found"
570
+ msgstr ""
571
+
572
+ #: src/inc/slide/metaslide.class.php:80
573
+ msgid "The requested image does not exist. Please try again."
574
+ msgstr ""
575
+
576
+ #: src/inc/slide/metaslide.class.php:87
577
+ msgid "The requested slide does not exist or something is wrong with the current image. Please try again or remove this slide."
578
+ msgstr ""
579
+
580
+ #: src/inc/slide/metaslide.class.php:96
581
+ msgid "The image was successfully updated."
582
+ msgstr ""
583
+
584
+ #: src/inc/slide/metaslide.class.php:101
585
+ msgid "There was an error updating the image. Please try again"
586
+ msgstr ""
587
+
588
+ #: src/inc/slide/metaslide.class.php:249
589
+ msgid "There was an error while updating the database. Please try again."
590
+ msgstr ""
591
+
592
+ #: src/inc/slide/metaslide.class.php:332
593
+ msgid "Delete Slide"
594
+ msgstr ""
595
+
596
+ #: src/inc/slide/metaslide.class.php:359, src/inc/slide/metaslide.class.php:359, src/inc/slide/metaslide.image.class.php:197, src/inc/slide/metaslide.image.class.php:197
597
+ msgid "Update slide image"
598
+ msgstr ""
599
+
600
+ #: src/inc/slide/metaslide.image.class.php:74
601
+ msgid "Failed to add slide. Slide is not an image."
602
+ msgstr ""
603
+
604
+ #: src/inc/slide/metaslide.image.class.php:76
605
+ msgid "This isn't an accepted image. Please try again."
606
+ msgstr ""
607
+
608
+ #: src/inc/slide/metaslide.image.class.php:178
609
+ msgid "Image Slide"
610
+ msgstr ""
611
+
612
+ #: src/inc/slide/metaslide.image.class.php:235
613
+ msgid "Warning: Image data does not exist. Please re-upload the image."
614
+ msgstr ""
615
+
616
+ #: src/inc/slide/metaslide.image.class.php:240
617
+ msgid "Image Title Text"
618
+ msgstr ""
619
+
620
+ #: src/inc/slide/metaslide.image.class.php:240
621
+ msgid "Image Alt Text"
622
+ msgstr ""
623
+
624
+ #: src/inc/slide/metaslide.image.class.php:244
625
+ msgid "General"
626
+ msgstr ""
627
+
628
+ #: src/inc/slide/metaslide.image.class.php:248
629
+ msgid "SEO"
630
+ msgstr ""
631
+
632
+ #: src/inc/slide/metaslide.image.class.php:261
633
+ msgid "Crop Position"
634
+ msgstr ""
635
+
636
+ #: src/inc/slide/metaslide.image.class.php:264
637
+ msgid "Top Left"
638
+ msgstr ""
639
+
640
+ #: src/inc/slide/metaslide.image.class.php:265
641
+ msgid "Top Center"
642
+ msgstr ""
643
+
644
+ #: src/inc/slide/metaslide.image.class.php:266
645
+ msgid "Top Right"
646
+ msgstr ""
647
+
648
+ #: src/inc/slide/metaslide.image.class.php:267
649
+ msgid "Center Left"
650
+ msgstr ""
651
+
652
+ #: src/inc/slide/metaslide.image.class.php:268
653
+ msgid "Center Center"
654
+ msgstr ""
655
+
656
+ #: src/inc/slide/metaslide.image.class.php:269
657
+ msgid "Center Right"
658
+ msgstr ""
659
+
660
+ #: src/inc/slide/metaslide.image.class.php:270
661
+ msgid "Bottom Left"
662
+ msgstr ""
663
+
664
+ #: src/inc/slide/metaslide.image.class.php:271
665
+ msgid "Bottom Center"
666
+ msgstr ""
667
+
668
+ #: src/inc/slide/metaslide.image.class.php:272
669
+ msgid "Bottom Right"
670
+ msgstr ""
671
+
672
+ #: src/inc/slide/metaslide.image.class.php:277
673
+ msgid "Crop"
674
+ msgstr ""
675
+
676
+ #: src/inc/slider/metaslider.class.php:108
677
+ msgid "Previous"
678
+ msgstr ""
679
+
680
+ #: src/ml-slider.php:865
681
+ msgid "Image"
682
+ msgstr ""
683
+
684
+ #: src/ml-slider.php:867
685
+ msgid "Add to slideshow"
686
+ msgstr ""
687
+
688
+ #: src/ml-slider.php:1255
689
+ msgid "The slide was successfully restored"
690
+ msgstr ""
691
+
692
+ #: src/ml-slider.php:1285
693
+ msgid "The attempt to restore the slide failed."
694
+ msgstr ""
695
+
696
+ #: src/ml-slider.php:1347
697
+ msgid "The slide was successfully trashed"
698
+ msgstr ""
699
+
700
+ #: src/ml-slider.php:1701, src/ml-slider.php:2365
701
+ msgid "New Slideshow"
702
+ msgstr ""
703
+
704
+ #: src/ml-slider.php:2019
705
+ msgid "Get the add-on pack today!"
706
+ msgstr ""
707
+
708
+ #: src/ml-slider.php:2325
709
+ msgid "Select Slideshow"
710
+ msgstr ""
711
+
712
+ #: src/ml-slider.php:2349
713
+ msgid "or"
714
+ msgstr ""
715
+
716
+ #: src/ml-slider.php:2351
717
+ msgid "Create a New Slideshow"
718
+ msgstr ""
719
+
720
+ #: src/ml-slider.php:2389, src/ml-slider.php:2393
721
+ msgid "Add a New Slideshow"
722
+ msgstr ""
723
+
724
+ #: src/ml-slider.php:2579
725
+ msgid "Trashed Slides"
726
+ msgstr ""
727
+
728
+ #: src/ml-slider.php:2581
729
+ msgid "<a href=\"%s\">view active</a>"
730
+ msgstr ""
731
+
732
+ #: src/ml-slider.php:2599
733
+ msgid "Add a New Slide"
734
+ msgstr ""
735
+
736
+ #: src/ml-slider.php:2603
737
+ msgid "Add Slide"
738
+ msgstr ""
739
+
740
+ #: src/ml-slider.php:2657
741
+ msgid "You are viewing slides that have been trashed, which will be automatically deleted in %s days. Click <a href=\"%s\">here</a> to view active slides."
742
+ msgstr ""
743
+
744
+ #: src/ml-slider.php:2679
745
+ msgid "Preview"
746
+ msgstr ""
747
+
748
+ #: src/ml-slider.php:2685
749
+ msgid "Save"
750
+ msgstr ""
751
+
752
+ #: src/ml-slider.php:2713
753
+ msgid "Flex Slider"
754
+ msgstr ""
755
+
756
+ #: src/ml-slider.php:2715
757
+ msgid "R. Slides"
758
+ msgstr ""
759
+
760
+ #: src/ml-slider.php:2717
761
+ msgid "Nivo Slider"
762
+ msgstr ""
763
+
764
+ #: src/ml-slider.php:2719
765
+ msgid "Coin Slider"
766
+ msgstr ""
767
+
768
+ #: src/ml-slider.php:2741, src/ml-slider.php:3257
769
+ msgid "Width"
770
+ msgstr ""
771
+
772
+ #: src/ml-slider.php:2745
773
+ msgid "Slideshow width"
774
+ msgstr ""
775
+
776
+ #: src/ml-slider.php:2747, src/ml-slider.php:2773, src/ml-slider.php:3111
777
+ msgid "px"
778
+ msgstr ""
779
+
780
+ #: src/ml-slider.php:2767, src/ml-slider.php:3283
781
+ msgid "Height"
782
+ msgstr ""
783
+
784
+ #: src/ml-slider.php:2771
785
+ msgid "Slideshow height"
786
+ msgstr ""
787
+
788
+ #: src/ml-slider.php:2785
789
+ msgid "Effect"
790
+ msgstr ""
791
+
792
+ #: src/ml-slider.php:2789
793
+ msgid "Slide transition effect"
794
+ msgstr ""
795
+
796
+ #: src/ml-slider.php:2793, src/ml-slider.php:3121
797
+ msgid "Random"
798
+ msgstr ""
799
+
800
+ #: src/ml-slider.php:2795
801
+ msgid "Swirl"
802
+ msgstr ""
803
+
804
+ #: src/ml-slider.php:2797
805
+ msgid "Rain"
806
+ msgstr ""
807
+
808
+ #: src/ml-slider.php:2799
809
+ msgid "Straight"
810
+ msgstr ""
811
+
812
+ #: src/ml-slider.php:2801
813
+ msgid "Slide Down"
814
+ msgstr ""
815
+
816
+ #: src/ml-slider.php:2803
817
+ msgid "Slice Up"
818
+ msgstr ""
819
+
820
+ #: src/ml-slider.php:2805
821
+ msgid "Slide Up Left"
822
+ msgstr ""
823
+
824
+ #: src/ml-slider.php:2807
825
+ msgid "Slice Up Down"
826
+ msgstr ""
827
+
828
+ #: src/ml-slider.php:2809
829
+ msgid "Slide Up Down Left"
830
+ msgstr ""
831
+
832
+ #: src/ml-slider.php:2811
833
+ msgid "Fold"
834
+ msgstr ""
835
+
836
+ #: src/ml-slider.php:2813
837
+ msgid "Fade"
838
+ msgstr ""
839
+
840
+ #: src/ml-slider.php:2815
841
+ msgid "Slide In Right"
842
+ msgstr ""
843
+
844
+ #: src/ml-slider.php:2817
845
+ msgid "Slide In Left"
846
+ msgstr ""
847
+
848
+ #: src/ml-slider.php:2819
849
+ msgid "Box Random"
850
+ msgstr ""
851
+
852
+ #: src/ml-slider.php:2821
853
+ msgid "Box Rain"
854
+ msgstr ""
855
+
856
+ #: src/ml-slider.php:2823
857
+ msgid "Box Rain Reverse"
858
+ msgstr ""
859
+
860
+ #: src/ml-slider.php:2825
861
+ msgid "Box Rain Grow Reverse"
862
+ msgstr ""
863
+
864
+ #: src/ml-slider.php:2827
865
+ msgid "Slide"
866
+ msgstr ""
867
+
868
+ #: src/ml-slider.php:2841
869
+ msgid "Theme"
870
+ msgstr ""
871
+
872
+ #: src/ml-slider.php:2845
873
+ msgid "Slideshow theme"
874
+ msgstr ""
875
+
876
+ #: src/ml-slider.php:2849
877
+ msgid "Default"
878
+ msgstr ""
879
+
880
+ #: src/ml-slider.php:2851
881
+ msgid "Dark (Nivo)"
882
+ msgstr ""
883
+
884
+ #: src/ml-slider.php:2853
885
+ msgid "Light (Nivo)"
886
+ msgstr ""
887
+
888
+ #: src/ml-slider.php:2855
889
+ msgid "Bar (Nivo)"
890
+ msgstr ""
891
+
892
+ #: src/ml-slider.php:2867
893
+ msgid "Arrows"
894
+ msgstr ""
895
+
896
+ #: src/ml-slider.php:2873
897
+ msgid "Show the previous/next arrows"
898
+ msgstr ""
899
+
900
+ #: src/ml-slider.php:2883
901
+ msgid "Navigation"
902
+ msgstr ""
903
+
904
+ #: src/ml-slider.php:2889
905
+ msgid "Show the slide navigation bullets"
906
+ msgstr ""
907
+
908
+ #: src/ml-slider.php:2893
909
+ msgid "Hidden"
910
+ msgstr ""
911
+
912
+ #: src/ml-slider.php:2895
913
+ msgid "Dots"
914
+ msgstr ""
915
+
916
+ #: src/ml-slider.php:2899
917
+ msgid "Thumbnail"
918
+ msgstr ""
919
+
920
+ #: src/ml-slider.php:2907
921
+ msgid "Filmstrip"
922
+ msgstr ""
923
+
924
+ #: src/ml-slider.php:2933
925
+ msgid "Title"
926
+ msgstr ""
927
+
928
+ #: src/ml-slider.php:2935
929
+ msgid "Slideshow title"
930
+ msgstr ""
931
+
932
+ #: src/ml-slider.php:2969
933
+ msgid "View trashed slides"
934
+ msgstr ""
935
+
936
+ #: src/ml-slider.php:2971
937
+ msgid "Trash"
938
+ msgstr ""
939
+
940
+ #: src/ml-slider.php:2985
941
+ msgid "Advanced Settings"
942
+ msgstr ""
943
+
944
+ #: src/ml-slider.php:3003
945
+ msgid "Stretch"
946
+ msgstr ""
947
+
948
+ #: src/ml-slider.php:3007
949
+ msgid "100% wide output"
950
+ msgstr ""
951
+
952
+ #: src/ml-slider.php:3011
953
+ msgid "Stretch the slideshow output to fill it's parent container"
954
+ msgstr ""
955
+
956
+ #: src/ml-slider.php:3021
957
+ msgid "Center align"
958
+ msgstr ""
959
+
960
+ #: src/ml-slider.php:3027
961
+ msgid "Center align the slideshow"
962
+ msgstr ""
963
+
964
+ #: src/ml-slider.php:3037
965
+ msgid "Auto play"
966
+ msgstr ""
967
+
968
+ #: src/ml-slider.php:3043
969
+ msgid "Transition between slides automatically"
970
+ msgstr ""
971
+
972
+ #: src/ml-slider.php:3053
973
+ msgid "Image Crop"
974
+ msgstr ""
975
+
976
+ #: src/ml-slider.php:3061
977
+ msgid "Smart Crop"
978
+ msgstr ""
979
+
980
+ #: src/ml-slider.php:3063
981
+ msgid "Standard"
982
+ msgstr ""
983
+
984
+ #: src/ml-slider.php:3065
985
+ msgid "Disabled"
986
+ msgstr ""
987
+
988
+ #: src/ml-slider.php:3067
989
+ msgid "Disabled (Smart Pad)"
990
+ msgstr ""
991
+
992
+ #: src/ml-slider.php:3071
993
+ msgid "Smart Crop ensures your responsive slides are cropped to a ratio that results in a consistent slideshow size"
994
+ msgstr ""
995
+
996
+ #: src/ml-slider.php:3081
997
+ msgid "Carousel mode"
998
+ msgstr ""
999
+
1000
+ #: src/ml-slider.php:3087
1001
+ msgid "Display multiple slides at once. Slideshow output will be 100% wide."
1002
+ msgstr ""
1003
+
1004
+ #: src/ml-slider.php:3103
1005
+ msgid "Carousel margin"
1006
+ msgstr ""
1007
+
1008
+ #: src/ml-slider.php:3109
1009
+ msgid "Pixel margin between slides in carousel."
1010
+ msgstr ""
1011
+
1012
+ #: src/ml-slider.php:3127
1013
+ msgid "Randomise the order of the slides"
1014
+ msgstr ""
1015
+
1016
+ #: src/ml-slider.php:3137
1017
+ msgid "Hover pause"
1018
+ msgstr ""
1019
+
1020
+ #: src/ml-slider.php:3143
1021
+ msgid "Pause the slideshow when hovering over slider, then resume when no longer hovering."
1022
+ msgstr ""
1023
+
1024
+ #: src/ml-slider.php:3153
1025
+ msgid "Reverse"
1026
+ msgstr ""
1027
+
1028
+ #: src/ml-slider.php:3159
1029
+ msgid "Reverse the animation direction"
1030
+ msgstr ""
1031
+
1032
+ #: src/ml-slider.php:3179
1033
+ msgid "Slide delay"
1034
+ msgstr ""
1035
+
1036
+ #: src/ml-slider.php:3183
1037
+ msgid "How long to display each slide, in milliseconds"
1038
+ msgstr ""
1039
+
1040
+ #: src/ml-slider.php:3185, src/ml-slider.php:3211, src/ml-slider.php:3237, src/ml-slider.php:3389, src/ml-slider.php:3441
1041
+ msgid "ms"
1042
+ msgstr ""
1043
+
1044
+ #: src/ml-slider.php:3205
1045
+ msgid "Animation speed"
1046
+ msgstr ""
1047
+
1048
+ #: src/ml-slider.php:3209
1049
+ msgid "Set the speed of animations, in milliseconds"
1050
+ msgstr ""
1051
+
1052
+ #: src/ml-slider.php:3231, src/ml-slider.php:3235
1053
+ msgid "Number of slices"
1054
+ msgstr ""
1055
+
1056
+ #: src/ml-slider.php:3257, src/ml-slider.php:3261, src/ml-slider.php:3283, src/ml-slider.php:3287
1057
+ msgid "Number of squares"
1058
+ msgstr ""
1059
+
1060
+ #: src/ml-slider.php:3299
1061
+ msgid "Slide direction"
1062
+ msgstr ""
1063
+
1064
+ #: src/ml-slider.php:3303
1065
+ msgid "Select the sliding direction"
1066
+ msgstr ""
1067
+
1068
+ #: src/ml-slider.php:3309
1069
+ msgid "Horizontal"
1070
+ msgstr ""
1071
+
1072
+ #: src/ml-slider.php:3311
1073
+ msgid "Vertical"
1074
+ msgstr ""
1075
+
1076
+ #: src/ml-slider.php:3323
1077
+ msgid "Easing"
1078
+ msgstr ""
1079
+
1080
+ #: src/ml-slider.php:3327
1081
+ msgid "Animation easing effect"
1082
+ msgstr ""
1083
+
1084
+ #: src/ml-slider.php:3341
1085
+ msgid "Previous text"
1086
+ msgstr ""
1087
+
1088
+ #: src/ml-slider.php:3345
1089
+ msgid "Set the text for the 'previous' direction item"
1090
+ msgstr ""
1091
+
1092
+ #: src/ml-slider.php:3357
1093
+ msgid "Next text"
1094
+ msgstr ""
1095
+
1096
+ #: src/ml-slider.php:3361
1097
+ msgid "Set the text for the 'next' direction item"
1098
+ msgstr ""
1099
+
1100
+ #: src/ml-slider.php:3383
1101
+ msgid "Square delay"
1102
+ msgstr ""
1103
+
1104
+ #: src/ml-slider.php:3387
1105
+ msgid "Delay between squares in ms"
1106
+ msgstr ""
1107
+
1108
+ #: src/ml-slider.php:3409
1109
+ msgid "Opacity"
1110
+ msgstr ""
1111
+
1112
+ #: src/ml-slider.php:3413
1113
+ msgid "Opacity of title and navigation"
1114
+ msgstr ""
1115
+
1116
+ #: src/ml-slider.php:3435
1117
+ msgid "Caption speed"
1118
+ msgstr ""
1119
+
1120
+ #: src/ml-slider.php:3439
1121
+ msgid "Set the fade in speed of the caption"
1122
+ msgstr ""
1123
+
1124
+ #: src/ml-slider.php:3453
1125
+ msgid "Developer options"
1126
+ msgstr ""
1127
+
1128
+ #: src/ml-slider.php:3463
1129
+ msgid "CSS classes"
1130
+ msgstr ""
1131
+
1132
+ #: src/ml-slider.php:3467
1133
+ msgid "Specify any custom CSS Classes you would like to be added to the slider wrapper"
1134
+ msgstr ""
1135
+
1136
+ #: src/ml-slider.php:3479
1137
+ msgid "Print CSS"
1138
+ msgstr ""
1139
+
1140
+ #: src/ml-slider.php:3485
1141
+ msgid "Uncheck this is you would like to include your own CSS"
1142
+ msgstr ""
1143
+
1144
+ #: src/ml-slider.php:3495
1145
+ msgid "Print JS"
1146
+ msgstr ""
1147
+
1148
+ #: src/ml-slider.php:3501
1149
+ msgid "Uncheck this is you would like to include your own Javascript"
1150
+ msgstr ""
1151
+
1152
+ #: src/ml-slider.php:3511
1153
+ msgid "No conflict mode"
1154
+ msgstr ""
1155
+
1156
+ #: src/ml-slider.php:3517
1157
+ msgid "Delay adding the flexslider class to the slideshow"
1158
+ msgstr ""
1159
+
1160
+ #: src/ml-slider.php:3547
1161
+ msgid "Delete Slideshow"
1162
+ msgstr ""
1163
+
1164
+ #: src/ml-slider.php:3601
1165
+ msgid "Select slideshow to insert into post"
1166
+ msgstr ""
1167
+
1168
+ #: src/ml-slider.php:3607
1169
+ msgid "Add slider"
1170
+ msgstr ""
1171
+
1172
+ #: src/ml-slider.php:3675
1173
+ msgid "Insert MetaSlider"
1174
+ msgstr ""
1175
+
1176
+ #: src/ml-slider.php:3679
1177
+ msgid "Choose slideshow"
1178
+ msgstr ""
1179
+
1180
+ #: src/ml-slider.php:3689
1181
+ msgid "Insert slideshow"
1182
+ msgstr ""
1183
+
1184
+ #: src/ml-slider.php:3795
1185
+ msgid "Take a tour"
1186
+ msgstr ""
1187
+
1188
+ #: src/ml-slider.php:3803
1189
+ msgid "Support"
1190
+ msgstr ""
1191
+
1192
+ #: src/ml-slider.php:3807
1193
+ msgid "Premium Support"
1194
+ msgstr ""
1195
+
1196
+ #: src/ml-slider.php:3811, src/ml-slider.php:3937
1197
+ msgid "Documentation"
1198
+ msgstr ""
1199
+
1200
+ #: src/ml-slider.php:3813
1201
+ msgid "Leave a review"
1202
+ msgstr ""
1203
+
1204
+ #: src/ml-slider.php:3881
1205
+ msgid "Upgrade Now"
1206
+ msgstr ""
1207
+
1208
+ #: src/ml-slider.php:3885
1209
+ msgid "Get The Pro Pack Today!"
1210
+ msgstr ""
1211
+
1212
+ #: src/ml-slider.php:3919
1213
+ msgid "Switch to Dropdown view"
1214
+ msgstr ""
1215
+
1216
+ #: src/ml-slider.php:3919
1217
+ msgid "Switch to Tab view"
1218
+ msgstr ""
1219
+
1220
+ #: src/ml-slider.php:3923
1221
+ msgid "Layout"
1222
+ msgstr ""
1223
+
1224
+ #: src/ml-slider.php:3937
1225
+ msgid "View The Documentation"
1226
+ msgstr ""
ml-slider.php CHANGED
@@ -1,11 +1,11 @@
1
  <?php
2
  /*
3
- * Meta Slider. Slideshow plugin for WordPress.
4
  *
5
- * Plugin Name: Meta Slider
6
  * Plugin URI: https://www.metaslider.com
7
  * Description: Easy to use slideshow plugin. Create SEO optimised responsive slideshows with Nivo Slider, Flex Slider, Coin Slider and Responsive Slides.
8
- * Version: 3.5.1
9
  * Author: Team Updraft
10
  * Author URI: https://www.metaslider.com
11
  * License: GPL-2.0+
@@ -31,8 +31,12 @@ class MetaSliderPlugin {
31
  /**
32
  * @var string
33
  */
34
- public $version = '3.5.1';
35
 
 
 
 
 
36
 
37
  /**
38
  * @var MetaSlider
@@ -54,35 +58,32 @@ class MetaSliderPlugin {
54
  * Constructor
55
  */
56
  public function __construct() {
57
-
58
  $this->define_constants();
59
  $this->includes();
60
  $this->setup_actions();
61
  $this->setup_filters();
62
  $this->setup_shortcode();
63
  $this->register_slide_types();
64
-
65
  }
66
 
67
 
68
  /**
69
- * Define Meta Slider constants
70
  */
71
  private function define_constants() {
72
-
73
- define( 'METASLIDER_VERSION', $this->version );
74
- define( 'METASLIDER_BASE_URL', trailingslashit( plugins_url( 'ml-slider' ) ) );
75
- define( 'METASLIDER_ASSETS_URL', trailingslashit( METASLIDER_BASE_URL . 'assets' ) );
76
- define( 'METASLIDER_PATH', plugin_dir_path( __FILE__ ) );
77
-
78
  }
79
 
80
-
81
  /**
82
- * All Meta Slider classes
83
  */
84
  private function plugin_classes() {
85
-
86
  return array(
87
  'metaslider' => METASLIDER_PATH . 'inc/slider/metaslider.class.php',
88
  'metacoinslider' => METASLIDER_PATH . 'inc/slider/metaslider.coin.class.php',
@@ -94,9 +95,11 @@ class MetaSliderPlugin {
94
  'metasliderimagehelper' => METASLIDER_PATH . 'inc/metaslider.imagehelper.class.php',
95
  'metaslidersystemcheck' => METASLIDER_PATH . 'inc/metaslider.systemcheck.class.php',
96
  'metaslider_widget' => METASLIDER_PATH . 'inc/metaslider.widget.class.php',
97
- 'simple_html_dom' => METASLIDER_PATH . 'inc/simple_html_dom.php'
 
 
 
98
  );
99
-
100
  }
101
 
102
 
@@ -104,7 +107,7 @@ class MetaSliderPlugin {
104
  * Load required classes
105
  */
106
  private function includes() {
107
-
108
  $autoload_is_disabled = defined( 'METASLIDER_AUTOLOAD_CLASSES' ) && METASLIDER_AUTOLOAD_CLASSES === false;
109
 
110
  if ( function_exists( "spl_autoload_register" ) && ! ( $autoload_is_disabled ) ) {
@@ -131,7 +134,7 @@ class MetaSliderPlugin {
131
 
132
 
133
  /**
134
- * Autoload Meta Slider classes to reduce memory consumption
135
  */
136
  public function autoload( $class ) {
137
 
@@ -158,62 +161,58 @@ class MetaSliderPlugin {
158
 
159
 
160
  /**
161
- * Hook Meta Slider into WordPress
162
  */
163
  private function setup_actions() {
164
-
165
- add_action( 'admin_menu', array( $this, 'register_admin_menu' ), 9553 );
166
- add_action( 'init', array( $this, 'register_post_types' ) );
167
- add_action( 'init', array( $this, 'register_taxonomy' ) );
168
- add_action( 'init', array( $this, 'load_plugin_textdomain' ) );
169
- add_action( 'admin_footer', array( $this, 'admin_footer' ), 11 );
170
- add_action( 'widgets_init', array( $this, 'register_metaslider_widget' ) );
171
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_global_styles'), 11 );
172
-
173
-
174
- add_action( 'admin_post_metaslider_preview', array( $this, 'do_preview' ) );
175
- add_action( 'admin_post_metaslider_hide_go_pro_page', array( $this, 'hide_go_pro_page' ) );
176
- add_action( 'admin_post_metaslider_switch_view', array( $this, 'switch_view' ) );
177
- add_action( 'admin_post_metaslider_delete_slide', array( $this, 'delete_slide' ) );
178
- add_action( 'admin_post_metaslider_delete_slider', array( $this, 'delete_slider' ) );
179
- add_action( 'admin_post_metaslider_create_slider', array( $this, 'create_slider' ) );
180
- add_action( 'admin_post_metaslider_update_slider', array( $this, 'update_slider' ) );
181
-
182
- add_action( 'media_upload_vimeo', array( $this, 'upgrade_to_pro_tab' ) );
183
- add_action( 'media_upload_youtube', array( $this, 'upgrade_to_pro_tab' ) );
184
- add_action( 'media_upload_post_feed', array( $this, 'upgrade_to_pro_tab' ) );
185
- add_action( 'media_upload_layer', array( $this, 'upgrade_to_pro_tab' ) );
186
-
 
 
187
  }
188
 
189
 
190
  /**
191
- * Hook Meta Slider into WordPress
192
  */
193
  private function setup_filters() {
194
-
195
- add_filter( 'media_upload_tabs', array( $this, 'custom_media_upload_tab_name' ), 998 );
196
- add_filter( 'media_view_strings', array( $this, 'custom_media_uploader_tabs' ), 5 );
197
- add_filter( 'media_buttons_context', array( $this, 'insert_metaslider_button' ) );
198
-
199
- // add 'go pro' link to plugin options
200
- $plugin = plugin_basename( __FILE__ );
201
-
202
- add_filter( "plugin_action_links_{$plugin}", array( $this, 'upgrade_to_pro_link' ) );
203
 
204
  // html5 compatibility for stylesheets enqueued within <body>
205
- add_filter( 'style_loader_tag', array( $this, 'add_property_attribute_to_stylesheet_links' ), 11, 2 );
206
-
207
  }
208
 
209
 
210
  /**
211
- * Register Meta Slider widget
212
  */
213
  public function register_metaslider_widget() {
214
-
215
- register_widget( 'MetaSlider_Widget' );
216
-
217
  }
218
 
219
 
@@ -239,7 +238,7 @@ class MetaSliderPlugin {
239
  'show_in_nav_menus' => false,
240
  'show_ui' => $show_ui,
241
  'labels' => array(
242
- 'name' => 'Meta Slider'
243
  )
244
  )
245
  );
@@ -297,111 +296,21 @@ class MetaSliderPlugin {
297
 
298
  }
299
 
300
-
301
  /**
302
- * Add the menu page
303
- */
304
- public function register_admin_menu() {
305
- global $user_ID;
306
-
307
- $title = apply_filters( 'metaslider_menu_title', 'Meta Slider' );
308
-
309
- $capability = apply_filters( 'metaslider_capability', 'edit_others_posts' );
310
-
311
- $page = add_menu_page( $title, $title, $capability, 'metaslider', array(
312
- $this, 'render_admin_page'
313
- ), "", 9501 );
314
-
315
- // ensure our JavaScript is only loaded on the Meta Slider admin page
316
- add_action( 'admin_print_scripts-' . $page, array( $this, 'register_admin_scripts' ) );
317
- add_action( 'admin_print_styles-' . $page, array( $this, 'register_admin_styles' ) );
318
- add_action( 'load-' . $page, array( $this, 'help_tab' ) );
319
-
320
- if ( ! is_plugin_active( 'ml-slider-pro/ml-slider-pro.php' ) && get_user_meta( $user_ID, "metaslider_hide_go_pro", true ) !== 'true' ) {
321
-
322
- $page = add_submenu_page(
323
- 'metaslider',
324
- __( 'Go Pro!', 'ml-slider' ),
325
- __( 'Go Pro!', 'ml-slider' ),
326
- $capability,
327
- 'metaslider-go-pro',
328
- array( $this, 'go_pro_page' )
329
- );
330
-
331
- add_action( 'admin_print_styles-' . $page, array( $this, 'register_admin_styles' ) );
332
-
333
- }
334
-
335
- }
336
-
337
- /**
338
- * Enqueue CSS for admin menu item font icon
339
- *
340
- * @since 3.4
341
- */
342
- public function admin_enqueue_global_styles() {
343
- wp_enqueue_style( 'metaslider-global', METASLIDER_ASSETS_URL . 'metaslider/global.css', array(), METASLIDER_VERSION );
344
- }
345
-
346
-
347
- /**
348
- * Go Pro page content
349
- */
350
- public function go_pro_page() {
351
-
352
- $upgrade_link = esc_url( add_query_arg(
353
- array(
354
- 'utm_source' => 'lite',
355
- 'utm_medium' => 'nag',
356
- 'utm_campaign' => 'pro'
357
- ), 'https://www.metaslider.com/upgrade/' ) );
358
-
359
- $link = apply_filters( 'metaslider_hoplink', $upgrade_link );
360
-
361
- $hide_link = '<a href="' . admin_url( "admin-post.php?action=metaslider_hide_go_pro_page" ) . '">Hide this page</a>';
362
- $gopro_link = "<a class='button button-primary' href='{$link}' target='_blank'>Find out more</a>";
363
- $support_link = '<a href="https://wordpress.org/support/plugin/ml-slider">Support</a>';
364
- $documentation_link = '<a href="https://www.metaslider.com/documentation/">Documentation</a>';
365
-
366
- ?>
367
- <h2>Supercharge Your Sliders with Meta Slider Pro!</h2>
368
-
369
- <ul class='metaslider_gopro'>
370
- <li>Create <b>animated HTML slides</b> using the drag &amp; drop layer editor (WYSIWYG)</li>
371
- <li>Insert <b>YouTube</b> and <b>Vimeo</b> videos into your slideshows</li>
372
- <li>Automatically populate your slideshows with your <b>latest blog posts</b> or custom post types</li>
373
- <li>Customize the look of your slideshows with the <b>Theme Editor</b> (25+ settings including custom arrow images, dot colors and caption styling)</li>
374
- <li>Give your slideshows a gallery feel with <b>thumbnail navigation</b></li>
375
- <li>Feature <b>WooCommerce</b> products in your slideshows</li>
376
- <li>Show your latest events from <b>The Events Calendar</b> plugin</li>
377
- <li><b>Easy to install</B> - Meta Slider Pro installs as a seperate plugin alongside Meta Slider and seamlessly adds in the new functionality</li>
378
- <li><b>Easy to update</b> - new updates will be displayed on your plugins page (just like your other plugins!)</li>
379
- <li>Upgrade with confidence with our <b>30 day no questions money back guarantee</b></li>
380
- <li>Meta Slider Pro users receive <b>priority support</b> from our dedicated team, we’re on hand to help you get the most of Meta Slider</li>
381
- </ul>
382
-
383
- <p><?php echo $gopro_link; ?></p>
384
- <p><?php echo $support_link; ?> <?php echo $documentation_link; ?></p>
385
- <p><em>Don't want to see this? <?php echo $hide_link; ?></em></p>
386
- <?php
387
-
388
- }
389
-
390
- /**
391
- * Store the users preference to hide the go pro page.
392
- */
393
- public function hide_go_pro_page() {
394
- global $user_ID;
395
-
396
- if ( ! get_user_meta( $user_ID, "metaslider_hide_go_pro" ) ) {
397
- add_user_meta( $user_ID, "metaslider_hide_go_pro", "true" );
398
  }
399
 
400
- wp_redirect( admin_url( "admin.php?page=metaslider" ) );
401
-
 
402
  }
403
 
404
-
405
  /**
406
  * Shortcode used to display slideshow
407
  *
@@ -433,7 +342,7 @@ class MetaSliderPlugin {
433
 
434
  // check the slider is published and the ID is correct
435
  if ( ! $slider || $slider->post_status != 'publish' || $slider->post_type != 'ml-slider' ) {
436
- return "<!-- meta slider {$atts['id']} not found -->";
437
  }
438
 
439
  // lets go
@@ -444,93 +353,23 @@ class MetaSliderPlugin {
444
 
445
  }
446
 
447
-
448
- /**
449
- * Initialise translations
450
- */
451
- public function load_plugin_textdomain() {
452
-
453
- load_plugin_textdomain( 'ml-slider', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
454
-
455
- }
456
-
457
-
458
- /**
459
- * Add the help tab to the screen.
460
- */
461
- public function help_tab() {
462
-
463
- $screen = get_current_screen();
464
-
465
- // documentation tab
466
- $screen->add_help_tab( array(
467
- 'id' => 'documentation',
468
- 'title' => __( 'Documentation', 'ml-slider' ),
469
- 'content' => "<p><a href='https://www.metaslider.com/documentation/' target='blank'>Meta Slider Documentation</a></p>",
470
- )
471
- );
472
-
473
- }
474
-
475
-
476
  /**
477
- * Rehister admin styles
478
  */
479
- public function register_admin_styles() {
480
-
481
- wp_enqueue_style( 'metaslider-admin-styles', METASLIDER_ASSETS_URL . 'metaslider/admin.css', false, METASLIDER_VERSION );
482
- wp_enqueue_style( 'metaslider-colorbox-styles', METASLIDER_ASSETS_URL . 'colorbox/colorbox.css', false, METASLIDER_VERSION );
483
- wp_enqueue_style( 'metaslider-tipsy-styles', METASLIDER_ASSETS_URL . 'tipsy/tipsy.css', false, METASLIDER_VERSION );
484
-
485
- do_action( 'metaslider_register_admin_styles' );
486
 
 
 
 
 
487
  }
488
 
489
-
490
  /**
491
- * Register admin JavaScript
492
  */
493
- public function register_admin_scripts() {
494
-
495
- // media library dependencies
496
- wp_enqueue_media();
497
-
498
- // plugin dependencies
499
- wp_enqueue_script( 'jquery-ui-core' );
500
- wp_enqueue_script( 'jquery-ui-sortable' );
501
- wp_enqueue_script( 'metaslider-admin-script', METASLIDER_ASSETS_URL . 'metaslider/admin.js', array( 'jquery' ), METASLIDER_VERSION, true );
502
- wp_enqueue_script( 'metaslider-colorbox', METASLIDER_ASSETS_URL . 'colorbox/jquery.colorbox-min.js', array( 'jquery' ), METASLIDER_VERSION, true );
503
- wp_enqueue_script( 'metaslider-tipsy', METASLIDER_ASSETS_URL . 'tipsy/jquery.tipsy.js', array( 'jquery' ), METASLIDER_VERSION, true );
504
-
505
- wp_dequeue_script( 'link' ); // WP Posts Filter Fix (Advanced Settings not toggling)
506
- wp_dequeue_script( 'ai1ec_requirejs' ); // All In One Events Calendar Fix (Advanced Settings not toggling)
507
-
508
- $this->localize_admin_scripts();
509
-
510
- do_action( 'metaslider_register_admin_scripts' );
511
-
512
- }
513
-
514
 
515
- /**
516
- * Localise admin script
517
- */
518
- public function localize_admin_scripts() {
519
-
520
- wp_localize_script( 'metaslider-admin-script', 'metaslider', array(
521
- 'url' => __( "URL", "ml-slider" ),
522
- 'caption' => __( "Caption", "ml-slider" ),
523
- 'new_window' => __( "New Window", "ml-slider" ),
524
- 'confirm' => __( "Are you sure?", "ml-slider" ),
525
- 'ajaxurl' => admin_url( 'admin-ajax.php' ),
526
- 'change_image' => __( "Select replacement image", "ml-slider"),
527
- 'resize_nonce' => wp_create_nonce( 'metaslider_resize' ),
528
- 'addslide_nonce' => wp_create_nonce( 'metaslider_addslide' ),
529
- 'changeslide_nonce' => wp_create_nonce( 'metaslider_changeslide' ),
530
- 'iframeurl' => admin_url( 'admin-post.php?action=metaslider_preview' ),
531
- 'useWithCaution' => __( "Caution: This setting is for advanced developers only. If you're unsure, leave it checked.", "ml-slider" )
532
- )
533
- );
534
 
535
  }
536
 
@@ -574,7 +413,7 @@ class MetaSliderPlugin {
574
 
575
 
576
  /**
577
- * Check our WordPress installation is compatible with Meta Slider
578
  */
579
  public function do_system_check() {
580
 
@@ -592,7 +431,7 @@ class MetaSliderPlugin {
592
  //update strings
593
  if ( ( isset( $_GET['page'] ) && $_GET['page'] == 'metaslider' ) ) {
594
  $strings['insertMediaTitle'] = __( "Image", "ml-slider" );
595
- $strings['insertIntoPost'] = __( "Add to slider", "ml-slider" );
596
  // remove options
597
 
598
  $strings_to_remove = array(
@@ -623,7 +462,7 @@ class MetaSliderPlugin {
623
 
624
  $metaslider_tabs = array( 'post_feed', 'layer', 'youtube', 'vimeo' );
625
 
626
- // restrict our tab changes to the meta slider plugin page
627
  if ( ( isset( $_GET['page'] ) && $_GET['page'] == 'metaslider' ) || ( isset( $_GET['tab'] ) && in_array( $_GET['tab'], $metaslider_tabs ) ) ) {
628
  $newtabs = array();
629
 
@@ -766,50 +605,118 @@ class MetaSliderPlugin {
766
 
767
  }
768
 
769
-
770
  /**
771
- * Delete a slide. This doesn't actually remove the slide from WordPress, simply untags
772
- * it from the slide taxonomy.
773
  */
774
- public function delete_slide() {
775
-
776
- // check nonce
777
- check_admin_referer( "metaslider_delete_slide" );
778
-
779
- $capability = apply_filters( 'metaslider_capability', 'edit_others_posts' );
780
-
781
- if ( ! current_user_can( $capability ) ) {
782
- return;
783
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
784
 
785
- $slide_id = absint( $_GET['slide_id'] );
786
- $slider_id = absint( $_GET['slider_id'] );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
787
 
788
- // Get the existing terms and only keep the ones we don't want removed
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
789
  $new_terms = array();
790
- $current_terms = wp_get_object_terms( $slide_id, 'ml-slider', array( 'fields' => 'ids' ) );
791
- $term = get_term_by( 'name', $slider_id, 'ml-slider' );
792
-
793
- foreach ( $current_terms as $current_term ) {
794
- if ( $current_term != $term->term_id ) {
795
- $new_terms[] = absint( $current_term );
796
  }
797
  }
798
 
799
- // untag slide from slider
800
- wp_set_object_terms( $slide_id, $new_terms, 'ml-slider' );
801
-
802
- // For new format slides - also trash the slide
803
- if ( get_post_type( $slide_id ) === 'ml-slide' ) {
804
- $id = wp_update_post( array(
805
- 'ID' => $slide_id,
806
- 'post_status' => 'trash'
807
- )
808
- );
809
- }
810
-
811
- wp_redirect( admin_url( "admin.php?page=metaslider&id={$slider_id}" ) );
812
-
813
  }
814
 
815
 
@@ -941,7 +848,7 @@ class MetaSliderPlugin {
941
 
942
  // insert the post
943
  $id = wp_insert_post( array(
944
- 'post_title' => __( "New Slider", "ml-slider" ),
945
  'post_status' => 'publish',
946
  'post_type' => 'ml-slider'
947
  )
@@ -1084,8 +991,9 @@ class MetaSliderPlugin {
1084
  // navigation row
1085
  if ( $row['type'] == 'navigation' ) {
1086
  $navigation_row = "<tr class='{$row['type']}'><td class='tipsy-tooltip' title=\"{$row['helptext']}\">{$row['label']}</td><td><ul>";
1087
-
1088
  foreach ( $row['options'] as $k => $v ) {
 
1089
 
1090
  if ( $row['value'] === true && $k === 'true' ) {
1091
  $checked = checked( true, true, false );
@@ -1096,7 +1004,13 @@ class MetaSliderPlugin {
1096
  }
1097
 
1098
  $disabled = $k == 'thumbnails' ? 'disabled' : '';
1099
- $navigation_row .= "<li><label><input type='radio' name='settings[{$id}]' value='{$k}' {$checked} {$disabled}/>{$v['label']}</label></li>";
 
 
 
 
 
 
1100
  }
1101
 
1102
  $navigation_row .= "</ul></td></tr>";
@@ -1131,7 +1045,7 @@ class MetaSliderPlugin {
1131
  foreach ( $row['options'] as $k => $v ) {
1132
  $checked = checked( $k, $row['value'], false );
1133
  $return .= "<input class='select-slider' id='{$k}' rel='{$k}' type='radio' name='settings[type]' value='{$k}' {$checked} />
1134
- <label for='{$k}'>{$v['label']}</label>";
1135
  }
1136
 
1137
  $return .= "</td></tr>";
@@ -1225,71 +1139,63 @@ class MetaSliderPlugin {
1225
  public function print_slideshow_selector() {
1226
  global $user_ID;
1227
 
1228
- $add_url = wp_nonce_url( admin_url( "admin-post.php?action=metaslider_create_slider" ), "metaslider_create_slider" );
 
1229
 
1230
- if ( $tabs = $this->all_meta_sliders() ) {
 
1231
 
1232
- if ( $this->get_view() == 'tabs' ) {
1233
-
1234
- echo "<div style='display: none;' id='screen-options-switch-view-wrap'>
1235
- <a class='switchview dashicons-before dashicons-randomize tipsy-tooltip' title='" . __("Switch to Dropdown view", "ml-slider") . "' href='" . admin_url( "admin-post.php?action=metaslider_switch_view&view=dropdown") . "'>" . __("Dropdown", "ml-slider") . "</a></div>";
1236
-
1237
- echo "<h3 class='nav-tab-wrapper'>";
1238
-
1239
- foreach ( $tabs as $tab ) {
1240
-
1241
- if ( $tab['active'] ) {
1242
- echo "<div class='nav-tab nav-tab-active'><input type='text' name='title' value='" . esc_attr( $tab['title'] ) . "' onfocus='this.style.width = ((this.value.length + 1) * 9) + \"px\"' /></div>";
1243
- } else {
1244
- echo "<a href='?page=metaslider&amp;id={$tab['id']}' class='nav-tab'>" . esc_html( $tab['title'] ) . "</a>";
1245
  }
 
 
1246
 
1247
- }
1248
-
1249
- echo "<a href='{$add_url}' id='create_new_tab' class='nav-tab'>+</a>";
1250
- echo "</h3>";
1251
-
1252
  } else {
 
 
1253
 
1254
- if ( isset( $_GET['add'] ) && $_GET['add'] == 'true' ) {
1255
-
1256
- echo "<div id='message' class='updated'><p>" . __( "New slideshow created. Click 'Add Slide' to get started!", "ml-slider" ) . "</p></div>";
1257
-
1258
- }
1259
-
1260
- echo "<div style='display: none;' id='screen-options-switch-view-wrap'><a class='switchview dashicons-before dashicons-randomize tipsy-tooltip' title='" . __("Switch to Tab view", "ml-slider") . "' href='" . admin_url( "admin-post.php?action=metaslider_switch_view&view=tabs") . "'>" . __("Tabs", "ml-slider") . "</a></div>";
1261
-
1262
- echo "<div class='dropdown_container'><label for='select-slider'>" . __("Select Slider", "ml-slider") . ": </label>";
1263
- echo "<select name='select-slider' onchange='if (this.value) window.location.href=this.value'>";
1264
-
1265
- $tabs = $this->all_meta_sliders( 'title' );
1266
-
1267
- foreach ( $tabs as $tab ) {
1268
-
1269
  $selected = $tab['active'] ? " selected" : "";
1270
-
1271
- if ( $tab['active'] ) {
1272
-
1273
  $title = $tab['title'];
1274
-
1275
  }
1276
-
1277
  echo "<option value='?page=metaslider&amp;id={$tab['id']}'{$selected}>{$tab['title']}</option>";
1278
-
1279
  }
1280
-
1281
- echo "</select> " . __( 'or', "ml-slider" ) . " ";
1282
- echo "<a href='{$add_url}'>" . __( 'Add New Slideshow', "ml-slider" ) . "</a></div>";
1283
-
1284
  }
 
 
1285
  } else {
1286
- echo "<h3 class='nav-tab-wrapper'>";
1287
- echo "<a href='{$add_url}' id='create_new_tab' class='nav-tab'>+</a>";
1288
- echo "<div class='bubble'>" . __( "Create your first slideshow", "ml-slider" ) . "</div>";
1289
- echo "</h3>";
1290
  }
1291
  }
1292
 
 
 
 
 
 
 
 
 
 
 
1293
 
1294
  /**
1295
  * Return the users saved view preference.
@@ -1310,25 +1216,32 @@ class MetaSliderPlugin {
1310
  */
1311
  public function render_admin_page() {
1312
 
1313
- // default to the latest slider
1314
- $slider_id = $this->find_slider( 'modified', 'DESC' );
1315
-
1316
- // load a slider by ID
1317
- if ( isset( $_REQUEST['id'] ) ) {
1318
- $temp_id = absint( $_REQUEST['id'] );
1319
 
1320
- // check valid post ID
1321
- if ( get_post( $temp_id ) ) {
1322
- $slider_id = $temp_id;
 
1323
  }
1324
  }
1325
 
1326
- // finally, set the slider
1327
- if ( $slider_id > 0 ) {
1328
- $this->set_slider( $slider_id );
 
 
1329
  }
1330
 
1331
- $this->upgrade_to_pro_cta();
 
 
 
 
 
 
 
 
1332
  $this->do_system_check();
1333
 
1334
  $slider_id = $this->slider ? $this->slider->id : 0;
@@ -1339,7 +1252,17 @@ class MetaSliderPlugin {
1339
  var metaslider_slider_id = <?php echo $slider_id; ?>;
1340
  </script>
1341
 
1342
- <div class="wrap metaslider">
 
 
 
 
 
 
 
 
 
 
1343
  <form accept-charset="UTF-8" action="<?php echo admin_url( 'admin-post.php'); ?>" method="post">
1344
  <input type="hidden" name="action" value="metaslider_update_slider">
1345
  <input type="hidden" name="slider_id" value="<?php echo $slider_id; ?>">
@@ -1349,7 +1272,7 @@ class MetaSliderPlugin {
1349
 
1350
  <?php if ( ! $this->slider ) return; ?>
1351
 
1352
- <div id='poststuff'>
1353
  <div id='post-body' class='metabox-holder columns-2'>
1354
 
1355
  <div id='post-body-content'>
@@ -1357,19 +1280,31 @@ class MetaSliderPlugin {
1357
 
1358
  <?php do_action( "metaslider_admin_table_before", $this->slider->id ); ?>
1359
 
1360
- <table class="widefat sortable">
1361
  <thead>
1362
  <tr>
1363
- <th style="width: 100px;">
1364
- <h3><?php _e( "Slides", "ml-slider" ) ?></h3>
1365
- <?php do_action( "metaslider_admin_table_header_left", $this->slider->id ); ?>
1366
- </th>
1367
- <th>
1368
- <a href='#' class='button alignright add-slide' data-editor='content' title='<?php _e( "Add Slide", "ml-slider" ) ?>'>
1369
- <span class='wp-media-buttons-icon'></span> <?php _e( "Add Slide", "ml-slider" ) ?>
1370
- </a>
1371
- <?php do_action( "metaslider_admin_table_header_right", $this->slider->id ); ?>
1372
- </th>
 
 
 
 
 
 
 
 
 
 
 
 
1373
  </tr>
1374
  </thead>
1375
 
@@ -1385,15 +1320,31 @@ class MetaSliderPlugin {
1385
  </div>
1386
  </div>
1387
 
1388
- <div id="postbox-container-1" class="postbox-container">
1389
  <div class='right'>
 
 
 
 
 
 
 
 
 
 
 
1390
  <div class="ms-postbox" id="metaslider_configuration">
1391
- <div class='configuration'>
1392
- <input class='alignright button button-primary' type='submit' name='save' id='ms-save' value='<?php _e( "Save", "ml-slider" ) ?>' />
1393
- <input class='alignright button button-primary' type='submit' name='preview' id='ms-preview' value='<?php _e( "Save & Preview", "ml-slider" ) ?>' data-slider_id='<?php echo $this->slider->id ?>' data-slider_width='<?php echo $this->slider->get_setting( 'width' ) ?>' data-slider_height='<?php echo $this->slider->get_setting( 'height' ) ?>' />
 
 
 
 
 
1394
  <span class="spinner"></span>
1395
  </div>
1396
- <div class="inside">
1397
  <table class="settings">
1398
  <tbody>
1399
  <?php
@@ -1488,17 +1439,25 @@ class MetaSliderPlugin {
1488
  'navigation' => array(
1489
  'priority' => 60,
1490
  'type' => 'navigation',
1491
- 'label' => __( "Navigation", "ml-slider" ),
1492
  'class' => 'option coin flex nivo responsive',
1493
- 'value' => $this->slider->get_setting( 'navigation' ),
1494
- 'helptext' => __( "Show the slide navigation bullets", "ml-slider" ),
1495
  'options' => array(
1496
- 'false' => array( 'label' => __( "Hidden", "ml-slider" ) ),
1497
- 'true' => array( 'label' => __( "Dots", "ml-slider" ) ),
 
 
 
 
 
 
 
 
1498
  )
1499
  ),
1500
  );
1501
-
1502
  if ( $this->get_view() == 'dropdown' ) {
1503
  $aFields['title'] = array(
1504
  'type' => 'title',
@@ -1516,6 +1475,17 @@ class MetaSliderPlugin {
1516
  ?>
1517
  </tbody>
1518
  </table>
 
 
 
 
 
 
 
 
 
 
 
1519
  </div>
1520
  </div>
1521
 
@@ -1799,56 +1769,11 @@ class MetaSliderPlugin {
1799
  </div>
1800
  </div>
1801
 
1802
- <div class="ms-postbox shortcode ms-toggle" id="metaslider_usage">
1803
- <div class="handlediv" title="Click to toggle"><br></div><h3 class="hndle"><span><?php _e( "Usage", "ml-slider" ) ?></span></h3>
1804
- <div class="inside">
1805
- <ul class='tabs'>
1806
- <li rel='tab-1' class='selected'><?php _e( "Shortcode", "ml-slider" ) ?></li>
1807
- <li rel='tab-2'><?php _e( "Template Include", "ml-slider" ) ?></li>
1808
- </ul>
1809
- <div class='tabs-content'>
1810
- <div class='tab tab-1'>
1811
- <p><?php _e( "Copy & paste the shortcode directly into any WordPress post or page.", "ml-slider" ); ?></p>
1812
- <input readonly='readonly' type='text' value='[metaslider id=<?php echo $this->slider->id ?>]' /></div>
1813
- <div class='tab tab-2' style='display: none'>
1814
- <p><?php _e( "Copy & paste this code into a template file to include the slideshow within your theme.", "ml-slider" ); ?></p>
1815
- <textarea readonly='readonly'>&lt;?php &#13;&#10; echo do_shortcode("[metaslider id=<?php echo $this->slider->id ?>]"); &#13;&#10;?></textarea></div>
1816
- </div>
1817
- </div>
1818
- </div>
1819
-
1820
- <?php if ( ! is_plugin_active('ml-slider-pro/ml-slider-pro.php') ) : ?>
1821
-
1822
- <div class="ms-postbox social" id="metaslider_social">
1823
- <div class="inside">
1824
- <ul class='info'>
1825
- <li style='width: 33%;'>
1826
- <a href="https://twitter.com/share" class="twitter-share-button" data-url="https://www.metaslider.com" data-text="Check out Meta Slider, an easy to use slideshow plugin for WordPress" data-hashtags="metaslider, wordpress, slideshow">Tweet</a>
1827
- <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
1828
- </li>
1829
- <li style='width: 34%;'>
1830
- <div class="g-plusone" data-size="medium" data-href="https://www.metaslider.com"></div>
1831
- <script type="text/javascript">
1832
- (function() {
1833
- var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
1834
- po.src = 'https://apis.google.com/js/plusone.js';
1835
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
1836
- })();
1837
- </script>
1838
- </li>
1839
- <li style='width: 33%;'>
1840
- <iframe style='border:none; overflow:hidden; width:80px; height:21px;' src="//www.facebook.com/plugins/like.php?href=https%3A%2F%2Fwww.facebook.com%2Fwpmetaslider&amp;width=120&amp;layout=button_count&amp;action=like&amp;show_faces=true&amp;share=false&amp;height=21&amp;appId=156668027835524" scrolling="no" frameborder="0" allowTransparency="true"></iframe>
1841
- </li>
1842
- </ul>
1843
- </div>
1844
- </div>
1845
-
1846
- <?php endif; ?>
1847
-
1848
- <?php $url = wp_nonce_url( admin_url( "admin-post.php?action=metaslider_delete_slider&amp;slider_id={$this->slider->id}" ), "metaslider_delete_slider" ); ?>
1849
 
1850
- <a class='delete-slider alignright button-secondary' href='<?php echo $url ?>'><?php _e( "Delete Slider", "ml-slider" ) ?></a>
1851
  </div>
 
1852
  </div>
1853
  </div>
1854
  </div>
@@ -1885,7 +1810,7 @@ class MetaSliderPlugin {
1885
 
1886
 
1887
  /**
1888
- * Append the 'Choose Meta Slider' thickbox content to the bottom of selected admin pages
1889
  */
1890
  public function admin_footer() {
1891
 
@@ -1910,7 +1835,7 @@ class MetaSliderPlugin {
1910
  <div class="wrap">
1911
  <?php
1912
  if ( count( $sliders ) ) {
1913
- echo "<h3 style='margin-bottom: 20px;'>" . __( "Insert Meta Slider", "ml-slider" ) . "</h3>";
1914
  echo "<select id='metaslider-select'>";
1915
  echo "<option disabled=disabled>" . __( "Choose slideshow", "ml-slider" ) . "</option>";
1916
  foreach ( $sliders as $slider ) {
@@ -1931,7 +1856,7 @@ class MetaSliderPlugin {
1931
 
1932
 
1933
  /**
1934
- * Return the meta slider pro upgrade iFrame
1935
  */
1936
  public function upgrade_to_pro_tab() {
1937
 
@@ -1947,7 +1872,7 @@ class MetaSliderPlugin {
1947
  */
1948
  public function upgrade_to_pro_iframe() {
1949
 
1950
- wp_enqueue_style( 'metaslider-admin-styles', METASLIDER_ASSETS_URL . 'metaslider/admin.css', false, METASLIDER_VERSION );
1951
  wp_enqueue_script( 'google-font-api', 'http://fonts.googleapis.com/css?family=PT+Sans:400,700' );
1952
 
1953
  $link = apply_filters( 'metaslider_hoplink', 'https://www.metaslider.com/upgrade/' );
@@ -1964,46 +1889,88 @@ class MetaSliderPlugin {
1964
  }
1965
 
1966
  /**
1967
- * Add settings link on plugin page
1968
  */
1969
- public function upgrade_to_pro_link( $links ) {
1970
-
1971
- if ( function_exists( 'is_plugin_active' ) && ! is_plugin_active( 'ml-slider-pro/ml-slider-pro.php' ) ) {
1972
- $links[] = '<a href="https://www.metaslider.com/upgrade/" target="_blank">' . __( "Go Pro", "ml-slider" ) . '</a>';
 
 
 
 
 
 
 
 
 
 
1973
  }
 
 
1974
 
1975
- return $links;
1976
-
 
 
 
 
 
 
 
 
 
 
1977
  }
1978
 
 
 
 
 
 
 
 
 
 
 
1979
 
1980
  /**
1981
- * Upgrade CTA.
1982
  */
1983
- public function upgrade_to_pro_cta() {
1984
-
1985
- if ( function_exists( 'is_plugin_active' ) && ! is_plugin_active( 'ml-slider-pro/ml-slider-pro.php' ) ) {
1986
-
1987
- $upgrade_link = esc_url( add_query_arg(
1988
- array(
1989
- 'utm_source' => 'lite',
1990
- 'utm_medium' => 'nag',
1991
- 'utm_campaign' => 'pro'
1992
- ), 'https://www.metaslider.com/upgrade/' ) );
1993
-
1994
- $link = apply_filters( 'metaslider_hoplink', $upgrade_link );
1995
-
1996
- $text = "Meta Slider v" . METASLIDER_VERSION . " - " . __( 'Upgrade to Pro $39', "ml-slider" );
1997
-
1998
- echo "<div style='display: none;' id='screen-options-link-wrap'><a target='_blank' class='show-settings dashicons-before dashicons-performance' href='{$link}'>{$text}</a></div>";
1999
-
2000
  }
2001
 
 
 
 
 
 
2002
  }
2003
 
 
 
 
 
 
 
2004
 
2005
  /**
2006
- * Add a 'property=stylesheet' attribute to the Meta Slider CSS links for HTML5 validation
2007
  *
2008
  * @since 3.3.4
2009
  * @param string $tag
1
  <?php
2
  /*
3
+ * MetaSlider. Slideshow plugin for WordPress.
4
  *
5
+ * Plugin Name: MetaSlider
6
  * Plugin URI: https://www.metaslider.com
7
  * Description: Easy to use slideshow plugin. Create SEO optimised responsive slideshows with Nivo Slider, Flex Slider, Coin Slider and Responsive Slides.
8
+ * Version: 3.6.0
9
  * Author: Team Updraft
10
  * Author URI: https://www.metaslider.com
11
  * License: GPL-2.0+
31
  /**
32
  * @var string
33
  */
34
+ public $version = '3.6.0';
35
 
36
+ /**
37
+ * @var string The lowest tier price for upgrades
38
+ */
39
+ public $pro_price = '39';
40
 
41
  /**
42
  * @var MetaSlider
58
  * Constructor
59
  */
60
  public function __construct() {
 
61
  $this->define_constants();
62
  $this->includes();
63
  $this->setup_actions();
64
  $this->setup_filters();
65
  $this->setup_shortcode();
66
  $this->register_slide_types();
67
+ $this->admin = new MetaSlider_Admin_Pages($this);
68
  }
69
 
70
 
71
  /**
72
+ * Define MetaSlider constants
73
  */
74
  private function define_constants() {
75
+ define('METASLIDER_VERSION', $this->version);
76
+ define('METASLIDER_BASE_URL', trailingslashit(plugins_url('ml-slider')));
77
+ define('METASLIDER_ASSETS_URL', trailingslashit(METASLIDER_BASE_URL . 'assets'));
78
+ define('METASLIDER_ADMIN_URL', trailingslashit(METASLIDER_BASE_URL . 'admin'));
79
+ define('METASLIDER_PATH', plugin_dir_path(__FILE__));
80
+ define('METASLIDER_PRO_PRICE', $this->pro_price);
81
  }
82
 
 
83
  /**
84
+ * All MetaSlider classes
85
  */
86
  private function plugin_classes() {
 
87
  return array(
88
  'metaslider' => METASLIDER_PATH . 'inc/slider/metaslider.class.php',
89
  'metacoinslider' => METASLIDER_PATH . 'inc/slider/metaslider.coin.class.php',
95
  'metasliderimagehelper' => METASLIDER_PATH . 'inc/metaslider.imagehelper.class.php',
96
  'metaslidersystemcheck' => METASLIDER_PATH . 'inc/metaslider.systemcheck.class.php',
97
  'metaslider_widget' => METASLIDER_PATH . 'inc/metaslider.widget.class.php',
98
+ 'simple_html_dom' => METASLIDER_PATH . 'inc/simple_html_dom.php',
99
+ 'metaslider_notices' => METASLIDER_PATH . 'admin/Notices.php',
100
+ 'metaslider_admin_pages' => METASLIDER_PATH . 'admin/Pages.php',
101
+ 'metaslider_tour' => METASLIDER_PATH . 'admin/Tour.php'
102
  );
 
103
  }
104
 
105
 
107
  * Load required classes
108
  */
109
  private function includes() {
110
+ require_once(METASLIDER_PATH . 'admin/lib/helpers.php');
111
  $autoload_is_disabled = defined( 'METASLIDER_AUTOLOAD_CLASSES' ) && METASLIDER_AUTOLOAD_CLASSES === false;
112
 
113
  if ( function_exists( "spl_autoload_register" ) && ! ( $autoload_is_disabled ) ) {
134
 
135
 
136
  /**
137
+ * Autoload MetaSlider classes to reduce memory consumption
138
  */
139
  public function autoload( $class ) {
140
 
161
 
162
 
163
  /**
164
+ * Hook MetaSlider into WordPress
165
  */
166
  private function setup_actions() {
167
+ add_action('admin_menu', array($this, 'register_admin_pages'), 9553);
168
+ add_action('init', array($this, 'register_post_types'));
169
+ add_action('init', array($this, 'register_taxonomy'));
170
+ add_action('init', array($this, 'load_plugin_textdomain'));
171
+ add_action('admin_footer', array($this, 'admin_footer'), 11);
172
+ add_action('widgets_init', array($this, 'register_metaslider_widget'));
173
+
174
+ add_action('admin_post_metaslider_preview', array($this, 'do_preview'));
175
+ add_action('admin_post_metaslider_switch_view', array($this, 'switch_view'));
176
+ add_action('admin_post_metaslider_delete_slide', array($this, 'delete_slide'));
177
+ add_action('admin_post_metaslider_delete_slider', array($this, 'delete_slider'));
178
+ add_action('admin_post_metaslider_create_slider', array($this, 'create_slider'));
179
+ add_action('admin_post_metaslider_update_slider', array($this, 'update_slider'));
180
+
181
+ add_action('media_upload_vimeo', array($this, 'upgrade_to_pro_tab'));
182
+ add_action('media_upload_youtube', array($this, 'upgrade_to_pro_tab'));
183
+ add_action('media_upload_post_feed', array($this, 'upgrade_to_pro_tab'));
184
+ add_action('media_upload_layer', array($this, 'upgrade_to_pro_tab'));
185
+
186
+ // TODO: Refactor to Slide class object
187
+ add_action('wp_ajax_delete_slide', array($this, 'ajax_delete_slide'));
188
+ add_action('wp_ajax_undelete_slide', array($this, 'ajax_undelete_slide'));
189
+
190
+ // TODO: Make this work
191
+ // register_activation_hook(plugin_basename(__FILE__), array($this, 'after_activation'));
192
  }
193
 
194
 
195
  /**
196
+ * Hook MetaSlider into WordPress
197
  */
198
  private function setup_filters() {
199
+ add_filter('media_upload_tabs', array($this, 'custom_media_upload_tab_name'), 998);
200
+ add_filter('media_view_strings', array($this, 'custom_media_uploader_tabs'), 5);
201
+ add_filter('media_buttons_context', array($this, 'insert_metaslider_button'));
202
+ add_filter("plugin_row_meta", array($this, 'get_extra_meta_links'), 10, 4);
203
+ add_action('admin_head', array($this, 'add_star_styles'));
204
+ add_action('admin_head', array($this, 'add_tour_nonce_to_activation_page'));
 
 
 
205
 
206
  // html5 compatibility for stylesheets enqueued within <body>
207
+ add_filter('style_loader_tag', array($this, 'add_property_attribute_to_stylesheet_links'), 11, 2);
 
208
  }
209
 
210
 
211
  /**
212
+ * Register MetaSlider widget
213
  */
214
  public function register_metaslider_widget() {
215
+ register_widget('MetaSlider_Widget');
 
 
216
  }
217
 
218
 
238
  'show_in_nav_menus' => false,
239
  'show_ui' => $show_ui,
240
  'labels' => array(
241
+ 'name' => 'MetaSlider'
242
  )
243
  )
244
  );
296
 
297
  }
298
 
 
299
  /**
300
+ * Add the menu pages
301
+ */
302
+ public function register_admin_pages() {
303
+ if (metaslider_is_pro_active()) {
304
+ $this->admin->add_page('MetaSlider Pro', 'metaslider');
305
+ } else {
306
+ $this->admin->add_page('MetaSlider');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
307
  }
308
 
309
+ if (metaslider_sees_upgrade_page()) {
310
+ $this->admin->add_page(__('Add-ons', 'ml-slider'), 'upgrade', 'metaslider');
311
+ }
312
  }
313
 
 
314
  /**
315
  * Shortcode used to display slideshow
316
  *
342
 
343
  // check the slider is published and the ID is correct
344
  if ( ! $slider || $slider->post_status != 'publish' || $slider->post_type != 'ml-slider' ) {
345
+ return "<!-- MetaSlider {$atts['id']} not found -->";
346
  }
347
 
348
  // lets go
353
 
354
  }
355
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
356
  /**
357
+ * Set first activation option to database
358
  */
359
+ public function after_activation() {
 
 
 
 
 
 
360
 
361
+ // Set date showing the first activation and redirect
362
+ if (!get_option('ms_was_installed_on')) {
363
+ update_option('ms_was_installed_on', time());
364
+ }
365
  }
366
 
 
367
  /**
368
+ * Initialise translations
369
  */
370
+ public function load_plugin_textdomain() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
371
 
372
+ load_plugin_textdomain( 'ml-slider', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
373
 
374
  }
375
 
413
 
414
 
415
  /**
416
+ * Check our WordPress installation is compatible with MetaSlider
417
  */
418
  public function do_system_check() {
419
 
431
  //update strings
432
  if ( ( isset( $_GET['page'] ) && $_GET['page'] == 'metaslider' ) ) {
433
  $strings['insertMediaTitle'] = __( "Image", "ml-slider" );
434
+ $strings['insertIntoPost'] = __( "Add to slideshow", "ml-slider" );
435
  // remove options
436
 
437
  $strings_to_remove = array(
462
 
463
  $metaslider_tabs = array( 'post_feed', 'layer', 'youtube', 'vimeo' );
464
 
465
+ // restrict our tab changes to the MetaSlider plugin page
466
  if ( ( isset( $_GET['page'] ) && $_GET['page'] == 'metaslider' ) || ( isset( $_GET['tab'] ) && in_array( $_GET['tab'], $metaslider_tabs ) ) ) {
467
  $newtabs = array();
468
 
605
 
606
  }
607
 
 
608
  /**
609
+ * Delete a slide via ajax.
610
+ * @return string Returns the status of the request
611
  */
612
+ public function ajax_undelete_slide() {
613
+ if (!wp_verify_nonce($_REQUEST['_wpnonce'], 'metaslider_undelete_slide')) {
614
+ return wp_send_json_error(array(
615
+ 'message' => __('The security check failed. Please refresh the page and try again.', 'ml-slider')
616
+ ), 401);
 
 
 
 
617
  }
618
+
619
+ $result = $this->undelete_slide(absint($_POST['slide_id']), absint($_POST['slider_id']));
620
+
621
+ if (is_wp_error($result)) {
622
+ return wp_send_json_error(array(
623
+ 'message' => $result->get_error_message()
624
+ ), 409);
625
+ }
626
+
627
+ return wp_send_json_success(array(
628
+ 'message' => __('The slide was successfully restored', 'ml-slider'),
629
+ ), 200);
630
+ }
631
 
632
+ /**
633
+ * Undeletes a slide.
634
+ * @param int $slide_id The ID of the slide
635
+ * @param int $slider_id The ID of the slider (for legacy purposes)
636
+ * @return mixed
637
+ */
638
+ public function undelete_slide($slide_id, $slider_id) {
639
+ if ('ml-slide' === get_post_type($slide_id)) {
640
+ return wp_update_post(array(
641
+ 'ID' => $slide_id,
642
+ 'post_status' => 'publish'
643
+ ), new WP_Error('update_failed', __('The attempt to restore the slide failed.', 'ml-slider'), array('status' => 409)));
644
+ }
645
+
646
+ // Legacy: This removes the relationship between the slider and slide
647
+ // This restores the relationship between a slide and slider.
648
+ // If using a newer version, this relationship is never lost on delete.
649
+
650
+ // Get the slider's term and apply it to the slide.
651
+ $term = get_term_by('name', $slider_id, 'ml-slider');
652
+ return wp_set_object_terms($slide_id, $term->term_id, 'ml-slider');
653
+ }
654
+
655
+ /**
656
+ * Delete a slide via ajax.
657
+ */
658
+ public function ajax_delete_slide() {
659
+ if (!wp_verify_nonce($_REQUEST['_wpnonce'], 'metaslider_delete_slide')) {
660
+ return wp_send_json_error(array(
661
+ 'message' => __('The security check failed. Please refresh the page and try again.', 'ml-slider')
662
+ ), 401);
663
+ }
664
+
665
+ $result = $this->delete_slide(absint($_POST['slide_id']), absint($_POST['slider_id']));
666
+
667
+ if (is_wp_error($result)) {
668
+ return wp_send_json_error(array(
669
+ 'message' => $result->get_error_message()
670
+ ), 409);
671
+ }
672
+
673
+ return wp_send_json_success(array(
674
+ 'message' => __('The slide was successfully trashed', 'ml-slider'),
675
+ ), 200);
676
+ }
677
 
678
+ /**
679
+ * Delete a slide by either trashing it or for
680
+ * legacy reasons removing the taxonomy relationship.
681
+ * @param int $slide_id
682
+ * @param int $slider_id
683
+ * @return mixed Will return the terms or WP_Error
684
+ */
685
+ public function delete_slide($slide_id, $slider_id) {
686
+ if ('ml-slide' === get_post_type($slide_id)) {
687
+ return wp_update_post(array(
688
+ 'ID' => $slide_id,
689
+ 'post_status' => 'trash'
690
+ ), new WP_Error('update_failed', 'The attempt to delete the slide failed.', array('status' => 409)));
691
+ }
692
+
693
+ // Legacy: This removes the relationship between the slider and slide
694
+ /* A slider with ID 216 might have a term_id of 7
695
+ * A slide with ID 217 could have a term_taxonomy_id of 7
696
+ * Multiple slides would have this term_taxonomy_id of 7 */
697
+
698
+ // This returns the term_taxonomy_id (7 from example)
699
+ $current_terms = wp_get_object_terms($slide_id, 'ml-slider', array('fields' => 'ids'));
700
+
701
+ // This returns the term object, named after the slider ID
702
+ // The $term->term_id would be 7 in the example above
703
+ // It also includes the count of slides attached to the slider
704
+ $term = get_term_by('name', $slider_id, 'ml-slider');
705
+
706
+ // I'm not sure why this is here. It seems this is only useful if
707
+ // a slide was attached to multiple sliders. A slide should only
708
+ // have one $current_terms (7 above)
709
  $new_terms = array();
710
+ foreach ($current_terms as $current_term) {
711
+ if ($current_term != $term->term_id) {
712
+ $new_terms[] = absint($current_term);
 
 
 
713
  }
714
  }
715
 
716
+ // This only works becasue $new_terms is an empty array,
717
+ // which deletes the relationship. I'm leaving the loop above
718
+ // in case it's here for some legacy reason I'm unaware of.
719
+ return wp_set_object_terms($slide_id, $new_terms, 'ml-slider');
 
 
 
 
 
 
 
 
 
 
720
  }
721
 
722
 
848
 
849
  // insert the post
850
  $id = wp_insert_post( array(
851
+ 'post_title' => __("New Slideshow", "ml-slider"),
852
  'post_status' => 'publish',
853
  'post_type' => 'ml-slider'
854
  )
991
  // navigation row
992
  if ( $row['type'] == 'navigation' ) {
993
  $navigation_row = "<tr class='{$row['type']}'><td class='tipsy-tooltip' title=\"{$row['helptext']}\">{$row['label']}</td><td><ul>";
994
+
995
  foreach ( $row['options'] as $k => $v ) {
996
+ $tease = isset($v['addon_required']) ? 'disabled' : '';
997
 
998
  if ( $row['value'] === true && $k === 'true' ) {
999
  $checked = checked( true, true, false );
1004
  }
1005
 
1006
  $disabled = $k == 'thumbnails' ? 'disabled' : '';
1007
+ $navigation_row .= "<li><label class='{$tease}'><input {$tease} type='radio' name='settings[{$id}]' value='{$k}' {$checked} {$disabled}/>{$v['label']}</label>";
1008
+
1009
+ if (isset($v['addon_required']) && $v['addon_required']) {
1010
+ $navigation_row .= sprintf(" <a target='_blank' class='get-addon' href='%s' title='%s'>%s</a>", metaslider_get_upgrade_link(), __('Get the add-on pack today!', 'ml-slider'), __('Learn More', 'ml-slider'));
1011
+ }
1012
+
1013
+ $navigation_row .= "</li>";
1014
  }
1015
 
1016
  $navigation_row .= "</ul></td></tr>";
1045
  foreach ( $row['options'] as $k => $v ) {
1046
  $checked = checked( $k, $row['value'], false );
1047
  $return .= "<input class='select-slider' id='{$k}' rel='{$k}' type='radio' name='settings[type]' value='{$k}' {$checked} />
1048
+ <label tabindex='0' for='{$k}'>{$v['label']}</label>";
1049
  }
1050
 
1051
  $return .= "</td></tr>";
1139
  public function print_slideshow_selector() {
1140
  global $user_ID;
1141
 
1142
+ // First check if we have any slideshows yet
1143
+ if ($tabs = $this->all_meta_sliders()) {
1144
 
1145
+ // Next check if they have the tabs view selected
1146
+ if ('tabs' == $this->get_view()) {
1147
 
1148
+ // Render the tabs
1149
+ echo "<div class='nav-tab-wrapper'>";
1150
+ foreach ($tabs as $tab) {
1151
+ if ( $tab['active'] ) {
1152
+ echo "<div class='nav-tab nav-tab-active'><input class='no_last_pass' type='text' name='title' value='" . esc_attr($tab['title']) . "'></div>";
1153
+ } else {
1154
+ echo "<a href='?page=metaslider&amp;id={$tab['id']}' title= '" . esc_attr($tab['title']) . "' class='nav-tab'>" . esc_html( $tab['title'] ) . "</a>";
1155
+ }
 
 
 
 
 
1156
  }
1157
+ echo $this->get_add_slideshow_button("New", 'nav-tab');
1158
+ echo "</div>";
1159
 
1160
+ // This will render the select dropdown view
1161
+ // TODO make this resemble the WP Nav menu UI perhaps
 
 
 
1162
  } else {
1163
+ echo "<div class='manage-menus'><label for='select-slideshow' class='selected-menu'>" . __("Select Slideshow", "ml-slider") . ": </label>";
1164
+ echo "<select name='select-slideshow' onchange='if (this.value) window.location.href=this.value'>";
1165
 
1166
+ $tabs = $this->all_meta_sliders('title');
1167
+ foreach ($tabs as $tab) {
 
 
 
 
 
 
 
 
 
 
 
 
 
1168
  $selected = $tab['active'] ? " selected" : "";
1169
+ if ($tab['active']) {
 
 
1170
  $title = $tab['title'];
 
1171
  }
 
1172
  echo "<option value='?page=metaslider&amp;id={$tab['id']}'{$selected}>{$tab['title']}</option>";
 
1173
  }
1174
+ echo "</select>";
1175
+ echo "<span class='add-new-menu-action'> " . __( 'or', "ml-slider" ) . " ";
1176
+ echo "<a href='". wp_nonce_url(admin_url("admin-post.php?action=metaslider_create_slider"), "metaslider_create_slider") ."' id='create_new_tab' class='' title='" . __('Create a New Slideshow', 'ml-slider') . "'>create a new slideshow</a>";
1177
+ echo "</span></div>";
1178
  }
1179
+
1180
+ // This section is shown when there are no slideshows
1181
  } else {
1182
+ echo "<div class='nav-tab-wrapper'>";
1183
+ echo "<div class='fake-tabs nav-tab nav-tab-active'><span class='blurred-out'>" . __('New Slideshow', 'ml-slider') ."</span></div>";
1184
+ echo $this->get_add_slideshow_button("New", 'nav-tab');
1185
+ echo "</div>";
1186
  }
1187
  }
1188
 
1189
+ /**
1190
+ * Return a button to sadd a new slideshow.
1191
+ */
1192
+ protected function get_add_slideshow_button($text = '', $classes = '') {
1193
+ $add_url = wp_nonce_url(admin_url("admin-post.php?action=metaslider_create_slider"), "metaslider_create_slider");
1194
+ if ('' == $text) {
1195
+ $text = __('Add a New Slideshow', 'ml-slider');
1196
+ }
1197
+ return "<a href='{$add_url}' id='create_new_tab' class='ml-add-new {$classes}' title='" . __('Add a New Slideshow', 'ml-slider') . "'><i><svg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-plus-circle'><circle cx='12' cy='12' r='10'/><line x1='12' y1='8' x2='12' y2='16'/><line x1='8' y1='12' x2='16' y2='12'/></svg></i> {$text}</a>";
1198
+ }
1199
 
1200
  /**
1201
  * Return the users saved view preference.
1216
  */
1217
  public function render_admin_page() {
1218
 
1219
+ // Default to the most recently modified slider
1220
+ $slider_id = $this->find_slider('modified', 'DESC');
 
 
 
 
1221
 
1222
+ // If the id parameter exists, verify and use that.
1223
+ if (isset($_REQUEST['id']) && $id = $_REQUEST['id']) {
1224
+ if (in_array(get_post_status(absint($id)), array('publish', 'inherit'))) {
1225
+ $slider_id = $id;
1226
  }
1227
  }
1228
 
1229
+ // "Set the slider"
1230
+ // TODO figure out what this does and if it can be better stated
1231
+ // Perhaps maybe "apply_settings()" or something.
1232
+ if ($slider_id) {
1233
+ $this->set_slider($slider_id);
1234
  }
1235
 
1236
+ echo "<div class='wrap metaslider-ui-top' style='margin-top:0;'>";
1237
+ echo $this->documentation_button();
1238
+ echo $this->toggle_layout_button();
1239
+
1240
+ if (metaslider_sees_call_to_action()) {
1241
+ echo $this->upgrade_to_pro_top_button();
1242
+ }
1243
+ echo "</div>";
1244
+
1245
  $this->do_system_check();
1246
 
1247
  $slider_id = $this->slider ? $this->slider->id : 0;
1252
  var metaslider_slider_id = <?php echo $slider_id; ?>;
1253
  </script>
1254
 
1255
+ <div class="wrap metaslider metaslider-ui">
1256
+ <h1 class="wp-heading-inline metaslider-title">
1257
+ <img width=50 height=50 src="<?php echo METASLIDER_ADMIN_URL ?>images/metaslider_logo_large.png" alt="MetaSlider">
1258
+ MetaSlider
1259
+ <?php if (metaslider_is_pro_active()) {
1260
+ echo ' Pro';
1261
+ } ?>
1262
+ </h1>
1263
+ <?php if (metaslider_sees_notices($this)) {
1264
+ echo $this->notices->do_notice(false, 'header', true);
1265
+ } ?>
1266
  <form accept-charset="UTF-8" action="<?php echo admin_url( 'admin-post.php'); ?>" method="post">
1267
  <input type="hidden" name="action" value="metaslider_update_slider">
1268
  <input type="hidden" name="slider_id" value="<?php echo $slider_id; ?>">
1272
 
1273
  <?php if ( ! $this->slider ) return; ?>
1274
 
1275
+ <div id='poststuff' class="metaslider-inner wp-clearfix">
1276
  <div id='post-body' class='metabox-holder columns-2'>
1277
 
1278
  <div id='post-body-content'>
1280
 
1281
  <?php do_action( "metaslider_admin_table_before", $this->slider->id ); ?>
1282
 
1283
+ <table class="widefat sortable metaslider-slides-container">
1284
  <thead>
1285
  <tr>
1286
+ <?php if (metaslider_viewing_trashed_slides($this->slider->id)) {
1287
+
1288
+ // If they are on the trash page, show them?>
1289
+ <th class="trashed-header">
1290
+ <h3><i><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-trash-2"><polyline points="3 6 5 6 21 6"/><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/><line x1="10" y1="11" x2="10" y2="17"/><line x1="14" y1="11" x2="14" y2="17"/></svg></i> <?php _e('Trashed Slides', 'ml-slider'); ?></h3>
1291
+ <small> <?php printf(__('<a href="%s">view active</a>', 'ml-slider'), admin_url("?page=metaslider&id={$this->slider->id}")); ?></small>
1292
+ </th>
1293
+ <?php } else { ?>
1294
+ <th class="slider-title" colspan="2">
1295
+ <h3 class="alignleft"><?php echo get_the_title($this->slider->id) ?></h3>
1296
+ <input class="metaslider-shortcode" readonly='readonly' onclick="this.select()" type='text' value='[metaslider id=<?php echo $this->slider->id ?>]'>
1297
+ <?php if (!metaslider_viewing_trashed_slides($this->slider->id)) {
1298
+
1299
+ // Remove the actions on trashed view?>
1300
+ <button class='ml-button ml-has-icon ml-skinless-button alignright add-slide' data-editor='content' title='<?php _e( "Add a New Slide", "ml-slider" ) ?>'>
1301
+ <i style="top:0;"><svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-plus-circle"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="16"/><line x1="8" y1="12" x2="16" y2="12"/></svg></i>
1302
+ <span><?php _e("Add Slide", "ml-slider") ?></span>
1303
+ </button>
1304
+ <?php } ?>
1305
+ <?php do_action( "metaslider_admin_table_header_right", $this->slider->id ); ?>
1306
+ </th>
1307
+ <?php } ?>
1308
  </tr>
1309
  </thead>
1310
 
1320
  </div>
1321
  </div>
1322
 
1323
+ <div id="postbox-container-1" class="postbox-container ml-sidebar metaslider-settings-area">
1324
  <div class='right'>
1325
+ <?php if (metaslider_viewing_trashed_slides($this->slider->id)) {
1326
+
1327
+ // Show a notice explaining the trash?>
1328
+ <div class="ms-postbox trashed-notice">
1329
+ <div class="notice-info"><?php printf(__('You are viewing slides that have been trashed, which will be automatically deleted in %s days. Click <a href="%s">here</a> to view active slides.', 'ml-slider'), EMPTY_TRASH_DAYS, admin_url("?page=metaslider&id={$this->slider->id}")); ?></div>
1330
+
1331
+ <?php // TODO this is a temp fix to avoid a compatability check in pro
1332
+ echo "<input type='checkbox' style='display:none;' checked class='select-slider' rel='flex'></inpu>";
1333
+ ?>
1334
+ </div>
1335
+ <?php } else {?>
1336
  <div class="ms-postbox" id="metaslider_configuration">
1337
+ <div class='configuration metaslider-actions'>
1338
+ <button class='metaslider-preview ml-button ml-has-icon ml-skinless-button' type='submit' id='ms-preview' title='<?php _e("Preview Slideshow", "ml-slider") ?>' data-slider_id='<?php echo $this->slider->id ?>' data-slider_width='<?php echo $this->slider->get_setting("width"); ?>' data-slider_height='<?php echo $this->slider->get_setting("height") ?>'>
1339
+ <i><svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-eye"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></svg></i>
1340
+ <span><?php _e("Preview", "ml-slider") ?></span>
1341
+ </button>
1342
+ <button class='alignright button button-primary' type='submit' name='save' id='ms-save'>
1343
+ <?php _e("Save", "ml-slider"); ?>
1344
+ </button>
1345
  <span class="spinner"></span>
1346
  </div>
1347
+ <div class="inside wp-clearfix">
1348
  <table class="settings">
1349
  <tbody>
1350
  <?php
1439
  'navigation' => array(
1440
  'priority' => 60,
1441
  'type' => 'navigation',
1442
+ 'label' => __("Navigation", "ml-slider"),
1443
  'class' => 'option coin flex nivo responsive',
1444
+ 'value' => $this->slider->get_setting('navigation'),
1445
+ 'helptext' => __("Show the slide navigation bullets", "ml-slider"),
1446
  'options' => array(
1447
+ 'false' => array('label' => __("Hidden", "ml-slider")),
1448
+ 'true' => array('label' => __("Dots", "ml-slider")),
1449
+ 'thumbs' => array(
1450
+ 'label' => __("Thumbnail", "ml-slider"),
1451
+ 'addon_required' => true
1452
+ ),
1453
+ 'filmstrip' => array(
1454
+ 'label' => __("Filmstrip", "ml-slider"),
1455
+ 'addon_required' => true
1456
+ ),
1457
  )
1458
  ),
1459
  );
1460
+
1461
  if ( $this->get_view() == 'dropdown' ) {
1462
  $aFields['title'] = array(
1463
  'type' => 'title',
1475
  ?>
1476
  </tbody>
1477
  </table>
1478
+
1479
+
1480
+ <?php // Show the restore button if there are trashed posts
1481
+ // Also, render but hide the link in case we want to show
1482
+ // it when the user deletes their first slide
1483
+ $count = count(metaslider_has_trashed_slides($this->slider->id));
1484
+ if (!metaslider_viewing_trashed_slides($this->slider->id)) { ?>
1485
+ <a <?php echo $count ? '' : "style='display:none;'" ?> class="restore-slide-link" title="<?php _e('View trashed slides', 'ml-slider'); ?>" href="<?php echo admin_url("?page=metaslider&id={$this->slider->id}&show_trashed=true"); ?>">
1486
+ <i><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-trash-2"><polyline points="3 6 5 6 21 6"/><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/><line x1="10" y1="11" x2="10" y2="17"/><line x1="14" y1="11" x2="14" y2="17"/></svg></i><?php echo __('Trash', 'ml-slider'); if ($count) echo " <span>({$count})</span>";?>
1487
+ </a>
1488
+ <?php } ?>
1489
  </div>
1490
  </div>
1491
 
1769
  </div>
1770
  </div>
1771
 
1772
+ <?php $url = wp_nonce_url(admin_url("admin-post.php?action=metaslider_delete_slider&amp;slider_id={$this->slider->id}"), "metaslider_delete_slider"); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1773
 
1774
+ <a class='delete-slider alignright ml-has-icon ml-button ml-delete-button' href='<?php echo $url ?>'><i><svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-x"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg></i><span><?php _e( "Delete Slideshow", "ml-slider" ) ?></span></a>
1775
  </div>
1776
+ <?php } ?>
1777
  </div>
1778
  </div>
1779
  </div>
1810
 
1811
 
1812
  /**
1813
+ * Append the 'Choose MetaSlider' thickbox content to the bottom of selected admin pages
1814
  */
1815
  public function admin_footer() {
1816
 
1835
  <div class="wrap">
1836
  <?php
1837
  if ( count( $sliders ) ) {
1838
+ echo "<h3 style='margin-bottom: 20px;'>" . __( "Insert MetaSlider", "ml-slider" ) . "</h3>";
1839
  echo "<select id='metaslider-select'>";
1840
  echo "<option disabled=disabled>" . __( "Choose slideshow", "ml-slider" ) . "</option>";
1841
  foreach ( $sliders as $slider ) {
1856
 
1857
 
1858
  /**
1859
+ * Return the MetaSlider pro upgrade iFrame
1860
  */
1861
  public function upgrade_to_pro_tab() {
1862
 
1872
  */
1873
  public function upgrade_to_pro_iframe() {
1874
 
1875
+ wp_enqueue_style( 'metaslider-admin-styles', METASLIDER_ADMIN_URL . 'assets/css/admin.css', false, METASLIDER_VERSION );
1876
  wp_enqueue_script( 'google-font-api', 'http://fonts.googleapis.com/css?family=PT+Sans:400,700' );
1877
 
1878
  $link = apply_filters( 'metaslider_hoplink', 'https://www.metaslider.com/upgrade/' );
1889
  }
1890
 
1891
  /**
1892
+ * Adds extra links to the plugin activation page
1893
  */
1894
+ public function get_extra_meta_links($meta, $file, $data, $status) {
1895
+
1896
+ if (plugin_basename(__FILE__) == $file) {
1897
+ $plugin_page = admin_url('admin.php?page=metaslider');
1898
+ $meta[] = "<a href='{$plugin_page}' onclick=\"event.preventDefault();var link = jQuery(this);jQuery.post(ajaxurl, {action: 'reset_tour_status', _wpnonce: metaslider_tour_nonce }, function(data) {window.location = link.attr('href');});\">" . __('Take a tour', 'ml-slider') . "</a>";
1899
+ if (metaslider_is_pro_installed()) {
1900
+ $upgrade_link = apply_filters('metaslider_hoplink', 'https://www.metaslider.com/upgrade/');
1901
+ $meta[] = "<a href='{$upgrade_link}' target='_blank'>" . __('Add-ons', 'ml-slider') . "</a>";
1902
+ $meta[] = "<a href='https://wordpress.org/support/plugin/ml-slider/' target='_blank'>" . __('Support', 'ml-slider') . "</a>";
1903
+ } else {
1904
+ $meta[] = "<a href='https://www.metaslider.com/support/' target='_blank'>" . __('Premium Support', 'ml-slider') . "</a>";
1905
+ }
1906
+ $meta[] = "<a href='https://www.metaslider.com/documentation/' target='_blank'>" . __('Documentation', 'ml-slider') . "</a>";
1907
+ $meta[] = "<a href='https://wordpress.org/support/plugin/ml-slider/reviews#new-post' target='_blank' title='" . __('Leave a review', 'ml-slider') . "'><i class='ml-stars'><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg></i></a>";
1908
  }
1909
+ return $meta;
1910
+ }
1911
 
1912
+ /**
1913
+ * Adds styles to admin head to allow for stars animation and coloring
1914
+ */
1915
+ public function add_star_styles() {
1916
+ if (metaslider_is_on_admin_page('plugins.php')) {?>
1917
+ <style>
1918
+ .ml-stars{display:inline-block;color:#ffb900;position:relative;top:3px}
1919
+ .ml-stars svg{fill:#ffb900}
1920
+ .ml-stars svg:hover{fill:#ffb900}
1921
+ .ml-stars svg:hover ~ svg{fill:none}
1922
+ </style>
1923
+ <?php }
1924
  }
1925
 
1926
+ /**
1927
+ * Add nonce to activation page
1928
+ */
1929
+ public function add_tour_nonce_to_activation_page() {
1930
+ if (metaslider_is_on_admin_page('plugins.php')) {?>
1931
+ <script>
1932
+ var metaslider_tour_nonce = "<?php echo wp_create_nonce('metaslider_tour_nonce'); ?>";
1933
+ </script>
1934
+ <?php }
1935
+ }
1936
 
1937
  /**
1938
+ * Upgrade To Pro Button.
1939
  */
1940
+ public function upgrade_to_pro_top_button() {
1941
+ $text = __('Upgrade Now', "ml-slider");
1942
+ $link = metaslider_get_upgrade_link();
1943
+ $upgrade_text = __("Get The Pro Pack Today!", "ml-slider");
1944
+ return "<a target='_blank' title='{$upgrade_text}' class='ml-has-icon ml-hanging-button' href='{$link}'><i class='brand-color'><svg xmlns='http://www.w3.org/2000/svg' width='17' height='17' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg></i><span>{$text}</span></a>";
1945
+ }
1946
+
1947
+ /**
1948
+ * Toggle Layout Buttons.
1949
+ * TODO: Re work this to allow for a third view style
1950
+ */
1951
+ public function toggle_layout_button() {
1952
+
1953
+ // Don't show this if there are no slideshows
1954
+ if (!count($this->all_meta_sliders())) {
1955
+ return '';
 
1956
  }
1957
 
1958
+ $view = ('tabs' == $this->get_view()) ? 'tabs' : 'dropdown';
1959
+ $view_opposite = ('dropdown' == $this->get_view()) ? 'tabs' : 'dropdown';
1960
+ $view_text = ($this->get_view() == 'tabs') ? __("Switch to Dropdown view", "ml-slider") : __("Switch to Tab view", "ml-slider");
1961
+ return "<a class='ml-has-icon ml-hanging-button' title='" . $view_text . "'
1962
+ href='" . admin_url( "admin-post.php?action=metaslider_switch_view&view=".$view_opposite) . "'><i><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-shuffle\"><polyline points=\"16 3 21 3 21 8\"/><line x1=\"4\" y1=\"20\" x2=\"21\" y2=\"3\"/><polyline points=\"21 16 21 21 16 21\"/><line x1=\"15\" y1=\"15\" x2=\"21\" y2=\"21\"/><line x1=\"4\" y1=\"4\" x2=\"9\" y2=\"9\"/></svg></i><span>" . __("Layout", "ml-slider") . "</span></a>";
1963
  }
1964
 
1965
+ /**
1966
+ * Support and Docs Button
1967
+ */
1968
+ public function documentation_button() {
1969
+ return "<a class='ml-has-icon ml-hanging-button' target='_blank' title='" . __('View The Documentation', 'ml-slider') . "' href='https://www.metaslider.com/documentation/'><i><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-book\"><path d=\"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\"/><path d=\"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z\"/></svg></i><span>" . __("Documentation", "ml-slider") . "</span></a>";
1970
+ }
1971
 
1972
  /**
1973
+ * Add a 'property=stylesheet' attribute to the MetaSlider CSS links for HTML5 validation
1974
  *
1975
  * @since 3.3.4
1976
  * @param string $tag
readme.txt CHANGED
@@ -1,18 +1,18 @@
1
  === MetaSlider ===
2
- Contributors: matchalabs, DavidAnderson, dnutbourne
3
  Tags: wordpress slideshow,seo,slideshow,slider,widget,wordpress slider,image slider,flexslider,flex slider,nivoslider,nivo slider,responsive,responsive slides,coinslider,coin slider,slideshow,carousel,responsive slider,vertical slides
4
  Donate link: https://david.dw-perspective.org.uk/donate
5
  Requires at least: 3.5
 
6
  Tested up to: 4.9
7
- Stable tag: 3.5.1
8
  License: GPLv2 or later
9
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
10
 
11
- Easy to use WordPress slider plugin. Create SEO optimised responsive slideshows with Nivo Slider, Flex Slider, Coin Slider and Responsive Slides.
12
 
13
  == Description ==
14
 
15
- With Metaslider, you can create your own unique, SEO-optimized slideshow in a matter of seconds!
16
 
17
  With WordPress’ most popular slider plugin, enhancing your blog or website couldn’t be easier: simply select images from your WordPress Media Library, drag and drop them into place, and then set the slide captions, links and SEO fields all from one page.
18
 
@@ -28,7 +28,7 @@ Choose one of 4 different slideshow types, and use our provided short-code or te
28
  **Features**
29
 
30
  * Simple, easy to use interface - perfect for individual users, developers & clients!
31
- * Create Responsive, SEO optimised slideshows in seconds
32
  * Unrestricted support for Image slides (supports caption, link, title text, alt text)
33
  * Full width slideshow support
34
  * Drag and drop slide reordering
@@ -37,13 +37,13 @@ Choose one of 4 different slideshow types, and use our provided short-code or te
37
  * Set image crop position
38
  * Built in Widget and Shortcode
39
  * Loads of slideshow configuration options - transition effect, speed etc (per slideshow)
40
- * Fully localised
41
  * WordPress Multi Site compatible
42
  * Compatible with translation plugins (WPML, PolyLang & qTranslate)
43
  * Extensive Developer API (hooks & filters)
44
  * Fast - only the minimum JavaScript/CSS is included on your page
45
  * Free basic support (covering installation issues and theme/plugin conflicts)
46
- * Lightbox support with the [Meta Slider Lightbox](https://wordpress.org/plugins/ml-slider-lightbox/) addon
47
 
48
  **General:**
49
  * Simple and intuitive interface – perfect for individual users, developers & clients!
@@ -58,7 +58,7 @@ Choose one of 4 different slideshow types, and use our provided short-code or te
58
 
59
  **Other:**
60
  * Includes Admin preview, plus built-in Widget and Short-code
61
- * Fully localised
62
  * WordPress Multi-site compatible, and
63
  * compatible with translation plugins (WPML, PolyLang & qTranslate)
64
  * Developer Friendly, with extensive hooks & filters
@@ -66,7 +66,7 @@ Choose one of 4 different slideshow types, and use our provided short-code or te
66
  **Support:**
67
  * Includes free basic support (covering installation issues and theme/plugin conflicts).
68
 
69
- The <a href="https://www.metaslider.com/upgrade">Meta Slider Pro</a> includes added support for:
70
 
71
  * YouTube & Vimeo slides
72
  * HTML slides
@@ -92,14 +92,14 @@ Follow us on Twitter: [@wpmetaslider](https://twitter.com/wpmetaslider)
92
  The easy way:
93
 
94
  1. Go to the Plugins Menu in WordPress
95
- 1. Search for "Meta Slider"
96
  1. Click "Install"
97
 
98
  The not so easy way:
99
 
100
  1. Upload the `ml-slider` folder to the `/wp-content/plugins/` directory
101
  1. Activate the plugin through the 'Plugins' menu in WordPress
102
- 1. Manage your slideshows using the 'Meta Slider' menu option
103
 
104
  == Frequently Asked Questions ==
105
 
@@ -136,13 +136,13 @@ Check out the troubleshooting page here:
136
 
137
  https://www.metaslider.com/documentation/troubleshooting/
138
 
139
- = Meta Slider is cropping my images in the wrong place - what can I do? =
140
 
141
  See https://www.metaslider.com/documentation/image-cropping/
142
 
143
  == Screenshots ==
144
 
145
- 1. Meta Slider - for live demos see https://www.metaslider.com/examples/
146
  2. Nivo Slider example
147
  3. Coin Slider example
148
  4. Flex Slider example
@@ -151,6 +151,21 @@ See https://www.metaslider.com/documentation/image-cropping/
151
 
152
  == Changelog ==
153
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154
  = 3.5.1 [01/05/17] =
155
 
156
  * Fix: Pre-populate caption and alt text fields for new image slides (based on original media file data)
@@ -180,7 +195,7 @@ This is the first in a series of small updates which will eventually allow us to
180
  - Drafting slides
181
  - Scheduling slides
182
 
183
- We are releasing this update in a number of small stages due to the number of users Meta Slider has. We are being overly cautious to ensure it's a smooth transition. This update does not make any major changes to the current plugin functionality, but it does put in place the "scaffolding" code which we will rely on to implement further updates.
184
 
185
  = 3.3.7 [06/05/16] =
186
 
@@ -201,14 +216,14 @@ We are releasing this update in a number of small stages due to the number of us
201
 
202
  = 3.3.4 [16/07/15] =
203
 
204
- * Add HTML5 validation by applying a property="stylesheet" attribute to meta slider <link> CSS tags
205
  * Remove unused "Resource Manager" code
206
  * Chinese language pack updated (thanks to mamsds!)
207
 
208
  = 3.3.3 [11/06/15] =
209
 
210
  * Ukrainian language pack added (thanks to mister_r!)
211
- * Fix: Meta Slider hoplink incorrectly adding parameters to filtered url
212
  * Add "metaslider_attachment_url" filter
213
 
214
  = 3.3.2 [16/04/15] =
@@ -217,13 +232,13 @@ We are releasing this update in a number of small stages due to the number of us
217
 
218
  More information:
219
 
220
- The fix will prevent some servers (configured with 'display_errors' set to 'on') from disclosing the full path to certain files within Meta Slider.
221
 
222
  http://codex.wordpress.org/Security_FAQ#Why_are_there_path_disclosures_when_directly_loading_certain_files.3F
223
 
224
  = 3.3.1 [23/03/15] =
225
 
226
- * Fix: Remove 'create video playlist' option from Media Library (on Meta Slider page only)
227
  * Fix: Support for Enhanced Media Library plugin
228
  * Fix: Return public slide when DOING_AJAX
229
  * Improvement: Use admin actions to save slideshow settings
@@ -271,7 +286,7 @@ http://codex.wordpress.org/Security_FAQ#Why_are_there_path_disclosures_when_dire
271
  * New feature: Set crop position for slides (requires WP 3.9+)
272
  * New feature: Disable cropping setting
273
  * Fix: Use get_posts instead of WP_Query to extract slideshows (fix conflicts with plugins using get_post_type in admin_footer hooks)
274
- * Change: Add filter for capability required to use meta slider
275
 
276
  = 2.9.1 [15/07/14] =
277
 
@@ -312,14 +327,14 @@ http://codex.wordpress.org/Security_FAQ#Why_are_there_path_disclosures_when_dire
312
  * Improvement: Preview now uses admin-post action
313
  * Improvement: Classes are now auto loaded to reduce memory footprint
314
  (Thanks to Viktor Szépe for the above suggestions!)
315
- * Improvement: Slideshow initilisation time reduced
316
  * Improvement: HTML5 Compatibility: Alt tags always present on image tag - even if empty.
317
  * Improvement: Flex Slider slideshows should now 'reserve' a space for themselves while they fully load
318
  * Update: Flex Slider updated to v2.2.2
319
  * New feature: Romanian Language Pack added (Thanks to Octav Madalin Stanoaia)
320
  * New feature: Dutch Language Pack added
321
  * New feature: WP Super Cache compatibility - cache is cleared when saving slideshow
322
- * New feature: HTML5 Compatibility (Experimental). Set `define('METASLIDER_ENABLE_RESOURCE_MANAGER', true);` in wp-config.php to move Meta Slider link tags head of the page.
323
 
324
  = 2.7.2 [25/03/14] =
325
 
@@ -335,16 +350,16 @@ http://codex.wordpress.org/Security_FAQ#Why_are_there_path_disclosures_when_dire
335
 
336
  = 2.7 [18/03/14] =
337
 
338
- * New feature: Crotatian Lang pack added
339
  * New feature: Carousel margin option added
340
  * New feature: Process shortcodes in captions
341
  * Improvement: Tab rename UX
342
  * Improvement: Admin save spinner functionality improved
343
  * Improvement: CSS Resets updated
344
- * Improvement: Use plugins_loaded action to initialise plugin
345
  * Fix: PHP Warnings when one slideshow exists
346
  * Fix: Smart Cropping sometimes not returning smart cropped image
347
- * Fix: Add z-index to meta slider, attempted conflict fix for themes with drop down menus.
348
  * Fix: Only include the easing library when transition effect is set to slide
349
  * Fix: White Label Branding plugin compatibility.
350
  * Change: "Responsive" option renamed to "R. Slides". The (old) "Responsive" option refers to the "Responsive Slides" jQuery library, but users were getting confused as the naming suggested it was the only responsive option. Flex Slider & Nivo Slider are also responsive.
@@ -358,7 +373,7 @@ http://codex.wordpress.org/Security_FAQ#Why_are_there_path_disclosures_when_dire
358
  * Improvement: Filter added for slide image label
359
  * Improvement: 'No Conflict' mode refactored
360
  * Improvement: 'slider' parameter added to flexslider before/start/after etc callbacks
361
- * Change: Renamed in admin menu from "Meta Slider Lite" to "Meta Slider"
362
 
363
  = 2.6.2 [02/01/14] =
364
 
@@ -367,7 +382,7 @@ http://codex.wordpress.org/Security_FAQ#Why_are_there_path_disclosures_when_dire
367
  = 2.6.1 [31/12/13] =
368
 
369
  * Fix: Advanced settings arrow toggle
370
- * Fix: All in one SEO / Page builder / Meta Slider conflict
371
  * Fix: NextGen "Insert Gallery" conflict
372
  * New feature: Norwegian language pack added
373
 
@@ -513,7 +528,7 @@ More info/Comments: http://www.metaslider.com/coming-soon-meta-slider-2-6-free/
513
  * Fix: Flexslider navigation overflow
514
 
515
  = 2.0-betaX [17/04/13] =
516
- * Improvement: Error messages exposed in admin is Meta Slider cannot load the slides
517
  * Improvement: Load default settings if original settings are corrupt/incomplete
518
  * Fix: Smart Crop ratio
519
  * Fix: UTF-8 characters in captions (reported by and thanks to: javitopo)
@@ -528,7 +543,7 @@ More info/Comments: http://www.metaslider.com/coming-soon-meta-slider-2-6-free/
528
  * New feature: 'Auto play' option added
529
  * New feature: 'Smart Crop' setting ensures your slideshow size remains consitent regardless of image dimensions
530
  * New feature: 'Center align slideshow' option added for all sliders
531
- * New feature: Coin Slider upgraded to latest version, new options now exposed in Meta Slider
532
  * New feature: Captions now supported by responsive slides
533
  * Improvement: Responsive AJAX powered administration screen
534
  * Improvement: Code refactored
@@ -537,10 +552,10 @@ More info/Comments: http://www.metaslider.com/coming-soon-meta-slider-2-6-free/
537
  * Fix: JS && encoding error (reported by and thanks to: neefje)
538
 
539
  = 1.3 [28/02/13] =
540
- * Renamed to Meta Slider (previously ML Slider)
541
  * Improvement: Admin styling cleaned up
542
  * Improvement: Code refactored
543
- * Improvement: Plugin localised
544
  * Improvement: Template include PHP code now displayed on slider edit page
545
  * Improvement: jQuery tablednd replaced with jQuery sortable for reordering slides
546
  * New feature: Open URL in new window option added
@@ -575,5 +590,4 @@ More info/Comments: http://www.metaslider.com/coming-soon-meta-slider-2-6-free/
575
  * Initial version
576
 
577
  == Upgrade Notice ==
578
-
579
-
1
  === MetaSlider ===
2
+ Contributors: matchalabs, DavidAnderson, dnutbourne, kbat82
3
  Tags: wordpress slideshow,seo,slideshow,slider,widget,wordpress slider,image slider,flexslider,flex slider,nivoslider,nivo slider,responsive,responsive slides,coinslider,coin slider,slideshow,carousel,responsive slider,vertical slides
4
  Donate link: https://david.dw-perspective.org.uk/donate
5
  Requires at least: 3.5
6
+ Stable tag: 3.6.0
7
  Tested up to: 4.9
 
8
  License: GPLv2 or later
9
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
10
 
11
+ Easy to use WordPress slider plugin. Create SEO-optimized responsive slideshows with Nivo Slider, Flex Slider, Coin Slider and Responsive Slides.
12
 
13
  == Description ==
14
 
15
+ With MetaSlider, you can create your own unique, SEO-optimized slideshow in a matter of seconds!
16
 
17
  With WordPress’ most popular slider plugin, enhancing your blog or website couldn’t be easier: simply select images from your WordPress Media Library, drag and drop them into place, and then set the slide captions, links and SEO fields all from one page.
18
 
28
  **Features**
29
 
30
  * Simple, easy to use interface - perfect for individual users, developers & clients!
31
+ * Create Responsive, SEO-optimized slideshows in seconds
32
  * Unrestricted support for Image slides (supports caption, link, title text, alt text)
33
  * Full width slideshow support
34
  * Drag and drop slide reordering
37
  * Set image crop position
38
  * Built in Widget and Shortcode
39
  * Loads of slideshow configuration options - transition effect, speed etc (per slideshow)
40
+ * Fully localized
41
  * WordPress Multi Site compatible
42
  * Compatible with translation plugins (WPML, PolyLang & qTranslate)
43
  * Extensive Developer API (hooks & filters)
44
  * Fast - only the minimum JavaScript/CSS is included on your page
45
  * Free basic support (covering installation issues and theme/plugin conflicts)
46
+ * Lightbox support with the [MetaSlider Lightbox](https://wordpress.org/plugins/ml-slider-lightbox/) addon
47
 
48
  **General:**
49
  * Simple and intuitive interface – perfect for individual users, developers & clients!
58
 
59
  **Other:**
60
  * Includes Admin preview, plus built-in Widget and Short-code
61
+ * Fully localized
62
  * WordPress Multi-site compatible, and
63
  * compatible with translation plugins (WPML, PolyLang & qTranslate)
64
  * Developer Friendly, with extensive hooks & filters
66
  **Support:**
67
  * Includes free basic support (covering installation issues and theme/plugin conflicts).
68
 
69
+ The <a href="https://www.metaslider.com/upgrade">MetaSlider Pro</a> includes added support for:
70
 
71
  * YouTube & Vimeo slides
72
  * HTML slides
92
  The easy way:
93
 
94
  1. Go to the Plugins Menu in WordPress
95
+ 1. Search for "MetaSlider"
96
  1. Click "Install"
97
 
98
  The not so easy way:
99
 
100
  1. Upload the `ml-slider` folder to the `/wp-content/plugins/` directory
101
  1. Activate the plugin through the 'Plugins' menu in WordPress
102
+ 1. Manage your slideshows using the 'MetaSlider' menu option
103
 
104
  == Frequently Asked Questions ==
105
 
136
 
137
  https://www.metaslider.com/documentation/troubleshooting/
138
 
139
+ = MetaSlider is cropping my images in the wrong place - what can I do? =
140
 
141
  See https://www.metaslider.com/documentation/image-cropping/
142
 
143
  == Screenshots ==
144
 
145
+ 1. MetaSlider - for live demos see https://www.metaslider.com/examples/
146
  2. Nivo Slider example
147
  3. Coin Slider example
148
  4. Flex Slider example
151
 
152
  == Changelog ==
153
 
154
+ = 3.6.0 - 2017/Nov/14 =
155
+
156
+ * FEATURE: Allow a slide to be restored after deletion
157
+ * FEATURE: Allow the background image to be changed
158
+ * FEATURE: Adds a guided tour
159
+ * FIX: Loads inline JS properly
160
+ * FIX: FlexSlider touch events respect pause on hover setting
161
+ * FIX: Allow for https image URLs
162
+ * TRANSLATIONS: Addresses spelling/localization issues
163
+ * TWEAK: Accessibility enhancements
164
+ * TWEAK: Adds links to activation page
165
+ * TWEAK: Updates FlexSlider to latest
166
+ * TWEAK: Change the label "Meta Slider" to "MetaSlider"
167
+ * TWEAK: Add dashboard notices
168
+
169
  = 3.5.1 [01/05/17] =
170
 
171
  * Fix: Pre-populate caption and alt text fields for new image slides (based on original media file data)
195
  - Drafting slides
196
  - Scheduling slides
197
 
198
+ We are releasing this update in a number of small stages due to the number of users MetaSlider has. We are being overly cautious to ensure it's a smooth transition. This update does not make any major changes to the current plugin functionality, but it does put in place the "scaffolding" code which we will rely on to implement further updates.
199
 
200
  = 3.3.7 [06/05/16] =
201
 
216
 
217
  = 3.3.4 [16/07/15] =
218
 
219
+ * Add HTML5 validation by applying a property="stylesheet" attribute to MetaSlider <link> CSS tags
220
  * Remove unused "Resource Manager" code
221
  * Chinese language pack updated (thanks to mamsds!)
222
 
223
  = 3.3.3 [11/06/15] =
224
 
225
  * Ukrainian language pack added (thanks to mister_r!)
226
+ * Fix: MetaSlider hoplink incorrectly adding parameters to filtered url
227
  * Add "metaslider_attachment_url" filter
228
 
229
  = 3.3.2 [16/04/15] =
232
 
233
  More information:
234
 
235
+ The fix will prevent some servers (configured with 'display_errors' set to 'on') from disclosing the full path to certain files within MetaSlider.
236
 
237
  http://codex.wordpress.org/Security_FAQ#Why_are_there_path_disclosures_when_directly_loading_certain_files.3F
238
 
239
  = 3.3.1 [23/03/15] =
240
 
241
+ * Fix: Remove 'create video playlist' option from Media Library (on MetaSlider page only)
242
  * Fix: Support for Enhanced Media Library plugin
243
  * Fix: Return public slide when DOING_AJAX
244
  * Improvement: Use admin actions to save slideshow settings
286
  * New feature: Set crop position for slides (requires WP 3.9+)
287
  * New feature: Disable cropping setting
288
  * Fix: Use get_posts instead of WP_Query to extract slideshows (fix conflicts with plugins using get_post_type in admin_footer hooks)
289
+ * Change: Add filter for capability required to use MetaSlider
290
 
291
  = 2.9.1 [15/07/14] =
292
 
327
  * Improvement: Preview now uses admin-post action
328
  * Improvement: Classes are now auto loaded to reduce memory footprint
329
  (Thanks to Viktor Szépe for the above suggestions!)
330
+ * Improvement: Slideshow initilization time reduced
331
  * Improvement: HTML5 Compatibility: Alt tags always present on image tag - even if empty.
332
  * Improvement: Flex Slider slideshows should now 'reserve' a space for themselves while they fully load
333
  * Update: Flex Slider updated to v2.2.2
334
  * New feature: Romanian Language Pack added (Thanks to Octav Madalin Stanoaia)
335
  * New feature: Dutch Language Pack added
336
  * New feature: WP Super Cache compatibility - cache is cleared when saving slideshow
337
+ * New feature: HTML5 Compatibility (Experimental). Set `define('METASLIDER_ENABLE_RESOURCE_MANAGER', true);` in wp-config.php to move MetaSlider link tags head of the page.
338
 
339
  = 2.7.2 [25/03/14] =
340
 
350
 
351
  = 2.7 [18/03/14] =
352
 
353
+ * New feature: Croatian Lang pack added
354
  * New feature: Carousel margin option added
355
  * New feature: Process shortcodes in captions
356
  * Improvement: Tab rename UX
357
  * Improvement: Admin save spinner functionality improved
358
  * Improvement: CSS Resets updated
359
+ * Improvement: Use plugins_loaded action to initialize plugin
360
  * Fix: PHP Warnings when one slideshow exists
361
  * Fix: Smart Cropping sometimes not returning smart cropped image
362
+ * Fix: Add z-index to MetaSlider, attempted conflict fix for themes with drop down menus.
363
  * Fix: Only include the easing library when transition effect is set to slide
364
  * Fix: White Label Branding plugin compatibility.
365
  * Change: "Responsive" option renamed to "R. Slides". The (old) "Responsive" option refers to the "Responsive Slides" jQuery library, but users were getting confused as the naming suggested it was the only responsive option. Flex Slider & Nivo Slider are also responsive.
373
  * Improvement: Filter added for slide image label
374
  * Improvement: 'No Conflict' mode refactored
375
  * Improvement: 'slider' parameter added to flexslider before/start/after etc callbacks
376
+ * Change: Renamed in admin menu from "MetaSlider Lite" to "MetaSlider"
377
 
378
  = 2.6.2 [02/01/14] =
379
 
382
  = 2.6.1 [31/12/13] =
383
 
384
  * Fix: Advanced settings arrow toggle
385
+ * Fix: All in one SEO / Page builder / MetaSlider conflict
386
  * Fix: NextGen "Insert Gallery" conflict
387
  * New feature: Norwegian language pack added
388
 
528
  * Fix: Flexslider navigation overflow
529
 
530
  = 2.0-betaX [17/04/13] =
531
+ * Improvement: Error messages exposed in admin is MetaSlider cannot load the slides
532
  * Improvement: Load default settings if original settings are corrupt/incomplete
533
  * Fix: Smart Crop ratio
534
  * Fix: UTF-8 characters in captions (reported by and thanks to: javitopo)
543
  * New feature: 'Auto play' option added
544
  * New feature: 'Smart Crop' setting ensures your slideshow size remains consitent regardless of image dimensions
545
  * New feature: 'Center align slideshow' option added for all sliders
546
+ * New feature: Coin Slider upgraded to latest version, new options now exposed in MetaSlider
547
  * New feature: Captions now supported by responsive slides
548
  * Improvement: Responsive AJAX powered administration screen
549
  * Improvement: Code refactored
552
  * Fix: JS && encoding error (reported by and thanks to: neefje)
553
 
554
  = 1.3 [28/02/13] =
555
+ * Renamed to MetaSlider (previously ML Slider)
556
  * Improvement: Admin styling cleaned up
557
  * Improvement: Code refactored
558
+ * Improvement: Plugin localized
559
  * Improvement: Template include PHP code now displayed on slider edit page
560
  * Improvement: jQuery tablednd replaced with jQuery sortable for reordering slides
561
  * New feature: Open URL in new window option added
590
  * Initial version
591
 
592
  == Upgrade Notice ==
593
+ * 3.6.0 : Three new features, three fixes, various smaller tweaks. A recommended update for all.