Version Description
Download this release
Release Info
Developer | yithemes |
Plugin | YITH WooCommerce Zoom Magnifier |
Version | 1.3.8 |
Comparing to | |
See all releases |
Code changes from version 1.3.7 to 1.3.8
- README.txt +187 -182
- assets/css/admin.css +19 -19
- assets/css/frontend.css +64 -64
- assets/css/yith_magnifier.css +70 -70
- assets/js/jquery.carouFredSel.js +4253 -4253
- assets/js/jquery.carouFredSel.min.js +1 -1
- assets/js/ywzm_frontend.js +59 -59
- changelog.txt +190 -190
- class.yith-wcmg-admin.php +111 -111
- class.yith-wcmg-frontend.php +173 -173
- functions.yith-wcmg.php +78 -78
- init.php +163 -163
- languages/yith-woocommerce-zoom-magnifier-es_ES.po +489 -489
- languages/yith-woocommerce-zoom-magnifier-it_IT.po +522 -522
- languages/yith-woocommerce-zoom-magnifier.pot +401 -401
- lib/class.yith-woocommerce-zoom-magnifier.php +166 -166
- lib/class.yith-ywzm-custom-types.php +180 -180
- lib/class.yith-ywzm-plugin-fw-loader.php +249 -249
- plugin-fw/assets/css/admin.css +95 -95
- plugin-fw/assets/css/codemirror/codemirror.css +260 -260
- plugin-fw/assets/css/colorbox.css +65 -65
- plugin-fw/assets/css/metaboxes.css +652 -652
- plugin-fw/assets/css/yit-plugin-panel.css +482 -481
- plugin-fw/assets/css/yit-upgrade-to-pro.css +76 -76
- plugin-fw/assets/css/yit-upgrader.css +21 -17
- plugin-fw/assets/css/yith-fields.css +401 -401
- plugin-fw/assets/css/yith-select2-no-wc.css +740 -740
- plugin-fw/assets/js/codemirror/codemirror.js +4784 -5799
README.txt
CHANGED
@@ -1,183 +1,188 @@
|
|
1 |
-
=== YITH WooCommerce Zoom Magnifier ===
|
2 |
-
|
3 |
-
Contributors: yithemes
|
4 |
-
Tags: zoom, magnifier, slider, carousel, woocommerce
|
5 |
-
Requires at least: 4.0
|
6 |
-
Tested up to: 5.0
|
7 |
-
Stable tag: 1.3.
|
8 |
-
License: GPLv2 or later
|
9 |
-
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
-
Documentation: https://docs.yithemes.com/yith-woocommerce-zoom-magnifier/
|
11 |
-
|
12 |
-
YITH WooCommerce Zoom Magnifier add zoom effect to product images and a customizable image slider.
|
13 |
-
|
14 |
-
== Description ==
|
15 |
-
|
16 |
-
= Improve the user experience, improve your sales =
|
17 |
-
|
18 |
-
Offer to your visitors a chance to inspect in detail the quality of your products. With YITH WooCommerce Zoom Magnifier you can add a zoom effect to all your product images.
|
19 |
-
The Wordpress plugin also adds a slider below the featured image with your product gallery images.
|
20 |
-
|
21 |
-
= Main features =
|
22 |
-
|
23 |
-
* Show a bigger size product image on mouseover.
|
24 |
-
* Customize zoom area width and height and the size of the image to show as zoomed image.
|
25 |
-
* Enable or disable it on mobile devices.
|
26 |
-
* Add a slider showing product image thumbnails.
|
27 |
-
* Customize the slider behavior.
|
28 |
-
|
29 |
-
For a more detailed list of options and features of the plugin, please look at the [official documentation](https://docs.yithemes.com/yith-woocommerce-zoom-magnifier/ "Yith WooCommerce Zoom Magnifier official documentation").
|
30 |
-
|
31 |
-
Discover all the features of the plugin and install it in your theme: the result will be extremely satisfying.
|
32 |
-
|
33 |
-
== Installation ==
|
34 |
-
Important: First of all, you have to download and activate WooCommerce plugin, which is mandatory for Yith WooCommerce Zoom Magnifier to be working.
|
35 |
-
|
36 |
-
1. Unzip the downloaded zip file.
|
37 |
-
2. Upload the plugin folder into the `wp-content/plugins/` directory of your WordPress site.
|
38 |
-
3. Activate `YITH WooCommerce Zoom Magnifier` from Plugins page
|
39 |
-
|
40 |
-
= Configuration =
|
41 |
-
|
42 |
-
YITH WooCommerce Zoom Magnifier will add a new tab called "Zoom Magnifier" in "YIT Plugins" menu item. There, you will find all Yithemes plugins with quick access to plugin setting page.
|
43 |
-
|
44 |
-
== Screenshots ==
|
45 |
-
|
46 |
-
1. The General plugin settings page. You can disable the plugin for mobile devices.
|
47 |
-
2. The Magnifier settings page. Choose the size of the zoom area, the size of the image to be shown in zoom area and the its position (on the right or over the image).
|
48 |
-
3. The slider settings page. You can choose to use the slider for product image thumbnails, set how many images to show within the slider, and the behavior of the slider, choosing if circular, infinite or standard carousel.
|
49 |
-
4. The zoom applied to a product image, showing zoomed image on the right side.
|
50 |
-
5. The zoom applied to a product image, showing zoomed image over the same image.
|
51 |
-
6. Choose how many items the slider should show, the image thumbnails will fit the available width.
|
52 |
-
|
53 |
-
== Changelog ==
|
54 |
-
|
55 |
-
= Version 1.3.
|
56 |
-
|
57 |
-
* Update: plugin framework
|
58 |
-
* Fix: Undefined variable "block_args"
|
59 |
-
|
60 |
-
= Version 1.3.
|
61 |
-
|
62 |
-
*
|
63 |
-
*
|
64 |
-
|
65 |
-
= Version 1.3.
|
66 |
-
|
67 |
-
* New: Support to
|
68 |
-
* Update: plugin framework
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
*
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
* Fix:
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
*
|
86 |
-
*
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
*
|
93 |
-
*
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
*
|
99 |
-
*
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
* New: support for WooCommerce 3.
|
105 |
-
* New: tested up to WordPress 4.
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
*
|
111 |
-
*
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
*
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
* Fix:
|
130 |
-
|
131 |
-
= Version 1.2.
|
132 |
-
|
133 |
-
*
|
134 |
-
*
|
135 |
-
|
136 |
-
= Version 1.2.
|
137 |
-
|
138 |
-
* New:
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
*
|
144 |
-
|
145 |
-
= Version 1.2.
|
146 |
-
|
147 |
-
*
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
*
|
153 |
-
|
154 |
-
= Version 1.2.
|
155 |
-
|
156 |
-
*
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
|
|
|
|
|
|
|
|
|
|
183 |
* Fix: Remove old plugin framework.
|
1 |
+
=== YITH WooCommerce Zoom Magnifier ===
|
2 |
+
|
3 |
+
Contributors: yithemes
|
4 |
+
Tags: zoom, magnifier, slider, carousel, woocommerce
|
5 |
+
Requires at least: 4.0
|
6 |
+
Tested up to: 5.1.0
|
7 |
+
Stable tag: 1.3.8
|
8 |
+
License: GPLv2 or later
|
9 |
+
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
+
Documentation: https://docs.yithemes.com/yith-woocommerce-zoom-magnifier/
|
11 |
+
|
12 |
+
YITH WooCommerce Zoom Magnifier add zoom effect to product images and a customizable image slider.
|
13 |
+
|
14 |
+
== Description ==
|
15 |
+
|
16 |
+
= Improve the user experience, improve your sales =
|
17 |
+
|
18 |
+
Offer to your visitors a chance to inspect in detail the quality of your products. With YITH WooCommerce Zoom Magnifier you can add a zoom effect to all your product images.
|
19 |
+
The Wordpress plugin also adds a slider below the featured image with your product gallery images.
|
20 |
+
|
21 |
+
= Main features =
|
22 |
+
|
23 |
+
* Show a bigger size product image on mouseover.
|
24 |
+
* Customize zoom area width and height and the size of the image to show as zoomed image.
|
25 |
+
* Enable or disable it on mobile devices.
|
26 |
+
* Add a slider showing product image thumbnails.
|
27 |
+
* Customize the slider behavior.
|
28 |
+
|
29 |
+
For a more detailed list of options and features of the plugin, please look at the [official documentation](https://docs.yithemes.com/yith-woocommerce-zoom-magnifier/ "Yith WooCommerce Zoom Magnifier official documentation").
|
30 |
+
|
31 |
+
Discover all the features of the plugin and install it in your theme: the result will be extremely satisfying.
|
32 |
+
|
33 |
+
== Installation ==
|
34 |
+
Important: First of all, you have to download and activate WooCommerce plugin, which is mandatory for Yith WooCommerce Zoom Magnifier to be working.
|
35 |
+
|
36 |
+
1. Unzip the downloaded zip file.
|
37 |
+
2. Upload the plugin folder into the `wp-content/plugins/` directory of your WordPress site.
|
38 |
+
3. Activate `YITH WooCommerce Zoom Magnifier` from Plugins page
|
39 |
+
|
40 |
+
= Configuration =
|
41 |
+
|
42 |
+
YITH WooCommerce Zoom Magnifier will add a new tab called "Zoom Magnifier" in "YIT Plugins" menu item. There, you will find all Yithemes plugins with quick access to plugin setting page.
|
43 |
+
|
44 |
+
== Screenshots ==
|
45 |
+
|
46 |
+
1. The General plugin settings page. You can disable the plugin for mobile devices.
|
47 |
+
2. The Magnifier settings page. Choose the size of the zoom area, the size of the image to be shown in zoom area and the its position (on the right or over the image).
|
48 |
+
3. The slider settings page. You can choose to use the slider for product image thumbnails, set how many images to show within the slider, and the behavior of the slider, choosing if circular, infinite or standard carousel.
|
49 |
+
4. The zoom applied to a product image, showing zoomed image on the right side.
|
50 |
+
5. The zoom applied to a product image, showing zoomed image over the same image.
|
51 |
+
6. Choose how many items the slider should show, the image thumbnails will fit the available width.
|
52 |
+
|
53 |
+
== Changelog ==
|
54 |
+
|
55 |
+
= Version 1.3.8 - Released: Feb 28, 2018 =
|
56 |
+
|
57 |
+
* Update: plugin framework
|
58 |
+
* Fix: Undefined variable "block_args"
|
59 |
+
|
60 |
+
= Version 1.3.7 - Released: Dec 24, 2018 =
|
61 |
+
|
62 |
+
* Update: plugin framework
|
63 |
+
* Fix: Undefined variable "block_args"
|
64 |
+
|
65 |
+
= Version 1.3.6 - Released: Dec 12, 2018 =
|
66 |
+
|
67 |
+
* New: Support to WordPress 5.0
|
68 |
+
* Update: plugin framework version 3.1.10
|
69 |
+
|
70 |
+
= Version 1.3.5 - Released: Oct 23, 2018 =
|
71 |
+
|
72 |
+
* New: Support to WooCommerce 3.5.0
|
73 |
+
* Update: plugin framework
|
74 |
+
* Update: plugin description
|
75 |
+
* Update: plugin links
|
76 |
+
* Dev: extra class if featured audio plugin is enabled
|
77 |
+
|
78 |
+
= Version 1.3.4 - Released: June 26, 2018 =
|
79 |
+
|
80 |
+
* Fix: click thumbnails and zoom them
|
81 |
+
|
82 |
+
= Version 1.3.3 - Released: June 22, 2018 =
|
83 |
+
|
84 |
+
* Update: documentation link
|
85 |
+
* Fix: choosing variation
|
86 |
+
* Dev: include 'wp-admin/includes/plugin.php'
|
87 |
+
|
88 |
+
= Version 1.3.2 - Released: Mar 06, 2018 =
|
89 |
+
|
90 |
+
* New: support to WooCommerce 3.3.3
|
91 |
+
* Update: plugin framework 3.0.13
|
92 |
+
* Fix: Wrong documentation link.
|
93 |
+
* Fix: Remove old plugin framework.
|
94 |
+
|
95 |
+
= Version 1.3.1 - Released: Feb 07, 2018 =
|
96 |
+
|
97 |
+
* New: support to WooCommerce 3.3.1
|
98 |
+
* New: support to WordPress 4.9.4
|
99 |
+
* Update: plugin framework 3.0.12
|
100 |
+
|
101 |
+
= Version 1.3.0 - Released: Dec 11, 2017 =
|
102 |
+
|
103 |
+
* Update: YITH Plugin Framework to version 3.0
|
104 |
+
* New: support for WooCommerce 3.2.3
|
105 |
+
* New: tested up to WordPress 4.9
|
106 |
+
|
107 |
+
= Version 1.2.30 - Released: Aug 11, 2017 =
|
108 |
+
|
109 |
+
* New: support for WooCommerce 3.1.
|
110 |
+
* New: tested up to WordPress 4.8.
|
111 |
+
* Update: YITH Plugin Framework.
|
112 |
+
|
113 |
+
= Version 1.2.29 - Released: Apr 30, 2017 =
|
114 |
+
|
115 |
+
* Update: YITH Plugin Framework.
|
116 |
+
* Tweak: tested up to WordPress 4.7.4.
|
117 |
+
* Tweak: changed plugin tags.
|
118 |
+
|
119 |
+
= Version 1.2.28 - Released: Apr 06, 2017 =
|
120 |
+
|
121 |
+
* Fix: Javascript error when a product variation do not have its own image set.
|
122 |
+
|
123 |
+
= Version 1.2.27 - Released: Apr 05, 2017 =
|
124 |
+
|
125 |
+
* Fix: Variation images not shown properly.
|
126 |
+
|
127 |
+
= Version 1.2.26 - Released: Mar 28, 2017 =
|
128 |
+
|
129 |
+
* Fix: YITH Plugin Framework initialization that prevents the plugin update.
|
130 |
+
|
131 |
+
= Version 1.2.25 - Released: Mar 08, 2017 =
|
132 |
+
|
133 |
+
* Fix: removed unused class.yith-wcmg.php file
|
134 |
+
* Fix: removed hook 'admin_print_footer_scripts' in class.yith-wcmg-admin.php
|
135 |
+
|
136 |
+
= Version 1.2.24 - Released: Mar 06, 2017 =
|
137 |
+
|
138 |
+
* New: Support to WooCommerce 2.7.0-RC1
|
139 |
+
* Update: YITH Plugin Framework
|
140 |
+
|
141 |
+
= Version 1.2.23 - Released: Jan 16, 2017 =
|
142 |
+
|
143 |
+
* New: WordPress 4.7 ready
|
144 |
+
|
145 |
+
= Version 1.2.22 - Released: Nov 08, 2016 =
|
146 |
+
|
147 |
+
* Updated: Compatibility to WordPress up to 4.6.x
|
148 |
+
* Updated: YITH Plugin-fw
|
149 |
+
|
150 |
+
= Version 1.2.21 - Released: Aug 09, 2016 =
|
151 |
+
|
152 |
+
* Fixed: Javascript error on property 'msie'
|
153 |
+
|
154 |
+
= Version 1.2.20 - Released: Jun 13, 2016 =
|
155 |
+
|
156 |
+
* Added: spanish localization
|
157 |
+
* Updated: WooCommerce 2.6 100% compatible
|
158 |
+
|
159 |
+
= Version 1.2.19 - Released: May 04, 2016 =
|
160 |
+
|
161 |
+
* Fixed: missing YITH Plugin FW files
|
162 |
+
|
163 |
+
== Suggestions ==
|
164 |
+
|
165 |
+
If you have suggestions about how to improve YITH WooCommerce Zoom Magnifier, you can [write us](mailto:plugins@yithemes.com "Your Inspiration Themes") so we can bundle them into YITH Zoom WooCommerce Magnifier.
|
166 |
+
|
167 |
+
== Translators ==
|
168 |
+
|
169 |
+
= Available Languages =
|
170 |
+
* English (Default)
|
171 |
+
* Italian
|
172 |
+
* Spanish
|
173 |
+
|
174 |
+
If you have created your own language pack, or have an update for an existing one, you can send [gettext PO and MO file](http://codex.wordpress.org/Translating_WordPress "Translating WordPress")
|
175 |
+
[use](https://yithemes.com/contact/ "Your Inspiration Themes") so we can bundle it into YITH WooCommerce Zoom Magnfier Languages.
|
176 |
+
|
177 |
+
== Documentation ==
|
178 |
+
|
179 |
+
Full documentation is available [here](https://docs.yithemes.com/yith-woocommerce-zoom-magnifier/).
|
180 |
+
|
181 |
+
== Upgrade notice ==
|
182 |
+
|
183 |
+
= Version 1.3.2 - Released: Mar 06, 2018 =
|
184 |
+
|
185 |
+
* New: support to WooCommerce 3.3.3
|
186 |
+
* Update: plugin framework 3.0.13
|
187 |
+
* Fix: Wrong documentation link.
|
188 |
* Fix: Remove old plugin framework.
|
assets/css/admin.css
CHANGED
@@ -1,20 +1,20 @@
|
|
1 |
-
.yith_woocommerce_slider {
|
2 |
-
width: 300px;
|
3 |
-
float: left
|
4 |
-
}
|
5 |
-
.yith_woocommerce_slider_value {
|
6 |
-
margin-top: -5px;
|
7 |
-
margin-left: 10px;
|
8 |
-
width: 50px;
|
9 |
-
float: left;
|
10 |
-
text-align: center;
|
11 |
-
font-weight: bold;
|
12 |
-
}
|
13 |
-
|
14 |
-
.yith_banner {
|
15 |
-
margin-top: 10px;
|
16 |
-
}
|
17 |
-
|
18 |
-
#eg-wrap .select_fake {/* solve back-end conflict with Essential Grid */
|
19 |
-
height: 24px;
|
20 |
}
|
1 |
+
.yith_woocommerce_slider {
|
2 |
+
width: 300px;
|
3 |
+
float: left
|
4 |
+
}
|
5 |
+
.yith_woocommerce_slider_value {
|
6 |
+
margin-top: -5px;
|
7 |
+
margin-left: 10px;
|
8 |
+
width: 50px;
|
9 |
+
float: left;
|
10 |
+
text-align: center;
|
11 |
+
font-weight: bold;
|
12 |
+
}
|
13 |
+
|
14 |
+
.yith_banner {
|
15 |
+
margin-top: 10px;
|
16 |
+
}
|
17 |
+
|
18 |
+
#eg-wrap .select_fake {/* solve back-end conflict with Essential Grid */
|
19 |
+
height: 24px;
|
20 |
}
|
assets/css/frontend.css
CHANGED
@@ -1,65 +1,65 @@
|
|
1 |
-
/* gallery */
|
2 |
-
.yith_magnifier_gallery {
|
3 |
-
margin: 0;
|
4 |
-
padding: 0;
|
5 |
-
}
|
6 |
-
|
7 |
-
.yith_magnifier_gallery li {
|
8 |
-
position: relative;
|
9 |
-
float: left;
|
10 |
-
display: block;
|
11 |
-
}
|
12 |
-
|
13 |
-
.yith_magnifier_gallery li.last {
|
14 |
-
margin-right: 0;
|
15 |
-
}
|
16 |
-
|
17 |
-
.yith_magnifier_gallery li a {
|
18 |
-
width: 100% !important;
|
19 |
-
display: block;
|
20 |
-
margin-top: 10px;
|
21 |
-
height: auto !important;
|
22 |
-
}
|
23 |
-
|
24 |
-
/* next/prev */
|
25 |
-
.single-product.woocommerce .thumbnails {
|
26 |
-
position: relative;
|
27 |
-
}
|
28 |
-
|
29 |
-
.single-product.woocommerce .thumbnails #slider-prev,
|
30 |
-
.single-product.woocommerce .thumbnails #slider-next {
|
31 |
-
display: none !important;
|
32 |
-
cursor: pointer;
|
33 |
-
width: 27px;
|
34 |
-
height: 26px;
|
35 |
-
background: url('../images/slider-arrow.png') no-repeat left center;
|
36 |
-
position: absolute;
|
37 |
-
top: 48%;
|
38 |
-
margin-top: -2px;
|
39 |
-
}
|
40 |
-
|
41 |
-
.single-product.woocommerce .thumbnails #slider-prev {
|
42 |
-
background-position: left center;
|
43 |
-
left: 0px;
|
44 |
-
}
|
45 |
-
|
46 |
-
.single-product.woocommerce .thumbnails #slider-next {
|
47 |
-
background-position: right center;
|
48 |
-
right: 0px;
|
49 |
-
}
|
50 |
-
|
51 |
-
.single-product.woocommerce .thumbnails:hover #slider-prev,
|
52 |
-
.single-product.woocommerce .thumbnails:hover #slider-next {
|
53 |
-
display: block !important;
|
54 |
-
}
|
55 |
-
|
56 |
-
span.onsale {
|
57 |
-
z-index: 10000
|
58 |
-
}
|
59 |
-
|
60 |
-
div.pp_woocommerce a.pp_expand {
|
61 |
-
display: inline;
|
62 |
-
bottom: 10px;
|
63 |
-
top: initial;
|
64 |
-
left: 10px;
|
65 |
}
|
1 |
+
/* gallery */
|
2 |
+
.yith_magnifier_gallery {
|
3 |
+
margin: 0;
|
4 |
+
padding: 0;
|
5 |
+
}
|
6 |
+
|
7 |
+
.yith_magnifier_gallery li {
|
8 |
+
position: relative;
|
9 |
+
float: left;
|
10 |
+
display: block;
|
11 |
+
}
|
12 |
+
|
13 |
+
.yith_magnifier_gallery li.last {
|
14 |
+
margin-right: 0;
|
15 |
+
}
|
16 |
+
|
17 |
+
.yith_magnifier_gallery li a {
|
18 |
+
width: 100% !important;
|
19 |
+
display: block;
|
20 |
+
margin-top: 10px;
|
21 |
+
height: auto !important;
|
22 |
+
}
|
23 |
+
|
24 |
+
/* next/prev */
|
25 |
+
.single-product.woocommerce .thumbnails {
|
26 |
+
position: relative;
|
27 |
+
}
|
28 |
+
|
29 |
+
.single-product.woocommerce .thumbnails #slider-prev,
|
30 |
+
.single-product.woocommerce .thumbnails #slider-next {
|
31 |
+
display: none !important;
|
32 |
+
cursor: pointer;
|
33 |
+
width: 27px;
|
34 |
+
height: 26px;
|
35 |
+
background: url('../images/slider-arrow.png') no-repeat left center;
|
36 |
+
position: absolute;
|
37 |
+
top: 48%;
|
38 |
+
margin-top: -2px;
|
39 |
+
}
|
40 |
+
|
41 |
+
.single-product.woocommerce .thumbnails #slider-prev {
|
42 |
+
background-position: left center;
|
43 |
+
left: 0px;
|
44 |
+
}
|
45 |
+
|
46 |
+
.single-product.woocommerce .thumbnails #slider-next {
|
47 |
+
background-position: right center;
|
48 |
+
right: 0px;
|
49 |
+
}
|
50 |
+
|
51 |
+
.single-product.woocommerce .thumbnails:hover #slider-prev,
|
52 |
+
.single-product.woocommerce .thumbnails:hover #slider-next {
|
53 |
+
display: block !important;
|
54 |
+
}
|
55 |
+
|
56 |
+
span.onsale {
|
57 |
+
z-index: 10000
|
58 |
+
}
|
59 |
+
|
60 |
+
div.pp_woocommerce a.pp_expand {
|
61 |
+
display: inline;
|
62 |
+
bottom: 10px;
|
63 |
+
top: initial;
|
64 |
+
left: 10px;
|
65 |
}
|
assets/css/yith_magnifier.css
CHANGED
@@ -1,70 +1,70 @@
|
|
1 |
-
.yith_magnifier_zoom_wrap {
|
2 |
-
top: 0;
|
3 |
-
position: relative;
|
4 |
-
}
|
5 |
-
|
6 |
-
.yith_magnifier_loading {
|
7 |
-
color:white;
|
8 |
-
background:#222;
|
9 |
-
padding:3px;
|
10 |
-
border:1px solid #000;
|
11 |
-
position: absolute;
|
12 |
-
text-align: center;
|
13 |
-
top: 10%;
|
14 |
-
z-index: 9999;
|
15 |
-
}
|
16 |
-
|
17 |
-
.yith_magnifier_zoom {
|
18 |
-
position: relative;
|
19 |
-
display: block;
|
20 |
-
}
|
21 |
-
|
22 |
-
.yith_magnifier_zoom img {
|
23 |
-
display: block;
|
24 |
-
}
|
25 |
-
|
26 |
-
.yith_magnifier_mousetrap {
|
27 |
-
z-index: 999;
|
28 |
-
position: absolute;
|
29 |
-
width: 0px;
|
30 |
-
height :0px;
|
31 |
-
left: 0;
|
32 |
-
top: 0;
|
33 |
-
}
|
34 |
-
|
35 |
-
/* ie fix */
|
36 |
-
.ie .yith_magnifier_mousetrap {
|
37 |
-
background-image: url(".");
|
38 |
-
}
|
39 |
-
|
40 |
-
.yith_magnifier_lens {
|
41 |
-
display: none;
|
42 |
-
z-index:98;
|
43 |
-
position:absolute;
|
44 |
-
overflow: hidden;
|
45 |
-
|
46 |
-
border: 1px solid #ccc;
|
47 |
-
}
|
48 |
-
|
49 |
-
.yith_magnifier_lens img {
|
50 |
-
width: auto !important;
|
51 |
-
max-width: none !important;
|
52 |
-
|
53 |
-
-webkit-transition: all ease-in-out 0s !important;
|
54 |
-
-moz-transition: all ease-in-out 0s !important;
|
55 |
-
-o-transition: all ease-in-out 0s !important;
|
56 |
-
transition: all ease-in-out 0s !important;
|
57 |
-
}
|
58 |
-
|
59 |
-
.yith_magnifier_zoom_magnifier {
|
60 |
-
display:none;
|
61 |
-
position:absolute;
|
62 |
-
z-index: 99;
|
63 |
-
|
64 |
-
border:4px solid #ccc;
|
65 |
-
overflow:hidden;
|
66 |
-
}
|
67 |
-
|
68 |
-
.yith_magnifier_gallery {
|
69 |
-
list-style: none;
|
70 |
-
}
|
1 |
+
.yith_magnifier_zoom_wrap {
|
2 |
+
top: 0;
|
3 |
+
position: relative;
|
4 |
+
}
|
5 |
+
|
6 |
+
.yith_magnifier_loading {
|
7 |
+
color:white;
|
8 |
+
background:#222;
|
9 |
+
padding:3px;
|
10 |
+
border:1px solid #000;
|
11 |
+
position: absolute;
|
12 |
+
text-align: center;
|
13 |
+
top: 10%;
|
14 |
+
z-index: 9999;
|
15 |
+
}
|
16 |
+
|
17 |
+
.yith_magnifier_zoom {
|
18 |
+
position: relative;
|
19 |
+
display: block;
|
20 |
+
}
|
21 |
+
|
22 |
+
.yith_magnifier_zoom img {
|
23 |
+
display: block;
|
24 |
+
}
|
25 |
+
|
26 |
+
.yith_magnifier_mousetrap {
|
27 |
+
z-index: 999;
|
28 |
+
position: absolute;
|
29 |
+
width: 0px;
|
30 |
+
height :0px;
|
31 |
+
left: 0;
|
32 |
+
top: 0;
|
33 |
+
}
|
34 |
+
|
35 |
+
/* ie fix */
|
36 |
+
.ie .yith_magnifier_mousetrap {
|
37 |
+
background-image: url(".");
|
38 |
+
}
|
39 |
+
|
40 |
+
.yith_magnifier_lens {
|
41 |
+
display: none;
|
42 |
+
z-index:98;
|
43 |
+
position:absolute;
|
44 |
+
overflow: hidden;
|
45 |
+
|
46 |
+
border: 1px solid #ccc;
|
47 |
+
}
|
48 |
+
|
49 |
+
.yith_magnifier_lens img {
|
50 |
+
width: auto !important;
|
51 |
+
max-width: none !important;
|
52 |
+
|
53 |
+
-webkit-transition: all ease-in-out 0s !important;
|
54 |
+
-moz-transition: all ease-in-out 0s !important;
|
55 |
+
-o-transition: all ease-in-out 0s !important;
|
56 |
+
transition: all ease-in-out 0s !important;
|
57 |
+
}
|
58 |
+
|
59 |
+
.yith_magnifier_zoom_magnifier {
|
60 |
+
display:none;
|
61 |
+
position:absolute;
|
62 |
+
z-index: 99;
|
63 |
+
|
64 |
+
border:4px solid #ccc;
|
65 |
+
overflow:hidden;
|
66 |
+
}
|
67 |
+
|
68 |
+
.yith_magnifier_gallery {
|
69 |
+
list-style: none;
|
70 |
+
}
|
assets/js/jquery.carouFredSel.js
CHANGED
@@ -1,4254 +1,4254 @@
|
|
1 |
-
/*
|
2 |
-
* jQuery carouFredSel 6.2.1
|
3 |
-
* Demo's and documentation:
|
4 |
-
* caroufredsel.dev7studios.com
|
5 |
-
*
|
6 |
-
* Copyright (c) 2013 Fred Heusschen
|
7 |
-
* www.frebsite.nl
|
8 |
-
*
|
9 |
-
* Dual licensed under the MIT and GPL licenses.
|
10 |
-
* http://en.wikipedia.org/wiki/MIT_License
|
11 |
-
* http://en.wikipedia.org/wiki/GNU_General_Public_License
|
12 |
-
*/
|
13 |
-
|
14 |
-
|
15 |
-
(function($) {
|
16 |
-
|
17 |
-
|
18 |
-
// LOCAL
|
19 |
-
|
20 |
-
if ( $.fn.carouFredSel )
|
21 |
-
{
|
22 |
-
return;
|
23 |
-
}
|
24 |
-
|
25 |
-
$.fn.caroufredsel = $.fn.carouFredSel = function(options, configs)
|
26 |
-
{
|
27 |
-
|
28 |
-
// no element
|
29 |
-
if (this.length == 0)
|
30 |
-
{
|
31 |
-
debug( true, 'No element found for "' + this.selector + '".' );
|
32 |
-
return this;
|
33 |
-
}
|
34 |
-
|
35 |
-
// multiple elements
|
36 |
-
if (this.length > 1)
|
37 |
-
{
|
38 |
-
return this.each(function() {
|
39 |
-
$(this).carouFredSel(options, configs);
|
40 |
-
});
|
41 |
-
}
|
42 |
-
|
43 |
-
|
44 |
-
var $cfs = this,
|
45 |
-
$tt0 = this[0],
|
46 |
-
starting_position = false;
|
47 |
-
|
48 |
-
if ($cfs.data('_cfs_isCarousel'))
|
49 |
-
{
|
50 |
-
starting_position = $cfs.triggerHandler('_cfs_triggerEvent', 'currentPosition');
|
51 |
-
$cfs.trigger('_cfs_triggerEvent', ['destroy', true]);
|
52 |
-
}
|
53 |
-
|
54 |
-
var FN = {};
|
55 |
-
|
56 |
-
FN._init = function(o, setOrig, start)
|
57 |
-
{
|
58 |
-
o = go_getObject($tt0, o);
|
59 |
-
|
60 |
-
o.items = go_getItemsObject($tt0, o.items);
|
61 |
-
o.scroll = go_getScrollObject($tt0, o.scroll);
|
62 |
-
o.auto = go_getAutoObject($tt0, o.auto);
|
63 |
-
o.prev = go_getPrevNextObject($tt0, o.prev);
|
64 |
-
o.next = go_getPrevNextObject($tt0, o.next);
|
65 |
-
o.pagination = go_getPaginationObject($tt0, o.pagination);
|
66 |
-
o.swipe = go_getSwipeObject($tt0, o.swipe);
|
67 |
-
o.mousewheel = go_getMousewheelObject($tt0, o.mousewheel);
|
68 |
-
|
69 |
-
if (setOrig)
|
70 |
-
{
|
71 |
-
opts_orig = $.extend(true, {}, $.fn.carouFredSel.defaults, o);
|
72 |
-
}
|
73 |
-
|
74 |
-
opts = $.extend(true, {}, $.fn.carouFredSel.defaults, o);
|
75 |
-
opts.d = cf_getDimensions(opts);
|
76 |
-
|
77 |
-
crsl.direction = (opts.direction == 'up' || opts.direction == 'left') ? 'next' : 'prev';
|
78 |
-
|
79 |
-
var a_itm = $cfs.children(),
|
80 |
-
avail_primary = ms_getParentSize($wrp, opts, 'width');
|
81 |
-
|
82 |
-
if (is_true(opts.cookie))
|
83 |
-
{
|
84 |
-
opts.cookie = 'caroufredsel_cookie_' + conf.serialNumber;
|
85 |
-
}
|
86 |
-
|
87 |
-
opts.maxDimension = ms_getMaxDimension(opts, avail_primary);
|
88 |
-
|
89 |
-
// complement items and sizes
|
90 |
-
opts.items = in_complementItems(opts.items, opts, a_itm, start);
|
91 |
-
opts[opts.d['width']] = in_complementPrimarySize(opts[opts.d['width']], opts, a_itm);
|
92 |
-
opts[opts.d['height']] = in_complementSecondarySize(opts[opts.d['height']], opts, a_itm);
|
93 |
-
|
94 |
-
// primary size not set for a responsive carousel
|
95 |
-
if (opts.responsive)
|
96 |
-
{
|
97 |
-
if (!is_percentage(opts[opts.d['width']]))
|
98 |
-
{
|
99 |
-
opts[opts.d['width']] = '100%';
|
100 |
-
}
|
101 |
-
}
|
102 |
-
|
103 |
-
// primary size is percentage
|
104 |
-
if (is_percentage(opts[opts.d['width']]))
|
105 |
-
{
|
106 |
-
crsl.upDateOnWindowResize = true;
|
107 |
-
crsl.primarySizePercentage = opts[opts.d['width']];
|
108 |
-
opts[opts.d['width']] = ms_getPercentage(avail_primary, crsl.primarySizePercentage);
|
109 |
-
if (!opts.items.visible)
|
110 |
-
{
|
111 |
-
opts.items.visibleConf.variable = true;
|
112 |
-
}
|
113 |
-
}
|
114 |
-
|
115 |
-
if (opts.responsive)
|
116 |
-
{
|
117 |
-
opts.usePadding = false;
|
118 |
-
opts.padding = [0, 0, 0, 0];
|
119 |
-
opts.align = false;
|
120 |
-
opts.items.visibleConf.variable = false;
|
121 |
-
}
|
122 |
-
else
|
123 |
-
{
|
124 |
-
// visible-items not set
|
125 |
-
if (!opts.items.visible)
|
126 |
-
{
|
127 |
-
opts = in_complementVisibleItems(opts, avail_primary);
|
128 |
-
}
|
129 |
-
|
130 |
-
// primary size not set -> calculate it or set to "variable"
|
131 |
-
if (!opts[opts.d['width']])
|
132 |
-
{
|
133 |
-
if (!opts.items.visibleConf.variable && is_number(opts.items[opts.d['width']]) && opts.items.filter == '*')
|
134 |
-
{
|
135 |
-
opts[opts.d['width']] = opts.items.visible * opts.items[opts.d['width']];
|
136 |
-
opts.align = false;
|
137 |
-
}
|
138 |
-
else
|
139 |
-
{
|
140 |
-
opts[opts.d['width']] = 'variable';
|
141 |
-
}
|
142 |
-
}
|
143 |
-
// align not set -> set to center if primary size is number
|
144 |
-
if (is_undefined(opts.align))
|
145 |
-
{
|
146 |
-
opts.align = (is_number(opts[opts.d['width']]))
|
147 |
-
? 'center'
|
148 |
-
: false;
|
149 |
-
}
|
150 |
-
// set variabe visible-items
|
151 |
-
if (opts.items.visibleConf.variable)
|
152 |
-
{
|
153 |
-
opts.items.visible = gn_getVisibleItemsNext(a_itm, opts, 0);
|
154 |
-
}
|
155 |
-
}
|
156 |
-
|
157 |
-
// set visible items by filter
|
158 |
-
if (opts.items.filter != '*' && !opts.items.visibleConf.variable)
|
159 |
-
{
|
160 |
-
opts.items.visibleConf.org = opts.items.visible;
|
161 |
-
opts.items.visible = gn_getVisibleItemsNextFilter(a_itm, opts, 0);
|
162 |
-
}
|
163 |
-
|
164 |
-
opts.items.visible = cf_getItemsAdjust(opts.items.visible, opts, opts.items.visibleConf.adjust, $tt0);
|
165 |
-
opts.items.visibleConf.old = opts.items.visible;
|
166 |
-
|
167 |
-
if (opts.responsive)
|
168 |
-
{
|
169 |
-
if (!opts.items.visibleConf.min)
|
170 |
-
{
|
171 |
-
opts.items.visibleConf.min = opts.items.visible;
|
172 |
-
}
|
173 |
-
if (!opts.items.visibleConf.max)
|
174 |
-
{
|
175 |
-
opts.items.visibleConf.max = opts.items.visible;
|
176 |
-
}
|
177 |
-
opts = in_getResponsiveValues(opts, a_itm, avail_primary);
|
178 |
-
}
|
179 |
-
else
|
180 |
-
{
|
181 |
-
opts.padding = cf_getPadding(opts.padding);
|
182 |
-
|
183 |
-
if (opts.align == 'top')
|
184 |
-
{
|
185 |
-
opts.align = 'left';
|
186 |
-
}
|
187 |
-
else if (opts.align == 'bottom')
|
188 |
-
{
|
189 |
-
opts.align = 'right';
|
190 |
-
}
|
191 |
-
|
192 |
-
switch (opts.align)
|
193 |
-
{
|
194 |
-
// align: center, left or right
|
195 |
-
case 'center':
|
196 |
-
case 'left':
|
197 |
-
case 'right':
|
198 |
-
if (opts[opts.d['width']] != 'variable')
|
199 |
-
{
|
200 |
-
opts = in_getAlignPadding(opts, a_itm);
|
201 |
-
opts.usePadding = true;
|
202 |
-
}
|
203 |
-
break;
|
204 |
-
|
205 |
-
// padding
|
206 |
-
default:
|
207 |
-
opts.align = false;
|
208 |
-
opts.usePadding = (
|
209 |
-
opts.padding[0] == 0 &&
|
210 |
-
opts.padding[1] == 0 &&
|
211 |
-
opts.padding[2] == 0 &&
|
212 |
-
opts.padding[3] == 0
|
213 |
-
) ? false : true;
|
214 |
-
break;
|
215 |
-
}
|
216 |
-
}
|
217 |
-
|
218 |
-
if (!is_number(opts.scroll.duration))
|
219 |
-
{
|
220 |
-
opts.scroll.duration = 500;
|
221 |
-
}
|
222 |
-
if (is_undefined(opts.scroll.items))
|
223 |
-
{
|
224 |
-
opts.scroll.items = (opts.responsive || opts.items.visibleConf.variable || opts.items.filter != '*')
|
225 |
-
? 'visible'
|
226 |
-
: opts.items.visible;
|
227 |
-
}
|
228 |
-
|
229 |
-
opts.auto = $.extend(true, {}, opts.scroll, opts.auto);
|
230 |
-
opts.prev = $.extend(true, {}, opts.scroll, opts.prev);
|
231 |
-
opts.next = $.extend(true, {}, opts.scroll, opts.next);
|
232 |
-
opts.pagination = $.extend(true, {}, opts.scroll, opts.pagination);
|
233 |
-
// swipe and mousewheel extend later on, per direction
|
234 |
-
|
235 |
-
opts.auto = go_complementAutoObject($tt0, opts.auto);
|
236 |
-
opts.prev = go_complementPrevNextObject($tt0, opts.prev);
|
237 |
-
opts.next = go_complementPrevNextObject($tt0, opts.next);
|
238 |
-
opts.pagination = go_complementPaginationObject($tt0, opts.pagination);
|
239 |
-
opts.swipe = go_complementSwipeObject($tt0, opts.swipe);
|
240 |
-
opts.mousewheel = go_complementMousewheelObject($tt0, opts.mousewheel);
|
241 |
-
|
242 |
-
if (opts.synchronise)
|
243 |
-
{
|
244 |
-
opts.synchronise = cf_getSynchArr(opts.synchronise);
|
245 |
-
}
|
246 |
-
|
247 |
-
|
248 |
-
// DEPRECATED
|
249 |
-
if (opts.auto.onPauseStart)
|
250 |
-
{
|
251 |
-
opts.auto.onTimeoutStart = opts.auto.onPauseStart;
|
252 |
-
deprecated('auto.onPauseStart', 'auto.onTimeoutStart');
|
253 |
-
}
|
254 |
-
if (opts.auto.onPausePause)
|
255 |
-
{
|
256 |
-
opts.auto.onTimeoutPause = opts.auto.onPausePause;
|
257 |
-
deprecated('auto.onPausePause', 'auto.onTimeoutPause');
|
258 |
-
}
|
259 |
-
if (opts.auto.onPauseEnd)
|
260 |
-
{
|
261 |
-
opts.auto.onTimeoutEnd = opts.auto.onPauseEnd;
|
262 |
-
deprecated('auto.onPauseEnd', 'auto.onTimeoutEnd');
|
263 |
-
}
|
264 |
-
if (opts.auto.pauseDuration)
|
265 |
-
{
|
266 |
-
opts.auto.timeoutDuration = opts.auto.pauseDuration;
|
267 |
-
deprecated('auto.pauseDuration', 'auto.timeoutDuration');
|
268 |
-
}
|
269 |
-
// /DEPRECATED
|
270 |
-
|
271 |
-
|
272 |
-
}; // /init
|
273 |
-
|
274 |
-
|
275 |
-
FN._build = function() {
|
276 |
-
$cfs.data('_cfs_isCarousel', true);
|
277 |
-
|
278 |
-
var a_itm = $cfs.children(),
|
279 |
-
orgCSS = in_mapCss($cfs, ['textAlign', 'float', 'position', 'top', 'right', 'bottom', 'left', 'zIndex', 'width', 'height', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft']),
|
280 |
-
newPosition = 'relative';
|
281 |
-
|
282 |
-
switch (orgCSS.position)
|
283 |
-
{
|
284 |
-
case 'absolute':
|
285 |
-
case 'fixed':
|
286 |
-
newPosition = orgCSS.position;
|
287 |
-
break;
|
288 |
-
}
|
289 |
-
|
290 |
-
if (conf.wrapper == 'parent')
|
291 |
-
{
|
292 |
-
sz_storeOrigCss($wrp);
|
293 |
-
}
|
294 |
-
else
|
295 |
-
{
|
296 |
-
$wrp.css(orgCSS);
|
297 |
-
}
|
298 |
-
$wrp.css({
|
299 |
-
'overflow' : 'hidden',
|
300 |
-
'position' : newPosition
|
301 |
-
});
|
302 |
-
|
303 |
-
sz_storeOrigCss($cfs);
|
304 |
-
$cfs.data('_cfs_origCssZindex', orgCSS.zIndex);
|
305 |
-
$cfs.css({
|
306 |
-
'textAlign' : 'left',
|
307 |
-
'float' : 'none',
|
308 |
-
'position' : 'absolute',
|
309 |
-
'top' : 0,
|
310 |
-
'right' : 'auto',
|
311 |
-
'bottom' : 'auto',
|
312 |
-
'left' : 0,
|
313 |
-
'marginTop' : 0,
|
314 |
-
'marginRight' : 0,
|
315 |
-
'marginBottom' : 0,
|
316 |
-
'marginLeft' : 0
|
317 |
-
});
|
318 |
-
|
319 |
-
sz_storeMargin(a_itm, opts);
|
320 |
-
sz_storeOrigCss(a_itm);
|
321 |
-
if (opts.responsive)
|
322 |
-
{
|
323 |
-
sz_setResponsiveSizes(opts, a_itm);
|
324 |
-
}
|
325 |
-
|
326 |
-
}; // /build
|
327 |
-
|
328 |
-
|
329 |
-
FN._bind_events = function() {
|
330 |
-
FN._unbind_events();
|
331 |
-
|
332 |
-
|
333 |
-
// stop event
|
334 |
-
$cfs.bind(cf_e('stop', conf), function(e, imm) {
|
335 |
-
e.stopPropagation();
|
336 |
-
|
337 |
-
// button
|
338 |
-
if (!crsl.isStopped)
|
339 |
-
{
|
340 |
-
if (opts.auto.button)
|
341 |
-
{
|
342 |
-
opts.auto.button.addClass(cf_c('stopped', conf));
|
343 |
-
}
|
344 |
-
}
|
345 |
-
|
346 |
-
// set stopped
|
347 |
-
crsl.isStopped = true;
|
348 |
-
|
349 |
-
if (opts.auto.play)
|
350 |
-
{
|
351 |
-
opts.auto.play = false;
|
352 |
-
$cfs.trigger(cf_e('pause', conf), imm);
|
353 |
-
}
|
354 |
-
return true;
|
355 |
-
});
|
356 |
-
|
357 |
-
|
358 |
-
// finish event
|
359 |
-
$cfs.bind(cf_e('finish', conf), function(e) {
|
360 |
-
e.stopPropagation();
|
361 |
-
if (crsl.isScrolling)
|
362 |
-
{
|
363 |
-
sc_stopScroll(scrl);
|
364 |
-
}
|
365 |
-
return true;
|
366 |
-
});
|
367 |
-
|
368 |
-
|
369 |
-
// pause event
|
370 |
-
$cfs.bind(cf_e('pause', conf), function(e, imm, res) {
|
371 |
-
e.stopPropagation();
|
372 |
-
tmrs = sc_clearTimers(tmrs);
|
373 |
-
|
374 |
-
// immediately pause
|
375 |
-
if (imm && crsl.isScrolling)
|
376 |
-
{
|
377 |
-
scrl.isStopped = true;
|
378 |
-
var nst = getTime() - scrl.startTime;
|
379 |
-
scrl.duration -= nst;
|
380 |
-
if (scrl.pre)
|
381 |
-
{
|
382 |
-
scrl.pre.duration -= nst;
|
383 |
-
}
|
384 |
-
if (scrl.post)
|
385 |
-
{
|
386 |
-
scrl.post.duration -= nst;
|
387 |
-
}
|
388 |
-
sc_stopScroll(scrl, false);
|
389 |
-
}
|
390 |
-
|
391 |
-
// update remaining pause-time
|
392 |
-
if (!crsl.isPaused && !crsl.isScrolling)
|
393 |
-
{
|
394 |
-
if (res)
|
395 |
-
{
|
396 |
-
tmrs.timePassed += getTime() - tmrs.startTime;
|
397 |
-
}
|
398 |
-
}
|
399 |
-
|
400 |
-
// button
|
401 |
-
if (!crsl.isPaused)
|
402 |
-
{
|
403 |
-
if (opts.auto.button)
|
404 |
-
{
|
405 |
-
opts.auto.button.addClass(cf_c('paused', conf));
|
406 |
-
}
|
407 |
-
}
|
408 |
-
|
409 |
-
// set paused
|
410 |
-
crsl.isPaused = true;
|
411 |
-
|
412 |
-
// pause pause callback
|
413 |
-
if (opts.auto.onTimeoutPause)
|
414 |
-
{
|
415 |
-
var dur1 = opts.auto.timeoutDuration - tmrs.timePassed,
|
416 |
-
perc = 100 - Math.ceil( dur1 * 100 / opts.auto.timeoutDuration );
|
417 |
-
|
418 |
-
opts.auto.onTimeoutPause.call($tt0, perc, dur1);
|
419 |
-
}
|
420 |
-
return true;
|
421 |
-
});
|
422 |
-
|
423 |
-
|
424 |
-
// play event
|
425 |
-
$cfs.bind(cf_e('play', conf), function(e, dir, del, res) {
|
426 |
-
e.stopPropagation();
|
427 |
-
tmrs = sc_clearTimers(tmrs);
|
428 |
-
|
429 |
-
// sort params
|
430 |
-
var v = [dir, del, res],
|
431 |
-
t = ['string', 'number', 'boolean'],
|
432 |
-
a = cf_sortParams(v, t);
|
433 |
-
|
434 |
-
dir = a[0];
|
435 |
-
del = a[1];
|
436 |
-
res = a[2];
|
437 |
-
|
438 |
-
if (dir != 'prev' && dir != 'next')
|
439 |
-
{
|
440 |
-
dir = crsl.direction;
|
441 |
-
}
|
442 |
-
if (!is_number(del))
|
443 |
-
{
|
444 |
-
del = 0;
|
445 |
-
}
|
446 |
-
if (!is_boolean(res))
|
447 |
-
{
|
448 |
-
res = false;
|
449 |
-
}
|
450 |
-
|
451 |
-
// stopped?
|
452 |
-
if (res)
|
453 |
-
{
|
454 |
-
crsl.isStopped = false;
|
455 |
-
opts.auto.play = true;
|
456 |
-
}
|
457 |
-
if (!opts.auto.play)
|
458 |
-
{
|
459 |
-
e.stopImmediatePropagation();
|
460 |
-
return debug(conf, 'Carousel stopped: Not scrolling.');
|
461 |
-
}
|
462 |
-
|
463 |
-
// button
|
464 |
-
if (crsl.isPaused)
|
465 |
-
{
|
466 |
-
if (opts.auto.button)
|
467 |
-
{
|
468 |
-
opts.auto.button.removeClass(cf_c('stopped', conf));
|
469 |
-
opts.auto.button.removeClass(cf_c('paused', conf));
|
470 |
-
}
|
471 |
-
}
|
472 |
-
|
473 |
-
// set playing
|
474 |
-
crsl.isPaused = false;
|
475 |
-
tmrs.startTime = getTime();
|
476 |
-
|
477 |
-
// timeout the scrolling
|
478 |
-
var dur1 = opts.auto.timeoutDuration + del;
|
479 |
-
dur2 = dur1 - tmrs.timePassed;
|
480 |
-
perc = 100 - Math.ceil(dur2 * 100 / dur1);
|
481 |
-
|
482 |
-
if (opts.auto.progress)
|
483 |
-
{
|
484 |
-
tmrs.progress = setInterval(function() {
|
485 |
-
var pasd = getTime() - tmrs.startTime + tmrs.timePassed,
|
486 |
-
perc = Math.ceil(pasd * 100 / dur1);
|
487 |
-
opts.auto.progress.updater.call(opts.auto.progress.bar[0], perc);
|
488 |
-
}, opts.auto.progress.interval);
|
489 |
-
}
|
490 |
-
|
491 |
-
tmrs.auto = setTimeout(function() {
|
492 |
-
if (opts.auto.progress)
|
493 |
-
{
|
494 |
-
opts.auto.progress.updater.call(opts.auto.progress.bar[0], 100);
|
495 |
-
}
|
496 |
-
if (opts.auto.onTimeoutEnd)
|
497 |
-
{
|
498 |
-
opts.auto.onTimeoutEnd.call($tt0, perc, dur2);
|
499 |
-
}
|
500 |
-
if (crsl.isScrolling)
|
501 |
-
{
|
502 |
-
$cfs.trigger(cf_e('play', conf), dir);
|
503 |
-
}
|
504 |
-
else
|
505 |
-
{
|
506 |
-
$cfs.trigger(cf_e(dir, conf), opts.auto);
|
507 |
-
}
|
508 |
-
}, dur2);
|
509 |
-
|
510 |
-
// pause start callback
|
511 |
-
if (opts.auto.onTimeoutStart)
|
512 |
-
{
|
513 |
-
opts.auto.onTimeoutStart.call($tt0, perc, dur2);
|
514 |
-
}
|
515 |
-
|
516 |
-
return true;
|
517 |
-
});
|
518 |
-
|
519 |
-
|
520 |
-
// resume event
|
521 |
-
$cfs.bind(cf_e('resume', conf), function(e) {
|
522 |
-
e.stopPropagation();
|
523 |
-
if (scrl.isStopped)
|
524 |
-
{
|
525 |
-
scrl.isStopped = false;
|
526 |
-
crsl.isPaused = false;
|
527 |
-
crsl.isScrolling = true;
|
528 |
-
scrl.startTime = getTime();
|
529 |
-
sc_startScroll(scrl, conf);
|
530 |
-
}
|
531 |
-
else
|
532 |
-
{
|
533 |
-
$cfs.trigger(cf_e('play', conf));
|
534 |
-
}
|
535 |
-
return true;
|
536 |
-
});
|
537 |
-
|
538 |
-
|
539 |
-
// prev + next events
|
540 |
-
$cfs.bind(cf_e('prev', conf)+' '+cf_e('next', conf), function(e, obj, num, clb, que) {
|
541 |
-
e.stopPropagation();
|
542 |
-
|
543 |
-
// stopped or hidden carousel, don't scroll, don't queue
|
544 |
-
if (crsl.isStopped || $cfs.is(':hidden'))
|
545 |
-
{
|
546 |
-
e.stopImmediatePropagation();
|
547 |
-
return debug(conf, 'Carousel stopped or hidden: Not scrolling.');
|
548 |
-
}
|
549 |
-
|
550 |
-
// not enough items
|
551 |
-
var minimum = (is_number(opts.items.minimum)) ? opts.items.minimum : opts.items.visible + 1;
|
552 |
-
if (minimum > itms.total)
|
553 |
-
{
|
554 |
-
e.stopImmediatePropagation();
|
555 |
-
return debug(conf, 'Not enough items ('+itms.total+' total, '+minimum+' needed): Not scrolling.');
|
556 |
-
}
|
557 |
-
|
558 |
-
// get config
|
559 |
-
var v = [obj, num, clb, que],
|
560 |
-
t = ['object', 'number/string', 'function', 'boolean'],
|
561 |
-
a = cf_sortParams(v, t);
|
562 |
-
|
563 |
-
obj = a[0];
|
564 |
-
num = a[1];
|
565 |
-
clb = a[2];
|
566 |
-
que = a[3];
|
567 |
-
|
568 |
-
var eType = e.type.slice(conf.events.prefix.length);
|
569 |
-
|
570 |
-
if (!is_object(obj))
|
571 |
-
{
|
572 |
-
obj = {};
|
573 |
-
}
|
574 |
-
if (is_function(clb))
|
575 |
-
{
|
576 |
-
obj.onAfter = clb;
|
577 |
-
}
|
578 |
-
if (is_boolean(que))
|
579 |
-
{
|
580 |
-
obj.queue = que;
|
581 |
-
}
|
582 |
-
obj = $.extend(true, {}, opts[eType], obj);
|
583 |
-
|
584 |
-
// test conditions callback
|
585 |
-
if (obj.conditions && !obj.conditions.call($tt0, eType))
|
586 |
-
{
|
587 |
-
e.stopImmediatePropagation();
|
588 |
-
return debug(conf, 'Callback "conditions" returned false.');
|
589 |
-
}
|
590 |
-
|
591 |
-
if (!is_number(num))
|
592 |
-
{
|
593 |
-
if (opts.items.filter != '*')
|
594 |
-
{
|
595 |
-
num = 'visible';
|
596 |
-
}
|
597 |
-
else
|
598 |
-
{
|
599 |
-
var arr = [num, obj.items, opts[eType].items];
|
600 |
-
for (var a = 0, l = arr.length; a < l; a++)
|
601 |
-
{
|
602 |
-
if (is_number(arr[a]) || arr[a] == 'page' || arr[a] == 'visible') {
|
603 |
-
num = arr[a];
|
604 |
-
break;
|
605 |
-
}
|
606 |
-
}
|
607 |
-
}
|
608 |
-
switch(num) {
|
609 |
-
case 'page':
|
610 |
-
e.stopImmediatePropagation();
|
611 |
-
return $cfs.triggerHandler(cf_e(eType+'Page', conf), [obj, clb]);
|
612 |
-
break;
|
613 |
-
|
614 |
-
case 'visible':
|
615 |
-
if (!opts.items.visibleConf.variable && opts.items.filter == '*')
|
616 |
-
{
|
617 |
-
num = opts.items.visible;
|
618 |
-
}
|
619 |
-
break;
|
620 |
-
}
|
621 |
-
}
|
622 |
-
|
623 |
-
// resume animation, add current to queue
|
624 |
-
if (scrl.isStopped)
|
625 |
-
{
|
626 |
-
$cfs.trigger(cf_e('resume', conf));
|
627 |
-
$cfs.trigger(cf_e('queue', conf), [eType, [obj, num, clb]]);
|
628 |
-
e.stopImmediatePropagation();
|
629 |
-
return debug(conf, 'Carousel resumed scrolling.');
|
630 |
-
}
|
631 |
-
|
632 |
-
// queue if scrolling
|
633 |
-
if (obj.duration > 0)
|
634 |
-
{
|
635 |
-
if (crsl.isScrolling)
|
636 |
-
{
|
637 |
-
if (obj.queue)
|
638 |
-
{
|
639 |
-
if (obj.queue == 'last')
|
640 |
-
{
|
641 |
-
queu = [];
|
642 |
-
}
|
643 |
-
if (obj.queue != 'first' || queu.length == 0)
|
644 |
-
{
|
645 |
-
$cfs.trigger(cf_e('queue', conf), [eType, [obj, num, clb]]);
|
646 |
-
}
|
647 |
-
}
|
648 |
-
e.stopImmediatePropagation();
|
649 |
-
return debug(conf, 'Carousel currently scrolling.');
|
650 |
-
}
|
651 |
-
}
|
652 |
-
|
653 |
-
tmrs.timePassed = 0;
|
654 |
-
$cfs.trigger(cf_e('slide_'+eType, conf), [obj, num]);
|
655 |
-
|
656 |
-
// synchronise
|
657 |
-
if (opts.synchronise)
|
658 |
-
{
|
659 |
-
var s = opts.synchronise,
|
660 |
-
c = [obj, num];
|
661 |
-
|
662 |
-
for (var j = 0, l = s.length; j < l; j++) {
|
663 |
-
var d = eType;
|
664 |
-
if (!s[j][2])
|
665 |
-
{
|
666 |
-
d = (d == 'prev') ? 'next' : 'prev';
|
667 |
-
}
|
668 |
-
if (!s[j][1])
|
669 |
-
{
|
670 |
-
c[0] = s[j][0].triggerHandler('_cfs_triggerEvent', ['configuration', d]);
|
671 |
-
}
|
672 |
-
c[1] = num + s[j][3];
|
673 |
-
s[j][0].trigger('_cfs_triggerEvent', ['slide_'+d, c]);
|
674 |
-
}
|
675 |
-
}
|
676 |
-
return true;
|
677 |
-
});
|
678 |
-
|
679 |
-
|
680 |
-
// prev event
|
681 |
-
$cfs.bind(cf_e('slide_prev', conf), function(e, sO, nI) {
|
682 |
-
e.stopPropagation();
|
683 |
-
var a_itm = $cfs.children();
|
684 |
-
|
685 |
-
// non-circular at start, scroll to end
|
686 |
-
if (!opts.circular)
|
687 |
-
{
|
688 |
-
if (itms.first == 0)
|
689 |
-
{
|
690 |
-
if (opts.infinite)
|
691 |
-
{
|
692 |
-
$cfs.trigger(cf_e('next', conf), itms.total-1);
|
693 |
-
}
|
694 |
-
return e.stopImmediatePropagation();
|
695 |
-
}
|
696 |
-
}
|
697 |
-
|
698 |
-
sz_resetMargin(a_itm, opts);
|
699 |
-
|
700 |
-
// find number of items to scroll
|
701 |
-
if (!is_number(nI))
|
702 |
-
{
|
703 |
-
if (opts.items.visibleConf.variable)
|
704 |
-
{
|
705 |
-
nI = gn_getVisibleItemsPrev(a_itm, opts, itms.total-1);
|
706 |
-
}
|
707 |
-
else if (opts.items.filter != '*')
|
708 |
-
{
|
709 |
-
var xI = (is_number(sO.items)) ? sO.items : gn_getVisibleOrg($cfs, opts);
|
710 |
-
nI = gn_getScrollItemsPrevFilter(a_itm, opts, itms.total-1, xI);
|
711 |
-
}
|
712 |
-
else
|
713 |
-
{
|
714 |
-
nI = opts.items.visible;
|
715 |
-
}
|
716 |
-
nI = cf_getAdjust(nI, opts, sO.items, $tt0);
|
717 |
-
}
|
718 |
-
|
719 |
-
// prevent non-circular from scrolling to far
|
720 |
-
if (!opts.circular)
|
721 |
-
{
|
722 |
-
if (itms.total - nI < itms.first)
|
723 |
-
{
|
724 |
-
nI = itms.total - itms.first;
|
725 |
-
}
|
726 |
-
}
|
727 |
-
|
728 |
-
// set new number of visible items
|
729 |
-
opts.items.visibleConf.old = opts.items.visible;
|
730 |
-
if (opts.items.visibleConf.variable)
|
731 |
-
{
|
732 |
-
var vI = cf_getItemsAdjust(gn_getVisibleItemsNext(a_itm, opts, itms.total-nI), opts, opts.items.visibleConf.adjust, $tt0);
|
733 |
-
if (opts.items.visible+nI <= vI && nI < itms.total)
|
734 |
-
{
|
735 |
-
nI++;
|
736 |
-
vI = cf_getItemsAdjust(gn_getVisibleItemsNext(a_itm, opts, itms.total-nI), opts, opts.items.visibleConf.adjust, $tt0);
|
737 |
-
}
|
738 |
-
opts.items.visible = vI;
|
739 |
-
}
|
740 |
-
else if (opts.items.filter != '*')
|
741 |
-
{
|
742 |
-
var vI = gn_getVisibleItemsNextFilter(a_itm, opts, itms.total-nI);
|
743 |
-
opts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0);
|
744 |
-
}
|
745 |
-
|
746 |
-
sz_resetMargin(a_itm, opts, true);
|
747 |
-
|
748 |
-
// scroll 0, don't scroll
|
749 |
-
if (nI == 0)
|
750 |
-
{
|
751 |
-
e.stopImmediatePropagation();
|
752 |
-
return debug(conf, '0 items to scroll: Not scrolling.');
|
753 |
-
}
|
754 |
-
debug(conf, 'Scrolling '+nI+' items backward.');
|
755 |
-
|
756 |
-
|
757 |
-
// save new config
|
758 |
-
itms.first += nI;
|
759 |
-
while (itms.first >= itms.total)
|
760 |
-
{
|
761 |
-
itms.first -= itms.total;
|
762 |
-
}
|
763 |
-
|
764 |
-
// non-circular callback
|
765 |
-
if (!opts.circular)
|
766 |
-
{
|
767 |
-
if (itms.first == 0 && sO.onEnd)
|
768 |
-
{
|
769 |
-
sO.onEnd.call($tt0, 'prev');
|
770 |
-
}
|
771 |
-
if (!opts.infinite)
|
772 |
-
{
|
773 |
-
nv_enableNavi(opts, itms.first, conf);
|
774 |
-
}
|
775 |
-
}
|
776 |
-
|
777 |
-
// rearrange items
|
778 |
-
$cfs.children().slice(itms.total-nI, itms.total).prependTo($cfs);
|
779 |
-
if (itms.total < opts.items.visible + nI)
|
780 |
-
{
|
781 |
-
$cfs.children().slice(0, (opts.items.visible+nI)-itms.total).clone(true).appendTo($cfs);
|
782 |
-
}
|
783 |
-
|
784 |
-
// the needed items
|
785 |
-
var a_itm = $cfs.children(),
|
786 |
-
i_old = gi_getOldItemsPrev(a_itm, opts, nI),
|
787 |
-
i_new = gi_getNewItemsPrev(a_itm, opts),
|
788 |
-
i_cur_l = a_itm.eq(nI-1),
|
789 |
-
i_old_l = i_old.last(),
|
790 |
-
i_new_l = i_new.last();
|
791 |
-
|
792 |
-
sz_resetMargin(a_itm, opts);
|
793 |
-
|
794 |
-
var pL = 0,
|
795 |
-
pR = 0;
|
796 |
-
|
797 |
-
if (opts.align)
|
798 |
-
{
|
799 |
-
var p = cf_getAlignPadding(i_new, opts);
|
800 |
-
pL = p[0];
|
801 |
-
pR = p[1];
|
802 |
-
}
|
803 |
-
var oL = (pL < 0) ? opts.padding[opts.d[3]] : 0;
|
804 |
-
|
805 |
-
// hide items for fx directscroll
|
806 |
-
var hiddenitems = false,
|
807 |
-
i_skp = $();
|
808 |
-
if (opts.items.visible < nI)
|
809 |
-
{
|
810 |
-
i_skp = a_itm.slice(opts.items.visibleConf.old, nI);
|
811 |
-
if (sO.fx == 'directscroll')
|
812 |
-
{
|
813 |
-
var orgW = opts.items[opts.d['width']];
|
814 |
-
hiddenitems = i_skp;
|
815 |
-
i_cur_l = i_new_l;
|
816 |
-
sc_hideHiddenItems(hiddenitems);
|
817 |
-
opts.items[opts.d['width']] = 'variable';
|
818 |
-
}
|
819 |
-
}
|
820 |
-
// save new sizes
|
821 |
-
var $cf2 = false,
|
822 |
-
i_siz = ms_getTotalSize(a_itm.slice(0, nI), opts, 'width'),
|
823 |
-
w_siz = cf_mapWrapperSizes(ms_getSizes(i_new, opts, true), opts, !opts.usePadding),
|
824 |
-
i_siz_vis = 0,
|
825 |
-
a_cfs = {},
|
826 |
-
a_wsz = {},
|
827 |
-
a_cur = {},
|
828 |
-
a_old = {},
|
829 |
-
a_new = {},
|
830 |
-
a_lef = {},
|
831 |
-
a_lef_vis = {},
|
832 |
-
a_dur = sc_getDuration(sO, opts, nI, i_siz);
|
833 |
-
|
834 |
-
switch(sO.fx)
|
835 |
-
{
|
836 |
-
case 'cover':
|
837 |
-
case 'cover-fade':
|
838 |
-
i_siz_vis = ms_getTotalSize(a_itm.slice(0, opts.items.visible), opts, 'width');
|
839 |
-
break;
|
840 |
-
}
|
841 |
-
|
842 |
-
if (hiddenitems)
|
843 |
-
{
|
844 |
-
opts.items[opts.d['width']] = orgW;
|
845 |
-
}
|
846 |
-
|
847 |
-
sz_resetMargin(a_itm, opts, true);
|
848 |
-
if (pR >= 0)
|
849 |
-
{
|
850 |
-
sz_resetMargin(i_old_l, opts, opts.padding[opts.d[1]]);
|
851 |
-
}
|
852 |
-
if (pL >= 0)
|
853 |
-
{
|
854 |
-
sz_resetMargin(i_cur_l, opts, opts.padding[opts.d[3]]);
|
855 |
-
}
|
856 |
-
|
857 |
-
if (opts.align)
|
858 |
-
{
|
859 |
-
opts.padding[opts.d[1]] = pR;
|
860 |
-
opts.padding[opts.d[3]] = pL;
|
861 |
-
}
|
862 |
-
|
863 |
-
a_lef[opts.d['left']] = -(i_siz - oL);
|
864 |
-
a_lef_vis[opts.d['left']] = -(i_siz_vis - oL);
|
865 |
-
a_wsz[opts.d['left']] = w_siz[opts.d['width']];
|
866 |
-
|
867 |
-
// scrolling functions
|
868 |
-
var _s_wrapper = function() {},
|
869 |
-
_a_wrapper = function() {},
|
870 |
-
_s_paddingold = function() {},
|
871 |
-
_a_paddingold = function() {},
|
872 |
-
_s_paddingnew = function() {},
|
873 |
-
_a_paddingnew = function() {},
|
874 |
-
_s_paddingcur = function() {},
|
875 |
-
_a_paddingcur = function() {},
|
876 |
-
_onafter = function() {},
|
877 |
-
_moveitems = function() {},
|
878 |
-
_position = function() {};
|
879 |
-
|
880 |
-
// clone carousel
|
881 |
-
switch(sO.fx)
|
882 |
-
{
|
883 |
-
case 'crossfade':
|
884 |
-
case 'cover':
|
885 |
-
case 'cover-fade':
|
886 |
-
case 'uncover':
|
887 |
-
case 'uncover-fade':
|
888 |
-
$cf2 = $cfs.clone(true).appendTo($wrp);
|
889 |
-
break;
|
890 |
-
}
|
891 |
-
switch(sO.fx)
|
892 |
-
{
|
893 |
-
case 'crossfade':
|
894 |
-
case 'uncover':
|
895 |
-
case 'uncover-fade':
|
896 |
-
$cf2.children().slice(0, nI).remove();
|
897 |
-
$cf2.children().slice(opts.items.visibleConf.old).remove();
|
898 |
-
break;
|
899 |
-
|
900 |
-
case 'cover':
|
901 |
-
case 'cover-fade':
|
902 |
-
$cf2.children().slice(opts.items.visible).remove();
|
903 |
-
$cf2.css(a_lef_vis);
|
904 |
-
break;
|
905 |
-
}
|
906 |
-
|
907 |
-
$cfs.css(a_lef);
|
908 |
-
|
909 |
-
// reset all scrolls
|
910 |
-
scrl = sc_setScroll(a_dur, sO.easing, conf);
|
911 |
-
|
912 |
-
// animate / set carousel
|
913 |
-
a_cfs[opts.d['left']] = (opts.usePadding) ? opts.padding[opts.d[3]] : 0;
|
914 |
-
|
915 |
-
// animate / set wrapper
|
916 |
-
if (opts[opts.d['width']] == 'variable' || opts[opts.d['height']] == 'variable')
|
917 |
-
{
|
918 |
-
_s_wrapper = function() {
|
919 |
-
$wrp.css(w_siz);
|
920 |
-
};
|
921 |
-
_a_wrapper = function() {
|
922 |
-
scrl.anims.push([$wrp, w_siz]);
|
923 |
-
};
|
924 |
-
}
|
925 |
-
|
926 |
-
// animate / set items
|
927 |
-
if (opts.usePadding)
|
928 |
-
{
|
929 |
-
if (i_new_l.not(i_cur_l).length)
|
930 |
-
{
|
931 |
-
a_cur[opts.d['marginRight']] = i_cur_l.data('_cfs_origCssMargin');
|
932 |
-
|
933 |
-
if (pL < 0)
|
934 |
-
{
|
935 |
-
i_cur_l.css(a_cur);
|
936 |
-
}
|
937 |
-
else
|
938 |
-
{
|
939 |
-
_s_paddingcur = function() {
|
940 |
-
i_cur_l.css(a_cur);
|
941 |
-
};
|
942 |
-
_a_paddingcur = function() {
|
943 |
-
scrl.anims.push([i_cur_l, a_cur]);
|
944 |
-
};
|
945 |
-
}
|
946 |
-
}
|
947 |
-
switch(sO.fx)
|
948 |
-
{
|
949 |
-
case 'cover':
|
950 |
-
case 'cover-fade':
|
951 |
-
$cf2.children().eq(nI-1).css(a_cur);
|
952 |
-
break;
|
953 |
-
}
|
954 |
-
|
955 |
-
if (i_new_l.not(i_old_l).length)
|
956 |
-
{
|
957 |
-
a_old[opts.d['marginRight']] = i_old_l.data('_cfs_origCssMargin');
|
958 |
-
_s_paddingold = function() {
|
959 |
-
i_old_l.css(a_old);
|
960 |
-
};
|
961 |
-
_a_paddingold = function() {
|
962 |
-
scrl.anims.push([i_old_l, a_old]);
|
963 |
-
};
|
964 |
-
}
|
965 |
-
|
966 |
-
if (pR >= 0)
|
967 |
-
{
|
968 |
-
a_new[opts.d['marginRight']] = i_new_l.data('_cfs_origCssMargin') + opts.padding[opts.d[1]];
|
969 |
-
_s_paddingnew = function() {
|
970 |
-
i_new_l.css(a_new);
|
971 |
-
};
|
972 |
-
_a_paddingnew = function() {
|
973 |
-
scrl.anims.push([i_new_l, a_new]);
|
974 |
-
};
|
975 |
-
}
|
976 |
-
}
|
977 |
-
|
978 |
-
// set position
|
979 |
-
_position = function() {
|
980 |
-
$cfs.css(a_cfs);
|
981 |
-
};
|
982 |
-
|
983 |
-
|
984 |
-
var overFill = opts.items.visible+nI-itms.total;
|
985 |
-
|
986 |
-
// rearrange items
|
987 |
-
_moveitems = function() {
|
988 |
-
if (overFill > 0)
|
989 |
-
{
|
990 |
-
$cfs.children().slice(itms.total).remove();
|
991 |
-
i_old = $( $cfs.children().slice(itms.total-(opts.items.visible-overFill)).get().concat( $cfs.children().slice(0, overFill).get() ) );
|
992 |
-
}
|
993 |
-
sc_showHiddenItems(hiddenitems);
|
994 |
-
|
995 |
-
if (opts.usePadding)
|
996 |
-
{
|
997 |
-
var l_itm = $cfs.children().eq(opts.items.visible+nI-1);
|
998 |
-
l_itm.css(opts.d['marginRight'], l_itm.data('_cfs_origCssMargin'));
|
999 |
-
}
|
1000 |
-
};
|
1001 |
-
|
1002 |
-
|
1003 |
-
var cb_arguments = sc_mapCallbackArguments(i_old, i_skp, i_new, nI, 'prev', a_dur, w_siz);
|
1004 |
-
|
1005 |
-
// fire onAfter callbacks
|
1006 |
-
_onafter = function() {
|
1007 |
-
sc_afterScroll($cfs, $cf2, sO);
|
1008 |
-
crsl.isScrolling = false;
|
1009 |
-
clbk.onAfter = sc_fireCallbacks($tt0, sO, 'onAfter', cb_arguments, clbk);
|
1010 |
-
queu = sc_fireQueue($cfs, queu, conf);
|
1011 |
-
|
1012 |
-
if (!crsl.isPaused)
|
1013 |
-
{
|
1014 |
-
$cfs.trigger(cf_e('play', conf));
|
1015 |
-
}
|
1016 |
-
};
|
1017 |
-
|
1018 |
-
// fire onBefore callback
|
1019 |
-
crsl.isScrolling = true;
|
1020 |
-
tmrs = sc_clearTimers(tmrs);
|
1021 |
-
clbk.onBefore = sc_fireCallbacks($tt0, sO, 'onBefore', cb_arguments, clbk);
|
1022 |
-
|
1023 |
-
switch(sO.fx)
|
1024 |
-
{
|
1025 |
-
case 'none':
|
1026 |
-
$cfs.css(a_cfs);
|
1027 |
-
_s_wrapper();
|
1028 |
-
_s_paddingold();
|
1029 |
-
_s_paddingnew();
|
1030 |
-
_s_paddingcur();
|
1031 |
-
_position();
|
1032 |
-
_moveitems();
|
1033 |
-
_onafter();
|
1034 |
-
break;
|
1035 |
-
|
1036 |
-
case 'fade':
|
1037 |
-
scrl.anims.push([$cfs, { 'opacity': 0 }, function() {
|
1038 |
-
_s_wrapper();
|
1039 |
-
_s_paddingold();
|
1040 |
-
_s_paddingnew();
|
1041 |
-
_s_paddingcur();
|
1042 |
-
_position();
|
1043 |
-
_moveitems();
|
1044 |
-
scrl = sc_setScroll(a_dur, sO.easing, conf);
|
1045 |
-
scrl.anims.push([$cfs, { 'opacity': 1 }, _onafter]);
|
1046 |
-
sc_startScroll(scrl, conf);
|
1047 |
-
}]);
|
1048 |
-
break;
|
1049 |
-
|
1050 |
-
case 'crossfade':
|
1051 |
-
$cfs.css({ 'opacity': 0 });
|
1052 |
-
scrl.anims.push([$cf2, { 'opacity': 0 }]);
|
1053 |
-
scrl.anims.push([$cfs, { 'opacity': 1 }, _onafter]);
|
1054 |
-
_a_wrapper();
|
1055 |
-
_s_paddingold();
|
1056 |
-
_s_paddingnew();
|
1057 |
-
_s_paddingcur();
|
1058 |
-
_position();
|
1059 |
-
_moveitems();
|
1060 |
-
break;
|
1061 |
-
|
1062 |
-
case 'cover':
|
1063 |
-
scrl.anims.push([$cf2, a_cfs, function() {
|
1064 |
-
_s_paddingold();
|
1065 |
-
_s_paddingnew();
|
1066 |
-
_s_paddingcur();
|
1067 |
-
_position();
|
1068 |
-
_moveitems();
|
1069 |
-
_onafter();
|
1070 |
-
}]);
|
1071 |
-
_a_wrapper();
|
1072 |
-
break;
|
1073 |
-
|
1074 |
-
case 'cover-fade':
|
1075 |
-
scrl.anims.push([$cfs, { 'opacity': 0 }]);
|
1076 |
-
scrl.anims.push([$cf2, a_cfs, function() {
|
1077 |
-
_s_paddingold();
|
1078 |
-
_s_paddingnew();
|
1079 |
-
_s_paddingcur();
|
1080 |
-
_position();
|
1081 |
-
_moveitems();
|
1082 |
-
_onafter();
|
1083 |
-
}]);
|
1084 |
-
_a_wrapper();
|
1085 |
-
break;
|
1086 |
-
|
1087 |
-
case 'uncover':
|
1088 |
-
scrl.anims.push([$cf2, a_wsz, _onafter]);
|
1089 |
-
_a_wrapper();
|
1090 |
-
_s_paddingold();
|
1091 |
-
_s_paddingnew();
|
1092 |
-
_s_paddingcur();
|
1093 |
-
_position();
|
1094 |
-
_moveitems();
|
1095 |
-
break;
|
1096 |
-
|
1097 |
-
case 'uncover-fade':
|
1098 |
-
$cfs.css({ 'opacity': 0 });
|
1099 |
-
scrl.anims.push([$cfs, { 'opacity': 1 }]);
|
1100 |
-
scrl.anims.push([$cf2, a_wsz, _onafter]);
|
1101 |
-
_a_wrapper();
|
1102 |
-
_s_paddingold();
|
1103 |
-
_s_paddingnew();
|
1104 |
-
_s_paddingcur();
|
1105 |
-
_position();
|
1106 |
-
_moveitems();
|
1107 |
-
break;
|
1108 |
-
|
1109 |
-
default:
|
1110 |
-
scrl.anims.push([$cfs, a_cfs, function() {
|
1111 |
-
_moveitems();
|
1112 |
-
_onafter();
|
1113 |
-
}]);
|
1114 |
-
_a_wrapper();
|
1115 |
-
_a_paddingold();
|
1116 |
-
_a_paddingnew();
|
1117 |
-
_a_paddingcur();
|
1118 |
-
break;
|
1119 |
-
}
|
1120 |
-
|
1121 |
-
sc_startScroll(scrl, conf);
|
1122 |
-
cf_setCookie(opts.cookie, $cfs, conf);
|
1123 |
-
|
1124 |
-
$cfs.trigger(cf_e('updatePageStatus', conf), [false, w_siz]);
|
1125 |
-
|
1126 |
-
return true;
|
1127 |
-
});
|
1128 |
-
|
1129 |
-
|
1130 |
-
// next event
|
1131 |
-
$cfs.bind(cf_e('slide_next', conf), function(e, sO, nI) {
|
1132 |
-
e.stopPropagation();
|
1133 |
-
var a_itm = $cfs.children();
|
1134 |
-
|
1135 |
-
// non-circular at end, scroll to start
|
1136 |
-
if (!opts.circular)
|
1137 |
-
{
|
1138 |
-
if (itms.first == opts.items.visible)
|
1139 |
-
{
|
1140 |
-
if (opts.infinite)
|
1141 |
-
{
|
1142 |
-
$cfs.trigger(cf_e('prev', conf), itms.total-1);
|
1143 |
-
}
|
1144 |
-
return e.stopImmediatePropagation();
|
1145 |
-
}
|
1146 |
-
}
|
1147 |
-
|
1148 |
-
sz_resetMargin(a_itm, opts);
|
1149 |
-
|
1150 |
-
// find number of items to scroll
|
1151 |
-
if (!is_number(nI))
|
1152 |
-
{
|
1153 |
-
if (opts.items.filter != '*')
|
1154 |
-
{
|
1155 |
-
var xI = (is_number(sO.items)) ? sO.items : gn_getVisibleOrg($cfs, opts);
|
1156 |
-
nI = gn_getScrollItemsNextFilter(a_itm, opts, 0, xI);
|
1157 |
-
}
|
1158 |
-
else
|
1159 |
-
{
|
1160 |
-
nI = opts.items.visible;
|
1161 |
-
}
|
1162 |
-
nI = cf_getAdjust(nI, opts, sO.items, $tt0);
|
1163 |
-
}
|
1164 |
-
|
1165 |
-
var lastItemNr = (itms.first == 0) ? itms.total : itms.first;
|
1166 |
-
|
1167 |
-
// prevent non-circular from scrolling to far
|
1168 |
-
if (!opts.circular)
|
1169 |
-
{
|
1170 |
-
if (opts.items.visibleConf.variable)
|
1171 |
-
{
|
1172 |
-
var vI = gn_getVisibleItemsNext(a_itm, opts, nI),
|
1173 |
-
xI = gn_getVisibleItemsPrev(a_itm, opts, lastItemNr-1);
|
1174 |
-
}
|
1175 |
-
else
|
1176 |
-
{
|
1177 |
-
var vI = opts.items.visible,
|
1178 |
-
xI = opts.items.visible;
|
1179 |
-
}
|
1180 |
-
|
1181 |
-
if (nI + vI > lastItemNr)
|
1182 |
-
{
|
1183 |
-
nI = lastItemNr - xI;
|
1184 |
-
}
|
1185 |
-
}
|
1186 |
-
|
1187 |
-
// set new number of visible items
|
1188 |
-
opts.items.visibleConf.old = opts.items.visible;
|
1189 |
-
if (opts.items.visibleConf.variable)
|
1190 |
-
{
|
1191 |
-
var vI = cf_getItemsAdjust(gn_getVisibleItemsNextTestCircular(a_itm, opts, nI, lastItemNr), opts, opts.items.visibleConf.adjust, $tt0);
|
1192 |
-
while (opts.items.visible-nI >= vI && nI < itms.total)
|
1193 |
-
{
|
1194 |
-
nI++;
|
1195 |
-
vI = cf_getItemsAdjust(gn_getVisibleItemsNextTestCircular(a_itm, opts, nI, lastItemNr), opts, opts.items.visibleConf.adjust, $tt0);
|
1196 |
-
}
|
1197 |
-
opts.items.visible = vI;
|
1198 |
-
}
|
1199 |
-
else if (opts.items.filter != '*')
|
1200 |
-
{
|
1201 |
-
var vI = gn_getVisibleItemsNextFilter(a_itm, opts, nI);
|
1202 |
-
opts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0);
|
1203 |
-
}
|
1204 |
-
|
1205 |
-
sz_resetMargin(a_itm, opts, true);
|
1206 |
-
|
1207 |
-
// scroll 0, don't scroll
|
1208 |
-
if (nI == 0)
|
1209 |
-
{
|
1210 |
-
e.stopImmediatePropagation();
|
1211 |
-
return debug(conf, '0 items to scroll: Not scrolling.');
|
1212 |
-
}
|
1213 |
-
debug(conf, 'Scrolling '+nI+' items forward.');
|
1214 |
-
|
1215 |
-
|
1216 |
-
// save new config
|
1217 |
-
itms.first -= nI;
|
1218 |
-
while (itms.first < 0)
|
1219 |
-
{
|
1220 |
-
itms.first += itms.total;
|
1221 |
-
}
|
1222 |
-
|
1223 |
-
// non-circular callback
|
1224 |
-
if (!opts.circular)
|
1225 |
-
{
|
1226 |
-
if (itms.first == opts.items.visible && sO.onEnd)
|
1227 |
-
{
|
1228 |
-
sO.onEnd.call($tt0, 'next');
|
1229 |
-
}
|
1230 |
-
if (!opts.infinite)
|
1231 |
-
{
|
1232 |
-
nv_enableNavi(opts, itms.first, conf);
|
1233 |
-
}
|
1234 |
-
}
|
1235 |
-
|
1236 |
-
// rearrange items
|
1237 |
-
if (itms.total < opts.items.visible+nI)
|
1238 |
-
{
|
1239 |
-
$cfs.children().slice(0, (opts.items.visible+nI)-itms.total).clone(true).appendTo($cfs);
|
1240 |
-
}
|
1241 |
-
|
1242 |
-
// the needed items
|
1243 |
-
var a_itm = $cfs.children(),
|
1244 |
-
i_old = gi_getOldItemsNext(a_itm, opts),
|
1245 |
-
i_new = gi_getNewItemsNext(a_itm, opts, nI),
|
1246 |
-
i_cur_l = a_itm.eq(nI-1),
|
1247 |
-
i_old_l = i_old.last(),
|
1248 |
-
i_new_l = i_new.last();
|
1249 |
-
|
1250 |
-
sz_resetMargin(a_itm, opts);
|
1251 |
-
|
1252 |
-
var pL = 0,
|
1253 |
-
pR = 0;
|
1254 |
-
|
1255 |
-
if (opts.align)
|
1256 |
-
{
|
1257 |
-
var p = cf_getAlignPadding(i_new, opts);
|
1258 |
-
pL = p[0];
|
1259 |
-
pR = p[1];
|
1260 |
-
}
|
1261 |
-
|
1262 |
-
// hide items for fx directscroll
|
1263 |
-
var hiddenitems = false,
|
1264 |
-
i_skp = $();
|
1265 |
-
if (opts.items.visibleConf.old < nI)
|
1266 |
-
{
|
1267 |
-
i_skp = a_itm.slice(opts.items.visibleConf.old, nI);
|
1268 |
-
if (sO.fx == 'directscroll')
|
1269 |
-
{
|
1270 |
-
var orgW = opts.items[opts.d['width']];
|
1271 |
-
hiddenitems = i_skp;
|
1272 |
-
i_cur_l = i_old_l;
|
1273 |
-
sc_hideHiddenItems(hiddenitems);
|
1274 |
-
opts.items[opts.d['width']] = 'variable';
|
1275 |
-
}
|
1276 |
-
}
|
1277 |
-
// save new sizes
|
1278 |
-
var $cf2 = false,
|
1279 |
-
i_siz = ms_getTotalSize(a_itm.slice(0, nI), opts, 'width'),
|
1280 |
-
w_siz = cf_mapWrapperSizes(ms_getSizes(i_new, opts, true), opts, !opts.usePadding),
|
1281 |
-
i_siz_vis = 0,
|
1282 |
-
a_cfs = {},
|
1283 |
-
a_cfs_vis = {},
|
1284 |
-
a_cur = {},
|
1285 |
-
a_old = {},
|
1286 |
-
a_lef = {},
|
1287 |
-
a_dur = sc_getDuration(sO, opts, nI, i_siz);
|
1288 |
-
|
1289 |
-
switch(sO.fx)
|
1290 |
-
{
|
1291 |
-
case 'uncover':
|
1292 |
-
case 'uncover-fade':
|
1293 |
-
i_siz_vis = ms_getTotalSize(a_itm.slice(0, opts.items.visibleConf.old), opts, 'width');
|
1294 |
-
break;
|
1295 |
-
}
|
1296 |
-
|
1297 |
-
if (hiddenitems)
|
1298 |
-
{
|
1299 |
-
opts.items[opts.d['width']] = orgW;
|
1300 |
-
}
|
1301 |
-
|
1302 |
-
if (opts.align)
|
1303 |
-
{
|
1304 |
-
if (opts.padding[opts.d[1]] < 0)
|
1305 |
-
{
|
1306 |
-
opts.padding[opts.d[1]] = 0;
|
1307 |
-
}
|
1308 |
-
}
|
1309 |
-
sz_resetMargin(a_itm, opts, true);
|
1310 |
-
sz_resetMargin(i_old_l, opts, opts.padding[opts.d[1]]);
|
1311 |
-
|
1312 |
-
if (opts.align)
|
1313 |
-
{
|
1314 |
-
opts.padding[opts.d[1]] = pR;
|
1315 |
-
opts.padding[opts.d[3]] = pL;
|
1316 |
-
}
|
1317 |
-
|
1318 |
-
a_lef[opts.d['left']] = (opts.usePadding) ? opts.padding[opts.d[3]] : 0;
|
1319 |
-
|
1320 |
-
// scrolling functions
|
1321 |
-
var _s_wrapper = function() {},
|
1322 |
-
_a_wrapper = function() {},
|
1323 |
-
_s_paddingold = function() {},
|
1324 |
-
_a_paddingold = function() {},
|
1325 |
-
_s_paddingcur = function() {},
|
1326 |
-
_a_paddingcur = function() {},
|
1327 |
-
_onafter = function() {},
|
1328 |
-
_moveitems = function() {},
|
1329 |
-
_position = function() {};
|
1330 |
-
|
1331 |
-
// clone carousel
|
1332 |
-
switch(sO.fx)
|
1333 |
-
{
|
1334 |
-
case 'crossfade':
|
1335 |
-
case 'cover':
|
1336 |
-
case 'cover-fade':
|
1337 |
-
case 'uncover':
|
1338 |
-
case 'uncover-fade':
|
1339 |
-
$cf2 = $cfs.clone(true).appendTo($wrp);
|
1340 |
-
$cf2.children().slice(opts.items.visibleConf.old).remove();
|
1341 |
-
break;
|
1342 |
-
}
|
1343 |
-
switch(sO.fx)
|
1344 |
-
{
|
1345 |
-
case 'crossfade':
|
1346 |
-
case 'cover':
|
1347 |
-
case 'cover-fade':
|
1348 |
-
$cfs.css('zIndex', 1);
|
1349 |
-
$cf2.css('zIndex', 0);
|
1350 |
-
break;
|
1351 |
-
}
|
1352 |
-
|
1353 |
-
// reset all scrolls
|
1354 |
-
scrl = sc_setScroll(a_dur, sO.easing, conf);
|
1355 |
-
|
1356 |
-
// animate / set carousel
|
1357 |
-
a_cfs[opts.d['left']] = -i_siz;
|
1358 |
-
a_cfs_vis[opts.d['left']] = -i_siz_vis;
|
1359 |
-
|
1360 |
-
if (pL < 0)
|
1361 |
-
{
|
1362 |
-
a_cfs[opts.d['left']] += pL;
|
1363 |
-
}
|
1364 |
-
|
1365 |
-
// animate / set wrapper
|
1366 |
-
if (opts[opts.d['width']] == 'variable' || opts[opts.d['height']] == 'variable')
|
1367 |
-
{
|
1368 |
-
_s_wrapper = function() {
|
1369 |
-
$wrp.css(w_siz);
|
1370 |
-
};
|
1371 |
-
_a_wrapper = function() {
|
1372 |
-
scrl.anims.push([$wrp, w_siz]);
|
1373 |
-
};
|
1374 |
-
}
|
1375 |
-
|
1376 |
-
// animate / set items
|
1377 |
-
if (opts.usePadding)
|
1378 |
-
{
|
1379 |
-
var i_new_l_m = i_new_l.data('_cfs_origCssMargin');
|
1380 |
-
|
1381 |
-
if (pR >= 0)
|
1382 |
-
{
|
1383 |
-
i_new_l_m += opts.padding[opts.d[1]];
|
1384 |
-
}
|
1385 |
-
i_new_l.css(opts.d['marginRight'], i_new_l_m);
|
1386 |
-
|
1387 |
-
if (i_cur_l.not(i_old_l).length)
|
1388 |
-
{
|
1389 |
-
a_old[opts.d['marginRight']] = i_old_l.data('_cfs_origCssMargin');
|
1390 |
-
}
|
1391 |
-
_s_paddingold = function() {
|
1392 |
-
i_old_l.css(a_old);
|
1393 |
-
};
|
1394 |
-
_a_paddingold = function() {
|
1395 |
-
scrl.anims.push([i_old_l, a_old]);
|
1396 |
-
};
|
1397 |
-
|
1398 |
-
var i_cur_l_m = i_cur_l.data('_cfs_origCssMargin');
|
1399 |
-
if (pL > 0)
|
1400 |
-
{
|
1401 |
-
i_cur_l_m += opts.padding[opts.d[3]];
|
1402 |
-
}
|
1403 |
-
|
1404 |
-
a_cur[opts.d['marginRight']] = i_cur_l_m;
|
1405 |
-
|
1406 |
-
_s_paddingcur = function() {
|
1407 |
-
i_cur_l.css(a_cur);
|
1408 |
-
};
|
1409 |
-
_a_paddingcur = function() {
|
1410 |
-
scrl.anims.push([i_cur_l, a_cur]);
|
1411 |
-
};
|
1412 |
-
}
|
1413 |
-
|
1414 |
-
// set position
|
1415 |
-
_position = function() {
|
1416 |
-
$cfs.css(a_lef);
|
1417 |
-
};
|
1418 |
-
|
1419 |
-
|
1420 |
-
var overFill = opts.items.visible+nI-itms.total;
|
1421 |
-
|
1422 |
-
// rearrange items
|
1423 |
-
_moveitems = function() {
|
1424 |
-
if (overFill > 0)
|
1425 |
-
{
|
1426 |
-
$cfs.children().slice(itms.total).remove();
|
1427 |
-
}
|
1428 |
-
var l_itm = $cfs.children().slice(0, nI).appendTo($cfs).last();
|
1429 |
-
if (overFill > 0)
|
1430 |
-
{
|
1431 |
-
i_new = gi_getCurrentItems(a_itm, opts);
|
1432 |
-
}
|
1433 |
-
sc_showHiddenItems(hiddenitems);
|
1434 |
-
|
1435 |
-
if (opts.usePadding)
|
1436 |
-
{
|
1437 |
-
if (itms.total < opts.items.visible+nI) {
|
1438 |
-
var i_cur_l = $cfs.children().eq(opts.items.visible-1);
|
1439 |
-
i_cur_l.css(opts.d['marginRight'], i_cur_l.data('_cfs_origCssMargin') + opts.padding[opts.d[1]]);
|
1440 |
-
}
|
1441 |
-
l_itm.css(opts.d['marginRight'], l_itm.data('_cfs_origCssMargin'));
|
1442 |
-
}
|
1443 |
-
};
|
1444 |
-
|
1445 |
-
|
1446 |
-
var cb_arguments = sc_mapCallbackArguments(i_old, i_skp, i_new, nI, 'next', a_dur, w_siz);
|
1447 |
-
|
1448 |
-
// fire onAfter callbacks
|
1449 |
-
_onafter = function() {
|
1450 |
-
$cfs.css('zIndex', $cfs.data('_cfs_origCssZindex'));
|
1451 |
-
sc_afterScroll($cfs, $cf2, sO);
|
1452 |
-
crsl.isScrolling = false;
|
1453 |
-
clbk.onAfter = sc_fireCallbacks($tt0, sO, 'onAfter', cb_arguments, clbk);
|
1454 |
-
queu = sc_fireQueue($cfs, queu, conf);
|
1455 |
-
|
1456 |
-
if (!crsl.isPaused)
|
1457 |
-
{
|
1458 |
-
$cfs.trigger(cf_e('play', conf));
|
1459 |
-
}
|
1460 |
-
};
|
1461 |
-
|
1462 |
-
// fire onBefore callbacks
|
1463 |
-
crsl.isScrolling = true;
|
1464 |
-
tmrs = sc_clearTimers(tmrs);
|
1465 |
-
clbk.onBefore = sc_fireCallbacks($tt0, sO, 'onBefore', cb_arguments, clbk);
|
1466 |
-
|
1467 |
-
switch(sO.fx)
|
1468 |
-
{
|
1469 |
-
case 'none':
|
1470 |
-
$cfs.css(a_cfs);
|
1471 |
-
_s_wrapper();
|
1472 |
-
_s_paddingold();
|
1473 |
-
_s_paddingcur();
|
1474 |
-
_position();
|
1475 |
-
_moveitems();
|
1476 |
-
_onafter();
|
1477 |
-
break;
|
1478 |
-
|
1479 |
-
case 'fade':
|
1480 |
-
scrl.anims.push([$cfs, { 'opacity': 0 }, function() {
|
1481 |
-
_s_wrapper();
|
1482 |
-
_s_paddingold();
|
1483 |
-
_s_paddingcur();
|
1484 |
-
_position();
|
1485 |
-
_moveitems();
|
1486 |
-
scrl = sc_setScroll(a_dur, sO.easing, conf);
|
1487 |
-
scrl.anims.push([$cfs, { 'opacity': 1 }, _onafter]);
|
1488 |
-
sc_startScroll(scrl, conf);
|
1489 |
-
}]);
|
1490 |
-
break;
|
1491 |
-
|
1492 |
-
case 'crossfade':
|
1493 |
-
$cfs.css({ 'opacity': 0 });
|
1494 |
-
scrl.anims.push([$cf2, { 'opacity': 0 }]);
|
1495 |
-
scrl.anims.push([$cfs, { 'opacity': 1 }, _onafter]);
|
1496 |
-
_a_wrapper();
|
1497 |
-
_s_paddingold();
|
1498 |
-
_s_paddingcur();
|
1499 |
-
_position();
|
1500 |
-
_moveitems();
|
1501 |
-
break;
|
1502 |
-
|
1503 |
-
case 'cover':
|
1504 |
-
$cfs.css(opts.d['left'], $wrp[opts.d['width']]());
|
1505 |
-
scrl.anims.push([$cfs, a_lef, _onafter]);
|
1506 |
-
_a_wrapper();
|
1507 |
-
_s_paddingold();
|
1508 |
-
_s_paddingcur();
|
1509 |
-
_moveitems();
|
1510 |
-
break;
|
1511 |
-
|
1512 |
-
case 'cover-fade':
|
1513 |
-
$cfs.css(opts.d['left'], $wrp[opts.d['width']]());
|
1514 |
-
scrl.anims.push([$cf2, { 'opacity': 0 }]);
|
1515 |
-
scrl.anims.push([$cfs, a_lef, _onafter]);
|
1516 |
-
_a_wrapper();
|
1517 |
-
_s_paddingold();
|
1518 |
-
_s_paddingcur();
|
1519 |
-
_moveitems();
|
1520 |
-
break;
|
1521 |
-
|
1522 |
-
case 'uncover':
|
1523 |
-
scrl.anims.push([$cf2, a_cfs_vis, _onafter]);
|
1524 |
-
_a_wrapper();
|
1525 |
-
_s_paddingold();
|
1526 |
-
_s_paddingcur();
|
1527 |
-
_position();
|
1528 |
-
_moveitems();
|
1529 |
-
break;
|
1530 |
-
|
1531 |
-
case 'uncover-fade':
|
1532 |
-
$cfs.css({ 'opacity': 0 });
|
1533 |
-
scrl.anims.push([$cfs, { 'opacity': 1 }]);
|
1534 |
-
scrl.anims.push([$cf2, a_cfs_vis, _onafter]);
|
1535 |
-
_a_wrapper();
|
1536 |
-
_s_paddingold();
|
1537 |
-
_s_paddingcur();
|
1538 |
-
_position();
|
1539 |
-
_moveitems();
|
1540 |
-
break;
|
1541 |
-
|
1542 |
-
default:
|
1543 |
-
scrl.anims.push([$cfs, a_cfs, function() {
|
1544 |
-
_position();
|
1545 |
-
_moveitems();
|
1546 |
-
_onafter();
|
1547 |
-
}]);
|
1548 |
-
_a_wrapper();
|
1549 |
-
_a_paddingold();
|
1550 |
-
_a_paddingcur();
|
1551 |
-
break;
|
1552 |
-
}
|
1553 |
-
|
1554 |
-
sc_startScroll(scrl, conf);
|
1555 |
-
cf_setCookie(opts.cookie, $cfs, conf);
|
1556 |
-
|
1557 |
-
$cfs.trigger(cf_e('updatePageStatus', conf), [false, w_siz]);
|
1558 |
-
|
1559 |
-
return true;
|
1560 |
-
});
|
1561 |
-
|
1562 |
-
|
1563 |
-
// slideTo event
|
1564 |
-
$cfs.bind(cf_e('slideTo', conf), function(e, num, dev, org, obj, dir, clb) {
|
1565 |
-
e.stopPropagation();
|
1566 |
-
|
1567 |
-
var v = [num, dev, org, obj, dir, clb],
|
1568 |
-
t = ['string/number/object', 'number', 'boolean', 'object', 'string', 'function'],
|
1569 |
-
a = cf_sortParams(v, t);
|
1570 |
-
|
1571 |
-
obj = a[3];
|
1572 |
-
dir = a[4];
|
1573 |
-
clb = a[5];
|
1574 |
-
|
1575 |
-
num = gn_getItemIndex(a[0], a[1], a[2], itms, $cfs);
|
1576 |
-
|
1577 |
-
if (num == 0)
|
1578 |
-
{
|
1579 |
-
return false;
|
1580 |
-
}
|
1581 |
-
if (!is_object(obj))
|
1582 |
-
{
|
1583 |
-
obj = false;
|
1584 |
-
}
|
1585 |
-
|
1586 |
-
if (dir != 'prev' && dir != 'next')
|
1587 |
-
{
|
1588 |
-
if (opts.circular)
|
1589 |
-
{
|
1590 |
-
dir = (num <= itms.total / 2) ? 'next' : 'prev';
|
1591 |
-
}
|
1592 |
-
else
|
1593 |
-
{
|
1594 |
-
dir = (itms.first == 0 || itms.first > num) ? 'next' : 'prev';
|
1595 |
-
}
|
1596 |
-
}
|
1597 |
-
|
1598 |
-
if (dir == 'prev')
|
1599 |
-
{
|
1600 |
-
num = itms.total-num;
|
1601 |
-
}
|
1602 |
-
$cfs.trigger(cf_e(dir, conf), [obj, num, clb]);
|
1603 |
-
|
1604 |
-
return true;
|
1605 |
-
});
|
1606 |
-
|
1607 |
-
|
1608 |
-
// prevPage event
|
1609 |
-
$cfs.bind(cf_e('prevPage', conf), function(e, obj, clb) {
|
1610 |
-
e.stopPropagation();
|
1611 |
-
var cur = $cfs.triggerHandler(cf_e('currentPage', conf));
|
1612 |
-
return $cfs.triggerHandler(cf_e('slideToPage', conf), [cur-1, obj, 'prev', clb]);
|
1613 |
-
});
|
1614 |
-
|
1615 |
-
|
1616 |
-
// nextPage event
|
1617 |
-
$cfs.bind(cf_e('nextPage', conf), function(e, obj, clb) {
|
1618 |
-
e.stopPropagation();
|
1619 |
-
var cur = $cfs.triggerHandler(cf_e('currentPage', conf));
|
1620 |
-
return $cfs.triggerHandler(cf_e('slideToPage', conf), [cur+1, obj, 'next', clb]);
|
1621 |
-
});
|
1622 |
-
|
1623 |
-
|
1624 |
-
// slideToPage event
|
1625 |
-
$cfs.bind(cf_e('slideToPage', conf), function(e, pag, obj, dir, clb) {
|
1626 |
-
e.stopPropagation();
|
1627 |
-
if (!is_number(pag))
|
1628 |
-
{
|
1629 |
-
pag = $cfs.triggerHandler(cf_e('currentPage', conf));
|
1630 |
-
}
|
1631 |
-
var ipp = opts.pagination.items || opts.items.visible,
|
1632 |
-
max = Math.ceil(itms.total / ipp)-1;
|
1633 |
-
|
1634 |
-
if (pag < 0)
|
1635 |
-
{
|
1636 |
-
pag = max;
|
1637 |
-
}
|
1638 |
-
if (pag > max)
|
1639 |
-
{
|
1640 |
-
pag = 0;
|
1641 |
-
}
|
1642 |
-
return $cfs.triggerHandler(cf_e('slideTo', conf), [pag*ipp, 0, true, obj, dir, clb]);
|
1643 |
-
});
|
1644 |
-
|
1645 |
-
// jumpToStart event
|
1646 |
-
$cfs.bind(cf_e('jumpToStart', conf), function(e, s) {
|
1647 |
-
e.stopPropagation();
|
1648 |
-
if (s)
|
1649 |
-
{
|
1650 |
-
s = gn_getItemIndex(s, 0, true, itms, $cfs);
|
1651 |
-
}
|
1652 |
-
else
|
1653 |
-
{
|
1654 |
-
s = 0;
|
1655 |
-
}
|
1656 |
-
|
1657 |
-
s += itms.first;
|
1658 |
-
if (s != 0)
|
1659 |
-
{
|
1660 |
-
if (itms.total > 0)
|
1661 |
-
{
|
1662 |
-
while (s > itms.total)
|
1663 |
-
{
|
1664 |
-
s -= itms.total;
|
1665 |
-
}
|
1666 |
-
}
|
1667 |
-
$cfs.prepend($cfs.children().slice(s, itms.total));
|
1668 |
-
}
|
1669 |
-
return true;
|
1670 |
-
});
|
1671 |
-
|
1672 |
-
|
1673 |
-
// synchronise event
|
1674 |
-
$cfs.bind(cf_e('synchronise', conf), function(e, s) {
|
1675 |
-
e.stopPropagation();
|
1676 |
-
if (s)
|
1677 |
-
{
|
1678 |
-
s = cf_getSynchArr(s);
|
1679 |
-
}
|
1680 |
-
else if (opts.synchronise)
|
1681 |
-
{
|
1682 |
-
s = opts.synchronise;
|
1683 |
-
}
|
1684 |
-
else
|
1685 |
-
{
|
1686 |
-
return debug(conf, 'No carousel to synchronise.');
|
1687 |
-
}
|
1688 |
-
|
1689 |
-
var n = $cfs.triggerHandler(cf_e('currentPosition', conf)),
|
1690 |
-
x = true;
|
1691 |
-
|
1692 |
-
for (var j = 0, l = s.length; j < l; j++)
|
1693 |
-
{
|
1694 |
-
if (!s[j][0].triggerHandler(cf_e('slideTo', conf), [n, s[j][3], true]))
|
1695 |
-
{
|
1696 |
-
x = false;
|
1697 |
-
}
|
1698 |
-
}
|
1699 |
-
return x;
|
1700 |
-
});
|
1701 |
-
|
1702 |
-
|
1703 |
-
// queue event
|
1704 |
-
$cfs.bind(cf_e('queue', conf), function(e, dir, opt) {
|
1705 |
-
e.stopPropagation();
|
1706 |
-
if (is_function(dir))
|
1707 |
-
{
|
1708 |
-
dir.call($tt0, queu);
|
1709 |
-
}
|
1710 |
-
else if (is_array(dir))
|
1711 |
-
{
|
1712 |
-
queu = dir;
|
1713 |
-
}
|
1714 |
-
else if (!is_undefined(dir))
|
1715 |
-
{
|
1716 |
-
queu.push([dir, opt]);
|
1717 |
-
}
|
1718 |
-
return queu;
|
1719 |
-
});
|
1720 |
-
|
1721 |
-
|
1722 |
-
// insertItem event
|
1723 |
-
$cfs.bind(cf_e('insertItem', conf), function(e, itm, num, org, dev) {
|
1724 |
-
e.stopPropagation();
|
1725 |
-
|
1726 |
-
var v = [itm, num, org, dev],
|
1727 |
-
t = ['string/object', 'string/number/object', 'boolean', 'number'],
|
1728 |
-
a = cf_sortParams(v, t);
|
1729 |
-
|
1730 |
-
itm = a[0];
|
1731 |
-
num = a[1];
|
1732 |
-
org = a[2];
|
1733 |
-
dev = a[3];
|
1734 |
-
|
1735 |
-
if (is_object(itm) && !is_jquery(itm))
|
1736 |
-
{
|
1737 |
-
itm = $(itm);
|
1738 |
-
}
|
1739 |
-
else if (is_string(itm))
|
1740 |
-
{
|
1741 |
-
itm = $(itm);
|
1742 |
-
}
|
1743 |
-
if (!is_jquery(itm) || itm.length == 0)
|
1744 |
-
{
|
1745 |
-
return debug(conf, 'Not a valid object.');
|
1746 |
-
}
|
1747 |
-
|
1748 |
-
if (is_undefined(num))
|
1749 |
-
{
|
1750 |
-
num = 'end';
|
1751 |
-
}
|
1752 |
-
|
1753 |
-
sz_storeMargin(itm, opts);
|
1754 |
-
sz_storeOrigCss(itm);
|
1755 |
-
|
1756 |
-
var orgNum = num,
|
1757 |
-
before = 'before';
|
1758 |
-
|
1759 |
-
if (num == 'end')
|
1760 |
-
{
|
1761 |
-
if (org)
|
1762 |
-
{
|
1763 |
-
if (itms.first == 0)
|
1764 |
-
{
|
1765 |
-
num = itms.total-1;
|
1766 |
-
before = 'after';
|
1767 |
-
}
|
1768 |
-
else
|
1769 |
-
{
|
1770 |
-
num = itms.first;
|
1771 |
-
itms.first += itm.length;
|
1772 |
-
}
|
1773 |
-
if (num < 0)
|
1774 |
-
{
|
1775 |
-
num = 0;
|
1776 |
-
}
|
1777 |
-
}
|
1778 |
-
else
|
1779 |
-
{
|
1780 |
-
num = itms.total-1;
|
1781 |
-
before = 'after';
|
1782 |
-
}
|
1783 |
-
}
|
1784 |
-
else
|
1785 |
-
{
|
1786 |
-
num = gn_getItemIndex(num, dev, org, itms, $cfs);
|
1787 |
-
}
|
1788 |
-
|
1789 |
-
var $cit = $cfs.children().eq(num);
|
1790 |
-
if ($cit.length)
|
1791 |
-
{
|
1792 |
-
$cit[before](itm);
|
1793 |
-
}
|
1794 |
-
else
|
1795 |
-
{
|
1796 |
-
debug(conf, 'Correct insert-position not found! Appending item to the end.');
|
1797 |
-
$cfs.append(itm);
|
1798 |
-
}
|
1799 |
-
|
1800 |
-
if (orgNum != 'end' && !org)
|
1801 |
-
{
|
1802 |
-
if (num < itms.first)
|
1803 |
-
{
|
1804 |
-
itms.first += itm.length;
|
1805 |
-
}
|
1806 |
-
}
|
1807 |
-
itms.total = $cfs.children().length;
|
1808 |
-
if (itms.first >= itms.total)
|
1809 |
-
{
|
1810 |
-
itms.first -= itms.total;
|
1811 |
-
}
|
1812 |
-
|
1813 |
-
$cfs.trigger(cf_e('updateSizes', conf));
|
1814 |
-
$cfs.trigger(cf_e('linkAnchors', conf));
|
1815 |
-
|
1816 |
-
return true;
|
1817 |
-
});
|
1818 |
-
|
1819 |
-
|
1820 |
-
// removeItem event
|
1821 |
-
$cfs.bind(cf_e('removeItem', conf), function(e, num, org, dev) {
|
1822 |
-
e.stopPropagation();
|
1823 |
-
|
1824 |
-
var v = [num, org, dev],
|
1825 |
-
t = ['string/number/object', 'boolean', 'number'],
|
1826 |
-
a = cf_sortParams(v, t);
|
1827 |
-
|
1828 |
-
num = a[0];
|
1829 |
-
org = a[1];
|
1830 |
-
dev = a[2];
|
1831 |
-
|
1832 |
-
var removed = false;
|
1833 |
-
|
1834 |
-
if (num instanceof $ && num.length > 1)
|
1835 |
-
{
|
1836 |
-
$removed = $();
|
1837 |
-
num.each(function(i, el) {
|
1838 |
-
var $rem = $cfs.trigger(cf_e('removeItem', conf), [$(this), org, dev]);
|
1839 |
-
if ( $rem )
|
1840 |
-
{
|
1841 |
-
$removed = $removed.add($rem);
|
1842 |
-
}
|
1843 |
-
});
|
1844 |
-
return $removed;
|
1845 |
-
}
|
1846 |
-
|
1847 |
-
if (is_undefined(num) || num == 'end')
|
1848 |
-
{
|
1849 |
-
$removed = $cfs.children().last();
|
1850 |
-
}
|
1851 |
-
else
|
1852 |
-
{
|
1853 |
-
num = gn_getItemIndex(num, dev, org, itms, $cfs);
|
1854 |
-
var $removed = $cfs.children().eq(num);
|
1855 |
-
if ( $removed.length )
|
1856 |
-
{
|
1857 |
-
if (num < itms.first)
|
1858 |
-
{
|
1859 |
-
itms.first -= $removed.length;
|
1860 |
-
}
|
1861 |
-
}
|
1862 |
-
}
|
1863 |
-
if ( $removed && $removed.length )
|
1864 |
-
{
|
1865 |
-
$removed.detach();
|
1866 |
-
itms.total = $cfs.children().length;
|
1867 |
-
$cfs.trigger(cf_e('updateSizes', conf));
|
1868 |
-
}
|
1869 |
-
|
1870 |
-
return $removed;
|
1871 |
-
});
|
1872 |
-
|
1873 |
-
|
1874 |
-
// onBefore and onAfter event
|
1875 |
-
$cfs.bind(cf_e('onBefore', conf)+' '+cf_e('onAfter', conf), function(e, fn) {
|
1876 |
-
e.stopPropagation();
|
1877 |
-
var eType = e.type.slice(conf.events.prefix.length);
|
1878 |
-
if (is_array(fn))
|
1879 |
-
{
|
1880 |
-
clbk[eType] = fn;
|
1881 |
-
}
|
1882 |
-
if (is_function(fn))
|
1883 |
-
{
|
1884 |
-
clbk[eType].push(fn);
|
1885 |
-
}
|
1886 |
-
return clbk[eType];
|
1887 |
-
});
|
1888 |
-
|
1889 |
-
|
1890 |
-
// currentPosition event
|
1891 |
-
$cfs.bind(cf_e('currentPosition', conf), function(e, fn) {
|
1892 |
-
e.stopPropagation();
|
1893 |
-
if (itms.first == 0)
|
1894 |
-
{
|
1895 |
-
var val = 0;
|
1896 |
-
}
|
1897 |
-
else
|
1898 |
-
{
|
1899 |
-
var val = itms.total - itms.first;
|
1900 |
-
}
|
1901 |
-
if (is_function(fn))
|
1902 |
-
{
|
1903 |
-
fn.call($tt0, val);
|
1904 |
-
}
|
1905 |
-
return val;
|
1906 |
-
});
|
1907 |
-
|
1908 |
-
|
1909 |
-
// currentPage event
|
1910 |
-
$cfs.bind(cf_e('currentPage', conf), function(e, fn) {
|
1911 |
-
e.stopPropagation();
|
1912 |
-
var ipp = opts.pagination.items || opts.items.visible,
|
1913 |
-
max = Math.ceil(itms.total/ipp-1),
|
1914 |
-
nr;
|
1915 |
-
if (itms.first == 0)
|
1916 |
-
{
|
1917 |
-
nr = 0;
|
1918 |
-
}
|
1919 |
-
else if (itms.first < itms.total % ipp)
|
1920 |
-
{
|
1921 |
-
nr = 0;
|
1922 |
-
}
|
1923 |
-
else if (itms.first == ipp && !opts.circular)
|
1924 |
-
{
|
1925 |
-
nr = max;
|
1926 |
-
}
|
1927 |
-
else
|
1928 |
-
{
|
1929 |
-
nr = Math.round((itms.total-itms.first)/ipp);
|
1930 |
-
}
|
1931 |
-
if (nr < 0)
|
1932 |
-
{
|
1933 |
-
nr = 0;
|
1934 |
-
}
|
1935 |
-
if (nr > max)
|
1936 |
-
{
|
1937 |
-
nr = max;
|
1938 |
-
}
|
1939 |
-
if (is_function(fn))
|
1940 |
-
{
|
1941 |
-
fn.call($tt0, nr);
|
1942 |
-
}
|
1943 |
-
return nr;
|
1944 |
-
});
|
1945 |
-
|
1946 |
-
|
1947 |
-
// currentVisible event
|
1948 |
-
$cfs.bind(cf_e('currentVisible', conf), function(e, fn) {
|
1949 |
-
e.stopPropagation();
|
1950 |
-
var $i = gi_getCurrentItems($cfs.children(), opts);
|
1951 |
-
if (is_function(fn))
|
1952 |
-
{
|
1953 |
-
fn.call($tt0, $i);
|
1954 |
-
}
|
1955 |
-
return $i;
|
1956 |
-
});
|
1957 |
-
|
1958 |
-
|
1959 |
-
// slice event
|
1960 |
-
$cfs.bind(cf_e('slice', conf), function(e, f, l, fn) {
|
1961 |
-
e.stopPropagation();
|
1962 |
-
|
1963 |
-
if (itms.total == 0)
|
1964 |
-
{
|
1965 |
-
return false;
|
1966 |
-
}
|
1967 |
-
|
1968 |
-
var v = [f, l, fn],
|
1969 |
-
t = ['number', 'number', 'function'],
|
1970 |
-
a = cf_sortParams(v, t);
|
1971 |
-
|
1972 |
-
f = (is_number(a[0])) ? a[0] : 0;
|
1973 |
-
l = (is_number(a[1])) ? a[1] : itms.total;
|
1974 |
-
fn = a[2];
|
1975 |
-
|
1976 |
-
f += itms.first;
|
1977 |
-
l += itms.first;
|
1978 |
-
|
1979 |
-
if (items.total > 0)
|
1980 |
-
{
|
1981 |
-
while (f > itms.total)
|
1982 |
-
{
|
1983 |
-
f -= itms.total;
|
1984 |
-
}
|
1985 |
-
while (l > itms.total)
|
1986 |
-
{
|
1987 |
-
l -= itms.total;
|
1988 |
-
}
|
1989 |
-
while (f < 0)
|
1990 |
-
{
|
1991 |
-
f += itms.total;
|
1992 |
-
}
|
1993 |
-
while (l < 0)
|
1994 |
-
{
|
1995 |
-
l += itms.total;
|
1996 |
-
}
|
1997 |
-
}
|
1998 |
-
var $iA = $cfs.children(),
|
1999 |
-
$i;
|
2000 |
-
|
2001 |
-
if (l > f)
|
2002 |
-
{
|
2003 |
-
$i = $iA.slice(f, l);
|
2004 |
-
}
|
2005 |
-
else
|
2006 |
-
{
|
2007 |
-
$i = $( $iA.slice(f, itms.total).get().concat( $iA.slice(0, l).get() ) );
|
2008 |
-
}
|
2009 |
-
|
2010 |
-
if (is_function(fn))
|
2011 |
-
{
|
2012 |
-
fn.call($tt0, $i);
|
2013 |
-
}
|
2014 |
-
return $i;
|
2015 |
-
});
|
2016 |
-
|
2017 |
-
|
2018 |
-
// isPaused, isStopped and isScrolling events
|
2019 |
-
$cfs.bind(cf_e('isPaused', conf)+' '+cf_e('isStopped', conf)+' '+cf_e('isScrolling', conf), function(e, fn) {
|
2020 |
-
e.stopPropagation();
|
2021 |
-
var eType = e.type.slice(conf.events.prefix.length),
|
2022 |
-
value = crsl[eType];
|
2023 |
-
if (is_function(fn))
|
2024 |
-
{
|
2025 |
-
fn.call($tt0, value);
|
2026 |
-
}
|
2027 |
-
return value;
|
2028 |
-
});
|
2029 |
-
|
2030 |
-
|
2031 |
-
// configuration event
|
2032 |
-
$cfs.bind(cf_e('configuration', conf), function(e, a, b, c) {
|
2033 |
-
e.stopPropagation();
|
2034 |
-
var reInit = false;
|
2035 |
-
|
2036 |
-
// return entire configuration-object
|
2037 |
-
if (is_function(a))
|
2038 |
-
{
|
2039 |
-
a.call($tt0, opts);
|
2040 |
-
}
|
2041 |
-
// set multiple options via object
|
2042 |
-
else if (is_object(a))
|
2043 |
-
{
|
2044 |
-
opts_orig = $.extend(true, {}, opts_orig, a);
|
2045 |
-
if (b !== false) reInit = true;
|
2046 |
-
else opts = $.extend(true, {}, opts, a);
|
2047 |
-
|
2048 |
-
}
|
2049 |
-
else if (!is_undefined(a))
|
2050 |
-
{
|
2051 |
-
|
2052 |
-
// callback function for specific option
|
2053 |
-
if (is_function(b))
|
2054 |
-
{
|
2055 |
-
var val = eval('opts.'+a);
|
2056 |
-
if (is_undefined(val))
|
2057 |
-
{
|
2058 |
-
val = '';
|
2059 |
-
}
|
2060 |
-
b.call($tt0, val);
|
2061 |
-
}
|
2062 |
-
// set individual option
|
2063 |
-
else if (!is_undefined(b))
|
2064 |
-
{
|
2065 |
-
if (typeof c !== 'boolean') c = true;
|
2066 |
-
eval('opts_orig.'+a+' = b');
|
2067 |
-
if (c !== false) reInit = true;
|
2068 |
-
else eval('opts.'+a+' = b');
|
2069 |
-
}
|
2070 |
-
// return value for specific option
|
2071 |
-
else
|
2072 |
-
{
|
2073 |
-
return eval('opts.'+a);
|
2074 |
-
}
|
2075 |
-
}
|
2076 |
-
if (reInit)
|
2077 |
-
{
|
2078 |
-
sz_resetMargin($cfs.children(), opts);
|
2079 |
-
FN._init(opts_orig);
|
2080 |
-
FN._bind_buttons();
|
2081 |
-
var sz = sz_setSizes($cfs, opts);
|
2082 |
-
$cfs.trigger(cf_e('updatePageStatus', conf), [true, sz]);
|
2083 |
-
}
|
2084 |
-
return opts;
|
2085 |
-
});
|
2086 |
-
|
2087 |
-
|
2088 |
-
// linkAnchors event
|
2089 |
-
$cfs.bind(cf_e('linkAnchors', conf), function(e, $con, sel) {
|
2090 |
-
e.stopPropagation();
|
2091 |
-
|
2092 |
-
if (is_undefined($con))
|
2093 |
-
{
|
2094 |
-
$con = $('body');
|
2095 |
-
}
|
2096 |
-
else if (is_string($con))
|
2097 |
-
{
|
2098 |
-
$con = $($con);
|
2099 |
-
}
|
2100 |
-
if (!is_jquery($con) || $con.length == 0)
|
2101 |
-
{
|
2102 |
-
return debug(conf, 'Not a valid object.');
|
2103 |
-
}
|
2104 |
-
if (!is_string(sel))
|
2105 |
-
{
|
2106 |
-
sel = 'a.caroufredsel';
|
2107 |
-
}
|
2108 |
-
|
2109 |
-
$con.find(sel).each(function() {
|
2110 |
-
var h = this.hash || '';
|
2111 |
-
if (h.length > 0 && $cfs.children().index($(h)) != -1)
|
2112 |
-
{
|
2113 |
-
$(this).unbind('click').click(function(e) {
|
2114 |
-
e.preventDefault();
|
2115 |
-
$cfs.trigger(cf_e('slideTo', conf), h);
|
2116 |
-
});
|
2117 |
-
}
|
2118 |
-
});
|
2119 |
-
return true;
|
2120 |
-
});
|
2121 |
-
|
2122 |
-
|
2123 |
-
// updatePageStatus event
|
2124 |
-
$cfs.bind(cf_e('updatePageStatus', conf), function(e, build, sizes) {
|
2125 |
-
e.stopPropagation();
|
2126 |
-
if (!opts.pagination.container)
|
2127 |
-
{
|
2128 |
-
return;
|
2129 |
-
}
|
2130 |
-
|
2131 |
-
var ipp = opts.pagination.items || opts.items.visible,
|
2132 |
-
pgs = Math.ceil(itms.total/ipp);
|
2133 |
-
|
2134 |
-
if (build)
|
2135 |
-
{
|
2136 |
-
if (opts.pagination.anchorBuilder)
|
2137 |
-
{
|
2138 |
-
opts.pagination.container.children().remove();
|
2139 |
-
opts.pagination.container.each(function() {
|
2140 |
-
for (var a = 0; a < pgs; a++)
|
2141 |
-
{
|
2142 |
-
var i = $cfs.children().eq( gn_getItemIndex(a*ipp, 0, true, itms, $cfs) );
|
2143 |
-
$(this).append(opts.pagination.anchorBuilder.call(i[0], a+1));
|
2144 |
-
}
|
2145 |
-
});
|
2146 |
-
}
|
2147 |
-
opts.pagination.container.each(function() {
|
2148 |
-
$(this).children().unbind(opts.pagination.event).each(function(a) {
|
2149 |
-
$(this).bind(opts.pagination.event, function(e) {
|
2150 |
-
e.preventDefault();
|
2151 |
-
$cfs.trigger(cf_e('slideTo', conf), [a*ipp, -opts.pagination.deviation, true, opts.pagination]);
|
2152 |
-
});
|
2153 |
-
});
|
2154 |
-
});
|
2155 |
-
}
|
2156 |
-
|
2157 |
-
var selected = $cfs.triggerHandler(cf_e('currentPage', conf)) + opts.pagination.deviation;
|
2158 |
-
if (selected >= pgs)
|
2159 |
-
{
|
2160 |
-
selected = 0;
|
2161 |
-
}
|
2162 |
-
if (selected < 0)
|
2163 |
-
{
|
2164 |
-
selected = pgs-1;
|
2165 |
-
}
|
2166 |
-
opts.pagination.container.each(function() {
|
2167 |
-
$(this).children().removeClass(cf_c('selected', conf)).eq(selected).addClass(cf_c('selected', conf));
|
2168 |
-
});
|
2169 |
-
return true;
|
2170 |
-
});
|
2171 |
-
|
2172 |
-
|
2173 |
-
// updateSizes event
|
2174 |
-
$cfs.bind(cf_e('updateSizes', conf), function(e) {
|
2175 |
-
var vI = opts.items.visible,
|
2176 |
-
a_itm = $cfs.children(),
|
2177 |
-
avail_primary = ms_getParentSize($wrp, opts, 'width');
|
2178 |
-
|
2179 |
-
itms.total = a_itm.length;
|
2180 |
-
|
2181 |
-
if (crsl.primarySizePercentage)
|
2182 |
-
{
|
2183 |
-
opts.maxDimension = avail_primary;
|
2184 |
-
opts[opts.d['width']] = ms_getPercentage(avail_primary, crsl.primarySizePercentage);
|
2185 |
-
}
|
2186 |
-
else
|
2187 |
-
{
|
2188 |
-
opts.maxDimension = ms_getMaxDimension(opts, avail_primary);
|
2189 |
-
}
|
2190 |
-
|
2191 |
-
if (opts.responsive)
|
2192 |
-
{
|
2193 |
-
opts.items.width = opts.items.sizesConf.width;
|
2194 |
-
opts.items.height = opts.items.sizesConf.height;
|
2195 |
-
opts = in_getResponsiveValues(opts, a_itm, avail_primary);
|
2196 |
-
vI = opts.items.visible;
|
2197 |
-
sz_setResponsiveSizes(opts, a_itm);
|
2198 |
-
}
|
2199 |
-
else if (opts.items.visibleConf.variable)
|
2200 |
-
{
|
2201 |
-
vI = gn_getVisibleItemsNext(a_itm, opts, 0);
|
2202 |
-
}
|
2203 |
-
else if (opts.items.filter != '*')
|
2204 |
-
{
|
2205 |
-
vI = gn_getVisibleItemsNextFilter(a_itm, opts, 0);
|
2206 |
-
}
|
2207 |
-
|
2208 |
-
if (!opts.circular && itms.first != 0 && vI > itms.first) {
|
2209 |
-
if (opts.items.visibleConf.variable)
|
2210 |
-
{
|
2211 |
-
var nI = gn_getVisibleItemsPrev(a_itm, opts, itms.first) - itms.first;
|
2212 |
-
}
|
2213 |
-
else if (opts.items.filter != '*')
|
2214 |
-
{
|
2215 |
-
var nI = gn_getVisibleItemsPrevFilter(a_itm, opts, itms.first) - itms.first;
|
2216 |
-
}
|
2217 |
-
else
|
2218 |
-
{
|
2219 |
-
var nI = opts.items.visible - itms.first;
|
2220 |
-
}
|
2221 |
-
debug(conf, 'Preventing non-circular: sliding '+nI+' items backward.');
|
2222 |
-
$cfs.trigger(cf_e('prev', conf), nI);
|
2223 |
-
}
|
2224 |
-
|
2225 |
-
opts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0);
|
2226 |
-
opts.items.visibleConf.old = opts.items.visible;
|
2227 |
-
opts = in_getAlignPadding(opts, a_itm);
|
2228 |
-
|
2229 |
-
var sz = sz_setSizes($cfs, opts);
|
2230 |
-
$cfs.trigger(cf_e('updatePageStatus', conf), [true, sz]);
|
2231 |
-
nv_showNavi(opts, itms.total, conf);
|
2232 |
-
nv_enableNavi(opts, itms.first, conf);
|
2233 |
-
|
2234 |
-
return sz;
|
2235 |
-
});
|
2236 |
-
|
2237 |
-
|
2238 |
-
// destroy event
|
2239 |
-
$cfs.bind(cf_e('destroy', conf), function(e, orgOrder) {
|
2240 |
-
e.stopPropagation();
|
2241 |
-
tmrs = sc_clearTimers(tmrs);
|
2242 |
-
|
2243 |
-
$cfs.data('_cfs_isCarousel', false);
|
2244 |
-
$cfs.trigger(cf_e('finish', conf));
|
2245 |
-
if (orgOrder)
|
2246 |
-
{
|
2247 |
-
$cfs.trigger(cf_e('jumpToStart', conf));
|
2248 |
-
}
|
2249 |
-
sz_restoreOrigCss($cfs.children());
|
2250 |
-
sz_restoreOrigCss($cfs);
|
2251 |
-
FN._unbind_events();
|
2252 |
-
FN._unbind_buttons();
|
2253 |
-
if (conf.wrapper == 'parent')
|
2254 |
-
{
|
2255 |
-
sz_restoreOrigCss($wrp);
|
2256 |
-
}
|
2257 |
-
else
|
2258 |
-
{
|
2259 |
-
$wrp.replaceWith($cfs);
|
2260 |
-
}
|
2261 |
-
|
2262 |
-
return true;
|
2263 |
-
});
|
2264 |
-
|
2265 |
-
|
2266 |
-
// debug event
|
2267 |
-
$cfs.bind(cf_e('debug', conf), function(e) {
|
2268 |
-
debug(conf, 'Carousel width: ' + opts.width);
|
2269 |
-
debug(conf, 'Carousel height: ' + opts.height);
|
2270 |
-
debug(conf, 'Item widths: ' + opts.items.width);
|
2271 |
-
debug(conf, 'Item heights: ' + opts.items.height);
|
2272 |
-
debug(conf, 'Number of items visible: ' + opts.items.visible);
|
2273 |
-
if (opts.auto.play)
|
2274 |
-
{
|
2275 |
-
debug(conf, 'Number of items scrolled automatically: ' + opts.auto.items);
|
2276 |
-
}
|
2277 |
-
if (opts.prev.button)
|
2278 |
-
{
|
2279 |
-
debug(conf, 'Number of items scrolled backward: ' + opts.prev.items);
|
2280 |
-
}
|
2281 |
-
if (opts.next.button)
|
2282 |
-
{
|
2283 |
-
debug(conf, 'Number of items scrolled forward: ' + opts.next.items);
|
2284 |
-
}
|
2285 |
-
return conf.debug;
|
2286 |
-
});
|
2287 |
-
|
2288 |
-
|
2289 |
-
// triggerEvent, making prefixed and namespaced events accessible from outside
|
2290 |
-
$cfs.bind('_cfs_triggerEvent', function(e, n, o) {
|
2291 |
-
e.stopPropagation();
|
2292 |
-
return $cfs.triggerHandler(cf_e(n, conf), o);
|
2293 |
-
});
|
2294 |
-
}; // /bind_events
|
2295 |
-
|
2296 |
-
|
2297 |
-
FN._unbind_events = function() {
|
2298 |
-
$cfs.unbind(cf_e('', conf));
|
2299 |
-
$cfs.unbind(cf_e('', conf, false));
|
2300 |
-
$cfs.unbind('_cfs_triggerEvent');
|
2301 |
-
}; // /unbind_events
|
2302 |
-
|
2303 |
-
|
2304 |
-
FN._bind_buttons = function() {
|
2305 |
-
FN._unbind_buttons();
|
2306 |
-
nv_showNavi(opts, itms.total, conf);
|
2307 |
-
nv_enableNavi(opts, itms.first, conf);
|
2308 |
-
|
2309 |
-
if (opts.auto.pauseOnHover)
|
2310 |
-
{
|
2311 |
-
var pC = bt_pauseOnHoverConfig(opts.auto.pauseOnHover);
|
2312 |
-
$wrp.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); })
|
2313 |
-
.bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); });
|
2314 |
-
}
|
2315 |
-
|
2316 |
-
// play button
|
2317 |
-
if (opts.auto.button)
|
2318 |
-
{
|
2319 |
-
opts.auto.button.bind(cf_e(opts.auto.event, conf, false), function(e) {
|
2320 |
-
e.preventDefault();
|
2321 |
-
var ev = false,
|
2322 |
-
pC = null;
|
2323 |
-
|
2324 |
-
if (crsl.isPaused)
|
2325 |
-
{
|
2326 |
-
ev = 'play';
|
2327 |
-
}
|
2328 |
-
else if (opts.auto.pauseOnEvent)
|
2329 |
-
{
|
2330 |
-
ev = 'pause';
|
2331 |
-
pC = bt_pauseOnHoverConfig(opts.auto.pauseOnEvent);
|
2332 |
-
}
|
2333 |
-
if (ev)
|
2334 |
-
{
|
2335 |
-
$cfs.trigger(cf_e(ev, conf), pC);
|
2336 |
-
}
|
2337 |
-
});
|
2338 |
-
}
|
2339 |
-
|
2340 |
-
// prev button
|
2341 |
-
if (opts.prev.button)
|
2342 |
-
{
|
2343 |
-
opts.prev.button.bind(cf_e(opts.prev.event, conf, false), function(e) {
|
2344 |
-
e.preventDefault();
|
2345 |
-
$cfs.trigger(cf_e('prev', conf));
|
2346 |
-
});
|
2347 |
-
if (opts.prev.pauseOnHover)
|
2348 |
-
{
|
2349 |
-
var pC = bt_pauseOnHoverConfig(opts.prev.pauseOnHover);
|
2350 |
-
opts.prev.button.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); })
|
2351 |
-
.bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); });
|
2352 |
-
}
|
2353 |
-
}
|
2354 |
-
|
2355 |
-
// next butotn
|
2356 |
-
if (opts.next.button)
|
2357 |
-
{
|
2358 |
-
opts.next.button.bind(cf_e(opts.next.event, conf, false), function(e) {
|
2359 |
-
e.preventDefault();
|
2360 |
-
$cfs.trigger(cf_e('next', conf));
|
2361 |
-
});
|
2362 |
-
if (opts.next.pauseOnHover)
|
2363 |
-
{
|
2364 |
-
var pC = bt_pauseOnHoverConfig(opts.next.pauseOnHover);
|
2365 |
-
opts.next.button.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); })
|
2366 |
-
.bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); });
|
2367 |
-
}
|
2368 |
-
}
|
2369 |
-
|
2370 |
-
// pagination
|
2371 |
-
if (opts.pagination.container)
|
2372 |
-
{
|
2373 |
-
if (opts.pagination.pauseOnHover)
|
2374 |
-
{
|
2375 |
-
var pC = bt_pauseOnHoverConfig(opts.pagination.pauseOnHover);
|
2376 |
-
opts.pagination.container.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); })
|
2377 |
-
.bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); });
|
2378 |
-
}
|
2379 |
-
}
|
2380 |
-
|
2381 |
-
// prev/next keys
|
2382 |
-
if (opts.prev.key || opts.next.key)
|
2383 |
-
{
|
2384 |
-
$(document).bind(cf_e('keyup', conf, false, true, true), function(e) {
|
2385 |
-
var k = e.keyCode;
|
2386 |
-
if (k == opts.next.key)
|
2387 |
-
{
|
2388 |
-
e.preventDefault();
|
2389 |
-
$cfs.trigger(cf_e('next', conf));
|
2390 |
-
}
|
2391 |
-
if (k == opts.prev.key)
|
2392 |
-
{
|
2393 |
-
e.preventDefault();
|
2394 |
-
$cfs.trigger(cf_e('prev', conf));
|
2395 |
-
}
|
2396 |
-
});
|
2397 |
-
}
|
2398 |
-
|
2399 |
-
// pagination keys
|
2400 |
-
if (opts.pagination.keys)
|
2401 |
-
{
|
2402 |
-
$(document).bind(cf_e('keyup', conf, false, true, true), function(e) {
|
2403 |
-
var k = e.keyCode;
|
2404 |
-
if (k >= 49 && k < 58)
|
2405 |
-
{
|
2406 |
-
k = (k-49) * opts.items.visible;
|
2407 |
-
if (k <= itms.total)
|
2408 |
-
{
|
2409 |
-
e.preventDefault();
|
2410 |
-
$cfs.trigger(cf_e('slideTo', conf), [k, 0, true, opts.pagination]);
|
2411 |
-
}
|
2412 |
-
}
|
2413 |
-
});
|
2414 |
-
}
|
2415 |
-
|
2416 |
-
// swipe
|
2417 |
-
if ($.fn.swipe)
|
2418 |
-
{
|
2419 |
-
var isTouch = 'ontouchstart' in window;
|
2420 |
-
if ((isTouch && opts.swipe.onTouch) || (!isTouch && opts.swipe.onMouse))
|
2421 |
-
{
|
2422 |
-
var scP = $.extend(true, {}, opts.prev, opts.swipe),
|
2423 |
-
scN = $.extend(true, {}, opts.next, opts.swipe),
|
2424 |
-
swP = function() { $cfs.trigger(cf_e('prev', conf), [scP]) },
|
2425 |
-
swN = function() { $cfs.trigger(cf_e('next', conf), [scN]) };
|
2426 |
-
|
2427 |
-
switch (opts.direction)
|
2428 |
-
{
|
2429 |
-
case 'up':
|
2430 |
-
case 'down':
|
2431 |
-
opts.swipe.options.swipeUp = swN;
|
2432 |
-
opts.swipe.options.swipeDown = swP;
|
2433 |
-
break;
|
2434 |
-
default:
|
2435 |
-
opts.swipe.options.swipeLeft = swN;
|
2436 |
-
opts.swipe.options.swipeRight = swP;
|
2437 |
-
}
|
2438 |
-
if (crsl.swipe)
|
2439 |
-
{
|
2440 |
-
$cfs.swipe('destroy');
|
2441 |
-
}
|
2442 |
-
$wrp.swipe(opts.swipe.options);
|
2443 |
-
$wrp.css('cursor', 'move');
|
2444 |
-
crsl.swipe = true;
|
2445 |
-
}
|
2446 |
-
}
|
2447 |
-
|
2448 |
-
// mousewheel
|
2449 |
-
if ($.fn.mousewheel)
|
2450 |
-
{
|
2451 |
-
|
2452 |
-
if (opts.mousewheel)
|
2453 |
-
{
|
2454 |
-
var mcP = $.extend(true, {}, opts.prev, opts.mousewheel),
|
2455 |
-
mcN = $.extend(true, {}, opts.next, opts.mousewheel);
|
2456 |
-
|
2457 |
-
if (crsl.mousewheel)
|
2458 |
-
{
|
2459 |
-
$wrp.unbind(cf_e('mousewheel', conf, false));
|
2460 |
-
}
|
2461 |
-
$wrp.bind(cf_e('mousewheel', conf, false), function(e, delta) {
|
2462 |
-
e.preventDefault();
|
2463 |
-
if (delta > 0)
|
2464 |
-
{
|
2465 |
-
$cfs.trigger(cf_e('prev', conf), [mcP]);
|
2466 |
-
}
|
2467 |
-
else
|
2468 |
-
{
|
2469 |
-
$cfs.trigger(cf_e('next', conf), [mcN]);
|
2470 |
-
}
|
2471 |
-
});
|
2472 |
-
crsl.mousewheel = true;
|
2473 |
-
}
|
2474 |
-
}
|
2475 |
-
|
2476 |
-
if (opts.auto.play)
|
2477 |
-
{
|
2478 |
-
$cfs.trigger(cf_e('play', conf), opts.auto.delay);
|
2479 |
-
}
|
2480 |
-
|
2481 |
-
if (crsl.upDateOnWindowResize)
|
2482 |
-
{
|
2483 |
-
var resizeFn = function(e) {
|
2484 |
-
$cfs.trigger(cf_e('finish', conf));
|
2485 |
-
if (opts.auto.pauseOnResize && !crsl.isPaused)
|
2486 |
-
{
|
2487 |
-
$cfs.trigger(cf_e('play', conf));
|
2488 |
-
}
|
2489 |
-
sz_resetMargin($cfs.children(), opts);
|
2490 |
-
$cfs.trigger(cf_e('updateSizes', conf));
|
2491 |
-
};
|
2492 |
-
|
2493 |
-
var $w = $(window),
|
2494 |
-
onResize = null;
|
2495 |
-
|
2496 |
-
if ($.debounce && conf.onWindowResize == 'debounce')
|
2497 |
-
{
|
2498 |
-
onResize = $.debounce(200, resizeFn);
|
2499 |
-
}
|
2500 |
-
else if ($.throttle && conf.onWindowResize == 'throttle')
|
2501 |
-
{
|
2502 |
-
onResize = $.throttle(300, resizeFn);
|
2503 |
-
}
|
2504 |
-
else
|
2505 |
-
{
|
2506 |
-
var _windowWidth = 0,
|
2507 |
-
_windowHeight = 0;
|
2508 |
-
|
2509 |
-
onResize = function() {
|
2510 |
-
var nw = $w.width(),
|
2511 |
-
nh = $w.height();
|
2512 |
-
|
2513 |
-
if (nw != _windowWidth || nh != _windowHeight)
|
2514 |
-
{
|
2515 |
-
resizeFn();
|
2516 |
-
_windowWidth = nw;
|
2517 |
-
_windowHeight = nh;
|
2518 |
-
}
|
2519 |
-
};
|
2520 |
-
}
|
2521 |
-
$w.bind(cf_e('resize', conf, false, true, true), onResize);
|
2522 |
-
}
|
2523 |
-
}; // /bind_buttons
|
2524 |
-
|
2525 |
-
|
2526 |
-
FN._unbind_buttons = function() {
|
2527 |
-
var ns1 = cf_e('', conf),
|
2528 |
-
ns2 = cf_e('', conf, false);
|
2529 |
-
ns3 = cf_e('', conf, false, true, true);
|
2530 |
-
|
2531 |
-
$(document).unbind(ns3);
|
2532 |
-
$(window).unbind(ns3);
|
2533 |
-
$wrp.unbind(ns2);
|
2534 |
-
|
2535 |
-
if (opts.auto.button)
|
2536 |
-
{
|
2537 |
-
opts.auto.button.unbind(ns2);
|
2538 |
-
}
|
2539 |
-
if (opts.prev.button)
|
2540 |
-
{
|
2541 |
-
opts.prev.button.unbind(ns2);
|
2542 |
-
}
|
2543 |
-
if (opts.next.button)
|
2544 |
-
{
|
2545 |
-
opts.next.button.unbind(ns2);
|
2546 |
-
}
|
2547 |
-
if (opts.pagination.container)
|
2548 |
-
{
|
2549 |
-
opts.pagination.container.unbind(ns2);
|
2550 |
-
if (opts.pagination.anchorBuilder)
|
2551 |
-
{
|
2552 |
-
opts.pagination.container.children().remove();
|
2553 |
-
}
|
2554 |
-
}
|
2555 |
-
if (crsl.swipe)
|
2556 |
-
{
|
2557 |
-
$cfs.swipe('destroy');
|
2558 |
-
$wrp.css('cursor', 'default');
|
2559 |
-
crsl.swipe = false;
|
2560 |
-
}
|
2561 |
-
if (crsl.mousewheel)
|
2562 |
-
{
|
2563 |
-
crsl.mousewheel = false;
|
2564 |
-
}
|
2565 |
-
|
2566 |
-
nv_showNavi(opts, 'hide', conf);
|
2567 |
-
nv_enableNavi(opts, 'removeClass', conf);
|
2568 |
-
|
2569 |
-
}; // /unbind_buttons
|
2570 |
-
|
2571 |
-
|
2572 |
-
|
2573 |
-
// START
|
2574 |
-
|
2575 |
-
if (is_boolean(configs))
|
2576 |
-
{
|
2577 |
-
configs = {
|
2578 |
-
'debug': configs
|
2579 |
-
};
|
2580 |
-
}
|
2581 |
-
|
2582 |
-
// set vars
|
2583 |
-
var crsl = {
|
2584 |
-
'direction' : 'next',
|
2585 |
-
'isPaused' : true,
|
2586 |
-
'isScrolling' : false,
|
2587 |
-
'isStopped' : false,
|
2588 |
-
'mousewheel' : false,
|
2589 |
-
'swipe' : false
|
2590 |
-
},
|
2591 |
-
itms = {
|
2592 |
-
'total' : $cfs.children().length,
|
2593 |
-
'first' : 0
|
2594 |
-
},
|
2595 |
-
tmrs = {
|
2596 |
-
'auto' : null,
|
2597 |
-
'progress' : null,
|
2598 |
-
'startTime' : getTime(),
|
2599 |
-
'timePassed' : 0
|
2600 |
-
},
|
2601 |
-
scrl = {
|
2602 |
-
'isStopped' : false,
|
2603 |
-
'duration' : 0,
|
2604 |
-
'startTime' : 0,
|
2605 |
-
'easing' : '',
|
2606 |
-
'anims' : []
|
2607 |
-
},
|
2608 |
-
clbk = {
|
2609 |
-
'onBefore' : [],
|
2610 |
-
'onAfter' : []
|
2611 |
-
},
|
2612 |
-
queu = [],
|
2613 |
-
conf = $.extend(true, {}, $.fn.carouFredSel.configs, configs),
|
2614 |
-
opts = {},
|
2615 |
-
opts_orig = $.extend(true, {}, options),
|
2616 |
-
$wrp = (conf.wrapper == 'parent')
|
2617 |
-
? $cfs.parent()
|
2618 |
-
: $cfs.wrap('<'+conf.wrapper.element+' class="'+conf.wrapper.classname+'" />').parent();
|
2619 |
-
|
2620 |
-
|
2621 |
-
conf.selector = $cfs.selector;
|
2622 |
-
conf.serialNumber = $.fn.carouFredSel.serialNumber++;
|
2623 |
-
|
2624 |
-
conf.transition = (conf.transition && $.fn.transition) ? 'transition' : 'animate';
|
2625 |
-
|
2626 |
-
// create carousel
|
2627 |
-
FN._init(opts_orig, true, starting_position);
|
2628 |
-
FN._build();
|
2629 |
-
FN._bind_events();
|
2630 |
-
FN._bind_buttons();
|
2631 |
-
|
2632 |
-
// find item to start
|
2633 |
-
if (is_array(opts.items.start))
|
2634 |
-
{
|
2635 |
-
var start_arr = opts.items.start;
|
2636 |
-
}
|
2637 |
-
else
|
2638 |
-
{
|
2639 |
-
var start_arr = [];
|
2640 |
-
if (opts.items.start != 0)
|
2641 |
-
{
|
2642 |
-
start_arr.push(opts.items.start);
|
2643 |
-
}
|
2644 |
-
}
|
2645 |
-
if (opts.cookie)
|
2646 |
-
{
|
2647 |
-
start_arr.unshift(parseInt(cf_getCookie(opts.cookie), 10));
|
2648 |
-
}
|
2649 |
-
|
2650 |
-
if (start_arr.length > 0)
|
2651 |
-
{
|
2652 |
-
for (var a = 0, l = start_arr.length; a < l; a++)
|
2653 |
-
{
|
2654 |
-
var s = start_arr[a];
|
2655 |
-
if (s == 0)
|
2656 |
-
{
|
2657 |
-
continue;
|
2658 |
-
}
|
2659 |
-
if (s === true)
|
2660 |
-
{
|
2661 |
-
s = window.location.hash;
|
2662 |
-
if (s.length < 1)
|
2663 |
-
{
|
2664 |
-
continue;
|
2665 |
-
}
|
2666 |
-
}
|
2667 |
-
else if (s === 'random')
|
2668 |
-
{
|
2669 |
-
s = Math.floor(Math.random()*itms.total);
|
2670 |
-
}
|
2671 |
-
if ($cfs.triggerHandler(cf_e('slideTo', conf), [s, 0, true, { fx: 'none' }]))
|
2672 |
-
{
|
2673 |
-
break;
|
2674 |
-
}
|
2675 |
-
}
|
2676 |
-
}
|
2677 |
-
var siz = sz_setSizes($cfs, opts),
|
2678 |
-
itm = gi_getCurrentItems($cfs.children(), opts);
|
2679 |
-
|
2680 |
-
if (opts.onCreate)
|
2681 |
-
{
|
2682 |
-
opts.onCreate.call($tt0, {
|
2683 |
-
'width': siz.width,
|
2684 |
-
'height': siz.height,
|
2685 |
-
'items': itm
|
2686 |
-
});
|
2687 |
-
}
|
2688 |
-
|
2689 |
-
$cfs.trigger(cf_e('updatePageStatus', conf), [true, siz]);
|
2690 |
-
$cfs.trigger(cf_e('linkAnchors', conf));
|
2691 |
-
|
2692 |
-
if (conf.debug)
|
2693 |
-
{
|
2694 |
-
$cfs.trigger(cf_e('debug', conf));
|
2695 |
-
}
|
2696 |
-
|
2697 |
-
return $cfs;
|
2698 |
-
};
|
2699 |
-
|
2700 |
-
|
2701 |
-
|
2702 |
-
// GLOBAL PUBLIC
|
2703 |
-
|
2704 |
-
$.fn.carouFredSel.serialNumber = 1;
|
2705 |
-
$.fn.carouFredSel.defaults = {
|
2706 |
-
'synchronise' : false,
|
2707 |
-
'infinite' : true,
|
2708 |
-
'circular' : true,
|
2709 |
-
'responsive' : false,
|
2710 |
-
'direction' : 'left',
|
2711 |
-
'items' : {
|
2712 |
-
'start' : 0
|
2713 |
-
},
|
2714 |
-
'scroll' : {
|
2715 |
-
'easing' : 'swing',
|
2716 |
-
'duration' : 500,
|
2717 |
-
'pauseOnHover' : false,
|
2718 |
-
'event' : 'click',
|
2719 |
-
'queue' : false
|
2720 |
-
}
|
2721 |
-
};
|
2722 |
-
$.fn.carouFredSel.configs = {
|
2723 |
-
'debug' : false,
|
2724 |
-
'transition' : false,
|
2725 |
-
'onWindowResize': 'throttle',
|
2726 |
-
'events' : {
|
2727 |
-
'prefix' : '',
|
2728 |
-
'namespace' : 'cfs'
|
2729 |
-
},
|
2730 |
-
'wrapper' : {
|
2731 |
-
'element' : 'div',
|
2732 |
-
'classname' : 'caroufredsel_wrapper'
|
2733 |
-
},
|
2734 |
-
'classnames' : {}
|
2735 |
-
};
|
2736 |
-
$.fn.carouFredSel.pageAnchorBuilder = function(nr) {
|
2737 |
-
return '<a href="#"><span>'+nr+'</span></a>';
|
2738 |
-
};
|
2739 |
-
$.fn.carouFredSel.progressbarUpdater = function(perc) {
|
2740 |
-
$(this).css('width', perc+'%');
|
2741 |
-
};
|
2742 |
-
|
2743 |
-
$.fn.carouFredSel.cookie = {
|
2744 |
-
get: function(n) {
|
2745 |
-
n += '=';
|
2746 |
-
var ca = document.cookie.split(';');
|
2747 |
-
for (var a = 0, l = ca.length; a < l; a++)
|
2748 |
-
{
|
2749 |
-
var c = ca[a];
|
2750 |
-
while (c.charAt(0) == ' ')
|
2751 |
-
{
|
2752 |
-
c = c.slice(1);
|
2753 |
-
}
|
2754 |
-
if (c.indexOf(n) == 0)
|
2755 |
-
{
|
2756 |
-
return c.slice(n.length);
|
2757 |
-
}
|
2758 |
-
}
|
2759 |
-
return 0;
|
2760 |
-
},
|
2761 |
-
set: function(n, v, d) {
|
2762 |
-
var e = "";
|
2763 |
-
if (d)
|
2764 |
-
{
|
2765 |
-
var date = new Date();
|
2766 |
-
date.setTime(date.getTime() + (d * 24 * 60 * 60 * 1000));
|
2767 |
-
e = "; expires=" + date.toGMTString();
|
2768 |
-
}
|
2769 |
-
document.cookie = n + '=' + v + e + '; path=/';
|
2770 |
-
},
|
2771 |
-
remove: function(n) {
|
2772 |
-
$.fn.carouFredSel.cookie.set(n, "", -1);
|
2773 |
-
}
|
2774 |
-
};
|
2775 |
-
|
2776 |
-
|
2777 |
-
// GLOBAL PRIVATE
|
2778 |
-
|
2779 |
-
// scrolling functions
|
2780 |
-
function sc_setScroll(d, e, c) {
|
2781 |
-
if (c.transition == 'transition')
|
2782 |
-
{
|
2783 |
-
if (e == 'swing')
|
2784 |
-
{
|
2785 |
-
e = 'ease';
|
2786 |
-
}
|
2787 |
-
}
|
2788 |
-
return {
|
2789 |
-
anims: [],
|
2790 |
-
duration: d,
|
2791 |
-
orgDuration: d,
|
2792 |
-
easing: e,
|
2793 |
-
startTime: getTime()
|
2794 |
-
};
|
2795 |
-
}
|
2796 |
-
function sc_startScroll(s, c) {
|
2797 |
-
for (var a = 0, l = s.anims.length; a < l; a++)
|
2798 |
-
{
|
2799 |
-
var b = s.anims[a];
|
2800 |
-
if (!b)
|
2801 |
-
{
|
2802 |
-
continue;
|
2803 |
-
}
|
2804 |
-
b[0][c.transition](b[1], s.duration, s.easing, b[2]);
|
2805 |
-
}
|
2806 |
-
}
|
2807 |
-
function sc_stopScroll(s, finish) {
|
2808 |
-
if (!is_boolean(finish))
|
2809 |
-
{
|
2810 |
-
finish = true;
|
2811 |
-
}
|
2812 |
-
if (is_object(s.pre))
|
2813 |
-
{
|
2814 |
-
sc_stopScroll(s.pre, finish);
|
2815 |
-
}
|
2816 |
-
for (var a = 0, l = s.anims.length; a < l; a++)
|
2817 |
-
{
|
2818 |
-
var b = s.anims[a];
|
2819 |
-
b[0].stop(true);
|
2820 |
-
if (finish)
|
2821 |
-
{
|
2822 |
-
b[0].css(b[1]);
|
2823 |
-
if (is_function(b[2]))
|
2824 |
-
{
|
2825 |
-
b[2]();
|
2826 |
-
}
|
2827 |
-
}
|
2828 |
-
}
|
2829 |
-
if (is_object(s.post))
|
2830 |
-
{
|
2831 |
-
sc_stopScroll(s.post, finish);
|
2832 |
-
}
|
2833 |
-
}
|
2834 |
-
function sc_afterScroll( $c, $c2, o ) {
|
2835 |
-
if ($c2)
|
2836 |
-
{
|
2837 |
-
$c2.remove();
|
2838 |
-
}
|
2839 |
-
|
2840 |
-
switch(o.fx) {
|
2841 |
-
case 'fade':
|
2842 |
-
case 'crossfade':
|
2843 |
-
case 'cover-fade':
|
2844 |
-
case 'uncover-fade':
|
2845 |
-
$c.css('opacity', 1);
|
2846 |
-
$c.css('filter', '');
|
2847 |
-
break;
|
2848 |
-
}
|
2849 |
-
}
|
2850 |
-
function sc_fireCallbacks($t, o, b, a, c) {
|
2851 |
-
if (o[b])
|
2852 |
-
{
|
2853 |
-
o[b].call($t, a);
|
2854 |
-
}
|
2855 |
-
if (c[b].length)
|
2856 |
-
{
|
2857 |
-
for (var i = 0, l = c[b].length; i < l; i++)
|
2858 |
-
{
|
2859 |
-
c[b][i].call($t, a);
|
2860 |
-
}
|
2861 |
-
}
|
2862 |
-
return [];
|
2863 |
-
}
|
2864 |
-
function sc_fireQueue($c, q, c) {
|
2865 |
-
|
2866 |
-
if (q.length)
|
2867 |
-
{
|
2868 |
-
$c.trigger(cf_e(q[0][0], c), q[0][1]);
|
2869 |
-
q.shift();
|
2870 |
-
}
|
2871 |
-
return q;
|
2872 |
-
}
|
2873 |
-
function sc_hideHiddenItems(hiddenitems) {
|
2874 |
-
hiddenitems.each(function() {
|
2875 |
-
var hi = $(this);
|
2876 |
-
hi.data('_cfs_isHidden', hi.is(':hidden')).hide();
|
2877 |
-
});
|
2878 |
-
}
|
2879 |
-
function sc_showHiddenItems(hiddenitems) {
|
2880 |
-
if (hiddenitems)
|
2881 |
-
{
|
2882 |
-
hiddenitems.each(function() {
|
2883 |
-
var hi = $(this);
|
2884 |
-
if (!hi.data('_cfs_isHidden'))
|
2885 |
-
{
|
2886 |
-
hi.show();
|
2887 |
-
}
|
2888 |
-
});
|
2889 |
-
}
|
2890 |
-
}
|
2891 |
-
function sc_clearTimers(t) {
|
2892 |
-
if (t.auto)
|
2893 |
-
{
|
2894 |
-
clearTimeout(t.auto);
|
2895 |
-
}
|
2896 |
-
if (t.progress)
|
2897 |
-
{
|
2898 |
-
clearInterval(t.progress);
|
2899 |
-
}
|
2900 |
-
return t;
|
2901 |
-
}
|
2902 |
-
function sc_mapCallbackArguments(i_old, i_skp, i_new, s_itm, s_dir, s_dur, w_siz) {
|
2903 |
-
return {
|
2904 |
-
'width': w_siz.width,
|
2905 |
-
'height': w_siz.height,
|
2906 |
-
'items': {
|
2907 |
-
'old': i_old,
|
2908 |
-
'skipped': i_skp,
|
2909 |
-
'visible': i_new
|
2910 |
-
},
|
2911 |
-
'scroll': {
|
2912 |
-
'items': s_itm,
|
2913 |
-
'direction': s_dir,
|
2914 |
-
'duration': s_dur
|
2915 |
-
}
|
2916 |
-
};
|
2917 |
-
}
|
2918 |
-
function sc_getDuration( sO, o, nI, siz ) {
|
2919 |
-
var dur = sO.duration;
|
2920 |
-
if (sO.fx == 'none')
|
2921 |
-
{
|
2922 |
-
return 0;
|
2923 |
-
}
|
2924 |
-
if (dur == 'auto')
|
2925 |
-
{
|
2926 |
-
dur = o.scroll.duration / o.scroll.items * nI;
|
2927 |
-
}
|
2928 |
-
else if (dur < 10)
|
2929 |
-
{
|
2930 |
-
dur = siz / dur;
|
2931 |
-
}
|
2932 |
-
if (dur < 1)
|
2933 |
-
{
|
2934 |
-
return 0;
|
2935 |
-
}
|
2936 |
-
if (sO.fx == 'fade')
|
2937 |
-
{
|
2938 |
-
dur = dur / 2;
|
2939 |
-
}
|
2940 |
-
return Math.round(dur);
|
2941 |
-
}
|
2942 |
-
|
2943 |
-
// navigation functions
|
2944 |
-
function nv_showNavi(o, t, c) {
|
2945 |
-
var minimum = (is_number(o.items.minimum)) ? o.items.minimum : o.items.visible + 1;
|
2946 |
-
if (t == 'show' || t == 'hide')
|
2947 |
-
{
|
2948 |
-
var f = t;
|
2949 |
-
}
|
2950 |
-
else if (minimum > t)
|
2951 |
-
{
|
2952 |
-
debug(c, 'Not enough items ('+t+' total, '+minimum+' needed): Hiding navigation.');
|
2953 |
-
var f = 'hide';
|
2954 |
-
}
|
2955 |
-
else
|
2956 |
-
{
|
2957 |
-
var f = 'show';
|
2958 |
-
}
|
2959 |
-
var s = (f == 'show') ? 'removeClass' : 'addClass',
|
2960 |
-
h = cf_c('hidden', c);
|
2961 |
-
|
2962 |
-
if (o.auto.button)
|
2963 |
-
{
|
2964 |
-
o.auto.button[f]()[s](h);
|
2965 |
-
}
|
2966 |
-
if (o.prev.button)
|
2967 |
-
{
|
2968 |
-
o.prev.button[f]()[s](h);
|
2969 |
-
}
|
2970 |
-
if (o.next.button)
|
2971 |
-
{
|
2972 |
-
o.next.button[f]()[s](h);
|
2973 |
-
}
|
2974 |
-
if (o.pagination.container)
|
2975 |
-
{
|
2976 |
-
o.pagination.container[f]()[s](h);
|
2977 |
-
}
|
2978 |
-
}
|
2979 |
-
function nv_enableNavi(o, f, c) {
|
2980 |
-
if (o.circular || o.infinite) return;
|
2981 |
-
var fx = (f == 'removeClass' || f == 'addClass') ? f : false,
|
2982 |
-
di = cf_c('disabled', c);
|
2983 |
-
|
2984 |
-
if (o.auto.button && fx)
|
2985 |
-
{
|
2986 |
-
o.auto.button[fx](di);
|
2987 |
-
}
|
2988 |
-
if (o.prev.button)
|
2989 |
-
{
|
2990 |
-
var fn = fx || (f == 0) ? 'addClass' : 'removeClass';
|
2991 |
-
o.prev.button[fn](di);
|
2992 |
-
}
|
2993 |
-
if (o.next.button)
|
2994 |
-
{
|
2995 |
-
var fn = fx || (f == o.items.visible) ? 'addClass' : 'removeClass';
|
2996 |
-
o.next.button[fn](di);
|
2997 |
-
}
|
2998 |
-
}
|
2999 |
-
|
3000 |
-
// get object functions
|
3001 |
-
function go_getObject($tt, obj) {
|
3002 |
-
if (is_function(obj))
|
3003 |
-
{
|
3004 |
-
obj = obj.call($tt);
|
3005 |
-
}
|
3006 |
-
else if (is_undefined(obj))
|
3007 |
-
{
|
3008 |
-
obj = {};
|
3009 |
-
}
|
3010 |
-
return obj;
|
3011 |
-
}
|
3012 |
-
function go_getItemsObject($tt, obj) {
|
3013 |
-
obj = go_getObject($tt, obj);
|
3014 |
-
if (is_number(obj))
|
3015 |
-
{
|
3016 |
-
obj = {
|
3017 |
-
'visible': obj
|
3018 |
-
};
|
3019 |
-
}
|
3020 |
-
else if (obj == 'variable')
|
3021 |
-
{
|
3022 |
-
obj = {
|
3023 |
-
'visible': obj,
|
3024 |
-
'width': obj,
|
3025 |
-
'height': obj
|
3026 |
-
};
|
3027 |
-
}
|
3028 |
-
else if (!is_object(obj))
|
3029 |
-
{
|
3030 |
-
obj = {};
|
3031 |
-
}
|
3032 |
-
return obj;
|
3033 |
-
}
|
3034 |
-
function go_getScrollObject($tt, obj) {
|
3035 |
-
obj = go_getObject($tt, obj);
|
3036 |
-
if (is_number(obj))
|
3037 |
-
{
|
3038 |
-
if (obj <= 50)
|
3039 |
-
{
|
3040 |
-
obj = {
|
3041 |
-
'items': obj
|
3042 |
-
};
|
3043 |
-
}
|
3044 |
-
else
|
3045 |
-
{
|
3046 |
-
obj = {
|
3047 |
-
'duration': obj
|
3048 |
-
};
|
3049 |
-
}
|
3050 |
-
}
|
3051 |
-
else if (is_string(obj))
|
3052 |
-
{
|
3053 |
-
obj = {
|
3054 |
-
'easing': obj
|
3055 |
-
};
|
3056 |
-
}
|
3057 |
-
else if (!is_object(obj))
|
3058 |
-
{
|
3059 |
-
obj = {};
|
3060 |
-
}
|
3061 |
-
return obj;
|
3062 |
-
}
|
3063 |
-
function go_getNaviObject($tt, obj) {
|
3064 |
-
obj = go_getObject($tt, obj);
|
3065 |
-
if (is_string(obj))
|
3066 |
-
{
|
3067 |
-
var temp = cf_getKeyCode(obj);
|
3068 |
-
if (temp == -1)
|
3069 |
-
{
|
3070 |
-
obj = $(obj);
|
3071 |
-
}
|
3072 |
-
else
|
3073 |
-
{
|
3074 |
-
obj = temp;
|
3075 |
-
}
|
3076 |
-
}
|
3077 |
-
return obj;
|
3078 |
-
}
|
3079 |
-
|
3080 |
-
function go_getAutoObject($tt, obj) {
|
3081 |
-
obj = go_getNaviObject($tt, obj);
|
3082 |
-
if (is_jquery(obj))
|
3083 |
-
{
|
3084 |
-
obj = {
|
3085 |
-
'button': obj
|
3086 |
-
};
|
3087 |
-
}
|
3088 |
-
else if (is_boolean(obj))
|
3089 |
-
{
|
3090 |
-
obj = {
|
3091 |
-
'play': obj
|
3092 |
-
};
|
3093 |
-
}
|
3094 |
-
else if (is_number(obj))
|
3095 |
-
{
|
3096 |
-
obj = {
|
3097 |
-
'timeoutDuration': obj
|
3098 |
-
};
|
3099 |
-
}
|
3100 |
-
if (obj.progress)
|
3101 |
-
{
|
3102 |
-
if (is_string(obj.progress) || is_jquery(obj.progress))
|
3103 |
-
{
|
3104 |
-
obj.progress = {
|
3105 |
-
'bar': obj.progress
|
3106 |
-
};
|
3107 |
-
}
|
3108 |
-
}
|
3109 |
-
return obj;
|
3110 |
-
}
|
3111 |
-
function go_complementAutoObject($tt, obj) {
|
3112 |
-
if (is_function(obj.button))
|
3113 |
-
{
|
3114 |
-
obj.button = obj.button.call($tt);
|
3115 |
-
}
|
3116 |
-
if (is_string(obj.button))
|
3117 |
-
{
|
3118 |
-
obj.button = $(obj.button);
|
3119 |
-
}
|
3120 |
-
if (!is_boolean(obj.play))
|
3121 |
-
{
|
3122 |
-
obj.play = true;
|
3123 |
-
}
|
3124 |
-
if (!is_number(obj.delay))
|
3125 |
-
{
|
3126 |
-
obj.delay = 0;
|
3127 |
-
}
|
3128 |
-
if (is_undefined(obj.pauseOnEvent))
|
3129 |
-
{
|
3130 |
-
obj.pauseOnEvent = true;
|
3131 |
-
}
|
3132 |
-
if (!is_boolean(obj.pauseOnResize))
|
3133 |
-
{
|
3134 |
-
obj.pauseOnResize = true;
|
3135 |
-
}
|
3136 |
-
if (!is_number(obj.timeoutDuration))
|
3137 |
-
{
|
3138 |
-
obj.timeoutDuration = (obj.duration < 10)
|
3139 |
-
? 2500
|
3140 |
-
: obj.duration * 5;
|
3141 |
-
}
|
3142 |
-
if (obj.progress)
|
3143 |
-
{
|
3144 |
-
if (is_function(obj.progress.bar))
|
3145 |
-
{
|
3146 |
-
obj.progress.bar = obj.progress.bar.call($tt);
|
3147 |
-
}
|
3148 |
-
if (is_string(obj.progress.bar))
|
3149 |
-
{
|
3150 |
-
obj.progress.bar = $(obj.progress.bar);
|
3151 |
-
}
|
3152 |
-
if (obj.progress.bar)
|
3153 |
-
{
|
3154 |
-
if (!is_function(obj.progress.updater))
|
3155 |
-
{
|
3156 |
-
obj.progress.updater = $.fn.carouFredSel.progressbarUpdater;
|
3157 |
-
}
|
3158 |
-
if (!is_number(obj.progress.interval))
|
3159 |
-
{
|
3160 |
-
obj.progress.interval = 50;
|
3161 |
-
}
|
3162 |
-
}
|
3163 |
-
else
|
3164 |
-
{
|
3165 |
-
obj.progress = false;
|
3166 |
-
}
|
3167 |
-
}
|
3168 |
-
return obj;
|
3169 |
-
}
|
3170 |
-
|
3171 |
-
function go_getPrevNextObject($tt, obj) {
|
3172 |
-
obj = go_getNaviObject($tt, obj);
|
3173 |
-
if (is_jquery(obj))
|
3174 |
-
{
|
3175 |
-
obj = {
|
3176 |
-
'button': obj
|
3177 |
-
};
|
3178 |
-
}
|
3179 |
-
else if (is_number(obj))
|
3180 |
-
{
|
3181 |
-
obj = {
|
3182 |
-
'key': obj
|
3183 |
-
};
|
3184 |
-
}
|
3185 |
-
return obj;
|
3186 |
-
}
|
3187 |
-
function go_complementPrevNextObject($tt, obj) {
|
3188 |
-
if (is_function(obj.button))
|
3189 |
-
{
|
3190 |
-
obj.button = obj.button.call($tt);
|
3191 |
-
}
|
3192 |
-
if (is_string(obj.button))
|
3193 |
-
{
|
3194 |
-
obj.button = $(obj.button);
|
3195 |
-
}
|
3196 |
-
if (is_string(obj.key))
|
3197 |
-
{
|
3198 |
-
obj.key = cf_getKeyCode(obj.key);
|
3199 |
-
}
|
3200 |
-
return obj;
|
3201 |
-
}
|
3202 |
-
|
3203 |
-
function go_getPaginationObject($tt, obj) {
|
3204 |
-
obj = go_getNaviObject($tt, obj);
|
3205 |
-
if (is_jquery(obj))
|
3206 |
-
{
|
3207 |
-
obj = {
|
3208 |
-
'container': obj
|
3209 |
-
};
|
3210 |
-
}
|
3211 |
-
else if (is_boolean(obj))
|
3212 |
-
{
|
3213 |
-
obj = {
|
3214 |
-
'keys': obj
|
3215 |
-
};
|
3216 |
-
}
|
3217 |
-
return obj;
|
3218 |
-
}
|
3219 |
-
function go_complementPaginationObject($tt, obj) {
|
3220 |
-
if (is_function(obj.container))
|
3221 |
-
{
|
3222 |
-
obj.container = obj.container.call($tt);
|
3223 |
-
}
|
3224 |
-
if (is_string(obj.container))
|
3225 |
-
{
|
3226 |
-
obj.container = $(obj.container);
|
3227 |
-
}
|
3228 |
-
if (!is_number(obj.items))
|
3229 |
-
{
|
3230 |
-
obj.items = false;
|
3231 |
-
}
|
3232 |
-
if (!is_boolean(obj.keys))
|
3233 |
-
{
|
3234 |
-
obj.keys = false;
|
3235 |
-
}
|
3236 |
-
if (!is_function(obj.anchorBuilder) && !is_false(obj.anchorBuilder))
|
3237 |
-
{
|
3238 |
-
obj.anchorBuilder = $.fn.carouFredSel.pageAnchorBuilder;
|
3239 |
-
}
|
3240 |
-
if (!is_number(obj.deviation))
|
3241 |
-
{
|
3242 |
-
obj.deviation = 0;
|
3243 |
-
}
|
3244 |
-
return obj;
|
3245 |
-
}
|
3246 |
-
|
3247 |
-
function go_getSwipeObject($tt, obj) {
|
3248 |
-
if (is_function(obj))
|
3249 |
-
{
|
3250 |
-
obj = obj.call($tt);
|
3251 |
-
}
|
3252 |
-
if (is_undefined(obj))
|
3253 |
-
{
|
3254 |
-
obj = {
|
3255 |
-
'onTouch': false
|
3256 |
-
};
|
3257 |
-
}
|
3258 |
-
if (is_true(obj))
|
3259 |
-
{
|
3260 |
-
obj = {
|
3261 |
-
'onTouch': obj
|
3262 |
-
};
|
3263 |
-
}
|
3264 |
-
else if (is_number(obj))
|
3265 |
-
{
|
3266 |
-
obj = {
|
3267 |
-
'items': obj
|
3268 |
-
};
|
3269 |
-
}
|
3270 |
-
return obj;
|
3271 |
-
}
|
3272 |
-
function go_complementSwipeObject($tt, obj) {
|
3273 |
-
if (!is_boolean(obj.onTouch))
|
3274 |
-
{
|
3275 |
-
obj.onTouch = true;
|
3276 |
-
}
|
3277 |
-
if (!is_boolean(obj.onMouse))
|
3278 |
-
{
|
3279 |
-
obj.onMouse = false;
|
3280 |
-
}
|
3281 |
-
if (!is_object(obj.options))
|
3282 |
-
{
|
3283 |
-
obj.options = {};
|
3284 |
-
}
|
3285 |
-
if (!is_boolean(obj.options.triggerOnTouchEnd))
|
3286 |
-
{
|
3287 |
-
obj.options.triggerOnTouchEnd = false;
|
3288 |
-
}
|
3289 |
-
return obj;
|
3290 |
-
}
|
3291 |
-
function go_getMousewheelObject($tt, obj) {
|
3292 |
-
if (is_function(obj))
|
3293 |
-
{
|
3294 |
-
obj = obj.call($tt);
|
3295 |
-
}
|
3296 |
-
if (is_true(obj))
|
3297 |
-
{
|
3298 |
-
obj = {};
|
3299 |
-
}
|
3300 |
-
else if (is_number(obj))
|
3301 |
-
{
|
3302 |
-
obj = {
|
3303 |
-
'items': obj
|
3304 |
-
};
|
3305 |
-
}
|
3306 |
-
else if (is_undefined(obj))
|
3307 |
-
{
|
3308 |
-
obj = false;
|
3309 |
-
}
|
3310 |
-
return obj;
|
3311 |
-
}
|
3312 |
-
function go_complementMousewheelObject($tt, obj) {
|
3313 |
-
return obj;
|
3314 |
-
}
|
3315 |
-
|
3316 |
-
// get number functions
|
3317 |
-
function gn_getItemIndex(num, dev, org, items, $cfs) {
|
3318 |
-
if (is_string(num))
|
3319 |
-
{
|
3320 |
-
num = $(num, $cfs);
|
3321 |
-
}
|
3322 |
-
|
3323 |
-
if (is_object(num))
|
3324 |
-
{
|
3325 |
-
num = $(num, $cfs);
|
3326 |
-
}
|
3327 |
-
if (is_jquery(num))
|
3328 |
-
{
|
3329 |
-
num = $cfs.children().index(num);
|
3330 |
-
if (!is_boolean(org))
|
3331 |
-
{
|
3332 |
-
org = false;
|
3333 |
-
}
|
3334 |
-
}
|
3335 |
-
else
|
3336 |
-
{
|
3337 |
-
if (!is_boolean(org))
|
3338 |
-
{
|
3339 |
-
org = true;
|
3340 |
-
}
|
3341 |
-
}
|
3342 |
-
if (!is_number(num))
|
3343 |
-
{
|
3344 |
-
num = 0;
|
3345 |
-
}
|
3346 |
-
if (!is_number(dev))
|
3347 |
-
{
|
3348 |
-
dev = 0;
|
3349 |
-
}
|
3350 |
-
|
3351 |
-
if (org)
|
3352 |
-
{
|
3353 |
-
num += items.first;
|
3354 |
-
}
|
3355 |
-
num += dev;
|
3356 |
-
if (items.total > 0)
|
3357 |
-
{
|
3358 |
-
while (num >= items.total)
|
3359 |
-
{
|
3360 |
-
num -= items.total;
|
3361 |
-
}
|
3362 |
-
while (num < 0)
|
3363 |
-
{
|
3364 |
-
num += items.total;
|
3365 |
-
}
|
3366 |
-
}
|
3367 |
-
return num;
|
3368 |
-
}
|
3369 |
-
|
3370 |
-
// items prev
|
3371 |
-
function gn_getVisibleItemsPrev(i, o, s) {
|
3372 |
-
var t = 0,
|
3373 |
-
x = 0;
|
3374 |
-
|
3375 |
-
for (var a = s; a >= 0; a--)
|
3376 |
-
{
|
3377 |
-
var j = i.eq(a);
|
3378 |
-
t += (j.is(':visible')) ? j[o.d['outerWidth']](true) : 0;
|
3379 |
-
if (t > o.maxDimension)
|
3380 |
-
{
|
3381 |
-
return x;
|
3382 |
-
}
|
3383 |
-
if (a == 0)
|
3384 |
-
{
|
3385 |
-
a = i.length;
|
3386 |
-
}
|
3387 |
-
x++;
|
3388 |
-
}
|
3389 |
-
}
|
3390 |
-
function gn_getVisibleItemsPrevFilter(i, o, s) {
|
3391 |
-
return gn_getItemsPrevFilter(i, o.items.filter, o.items.visibleConf.org, s);
|
3392 |
-
}
|
3393 |
-
function gn_getScrollItemsPrevFilter(i, o, s, m) {
|
3394 |
-
return gn_getItemsPrevFilter(i, o.items.filter, m, s);
|
3395 |
-
}
|
3396 |
-
function gn_getItemsPrevFilter(i, f, m, s) {
|
3397 |
-
var t = 0,
|
3398 |
-
x = 0;
|
3399 |
-
|
3400 |
-
for (var a = s, l = i.length; a >= 0; a--)
|
3401 |
-
{
|
3402 |
-
x++;
|
3403 |
-
if (x == l)
|
3404 |
-
{
|
3405 |
-
return x;
|
3406 |
-
}
|
3407 |
-
|
3408 |
-
var j = i.eq(a);
|
3409 |
-
if (j.is(f))
|
3410 |
-
{
|
3411 |
-
t++;
|
3412 |
-
if (t == m)
|
3413 |
-
{
|
3414 |
-
return x;
|
3415 |
-
}
|
3416 |
-
}
|
3417 |
-
if (a == 0)
|
3418 |
-
{
|
3419 |
-
a = l;
|
3420 |
-
}
|
3421 |
-
}
|
3422 |
-
}
|
3423 |
-
|
3424 |
-
function gn_getVisibleOrg($c, o) {
|
3425 |
-
return o.items.visibleConf.org || $c.children().slice(0, o.items.visible).filter(o.items.filter).length;
|
3426 |
-
}
|
3427 |
-
|
3428 |
-
// items next
|
3429 |
-
function gn_getVisibleItemsNext(i, o, s) {
|
3430 |
-
var t = 0,
|
3431 |
-
x = 0;
|
3432 |
-
|
3433 |
-
for (var a = s, l = i.length-1; a <= l; a++)
|
3434 |
-
{
|
3435 |
-
var j = i.eq(a);
|
3436 |
-
|
3437 |
-
t += (j.is(':visible')) ? j[o.d['outerWidth']](true) : 0;
|
3438 |
-
if (t > o.maxDimension)
|
3439 |
-
{
|
3440 |
-
return x;
|
3441 |
-
}
|
3442 |
-
|
3443 |
-
x++;
|
3444 |
-
if (x == l+1)
|
3445 |
-
{
|
3446 |
-
return x;
|
3447 |
-
}
|
3448 |
-
if (a == l)
|
3449 |
-
{
|
3450 |
-
a = -1;
|
3451 |
-
}
|
3452 |
-
}
|
3453 |
-
}
|
3454 |
-
function gn_getVisibleItemsNextTestCircular(i, o, s, l) {
|
3455 |
-
var v = gn_getVisibleItemsNext(i, o, s);
|
3456 |
-
if (!o.circular)
|
3457 |
-
{
|
3458 |
-
if (s + v > l)
|
3459 |
-
{
|
3460 |
-
v = l - s;
|
3461 |
-
}
|
3462 |
-
}
|
3463 |
-
return v;
|
3464 |
-
}
|
3465 |
-
function gn_getVisibleItemsNextFilter(i, o, s) {
|
3466 |
-
return gn_getItemsNextFilter(i, o.items.filter, o.items.visibleConf.org, s, o.circular);
|
3467 |
-
}
|
3468 |
-
function gn_getScrollItemsNextFilter(i, o, s, m) {
|
3469 |
-
return gn_getItemsNextFilter(i, o.items.filter, m+1, s, o.circular) - 1;
|
3470 |
-
}
|
3471 |
-
function gn_getItemsNextFilter(i, f, m, s, c) {
|
3472 |
-
var t = 0,
|
3473 |
-
x = 0;
|
3474 |
-
|
3475 |
-
for (var a = s, l = i.length-1; a <= l; a++)
|
3476 |
-
{
|
3477 |
-
x++;
|
3478 |
-
if (x >= l)
|
3479 |
-
{
|
3480 |
-
return x;
|
3481 |
-
}
|
3482 |
-
|
3483 |
-
var j = i.eq(a);
|
3484 |
-
if (j.is(f))
|
3485 |
-
{
|
3486 |
-
t++;
|
3487 |
-
if (t == m)
|
3488 |
-
{
|
3489 |
-
return x;
|
3490 |
-
}
|
3491 |
-
}
|
3492 |
-
if (a == l)
|
3493 |
-
{
|
3494 |
-
a = -1;
|
3495 |
-
}
|
3496 |
-
}
|
3497 |
-
}
|
3498 |
-
|
3499 |
-
// get items functions
|
3500 |
-
function gi_getCurrentItems(i, o) {
|
3501 |
-
return i.slice(0, o.items.visible);
|
3502 |
-
}
|
3503 |
-
function gi_getOldItemsPrev(i, o, n) {
|
3504 |
-
return i.slice(n, o.items.visibleConf.old+n);
|
3505 |
-
}
|
3506 |
-
function gi_getNewItemsPrev(i, o) {
|
3507 |
-
return i.slice(0, o.items.visible);
|
3508 |
-
}
|
3509 |
-
function gi_getOldItemsNext(i, o) {
|
3510 |
-
return i.slice(0, o.items.visibleConf.old);
|
3511 |
-
}
|
3512 |
-
function gi_getNewItemsNext(i, o, n) {
|
3513 |
-
return i.slice(n, o.items.visible+n);
|
3514 |
-
}
|
3515 |
-
|
3516 |
-
// sizes functions
|
3517 |
-
function sz_storeMargin(i, o, d) {
|
3518 |
-
if (o.usePadding)
|
3519 |
-
{
|
3520 |
-
if (!is_string(d))
|
3521 |
-
{
|
3522 |
-
d = '_cfs_origCssMargin';
|
3523 |
-
}
|
3524 |
-
i.each(function() {
|
3525 |
-
var j = $(this),
|
3526 |
-
m = parseInt(j.css(o.d['marginRight']), 10);
|
3527 |
-
if (!is_number(m))
|
3528 |
-
{
|
3529 |
-
m = 0;
|
3530 |
-
}
|
3531 |
-
j.data(d, m);
|
3532 |
-
});
|
3533 |
-
}
|
3534 |
-
}
|
3535 |
-
function sz_resetMargin(i, o, m) {
|
3536 |
-
if (o.usePadding)
|
3537 |
-
{
|
3538 |
-
var x = (is_boolean(m)) ? m : false;
|
3539 |
-
if (!is_number(m))
|
3540 |
-
{
|
3541 |
-
m = 0;
|
3542 |
-
}
|
3543 |
-
sz_storeMargin(i, o, '_cfs_tempCssMargin');
|
3544 |
-
i.each(function() {
|
3545 |
-
var j = $(this);
|
3546 |
-
j.css(o.d['marginRight'], ((x) ? j.data('_cfs_tempCssMargin') : m + j.data('_cfs_origCssMargin')));
|
3547 |
-
});
|
3548 |
-
}
|
3549 |
-
}
|
3550 |
-
function sz_storeOrigCss(i) {
|
3551 |
-
i.each(function() {
|
3552 |
-
var j = $(this);
|
3553 |
-
j.data('_cfs_origCss', j.attr('style') || '');
|
3554 |
-
});
|
3555 |
-
}
|
3556 |
-
function sz_restoreOrigCss(i) {
|
3557 |
-
i.each(function() {
|
3558 |
-
var j = $(this);
|
3559 |
-
j.attr('style', j.data('_cfs_origCss') || '');
|
3560 |
-
});
|
3561 |
-
}
|
3562 |
-
function sz_setResponsiveSizes(o, all) {
|
3563 |
-
var visb = o.items.visible,
|
3564 |
-
newS = o.items[o.d['width']],
|
3565 |
-
seco = o[o.d['height']],
|
3566 |
-
secp = is_percentage(seco);
|
3567 |
-
|
3568 |
-
all.each(function() {
|
3569 |
-
var $t = $(this),
|
3570 |
-
nw = newS - ms_getPaddingBorderMargin($t, o, 'Width');
|
3571 |
-
|
3572 |
-
$t[o.d['width']](nw);
|
3573 |
-
if (secp)
|
3574 |
-
{
|
3575 |
-
$t[o.d['height']](ms_getPercentage(nw, seco));
|
3576 |
-
}
|
3577 |
-
});
|
3578 |
-
}
|
3579 |
-
function sz_setSizes($c, o) {
|
3580 |
-
var $w = $c.parent(),
|
3581 |
-
$i = $c.children(),
|
3582 |
-
$v = gi_getCurrentItems($i, o),
|
3583 |
-
sz = cf_mapWrapperSizes(ms_getSizes($v, o, true), o, false);
|
3584 |
-
|
3585 |
-
$w.css(sz);
|
3586 |
-
|
3587 |
-
if (o.usePadding)
|
3588 |
-
{
|
3589 |
-
var p = o.padding,
|
3590 |
-
r = p[o.d[1]];
|
3591 |
-
|
3592 |
-
if (o.align && r < 0)
|
3593 |
-
{
|
3594 |
-
r = 0;
|
3595 |
-
}
|
3596 |
-
var $l = $v.last();
|
3597 |
-
$l.css(o.d['marginRight'], $l.data('_cfs_origCssMargin') + r);
|
3598 |
-
$c.css(o.d['top'], p[o.d[0]]);
|
3599 |
-
$c.css(o.d['left'], p[o.d[3]]);
|
3600 |
-
}
|
3601 |
-
|
3602 |
-
$c.css(o.d['width'], sz[o.d['width']]+(ms_getTotalSize($i, o, 'width')*2));
|
3603 |
-
$c.css(o.d['height'], ms_getLargestSize($i, o, 'height'));
|
3604 |
-
return sz;
|
3605 |
-
}
|
3606 |
-
|
3607 |
-
// measuring functions
|
3608 |
-
function ms_getSizes(i, o, wrapper) {
|
3609 |
-
return [ms_getTotalSize(i, o, 'width', wrapper), ms_getLargestSize(i, o, 'height', wrapper)];
|
3610 |
-
}
|
3611 |
-
function ms_getLargestSize(i, o, dim, wrapper) {
|
3612 |
-
if (!is_boolean(wrapper))
|
3613 |
-
{
|
3614 |
-
wrapper = false;
|
3615 |
-
}
|
3616 |
-
if (is_number(o[o.d[dim]]) && wrapper)
|
3617 |
-
{
|
3618 |
-
return o[o.d[dim]];
|
3619 |
-
}
|
3620 |
-
if (is_number(o.items[o.d[dim]]))
|
3621 |
-
{
|
3622 |
-
return o.items[o.d[dim]];
|
3623 |
-
}
|
3624 |
-
dim = (dim.toLowerCase().indexOf('width') > -1) ? 'outerWidth' : 'outerHeight';
|
3625 |
-
return ms_getTrueLargestSize(i, o, dim);
|
3626 |
-
}
|
3627 |
-
function ms_getTrueLargestSize(i, o, dim) {
|
3628 |
-
var s = 0;
|
3629 |
-
|
3630 |
-
for (var a = 0, l = i.length; a < l; a++)
|
3631 |
-
{
|
3632 |
-
var j = i.eq(a);
|
3633 |
-
|
3634 |
-
var m = (j.is(':visible')) ? j[o.d[dim]](true) : 0;
|
3635 |
-
if (s < m)
|
3636 |
-
{
|
3637 |
-
s = m;
|
3638 |
-
}
|
3639 |
-
}
|
3640 |
-
return s;
|
3641 |
-
}
|
3642 |
-
|
3643 |
-
function ms_getTotalSize(i, o, dim, wrapper) {
|
3644 |
-
if (!is_boolean(wrapper))
|
3645 |
-
{
|
3646 |
-
wrapper = false;
|
3647 |
-
}
|
3648 |
-
if (is_number(o[o.d[dim]]) && wrapper)
|
3649 |
-
{
|
3650 |
-
return o[o.d[dim]];
|
3651 |
-
}
|
3652 |
-
if (is_number(o.items[o.d[dim]]))
|
3653 |
-
{
|
3654 |
-
return o.items[o.d[dim]] * i.length;
|
3655 |
-
}
|
3656 |
-
|
3657 |
-
var d = (dim.toLowerCase().indexOf('width') > -1) ? 'outerWidth' : 'outerHeight',
|
3658 |
-
s = 0;
|
3659 |
-
|
3660 |
-
for (var a = 0, l = i.length; a < l; a++)
|
3661 |
-
{
|
3662 |
-
var j = i.eq(a);
|
3663 |
-
s += (j.is(':visible')) ? j[o.d[d]](true) : 0;
|
3664 |
-
}
|
3665 |
-
return s;
|
3666 |
-
}
|
3667 |
-
function ms_getParentSize($w, o, d) {
|
3668 |
-
var isVisible = $w.is(':visible');
|
3669 |
-
if (isVisible)
|
3670 |
-
{
|
3671 |
-
$w.hide();
|
3672 |
-
}
|
3673 |
-
var s = $w.parent()[o.d[d]]();
|
3674 |
-
if (isVisible)
|
3675 |
-
{
|
3676 |
-
$w.show();
|
3677 |
-
}
|
3678 |
-
return s;
|
3679 |
-
}
|
3680 |
-
function ms_getMaxDimension(o, a) {
|
3681 |
-
return (is_number(o[o.d['width']])) ? o[o.d['width']] : a;
|
3682 |
-
}
|
3683 |
-
function ms_hasVariableSizes(i, o, dim) {
|
3684 |
-
var s = false,
|
3685 |
-
v = false;
|
3686 |
-
|
3687 |
-
for (var a = 0, l = i.length; a < l; a++)
|
3688 |
-
{
|
3689 |
-
var j = i.eq(a);
|
3690 |
-
|
3691 |
-
var c = (j.is(':visible')) ? j[o.d[dim]](true) : 0;
|
3692 |
-
if (s === false)
|
3693 |
-
{
|
3694 |
-
s = c;
|
3695 |
-
}
|
3696 |
-
else if (s != c)
|
3697 |
-
{
|
3698 |
-
v = true;
|
3699 |
-
}
|
3700 |
-
if (s == 0)
|
3701 |
-
{
|
3702 |
-
v = true;
|
3703 |
-
}
|
3704 |
-
}
|
3705 |
-
return v;
|
3706 |
-
}
|
3707 |
-
function ms_getPaddingBorderMargin(i, o, d) {
|
3708 |
-
return i[o.d['outer'+d]](true) - i[o.d[d.toLowerCase()]]();
|
3709 |
-
}
|
3710 |
-
function ms_getPercentage(s, o) {
|
3711 |
-
if (is_percentage(o))
|
3712 |
-
{
|
3713 |
-
o = parseInt( o.slice(0, -1), 10 );
|
3714 |
-
if (!is_number(o))
|
3715 |
-
{
|
3716 |
-
return s;
|
3717 |
-
}
|
3718 |
-
s *= o/100;
|
3719 |
-
}
|
3720 |
-
return s;
|
3721 |
-
}
|
3722 |
-
|
3723 |
-
// config functions
|
3724 |
-
function cf_e(n, c, pf, ns, rd) {
|
3725 |
-
if (!is_boolean(pf))
|
3726 |
-
{
|
3727 |
-
pf = true;
|
3728 |
-
}
|
3729 |
-
if (!is_boolean(ns))
|
3730 |
-
{
|
3731 |
-
ns = true;
|
3732 |
-
}
|
3733 |
-
if (!is_boolean(rd))
|
3734 |
-
{
|
3735 |
-
rd = false;
|
3736 |
-
}
|
3737 |
-
|
3738 |
-
if (pf)
|
3739 |
-
{
|
3740 |
-
n = c.events.prefix + n;
|
3741 |
-
}
|
3742 |
-
if (ns)
|
3743 |
-
{
|
3744 |
-
n = n +'.'+ c.events.namespace;
|
3745 |
-
}
|
3746 |
-
if (ns && rd)
|
3747 |
-
{
|
3748 |
-
n += c.serialNumber;
|
3749 |
-
}
|
3750 |
-
|
3751 |
-
return n;
|
3752 |
-
}
|
3753 |
-
function cf_c(n, c) {
|
3754 |
-
return (is_string(c.classnames[n])) ? c.classnames[n] : n;
|
3755 |
-
}
|
3756 |
-
function cf_mapWrapperSizes(ws, o, p) {
|
3757 |
-
|
3758 |
-
if (!is_boolean(p))
|
3759 |
-
{
|
3760 |
-
p = true;
|
3761 |
-
}
|
3762 |
-
var pad = (o.usePadding && p) ? o.padding : [0, 0, 0, 0];
|
3763 |
-
var wra = {};
|
3764 |
-
|
3765 |
-
wra[o.d['width']] = ws[0] + pad[1] + pad[3];
|
3766 |
-
wra[o.d['height']] = ws[1] + pad[0] + pad[2];
|
3767 |
-
|
3768 |
-
return wra;
|
3769 |
-
}
|
3770 |
-
function cf_sortParams(vals, typs) {
|
3771 |
-
var arr = [];
|
3772 |
-
for (var a = 0, l1 = vals.length; a < l1; a++)
|
3773 |
-
{
|
3774 |
-
for (var b = 0, l2 = typs.length; b < l2; b++)
|
3775 |
-
{
|
3776 |
-
if (typs[b].indexOf(typeof vals[a]) > -1 && is_undefined(arr[b]))
|
3777 |
-
{
|
3778 |
-
arr[b] = vals[a];
|
3779 |
-
break;
|
3780 |
-
}
|
3781 |
-
}
|
3782 |
-
}
|
3783 |
-
return arr;
|
3784 |
-
}
|
3785 |
-
function cf_getPadding(p) {
|
3786 |
-
if (is_undefined(p))
|
3787 |
-
{
|
3788 |
-
return [0, 0, 0, 0];
|
3789 |
-
}
|
3790 |
-
if (is_number(p))
|
3791 |
-
{
|
3792 |
-
return [p, p, p, p];
|
3793 |
-
}
|
3794 |
-
if (is_string(p))
|
3795 |
-
{
|
3796 |
-
p = p.split('px').join('').split('em').join('').split(' ');
|
3797 |
-
}
|
3798 |
-
|
3799 |
-
if (!is_array(p))
|
3800 |
-
{
|
3801 |
-
return [0, 0, 0, 0];
|
3802 |
-
}
|
3803 |
-
for (var i = 0; i < 4; i++)
|
3804 |
-
{
|
3805 |
-
p[i] = parseInt(p[i], 10);
|
3806 |
-
}
|
3807 |
-
switch (p.length)
|
3808 |
-
{
|
3809 |
-
case 0:
|
3810 |
-
return [0, 0, 0, 0];
|
3811 |
-
case 1:
|
3812 |
-
return [p[0], p[0], p[0], p[0]];
|
3813 |
-
case 2:
|
3814 |
-
return [p[0], p[1], p[0], p[1]];
|
3815 |
-
case 3:
|
3816 |
-
return [p[0], p[1], p[2], p[1]];
|
3817 |
-
default:
|
3818 |
-
return [p[0], p[1], p[2], p[3]];
|
3819 |
-
}
|
3820 |
-
}
|
3821 |
-
function cf_getAlignPadding(itm, o) {
|
3822 |
-
var x = (is_number(o[o.d['width']])) ? Math.ceil(o[o.d['width']] - ms_getTotalSize(itm, o, 'width')) : 0;
|
3823 |
-
switch (o.align)
|
3824 |
-
{
|
3825 |
-
case 'left':
|
3826 |
-
return [0, x];
|
3827 |
-
case 'right':
|
3828 |
-
return [x, 0];
|
3829 |
-
case 'center':
|
3830 |
-
default:
|
3831 |
-
return [Math.ceil(x/2), Math.floor(x/2)];
|
3832 |
-
}
|
3833 |
-
}
|
3834 |
-
function cf_getDimensions(o) {
|
3835 |
-
var dm = [
|
3836 |
-
['width' , 'innerWidth' , 'outerWidth' , 'height' , 'innerHeight' , 'outerHeight' , 'left', 'top' , 'marginRight' , 0, 1, 2, 3],
|
3837 |
-
['height' , 'innerHeight' , 'outerHeight' , 'width' , 'innerWidth' , 'outerWidth' , 'top' , 'left', 'marginBottom', 3, 2, 1, 0]
|
3838 |
-
];
|
3839 |
-
|
3840 |
-
var dl = dm[0].length,
|
3841 |
-
dx = (o.direction == 'right' || o.direction == 'left') ? 0 : 1;
|
3842 |
-
|
3843 |
-
var dimensions = {};
|
3844 |
-
for (var d = 0; d < dl; d++)
|
3845 |
-
{
|
3846 |
-
dimensions[dm[0][d]] = dm[dx][d];
|
3847 |
-
}
|
3848 |
-
return dimensions;
|
3849 |
-
}
|
3850 |
-
function cf_getAdjust(x, o, a, $t) {
|
3851 |
-
var v = x;
|
3852 |
-
if (is_function(a))
|
3853 |
-
{
|
3854 |
-
v = a.call($t, v);
|
3855 |
-
|
3856 |
-
}
|
3857 |
-
else if (is_string(a))
|
3858 |
-
{
|
3859 |
-
var p = a.split('+'),
|
3860 |
-
m = a.split('-');
|
3861 |
-
|
3862 |
-
if (m.length > p.length)
|
3863 |
-
{
|
3864 |
-
var neg = true,
|
3865 |
-
sta = m[0],
|
3866 |
-
adj = m[1];
|
3867 |
-
}
|
3868 |
-
else
|
3869 |
-
{
|
3870 |
-
var neg = false,
|
3871 |
-
sta = p[0],
|
3872 |
-
adj = p[1];
|
3873 |
-
}
|
3874 |
-
|
3875 |
-
switch(sta)
|
3876 |
-
{
|
3877 |
-
case 'even':
|
3878 |
-
v = (x % 2 == 1) ? x-1 : x;
|
3879 |
-
break;
|
3880 |
-
case 'odd':
|
3881 |
-
v = (x % 2 == 0) ? x-1 : x;
|
3882 |
-
break;
|
3883 |
-
default:
|
3884 |
-
v = x;
|
3885 |
-
break;
|
3886 |
-
}
|
3887 |
-
adj = parseInt(adj, 10);
|
3888 |
-
if (is_number(adj))
|
3889 |
-
{
|
3890 |
-
if (neg)
|
3891 |
-
{
|
3892 |
-
adj = -adj;
|
3893 |
-
}
|
3894 |
-
v += adj;
|
3895 |
-
}
|
3896 |
-
}
|
3897 |
-
if (!is_number(v) || v < 1)
|
3898 |
-
{
|
3899 |
-
v = 1;
|
3900 |
-
}
|
3901 |
-
return v;
|
3902 |
-
}
|
3903 |
-
function cf_getItemsAdjust(x, o, a, $t) {
|
3904 |
-
return cf_getItemAdjustMinMax(cf_getAdjust(x, o, a, $t), o.items.visibleConf);
|
3905 |
-
}
|
3906 |
-
function cf_getItemAdjustMinMax(v, i) {
|
3907 |
-
if (is_number(i.min) && v < i.min)
|
3908 |
-
{
|
3909 |
-
v = i.min;
|
3910 |
-
}
|
3911 |
-
if (is_number(i.max) && v > i.max)
|
3912 |
-
{
|
3913 |
-
v = i.max;
|
3914 |
-
}
|
3915 |
-
if (v < 1)
|
3916 |
-
{
|
3917 |
-
v = 1;
|
3918 |
-
}
|
3919 |
-
return v;
|
3920 |
-
}
|
3921 |
-
function cf_getSynchArr(s) {
|
3922 |
-
if (!is_array(s))
|
3923 |
-
{
|
3924 |
-
s = [[s]];
|
3925 |
-
}
|
3926 |
-
if (!is_array(s[0]))
|
3927 |
-
{
|
3928 |
-
s = [s];
|
3929 |
-
}
|
3930 |
-
for (var j = 0, l = s.length; j < l; j++)
|
3931 |
-
{
|
3932 |
-
if (is_string(s[j][0]))
|
3933 |
-
{
|
3934 |
-
s[j][0] = $(s[j][0]);
|
3935 |
-
}
|
3936 |
-
if (!is_boolean(s[j][1]))
|
3937 |
-
{
|
3938 |
-
s[j][1] = true;
|
3939 |
-
}
|
3940 |
-
if (!is_boolean(s[j][2]))
|
3941 |
-
{
|
3942 |
-
s[j][2] = true;
|
3943 |
-
}
|
3944 |
-
if (!is_number(s[j][3]))
|
3945 |
-
{
|
3946 |
-
s[j][3] = 0;
|
3947 |
-
}
|
3948 |
-
}
|
3949 |
-
return s;
|
3950 |
-
}
|
3951 |
-
function cf_getKeyCode(k) {
|
3952 |
-
if (k == 'right')
|
3953 |
-
{
|
3954 |
-
return 39;
|
3955 |
-
}
|
3956 |
-
if (k == 'left')
|
3957 |
-
{
|
3958 |
-
return 37;
|
3959 |
-
}
|
3960 |
-
if (k == 'up')
|
3961 |
-
{
|
3962 |
-
return 38;
|
3963 |
-
}
|
3964 |
-
if (k == 'down')
|
3965 |
-
{
|
3966 |
-
return 40;
|
3967 |
-
}
|
3968 |
-
return -1;
|
3969 |
-
}
|
3970 |
-
function cf_setCookie(n, $c, c) {
|
3971 |
-
if (n)
|
3972 |
-
{
|
3973 |
-
var v = $c.triggerHandler(cf_e('currentPosition', c));
|
3974 |
-
$.fn.carouFredSel.cookie.set(n, v);
|
3975 |
-
}
|
3976 |
-
}
|
3977 |
-
function cf_getCookie(n) {
|
3978 |
-
var c = $.fn.carouFredSel.cookie.get(n);
|
3979 |
-
return (c == '') ? 0 : c;
|
3980 |
-
}
|
3981 |
-
|
3982 |
-
// init function
|
3983 |
-
function in_mapCss($elem, props) {
|
3984 |
-
var css = {};
|
3985 |
-
for (var p = 0, l = props.length; p < l; p++)
|
3986 |
-
{
|
3987 |
-
css[props[p]] = $elem.css(props[p]);
|
3988 |
-
}
|
3989 |
-
return css;
|
3990 |
-
}
|
3991 |
-
function in_complementItems(obj, opt, itm, sta) {
|
3992 |
-
if (!is_object(obj.visibleConf))
|
3993 |
-
{
|
3994 |
-
obj.visibleConf = {};
|
3995 |
-
}
|
3996 |
-
if (!is_object(obj.sizesConf))
|
3997 |
-
{
|
3998 |
-
obj.sizesConf = {};
|
3999 |
-
}
|
4000 |
-
|
4001 |
-
if (obj.start == 0 && is_number(sta))
|
4002 |
-
{
|
4003 |
-
obj.start = sta;
|
4004 |
-
}
|
4005 |
-
|
4006 |
-
// visible items
|
4007 |
-
if (is_object(obj.visible))
|
4008 |
-
{
|
4009 |
-
obj.visibleConf.min = obj.visible.min;
|
4010 |
-
obj.visibleConf.max = obj.visible.max;
|
4011 |
-
obj.visible = false;
|
4012 |
-
}
|
4013 |
-
else if (is_string(obj.visible))
|
4014 |
-
{
|
4015 |
-
// variable visible items
|
4016 |
-
if (obj.visible == 'variable')
|
4017 |
-
{
|
4018 |
-
obj.visibleConf.variable = true;
|
4019 |
-
}
|
4020 |
-
// adjust string visible items
|
4021 |
-
else
|
4022 |
-
{
|
4023 |
-
obj.visibleConf.adjust = obj.visible;
|
4024 |
-
}
|
4025 |
-
obj.visible = false;
|
4026 |
-
}
|
4027 |
-
else if (is_function(obj.visible))
|
4028 |
-
{
|
4029 |
-
obj.visibleConf.adjust = obj.visible;
|
4030 |
-
obj.visible = false;
|
4031 |
-
}
|
4032 |
-
|
4033 |
-
// set items filter
|
4034 |
-
if (!is_string(obj.filter))
|
4035 |
-
{
|
4036 |
-
obj.filter = (itm.filter(':hidden').length > 0) ? ':visible' : '*';
|
4037 |
-
}
|
4038 |
-
|
4039 |
-
// primary item-size not set
|
4040 |
-
if (!obj[opt.d['width']])
|
4041 |
-
{
|
4042 |
-
// responsive carousel -> set to largest
|
4043 |
-
if (opt.responsive)
|
4044 |
-
{
|
4045 |
-
debug(true, 'Set a '+opt.d['width']+' for the items!');
|
4046 |
-
obj[opt.d['width']] = ms_getTrueLargestSize(itm, opt, 'outerWidth');
|
4047 |
-
}
|
4048 |
-
// non-responsive -> measure it or set to "variable"
|
4049 |
-
else
|
4050 |
-
{
|
4051 |
-
obj[opt.d['width']] = (ms_hasVariableSizes(itm, opt, 'outerWidth'))
|
4052 |
-
? 'variable'
|
4053 |
-
: itm[opt.d['outerWidth']](true);
|
4054 |
-
}
|
4055 |
-
}
|
4056 |
-
|
4057 |
-
// secondary item-size not set -> measure it or set to "variable"
|
4058 |
-
if (!obj[opt.d['height']])
|
4059 |
-
{
|
4060 |
-
obj[opt.d['height']] = (ms_hasVariableSizes(itm, opt, 'outerHeight'))
|
4061 |
-
? 'variable'
|
4062 |
-
: itm[opt.d['outerHeight']](true);
|
4063 |
-
}
|
4064 |
-
|
4065 |
-
obj.sizesConf.width = obj.width;
|
4066 |
-
obj.sizesConf.height = obj.height;
|
4067 |
-
return obj;
|
4068 |
-
}
|
4069 |
-
function in_complementVisibleItems(opt, avl) {
|
4070 |
-
// primary item-size variable -> set visible items variable
|
4071 |
-
if (opt.items[opt.d['width']] == 'variable')
|
4072 |
-
{
|
4073 |
-
opt.items.visibleConf.variable = true;
|
4074 |
-
}
|
4075 |
-
if (!opt.items.visibleConf.variable) {
|
4076 |
-
// primary size is number -> calculate visible-items
|
4077 |
-
if (is_number(opt[opt.d['width']]))
|
4078 |
-
{
|
4079 |
-
opt.items.visible = Math.floor(opt[opt.d['width']] / opt.items[opt.d['width']]);
|
4080 |
-
}
|
4081 |
-
// measure and calculate primary size and visible-items
|
4082 |
-
else
|
4083 |
-
{
|
4084 |
-
opt.items.visible = Math.floor(avl / opt.items[opt.d['width']]);
|
4085 |
-
opt[opt.d['width']] = opt.items.visible * opt.items[opt.d['width']];
|
4086 |
-
if (!opt.items.visibleConf.adjust)
|
4087 |
-
{
|
4088 |
-
opt.align = false;
|
4089 |
-
}
|
4090 |
-
}
|
4091 |
-
if (opt.items.visible == 'Infinity' || opt.items.visible < 1)
|
4092 |
-
{
|
4093 |
-
debug(true, 'Not a valid number of visible items: Set to "variable".');
|
4094 |
-
opt.items.visibleConf.variable = true;
|
4095 |
-
}
|
4096 |
-
}
|
4097 |
-
return opt;
|
4098 |
-
}
|
4099 |
-
function in_complementPrimarySize(obj, opt, all) {
|
4100 |
-
// primary size set to auto -> measure largest item-size and set it
|
4101 |
-
if (obj == 'auto')
|
4102 |
-
{
|
4103 |
-
obj = ms_getTrueLargestSize(all, opt, 'outerWidth');
|
4104 |
-
}
|
4105 |
-
return obj;
|
4106 |
-
}
|
4107 |
-
function in_complementSecondarySize(obj, opt, all) {
|
4108 |
-
// secondary size set to auto -> measure largest item-size and set it
|
4109 |
-
if (obj == 'auto')
|
4110 |
-
{
|
4111 |
-
obj = ms_getTrueLargestSize(all, opt, 'outerHeight');
|
4112 |
-
}
|
4113 |
-
// secondary size not set -> set to secondary item-size
|
4114 |
-
if (!obj)
|
4115 |
-
{
|
4116 |
-
obj = opt.items[opt.d['height']];
|
4117 |
-
}
|
4118 |
-
return obj;
|
4119 |
-
}
|
4120 |
-
function in_getAlignPadding(o, all) {
|
4121 |
-
var p = cf_getAlignPadding(gi_getCurrentItems(all, o), o);
|
4122 |
-
o.padding[o.d[1]] = p[1];
|
4123 |
-
o.padding[o.d[3]] = p[0];
|
4124 |
-
return o;
|
4125 |
-
}
|
4126 |
-
function in_getResponsiveValues(o, all, avl) {
|
4127 |
-
|
4128 |
-
var visb = cf_getItemAdjustMinMax(Math.ceil(o[o.d['width']] / o.items[o.d['width']]), o.items.visibleConf);
|
4129 |
-
if (visb > all.length)
|
4130 |
-
{
|
4131 |
-
visb = all.length;
|
4132 |
-
}
|
4133 |
-
|
4134 |
-
var newS = Math.floor(o[o.d['width']]/visb);
|
4135 |
-
|
4136 |
-
o.items.visible = visb;
|
4137 |
-
o.items[o.d['width']] = newS;
|
4138 |
-
o[o.d['width']] = visb * newS;
|
4139 |
-
return o;
|
4140 |
-
}
|
4141 |
-
|
4142 |
-
|
4143 |
-
// buttons functions
|
4144 |
-
function bt_pauseOnHoverConfig(p) {
|
4145 |
-
if (is_string(p))
|
4146 |
-
{
|
4147 |
-
var i = (p.indexOf('immediate') > -1) ? true : false,
|
4148 |
-
r = (p.indexOf('resume') > -1) ? true : false;
|
4149 |
-
}
|
4150 |
-
else
|
4151 |
-
{
|
4152 |
-
var i = r = false;
|
4153 |
-
}
|
4154 |
-
return [i, r];
|
4155 |
-
}
|
4156 |
-
function bt_mousesheelNumber(mw) {
|
4157 |
-
return (is_number(mw)) ? mw : null
|
4158 |
-
}
|
4159 |
-
|
4160 |
-
// helper functions
|
4161 |
-
function is_null(a) {
|
4162 |
-
return (a === null);
|
4163 |
-
}
|
4164 |
-
function is_undefined(a) {
|
4165 |
-
return (is_null(a) || typeof a == 'undefined' || a === '' || a === 'undefined');
|
4166 |
-
}
|
4167 |
-
function is_array(a) {
|
4168 |
-
return (a instanceof Array);
|
4169 |
-
}
|
4170 |
-
function is_jquery(a) {
|
4171 |
-
return (a instanceof jQuery);
|
4172 |
-
}
|
4173 |
-
function is_object(a) {
|
4174 |
-
return ((a instanceof Object || typeof a == 'object') && !is_null(a) && !is_jquery(a) && !is_array(a) && !is_function(a));
|
4175 |
-
}
|
4176 |
-
function is_number(a) {
|
4177 |
-
return ((a instanceof Number || typeof a == 'number') && !isNaN(a));
|
4178 |
-
}
|
4179 |
-
function is_string(a) {
|
4180 |
-
return ((a instanceof String || typeof a == 'string') && !is_undefined(a) && !is_true(a) && !is_false(a));
|
4181 |
-
}
|
4182 |
-
function is_function(a) {
|
4183 |
-
return (a instanceof Function || typeof a == 'function');
|
4184 |
-
}
|
4185 |
-
function is_boolean(a) {
|
4186 |
-
return (a instanceof Boolean || typeof a == 'boolean' || is_true(a) || is_false(a));
|
4187 |
-
}
|
4188 |
-
function is_true(a) {
|
4189 |
-
return (a === true || a === 'true');
|
4190 |
-
}
|
4191 |
-
function is_false(a) {
|
4192 |
-
return (a === false || a === 'false');
|
4193 |
-
}
|
4194 |
-
function is_percentage(x) {
|
4195 |
-
return (is_string(x) && x.slice(-1) == '%');
|
4196 |
-
}
|
4197 |
-
|
4198 |
-
|
4199 |
-
function getTime() {
|
4200 |
-
return new Date().getTime();
|
4201 |
-
}
|
4202 |
-
|
4203 |
-
function deprecated( o, n ) {
|
4204 |
-
debug(true, o+' is DEPRECATED, support for it will be removed. Use '+n+' instead.');
|
4205 |
-
}
|
4206 |
-
function debug(d, m) {
|
4207 |
-
if (!is_undefined(window.console) && !is_undefined(window.console.log))
|
4208 |
-
{
|
4209 |
-
if (is_object(d))
|
4210 |
-
{
|
4211 |
-
var s = ' ('+d.selector+')';
|
4212 |
-
d = d.debug;
|
4213 |
-
}
|
4214 |
-
else
|
4215 |
-
{
|
4216 |
-
var s = '';
|
4217 |
-
}
|
4218 |
-
if (!d)
|
4219 |
-
{
|
4220 |
-
return false;
|
4221 |
-
}
|
4222 |
-
|
4223 |
-
if (is_string(m))
|
4224 |
-
{
|
4225 |
-
m = 'carouFredSel'+s+': ' + m;
|
4226 |
-
}
|
4227 |
-
else
|
4228 |
-
{
|
4229 |
-
m = ['carouFredSel'+s+':', m];
|
4230 |
-
}
|
4231 |
-
window.console.log(m);
|
4232 |
-
}
|
4233 |
-
return false;
|
4234 |
-
}
|
4235 |
-
|
4236 |
-
|
4237 |
-
|
4238 |
-
// EASING FUNCTIONS
|
4239 |
-
$.extend($.easing, {
|
4240 |
-
'quadratic': function(t) {
|
4241 |
-
var t2 = t * t;
|
4242 |
-
return t * (-t2 * t + 4 * t2 - 6 * t + 4);
|
4243 |
-
},
|
4244 |
-
'cubic': function(t) {
|
4245 |
-
return t * (4 * t * t - 9 * t + 6);
|
4246 |
-
},
|
4247 |
-
'elastic': function(t) {
|
4248 |
-
var t2 = t * t;
|
4249 |
-
return t * (33 * t2 * t2 - 106 * t2 * t + 126 * t2 - 67 * t + 15);
|
4250 |
-
}
|
4251 |
-
});
|
4252 |
-
|
4253 |
-
|
4254 |
})(jQuery);
|
1 |
+
/*
|
2 |
+
* jQuery carouFredSel 6.2.1
|
3 |
+
* Demo's and documentation:
|
4 |
+
* caroufredsel.dev7studios.com
|
5 |
+
*
|
6 |
+
* Copyright (c) 2013 Fred Heusschen
|
7 |
+
* www.frebsite.nl
|
8 |
+
*
|
9 |
+
* Dual licensed under the MIT and GPL licenses.
|
10 |
+
* http://en.wikipedia.org/wiki/MIT_License
|
11 |
+
* http://en.wikipedia.org/wiki/GNU_General_Public_License
|
12 |
+
*/
|
13 |
+
|
14 |
+
|
15 |
+
(function($) {
|
16 |
+
|
17 |
+
|
18 |
+
// LOCAL
|
19 |
+
|
20 |
+
if ( $.fn.carouFredSel )
|
21 |
+
{
|
22 |
+
return;
|
23 |
+
}
|
24 |
+
|
25 |
+
$.fn.caroufredsel = $.fn.carouFredSel = function(options, configs)
|
26 |
+
{
|
27 |
+
|
28 |
+
// no element
|
29 |
+
if (this.length == 0)
|
30 |
+
{
|
31 |
+
debug( true, 'No element found for "' + this.selector + '".' );
|
32 |
+
return this;
|
33 |
+
}
|
34 |
+
|
35 |
+
// multiple elements
|
36 |
+
if (this.length > 1)
|
37 |
+
{
|
38 |
+
return this.each(function() {
|
39 |
+
$(this).carouFredSel(options, configs);
|
40 |
+
});
|
41 |
+
}
|
42 |
+
|
43 |
+
|
44 |
+
var $cfs = this,
|
45 |
+
$tt0 = this[0],
|
46 |
+
starting_position = false;
|
47 |
+
|
48 |
+
if ($cfs.data('_cfs_isCarousel'))
|
49 |
+
{
|
50 |
+
starting_position = $cfs.triggerHandler('_cfs_triggerEvent', 'currentPosition');
|
51 |
+
$cfs.trigger('_cfs_triggerEvent', ['destroy', true]);
|
52 |
+
}
|
53 |
+
|
54 |
+
var FN = {};
|
55 |
+
|
56 |
+
FN._init = function(o, setOrig, start)
|
57 |
+
{
|
58 |
+
o = go_getObject($tt0, o);
|
59 |
+
|
60 |
+
o.items = go_getItemsObject($tt0, o.items);
|
61 |
+
o.scroll = go_getScrollObject($tt0, o.scroll);
|
62 |
+
o.auto = go_getAutoObject($tt0, o.auto);
|
63 |
+
o.prev = go_getPrevNextObject($tt0, o.prev);
|
64 |
+
o.next = go_getPrevNextObject($tt0, o.next);
|
65 |
+
o.pagination = go_getPaginationObject($tt0, o.pagination);
|
66 |
+
o.swipe = go_getSwipeObject($tt0, o.swipe);
|
67 |
+
o.mousewheel = go_getMousewheelObject($tt0, o.mousewheel);
|
68 |
+
|
69 |
+
if (setOrig)
|
70 |
+
{
|
71 |
+
opts_orig = $.extend(true, {}, $.fn.carouFredSel.defaults, o);
|
72 |
+
}
|
73 |
+
|
74 |
+
opts = $.extend(true, {}, $.fn.carouFredSel.defaults, o);
|
75 |
+
opts.d = cf_getDimensions(opts);
|
76 |
+
|
77 |
+
crsl.direction = (opts.direction == 'up' || opts.direction == 'left') ? 'next' : 'prev';
|
78 |
+
|
79 |
+
var a_itm = $cfs.children(),
|
80 |
+
avail_primary = ms_getParentSize($wrp, opts, 'width');
|
81 |
+
|
82 |
+
if (is_true(opts.cookie))
|
83 |
+
{
|
84 |
+
opts.cookie = 'caroufredsel_cookie_' + conf.serialNumber;
|
85 |
+
}
|
86 |
+
|
87 |
+
opts.maxDimension = ms_getMaxDimension(opts, avail_primary);
|
88 |
+
|
89 |
+
// complement items and sizes
|
90 |
+
opts.items = in_complementItems(opts.items, opts, a_itm, start);
|
91 |
+
opts[opts.d['width']] = in_complementPrimarySize(opts[opts.d['width']], opts, a_itm);
|
92 |
+
opts[opts.d['height']] = in_complementSecondarySize(opts[opts.d['height']], opts, a_itm);
|
93 |
+
|
94 |
+
// primary size not set for a responsive carousel
|
95 |
+
if (opts.responsive)
|
96 |
+
{
|
97 |
+
if (!is_percentage(opts[opts.d['width']]))
|
98 |
+
{
|
99 |
+
opts[opts.d['width']] = '100%';
|
100 |
+
}
|
101 |
+
}
|
102 |
+
|
103 |
+
// primary size is percentage
|
104 |
+
if (is_percentage(opts[opts.d['width']]))
|
105 |
+
{
|
106 |
+
crsl.upDateOnWindowResize = true;
|
107 |
+
crsl.primarySizePercentage = opts[opts.d['width']];
|
108 |
+
opts[opts.d['width']] = ms_getPercentage(avail_primary, crsl.primarySizePercentage);
|
109 |
+
if (!opts.items.visible)
|
110 |
+
{
|
111 |
+
opts.items.visibleConf.variable = true;
|
112 |
+
}
|
113 |
+
}
|
114 |
+
|
115 |
+
if (opts.responsive)
|
116 |
+
{
|
117 |
+
opts.usePadding = false;
|
118 |
+
opts.padding = [0, 0, 0, 0];
|
119 |
+
opts.align = false;
|
120 |
+
opts.items.visibleConf.variable = false;
|
121 |
+
}
|
122 |
+
else
|
123 |
+
{
|
124 |
+
// visible-items not set
|
125 |
+
if (!opts.items.visible)
|
126 |
+
{
|
127 |
+
opts = in_complementVisibleItems(opts, avail_primary);
|
128 |
+
}
|
129 |
+
|
130 |
+
// primary size not set -> calculate it or set to "variable"
|
131 |
+
if (!opts[opts.d['width']])
|
132 |
+
{
|
133 |
+
if (!opts.items.visibleConf.variable && is_number(opts.items[opts.d['width']]) && opts.items.filter == '*')
|
134 |
+
{
|
135 |
+
opts[opts.d['width']] = opts.items.visible * opts.items[opts.d['width']];
|
136 |
+
opts.align = false;
|
137 |
+
}
|
138 |
+
else
|
139 |
+
{
|
140 |
+
opts[opts.d['width']] = 'variable';
|
141 |
+
}
|
142 |
+
}
|
143 |
+
// align not set -> set to center if primary size is number
|
144 |
+
if (is_undefined(opts.align))
|
145 |
+
{
|
146 |
+
opts.align = (is_number(opts[opts.d['width']]))
|
147 |
+
? 'center'
|
148 |
+
: false;
|
149 |
+
}
|
150 |
+
// set variabe visible-items
|
151 |
+
if (opts.items.visibleConf.variable)
|
152 |
+
{
|
153 |
+
opts.items.visible = gn_getVisibleItemsNext(a_itm, opts, 0);
|
154 |
+
}
|
155 |
+
}
|
156 |
+
|
157 |
+
// set visible items by filter
|
158 |
+
if (opts.items.filter != '*' && !opts.items.visibleConf.variable)
|
159 |
+
{
|
160 |
+
opts.items.visibleConf.org = opts.items.visible;
|
161 |
+
opts.items.visible = gn_getVisibleItemsNextFilter(a_itm, opts, 0);
|
162 |
+
}
|
163 |
+
|
164 |
+
opts.items.visible = cf_getItemsAdjust(opts.items.visible, opts, opts.items.visibleConf.adjust, $tt0);
|
165 |
+
opts.items.visibleConf.old = opts.items.visible;
|
166 |
+
|
167 |
+
if (opts.responsive)
|
168 |
+
{
|
169 |
+
if (!opts.items.visibleConf.min)
|
170 |
+
{
|
171 |
+
opts.items.visibleConf.min = opts.items.visible;
|
172 |
+
}
|
173 |
+
if (!opts.items.visibleConf.max)
|
174 |
+
{
|
175 |
+
opts.items.visibleConf.max = opts.items.visible;
|
176 |
+
}
|
177 |
+
opts = in_getResponsiveValues(opts, a_itm, avail_primary);
|
178 |
+
}
|
179 |
+
else
|
180 |
+
{
|
181 |
+
opts.padding = cf_getPadding(opts.padding);
|
182 |
+
|
183 |
+
if (opts.align == 'top')
|
184 |
+
{
|
185 |
+
opts.align = 'left';
|
186 |
+
}
|
187 |
+
else if (opts.align == 'bottom')
|
188 |
+
{
|
189 |
+
opts.align = 'right';
|
190 |
+
}
|
191 |
+
|
192 |
+
switch (opts.align)
|
193 |
+
{
|
194 |
+
// align: center, left or right
|
195 |
+
case 'center':
|
196 |
+
case 'left':
|
197 |
+
case 'right':
|
198 |
+
if (opts[opts.d['width']] != 'variable')
|
199 |
+
{
|
200 |
+
opts = in_getAlignPadding(opts, a_itm);
|
201 |
+
opts.usePadding = true;
|
202 |
+
}
|
203 |
+
break;
|
204 |
+
|
205 |
+
// padding
|
206 |
+
default:
|
207 |
+
opts.align = false;
|
208 |
+
opts.usePadding = (
|
209 |
+
opts.padding[0] == 0 &&
|
210 |
+
opts.padding[1] == 0 &&
|
211 |
+
opts.padding[2] == 0 &&
|
212 |
+
opts.padding[3] == 0
|
213 |
+
) ? false : true;
|
214 |
+
break;
|
215 |
+
}
|
216 |
+
}
|
217 |
+
|
218 |
+
if (!is_number(opts.scroll.duration))
|
219 |
+
{
|
220 |
+
opts.scroll.duration = 500;
|
221 |
+
}
|
222 |
+
if (is_undefined(opts.scroll.items))
|
223 |
+
{
|
224 |
+
opts.scroll.items = (opts.responsive || opts.items.visibleConf.variable || opts.items.filter != '*')
|
225 |
+
? 'visible'
|
226 |
+
: opts.items.visible;
|
227 |
+
}
|
228 |
+
|
229 |
+
opts.auto = $.extend(true, {}, opts.scroll, opts.auto);
|
230 |
+
opts.prev = $.extend(true, {}, opts.scroll, opts.prev);
|
231 |
+
opts.next = $.extend(true, {}, opts.scroll, opts.next);
|
232 |
+
opts.pagination = $.extend(true, {}, opts.scroll, opts.pagination);
|
233 |
+
// swipe and mousewheel extend later on, per direction
|
234 |
+
|
235 |
+
opts.auto = go_complementAutoObject($tt0, opts.auto);
|
236 |
+
opts.prev = go_complementPrevNextObject($tt0, opts.prev);
|
237 |
+
opts.next = go_complementPrevNextObject($tt0, opts.next);
|
238 |
+
opts.pagination = go_complementPaginationObject($tt0, opts.pagination);
|
239 |
+
opts.swipe = go_complementSwipeObject($tt0, opts.swipe);
|
240 |
+
opts.mousewheel = go_complementMousewheelObject($tt0, opts.mousewheel);
|
241 |
+
|
242 |
+
if (opts.synchronise)
|
243 |
+
{
|
244 |
+
opts.synchronise = cf_getSynchArr(opts.synchronise);
|
245 |
+
}
|
246 |
+
|
247 |
+
|
248 |
+
// DEPRECATED
|
249 |
+
if (opts.auto.onPauseStart)
|
250 |
+
{
|
251 |
+
opts.auto.onTimeoutStart = opts.auto.onPauseStart;
|
252 |
+
deprecated('auto.onPauseStart', 'auto.onTimeoutStart');
|
253 |
+
}
|
254 |
+
if (opts.auto.onPausePause)
|
255 |
+
{
|
256 |
+
opts.auto.onTimeoutPause = opts.auto.onPausePause;
|
257 |
+
deprecated('auto.onPausePause', 'auto.onTimeoutPause');
|
258 |
+
}
|
259 |
+
if (opts.auto.onPauseEnd)
|
260 |
+
{
|
261 |
+
opts.auto.onTimeoutEnd = opts.auto.onPauseEnd;
|
262 |
+
deprecated('auto.onPauseEnd', 'auto.onTimeoutEnd');
|
263 |
+
}
|
264 |
+
if (opts.auto.pauseDuration)
|
265 |
+
{
|
266 |
+
opts.auto.timeoutDuration = opts.auto.pauseDuration;
|
267 |
+
deprecated('auto.pauseDuration', 'auto.timeoutDuration');
|
268 |
+
}
|
269 |
+
// /DEPRECATED
|
270 |
+
|
271 |
+
|
272 |
+
}; // /init
|
273 |
+
|
274 |
+
|
275 |
+
FN._build = function() {
|
276 |
+
$cfs.data('_cfs_isCarousel', true);
|
277 |
+
|
278 |
+
var a_itm = $cfs.children(),
|
279 |
+
orgCSS = in_mapCss($cfs, ['textAlign', 'float', 'position', 'top', 'right', 'bottom', 'left', 'zIndex', 'width', 'height', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft']),
|
280 |
+
newPosition = 'relative';
|
281 |
+
|
282 |
+
switch (orgCSS.position)
|
283 |
+
{
|
284 |
+
case 'absolute':
|
285 |
+
case 'fixed':
|
286 |
+
newPosition = orgCSS.position;
|
287 |
+
break;
|
288 |
+
}
|
289 |
+
|
290 |
+
if (conf.wrapper == 'parent')
|
291 |
+
{
|
292 |
+
sz_storeOrigCss($wrp);
|
293 |
+
}
|
294 |
+
else
|
295 |
+
{
|
296 |
+
$wrp.css(orgCSS);
|
297 |
+
}
|
298 |
+
$wrp.css({
|
299 |
+
'overflow' : 'hidden',
|
300 |
+
'position' : newPosition
|
301 |
+
});
|
302 |
+
|
303 |
+
sz_storeOrigCss($cfs);
|
304 |
+
$cfs.data('_cfs_origCssZindex', orgCSS.zIndex);
|
305 |
+
$cfs.css({
|
306 |
+
'textAlign' : 'left',
|
307 |
+
'float' : 'none',
|
308 |
+
'position' : 'absolute',
|
309 |
+
'top' : 0,
|
310 |
+
'right' : 'auto',
|
311 |
+
'bottom' : 'auto',
|
312 |
+
'left' : 0,
|
313 |
+
'marginTop' : 0,
|
314 |
+
'marginRight' : 0,
|
315 |
+
'marginBottom' : 0,
|
316 |
+
'marginLeft' : 0
|
317 |
+
});
|
318 |
+
|
319 |
+
sz_storeMargin(a_itm, opts);
|
320 |
+
sz_storeOrigCss(a_itm);
|
321 |
+
if (opts.responsive)
|
322 |
+
{
|
323 |
+
sz_setResponsiveSizes(opts, a_itm);
|
324 |
+
}
|
325 |
+
|
326 |
+
}; // /build
|
327 |
+
|
328 |
+
|
329 |
+
FN._bind_events = function() {
|
330 |
+
FN._unbind_events();
|
331 |
+
|
332 |
+
|
333 |
+
// stop event
|
334 |
+
$cfs.bind(cf_e('stop', conf), function(e, imm) {
|
335 |
+
e.stopPropagation();
|
336 |
+
|
337 |
+
// button
|
338 |
+
if (!crsl.isStopped)
|
339 |
+
{
|
340 |
+
if (opts.auto.button)
|
341 |
+
{
|
342 |
+
opts.auto.button.addClass(cf_c('stopped', conf));
|
343 |
+
}
|
344 |
+
}
|
345 |
+
|
346 |
+
// set stopped
|
347 |
+
crsl.isStopped = true;
|
348 |
+
|
349 |
+
if (opts.auto.play)
|
350 |
+
{
|
351 |
+
opts.auto.play = false;
|
352 |
+
$cfs.trigger(cf_e('pause', conf), imm);
|
353 |
+
}
|
354 |
+
return true;
|
355 |
+
});
|
356 |
+
|
357 |
+
|
358 |
+
// finish event
|
359 |
+
$cfs.bind(cf_e('finish', conf), function(e) {
|
360 |
+
e.stopPropagation();
|
361 |
+
if (crsl.isScrolling)
|
362 |
+
{
|
363 |
+
sc_stopScroll(scrl);
|
364 |
+
}
|
365 |
+
return true;
|
366 |
+
});
|
367 |
+
|
368 |
+
|
369 |
+
// pause event
|
370 |
+
$cfs.bind(cf_e('pause', conf), function(e, imm, res) {
|
371 |
+
e.stopPropagation();
|
372 |
+
tmrs = sc_clearTimers(tmrs);
|
373 |
+
|
374 |
+
// immediately pause
|
375 |
+
if (imm && crsl.isScrolling)
|
376 |
+
{
|
377 |
+
scrl.isStopped = true;
|
378 |
+
var nst = getTime() - scrl.startTime;
|
379 |
+
scrl.duration -= nst;
|
380 |
+
if (scrl.pre)
|
381 |
+
{
|
382 |
+
scrl.pre.duration -= nst;
|
383 |
+
}
|
384 |
+
if (scrl.post)
|
385 |
+
{
|
386 |
+
scrl.post.duration -= nst;
|
387 |
+
}
|
388 |
+
sc_stopScroll(scrl, false);
|
389 |
+
}
|
390 |
+
|
391 |
+
// update remaining pause-time
|
392 |
+
if (!crsl.isPaused && !crsl.isScrolling)
|
393 |
+
{
|
394 |
+
if (res)
|
395 |
+
{
|
396 |
+
tmrs.timePassed += getTime() - tmrs.startTime;
|
397 |
+
}
|
398 |
+
}
|
399 |
+
|
400 |
+
// button
|
401 |
+
if (!crsl.isPaused)
|
402 |
+
{
|
403 |
+
if (opts.auto.button)
|
404 |
+
{
|
405 |
+
opts.auto.button.addClass(cf_c('paused', conf));
|
406 |
+
}
|
407 |
+
}
|
408 |
+
|
409 |
+
// set paused
|
410 |
+
crsl.isPaused = true;
|
411 |
+
|
412 |
+
// pause pause callback
|
413 |
+
if (opts.auto.onTimeoutPause)
|
414 |
+
{
|
415 |
+
var dur1 = opts.auto.timeoutDuration - tmrs.timePassed,
|
416 |
+
perc = 100 - Math.ceil( dur1 * 100 / opts.auto.timeoutDuration );
|
417 |
+
|
418 |
+
opts.auto.onTimeoutPause.call($tt0, perc, dur1);
|
419 |
+
}
|
420 |
+
return true;
|
421 |
+
});
|
422 |
+
|
423 |
+
|
424 |
+
// play event
|
425 |
+
$cfs.bind(cf_e('play', conf), function(e, dir, del, res) {
|
426 |
+
e.stopPropagation();
|
427 |
+
tmrs = sc_clearTimers(tmrs);
|
428 |
+
|
429 |
+
// sort params
|
430 |
+
var v = [dir, del, res],
|
431 |
+
t = ['string', 'number', 'boolean'],
|
432 |
+
a = cf_sortParams(v, t);
|
433 |
+
|
434 |
+
dir = a[0];
|
435 |
+
del = a[1];
|
436 |
+
res = a[2];
|
437 |
+
|
438 |
+
if (dir != 'prev' && dir != 'next')
|
439 |
+
{
|
440 |
+
dir = crsl.direction;
|
441 |
+
}
|
442 |
+
if (!is_number(del))
|
443 |
+
{
|
444 |
+
del = 0;
|
445 |
+
}
|
446 |
+
if (!is_boolean(res))
|
447 |
+
{
|
448 |
+
res = false;
|
449 |
+
}
|
450 |
+
|
451 |
+
// stopped?
|
452 |
+
if (res)
|
453 |
+
{
|
454 |
+
crsl.isStopped = false;
|
455 |
+
opts.auto.play = true;
|
456 |
+
}
|
457 |
+
if (!opts.auto.play)
|
458 |
+
{
|
459 |
+
e.stopImmediatePropagation();
|
460 |
+
return debug(conf, 'Carousel stopped: Not scrolling.');
|
461 |
+
}
|
462 |
+
|
463 |
+
// button
|
464 |
+
if (crsl.isPaused)
|
465 |
+
{
|
466 |
+
if (opts.auto.button)
|
467 |
+
{
|
468 |
+
opts.auto.button.removeClass(cf_c('stopped', conf));
|
469 |
+
opts.auto.button.removeClass(cf_c('paused', conf));
|
470 |
+
}
|
471 |
+
}
|
472 |
+
|
473 |
+
// set playing
|
474 |
+
crsl.isPaused = false;
|
475 |
+
tmrs.startTime = getTime();
|
476 |
+
|
477 |
+
// timeout the scrolling
|
478 |
+
var dur1 = opts.auto.timeoutDuration + del;
|
479 |
+
dur2 = dur1 - tmrs.timePassed;
|
480 |
+
perc = 100 - Math.ceil(dur2 * 100 / dur1);
|
481 |
+
|
482 |
+
if (opts.auto.progress)
|
483 |
+
{
|
484 |
+
tmrs.progress = setInterval(function() {
|
485 |
+
var pasd = getTime() - tmrs.startTime + tmrs.timePassed,
|
486 |
+
perc = Math.ceil(pasd * 100 / dur1);
|
487 |
+
opts.auto.progress.updater.call(opts.auto.progress.bar[0], perc);
|
488 |
+
}, opts.auto.progress.interval);
|
489 |
+
}
|
490 |
+
|
491 |
+
tmrs.auto = setTimeout(function() {
|
492 |
+
if (opts.auto.progress)
|
493 |
+
{
|
494 |
+
opts.auto.progress.updater.call(opts.auto.progress.bar[0], 100);
|
495 |
+
}
|
496 |
+
if (opts.auto.onTimeoutEnd)
|
497 |
+
{
|
498 |
+
opts.auto.onTimeoutEnd.call($tt0, perc, dur2);
|
499 |
+
}
|
500 |
+
if (crsl.isScrolling)
|
501 |
+
{
|
502 |
+
$cfs.trigger(cf_e('play', conf), dir);
|
503 |
+
}
|
504 |
+
else
|
505 |
+
{
|
506 |
+
$cfs.trigger(cf_e(dir, conf), opts.auto);
|
507 |
+
}
|
508 |
+
}, dur2);
|
509 |
+
|
510 |
+
// pause start callback
|
511 |
+
if (opts.auto.onTimeoutStart)
|
512 |
+
{
|
513 |
+
opts.auto.onTimeoutStart.call($tt0, perc, dur2);
|
514 |
+
}
|
515 |
+
|
516 |
+
return true;
|
517 |
+
});
|
518 |
+
|
519 |
+
|
520 |
+
// resume event
|
521 |
+
$cfs.bind(cf_e('resume', conf), function(e) {
|
522 |
+
e.stopPropagation();
|
523 |
+
if (scrl.isStopped)
|
524 |
+
{
|
525 |
+
scrl.isStopped = false;
|
526 |
+
crsl.isPaused = false;
|
527 |
+
crsl.isScrolling = true;
|
528 |
+
scrl.startTime = getTime();
|
529 |
+
sc_startScroll(scrl, conf);
|
530 |
+
}
|
531 |
+
else
|
532 |
+
{
|
533 |
+
$cfs.trigger(cf_e('play', conf));
|
534 |
+
}
|
535 |
+
return true;
|
536 |
+
});
|
537 |
+
|
538 |
+
|
539 |
+
// prev + next events
|
540 |
+
$cfs.bind(cf_e('prev', conf)+' '+cf_e('next', conf), function(e, obj, num, clb, que) {
|
541 |
+
e.stopPropagation();
|
542 |
+
|
543 |
+
// stopped or hidden carousel, don't scroll, don't queue
|
544 |
+
if (crsl.isStopped || $cfs.is(':hidden'))
|
545 |
+
{
|
546 |
+
e.stopImmediatePropagation();
|
547 |
+
return debug(conf, 'Carousel stopped or hidden: Not scrolling.');
|
548 |
+
}
|
549 |
+
|
550 |
+
// not enough items
|
551 |
+
var minimum = (is_number(opts.items.minimum)) ? opts.items.minimum : opts.items.visible + 1;
|
552 |
+
if (minimum > itms.total)
|
553 |
+
{
|
554 |
+
e.stopImmediatePropagation();
|
555 |
+
return debug(conf, 'Not enough items ('+itms.total+' total, '+minimum+' needed): Not scrolling.');
|
556 |
+
}
|
557 |
+
|
558 |
+
// get config
|
559 |
+
var v = [obj, num, clb, que],
|
560 |
+
t = ['object', 'number/string', 'function', 'boolean'],
|
561 |
+
a = cf_sortParams(v, t);
|
562 |
+
|
563 |
+
obj = a[0];
|
564 |
+
num = a[1];
|
565 |
+
clb = a[2];
|
566 |
+
que = a[3];
|
567 |
+
|
568 |
+
var eType = e.type.slice(conf.events.prefix.length);
|
569 |
+
|
570 |
+
if (!is_object(obj))
|
571 |
+
{
|
572 |
+
obj = {};
|
573 |
+
}
|
574 |
+
if (is_function(clb))
|
575 |
+
{
|
576 |
+
obj.onAfter = clb;
|
577 |
+
}
|
578 |
+
if (is_boolean(que))
|
579 |
+
{
|
580 |
+
obj.queue = que;
|
581 |
+
}
|
582 |
+
obj = $.extend(true, {}, opts[eType], obj);
|
583 |
+
|
584 |
+
// test conditions callback
|
585 |
+
if (obj.conditions && !obj.conditions.call($tt0, eType))
|
586 |
+
{
|
587 |
+
e.stopImmediatePropagation();
|
588 |
+
return debug(conf, 'Callback "conditions" returned false.');
|
589 |
+
}
|
590 |
+
|
591 |
+
if (!is_number(num))
|
592 |
+
{
|
593 |
+
if (opts.items.filter != '*')
|
594 |
+
{
|
595 |
+
num = 'visible';
|
596 |
+
}
|
597 |
+
else
|
598 |
+
{
|
599 |
+
var arr = [num, obj.items, opts[eType].items];
|
600 |
+
for (var a = 0, l = arr.length; a < l; a++)
|
601 |
+
{
|
602 |
+
if (is_number(arr[a]) || arr[a] == 'page' || arr[a] == 'visible') {
|
603 |
+
num = arr[a];
|
604 |
+
break;
|
605 |
+
}
|
606 |
+
}
|
607 |
+
}
|
608 |
+
switch(num) {
|
609 |
+
case 'page':
|
610 |
+
e.stopImmediatePropagation();
|
611 |
+
return $cfs.triggerHandler(cf_e(eType+'Page', conf), [obj, clb]);
|
612 |
+
break;
|
613 |
+
|
614 |
+
case 'visible':
|
615 |
+
if (!opts.items.visibleConf.variable && opts.items.filter == '*')
|
616 |
+
{
|
617 |
+
num = opts.items.visible;
|
618 |
+
}
|
619 |
+
break;
|
620 |
+
}
|
621 |
+
}
|
622 |
+
|
623 |
+
// resume animation, add current to queue
|
624 |
+
if (scrl.isStopped)
|
625 |
+
{
|
626 |
+
$cfs.trigger(cf_e('resume', conf));
|
627 |
+
$cfs.trigger(cf_e('queue', conf), [eType, [obj, num, clb]]);
|
628 |
+
e.stopImmediatePropagation();
|
629 |
+
return debug(conf, 'Carousel resumed scrolling.');
|
630 |
+
}
|
631 |
+
|
632 |
+
// queue if scrolling
|
633 |
+
if (obj.duration > 0)
|
634 |
+
{
|
635 |
+
if (crsl.isScrolling)
|
636 |
+
{
|
637 |
+
if (obj.queue)
|
638 |
+
{
|
639 |
+
if (obj.queue == 'last')
|
640 |
+
{
|
641 |
+
queu = [];
|
642 |
+
}
|
643 |
+
if (obj.queue != 'first' || queu.length == 0)
|
644 |
+
{
|
645 |
+
$cfs.trigger(cf_e('queue', conf), [eType, [obj, num, clb]]);
|
646 |
+
}
|
647 |
+
}
|
648 |
+
e.stopImmediatePropagation();
|
649 |
+
return debug(conf, 'Carousel currently scrolling.');
|
650 |
+
}
|
651 |
+
}
|
652 |
+
|
653 |
+
tmrs.timePassed = 0;
|
654 |
+
$cfs.trigger(cf_e('slide_'+eType, conf), [obj, num]);
|
655 |
+
|
656 |
+
// synchronise
|
657 |
+
if (opts.synchronise)
|
658 |
+
{
|
659 |
+
var s = opts.synchronise,
|
660 |
+
c = [obj, num];
|
661 |
+
|
662 |
+
for (var j = 0, l = s.length; j < l; j++) {
|
663 |
+
var d = eType;
|
664 |
+
if (!s[j][2])
|
665 |
+
{
|
666 |
+
d = (d == 'prev') ? 'next' : 'prev';
|
667 |
+
}
|
668 |
+
if (!s[j][1])
|
669 |
+
{
|
670 |
+
c[0] = s[j][0].triggerHandler('_cfs_triggerEvent', ['configuration', d]);
|
671 |
+
}
|
672 |
+
c[1] = num + s[j][3];
|
673 |
+
s[j][0].trigger('_cfs_triggerEvent', ['slide_'+d, c]);
|
674 |
+
}
|
675 |
+
}
|
676 |
+
return true;
|
677 |
+
});
|
678 |
+
|
679 |
+
|
680 |
+
// prev event
|
681 |
+
$cfs.bind(cf_e('slide_prev', conf), function(e, sO, nI) {
|
682 |
+
e.stopPropagation();
|
683 |
+
var a_itm = $cfs.children();
|
684 |
+
|
685 |
+
// non-circular at start, scroll to end
|
686 |
+
if (!opts.circular)
|
687 |
+
{
|
688 |
+
if (itms.first == 0)
|
689 |
+
{
|
690 |
+
if (opts.infinite)
|
691 |
+
{
|
692 |
+
$cfs.trigger(cf_e('next', conf), itms.total-1);
|
693 |
+
}
|
694 |
+
return e.stopImmediatePropagation();
|
695 |
+
}
|
696 |
+
}
|
697 |
+
|
698 |
+
sz_resetMargin(a_itm, opts);
|
699 |
+
|
700 |
+
// find number of items to scroll
|
701 |
+
if (!is_number(nI))
|
702 |
+
{
|
703 |
+
if (opts.items.visibleConf.variable)
|
704 |
+
{
|
705 |
+
nI = gn_getVisibleItemsPrev(a_itm, opts, itms.total-1);
|
706 |
+
}
|
707 |
+
else if (opts.items.filter != '*')
|
708 |
+
{
|
709 |
+
var xI = (is_number(sO.items)) ? sO.items : gn_getVisibleOrg($cfs, opts);
|
710 |
+
nI = gn_getScrollItemsPrevFilter(a_itm, opts, itms.total-1, xI);
|
711 |
+
}
|
712 |
+
else
|
713 |
+
{
|
714 |
+
nI = opts.items.visible;
|
715 |
+
}
|
716 |
+
nI = cf_getAdjust(nI, opts, sO.items, $tt0);
|
717 |
+
}
|
718 |
+
|
719 |
+
// prevent non-circular from scrolling to far
|
720 |
+
if (!opts.circular)
|
721 |
+
{
|
722 |
+
if (itms.total - nI < itms.first)
|
723 |
+
{
|
724 |
+
nI = itms.total - itms.first;
|
725 |
+
}
|
726 |
+
}
|
727 |
+
|
728 |
+
// set new number of visible items
|
729 |
+
opts.items.visibleConf.old = opts.items.visible;
|
730 |
+
if (opts.items.visibleConf.variable)
|
731 |
+
{
|
732 |
+
var vI = cf_getItemsAdjust(gn_getVisibleItemsNext(a_itm, opts, itms.total-nI), opts, opts.items.visibleConf.adjust, $tt0);
|
733 |
+
if (opts.items.visible+nI <= vI && nI < itms.total)
|
734 |
+
{
|
735 |
+
nI++;
|
736 |
+
vI = cf_getItemsAdjust(gn_getVisibleItemsNext(a_itm, opts, itms.total-nI), opts, opts.items.visibleConf.adjust, $tt0);
|
737 |
+
}
|
738 |
+
opts.items.visible = vI;
|
739 |
+
}
|
740 |
+
else if (opts.items.filter != '*')
|
741 |
+
{
|
742 |
+
var vI = gn_getVisibleItemsNextFilter(a_itm, opts, itms.total-nI);
|
743 |
+
opts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0);
|
744 |
+
}
|
745 |
+
|
746 |
+
sz_resetMargin(a_itm, opts, true);
|
747 |
+
|
748 |
+
// scroll 0, don't scroll
|
749 |
+
if (nI == 0)
|
750 |
+
{
|
751 |
+
e.stopImmediatePropagation();
|
752 |
+
return debug(conf, '0 items to scroll: Not scrolling.');
|
753 |
+
}
|
754 |
+
debug(conf, 'Scrolling '+nI+' items backward.');
|
755 |
+
|
756 |
+
|
757 |
+
// save new config
|
758 |
+
itms.first += nI;
|
759 |
+
while (itms.first >= itms.total)
|
760 |
+
{
|
761 |
+
itms.first -= itms.total;
|
762 |
+
}
|
763 |
+
|
764 |
+
// non-circular callback
|
765 |
+
if (!opts.circular)
|
766 |
+
{
|
767 |
+
if (itms.first == 0 && sO.onEnd)
|
768 |
+
{
|
769 |
+
sO.onEnd.call($tt0, 'prev');
|
770 |
+
}
|
771 |
+
if (!opts.infinite)
|
772 |
+
{
|
773 |
+
nv_enableNavi(opts, itms.first, conf);
|
774 |
+
}
|
775 |
+
}
|
776 |
+
|
777 |
+
// rearrange items
|
778 |
+
$cfs.children().slice(itms.total-nI, itms.total).prependTo($cfs);
|
779 |
+
if (itms.total < opts.items.visible + nI)
|
780 |
+
{
|
781 |
+
$cfs.children().slice(0, (opts.items.visible+nI)-itms.total).clone(true).appendTo($cfs);
|
782 |
+
}
|
783 |
+
|
784 |
+
// the needed items
|
785 |
+
var a_itm = $cfs.children(),
|
786 |
+
i_old = gi_getOldItemsPrev(a_itm, opts, nI),
|
787 |
+
i_new = gi_getNewItemsPrev(a_itm, opts),
|
788 |
+
i_cur_l = a_itm.eq(nI-1),
|
789 |
+
i_old_l = i_old.last(),
|
790 |
+
i_new_l = i_new.last();
|
791 |
+
|
792 |
+
sz_resetMargin(a_itm, opts);
|
793 |
+
|
794 |
+
var pL = 0,
|
795 |
+
pR = 0;
|
796 |
+
|
797 |
+
if (opts.align)
|
798 |
+
{
|
799 |
+
var p = cf_getAlignPadding(i_new, opts);
|
800 |
+
pL = p[0];
|
801 |
+
pR = p[1];
|
802 |
+
}
|
803 |
+
var oL = (pL < 0) ? opts.padding[opts.d[3]] : 0;
|
804 |
+
|
805 |
+
// hide items for fx directscroll
|
806 |
+
var hiddenitems = false,
|
807 |
+
i_skp = $();
|
808 |
+
if (opts.items.visible < nI)
|
809 |
+
{
|
810 |
+
i_skp = a_itm.slice(opts.items.visibleConf.old, nI);
|
811 |
+
if (sO.fx == 'directscroll')
|
812 |
+
{
|
813 |
+
var orgW = opts.items[opts.d['width']];
|
814 |
+
hiddenitems = i_skp;
|
815 |
+
i_cur_l = i_new_l;
|
816 |
+
sc_hideHiddenItems(hiddenitems);
|
817 |
+
opts.items[opts.d['width']] = 'variable';
|
818 |
+
}
|
819 |
+
}
|
820 |
+
// save new sizes
|
821 |
+
var $cf2 = false,
|
822 |
+
i_siz = ms_getTotalSize(a_itm.slice(0, nI), opts, 'width'),
|
823 |
+
w_siz = cf_mapWrapperSizes(ms_getSizes(i_new, opts, true), opts, !opts.usePadding),
|
824 |
+
i_siz_vis = 0,
|
825 |
+
a_cfs = {},
|
826 |
+
a_wsz = {},
|
827 |
+
a_cur = {},
|
828 |
+
a_old = {},
|
829 |
+
a_new = {},
|
830 |
+
a_lef = {},
|
831 |
+
a_lef_vis = {},
|
832 |
+
a_dur = sc_getDuration(sO, opts, nI, i_siz);
|
833 |
+
|
834 |
+
switch(sO.fx)
|
835 |
+
{
|
836 |
+
case 'cover':
|
837 |
+
case 'cover-fade':
|
838 |
+
i_siz_vis = ms_getTotalSize(a_itm.slice(0, opts.items.visible), opts, 'width');
|
839 |
+
break;
|
840 |
+
}
|
841 |
+
|
842 |
+
if (hiddenitems)
|
843 |
+
{
|
844 |
+
opts.items[opts.d['width']] = orgW;
|
845 |
+
}
|
846 |
+
|
847 |
+
sz_resetMargin(a_itm, opts, true);
|
848 |
+
if (pR >= 0)
|
849 |
+
{
|
850 |
+
sz_resetMargin(i_old_l, opts, opts.padding[opts.d[1]]);
|
851 |
+
}
|
852 |
+
if (pL >= 0)
|
853 |
+
{
|
854 |
+
sz_resetMargin(i_cur_l, opts, opts.padding[opts.d[3]]);
|
855 |
+
}
|
856 |
+
|
857 |
+
if (opts.align)
|
858 |
+
{
|
859 |
+
opts.padding[opts.d[1]] = pR;
|
860 |
+
opts.padding[opts.d[3]] = pL;
|
861 |
+
}
|
862 |
+
|
863 |
+
a_lef[opts.d['left']] = -(i_siz - oL);
|
864 |
+
a_lef_vis[opts.d['left']] = -(i_siz_vis - oL);
|
865 |
+
a_wsz[opts.d['left']] = w_siz[opts.d['width']];
|
866 |
+
|
867 |
+
// scrolling functions
|
868 |
+
var _s_wrapper = function() {},
|
869 |
+
_a_wrapper = function() {},
|
870 |
+
_s_paddingold = function() {},
|
871 |
+
_a_paddingold = function() {},
|
872 |
+
_s_paddingnew = function() {},
|
873 |
+
_a_paddingnew = function() {},
|
874 |
+
_s_paddingcur = function() {},
|
875 |
+
_a_paddingcur = function() {},
|
876 |
+
_onafter = function() {},
|
877 |
+
_moveitems = function() {},
|
878 |
+
_position = function() {};
|
879 |
+
|
880 |
+
// clone carousel
|
881 |
+
switch(sO.fx)
|
882 |
+
{
|
883 |
+
case 'crossfade':
|
884 |
+
case 'cover':
|
885 |
+
case 'cover-fade':
|
886 |
+
case 'uncover':
|
887 |
+
case 'uncover-fade':
|
888 |
+
$cf2 = $cfs.clone(true).appendTo($wrp);
|
889 |
+
break;
|
890 |
+
}
|
891 |
+
switch(sO.fx)
|
892 |
+
{
|
893 |
+
case 'crossfade':
|
894 |
+
case 'uncover':
|
895 |
+
case 'uncover-fade':
|
896 |
+
$cf2.children().slice(0, nI).remove();
|
897 |
+
$cf2.children().slice(opts.items.visibleConf.old).remove();
|
898 |
+
break;
|
899 |
+
|
900 |
+
case 'cover':
|
901 |
+
case 'cover-fade':
|
902 |
+
$cf2.children().slice(opts.items.visible).remove();
|
903 |
+
$cf2.css(a_lef_vis);
|
904 |
+
break;
|
905 |
+
}
|
906 |
+
|
907 |
+
$cfs.css(a_lef);
|
908 |
+
|
909 |
+
// reset all scrolls
|
910 |
+
scrl = sc_setScroll(a_dur, sO.easing, conf);
|
911 |
+
|
912 |
+
// animate / set carousel
|
913 |
+
a_cfs[opts.d['left']] = (opts.usePadding) ? opts.padding[opts.d[3]] : 0;
|
914 |
+
|
915 |
+
// animate / set wrapper
|
916 |
+
if (opts[opts.d['width']] == 'variable' || opts[opts.d['height']] == 'variable')
|
917 |
+
{
|
918 |
+
_s_wrapper = function() {
|
919 |
+
$wrp.css(w_siz);
|
920 |
+
};
|
921 |
+
_a_wrapper = function() {
|
922 |
+
scrl.anims.push([$wrp, w_siz]);
|
923 |
+
};
|
924 |
+
}
|
925 |
+
|
926 |
+
// animate / set items
|
927 |
+
if (opts.usePadding)
|
928 |
+
{
|
929 |
+
if (i_new_l.not(i_cur_l).length)
|
930 |
+
{
|
931 |
+
a_cur[opts.d['marginRight']] = i_cur_l.data('_cfs_origCssMargin');
|
932 |
+
|
933 |
+
if (pL < 0)
|
934 |
+
{
|
935 |
+
i_cur_l.css(a_cur);
|
936 |
+
}
|
937 |
+
else
|
938 |
+
{
|
939 |
+
_s_paddingcur = function() {
|
940 |
+
i_cur_l.css(a_cur);
|
941 |
+
};
|
942 |
+
_a_paddingcur = function() {
|
943 |
+
scrl.anims.push([i_cur_l, a_cur]);
|
944 |
+
};
|
945 |
+
}
|
946 |
+
}
|
947 |
+
switch(sO.fx)
|
948 |
+
{
|
949 |
+
case 'cover':
|
950 |
+
case 'cover-fade':
|
951 |
+
$cf2.children().eq(nI-1).css(a_cur);
|
952 |
+
break;
|
953 |
+
}
|
954 |
+
|
955 |
+
if (i_new_l.not(i_old_l).length)
|
956 |
+
{
|
957 |
+
a_old[opts.d['marginRight']] = i_old_l.data('_cfs_origCssMargin');
|
958 |
+
_s_paddingold = function() {
|
959 |
+
i_old_l.css(a_old);
|
960 |
+
};
|
961 |
+
_a_paddingold = function() {
|
962 |
+
scrl.anims.push([i_old_l, a_old]);
|
963 |
+
};
|
964 |
+
}
|
965 |
+
|
966 |
+
if (pR >= 0)
|
967 |
+
{
|
968 |
+
a_new[opts.d['marginRight']] = i_new_l.data('_cfs_origCssMargin') + opts.padding[opts.d[1]];
|
969 |
+
_s_paddingnew = function() {
|
970 |
+
i_new_l.css(a_new);
|
971 |
+
};
|
972 |
+
_a_paddingnew = function() {
|
973 |
+
scrl.anims.push([i_new_l, a_new]);
|
974 |
+
};
|
975 |
+
}
|
976 |
+
}
|
977 |
+
|
978 |
+
// set position
|
979 |
+
_position = function() {
|
980 |
+
$cfs.css(a_cfs);
|
981 |
+
};
|
982 |
+
|
983 |
+
|
984 |
+
var overFill = opts.items.visible+nI-itms.total;
|
985 |
+
|
986 |
+
// rearrange items
|
987 |
+
_moveitems = function() {
|
988 |
+
if (overFill > 0)
|
989 |
+
{
|
990 |
+
$cfs.children().slice(itms.total).remove();
|
991 |
+
i_old = $( $cfs.children().slice(itms.total-(opts.items.visible-overFill)).get().concat( $cfs.children().slice(0, overFill).get() ) );
|
992 |
+
}
|
993 |
+
sc_showHiddenItems(hiddenitems);
|
994 |
+
|
995 |
+
if (opts.usePadding)
|
996 |
+
{
|
997 |
+
var l_itm = $cfs.children().eq(opts.items.visible+nI-1);
|
998 |
+
l_itm.css(opts.d['marginRight'], l_itm.data('_cfs_origCssMargin'));
|
999 |
+
}
|
1000 |
+
};
|
1001 |
+
|
1002 |
+
|
1003 |
+
var cb_arguments = sc_mapCallbackArguments(i_old, i_skp, i_new, nI, 'prev', a_dur, w_siz);
|
1004 |
+
|
1005 |
+
// fire onAfter callbacks
|
1006 |
+
_onafter = function() {
|
1007 |
+
sc_afterScroll($cfs, $cf2, sO);
|
1008 |
+
crsl.isScrolling = false;
|
1009 |
+
clbk.onAfter = sc_fireCallbacks($tt0, sO, 'onAfter', cb_arguments, clbk);
|
1010 |
+
queu = sc_fireQueue($cfs, queu, conf);
|
1011 |
+
|
1012 |
+
if (!crsl.isPaused)
|
1013 |
+
{
|
1014 |
+
$cfs.trigger(cf_e('play', conf));
|
1015 |
+
}
|
1016 |
+
};
|
1017 |
+
|
1018 |
+
// fire onBefore callback
|
1019 |
+
crsl.isScrolling = true;
|
1020 |
+
tmrs = sc_clearTimers(tmrs);
|
1021 |
+
clbk.onBefore = sc_fireCallbacks($tt0, sO, 'onBefore', cb_arguments, clbk);
|
1022 |
+
|
1023 |
+
switch(sO.fx)
|
1024 |
+
{
|
1025 |
+
case 'none':
|
1026 |
+
$cfs.css(a_cfs);
|
1027 |
+
_s_wrapper();
|
1028 |
+
_s_paddingold();
|
1029 |
+
_s_paddingnew();
|
1030 |
+
_s_paddingcur();
|
1031 |
+
_position();
|
1032 |
+
_moveitems();
|
1033 |
+
_onafter();
|
1034 |
+
break;
|
1035 |
+
|
1036 |
+
case 'fade':
|
1037 |
+
scrl.anims.push([$cfs, { 'opacity': 0 }, function() {
|
1038 |
+
_s_wrapper();
|
1039 |
+
_s_paddingold();
|
1040 |
+
_s_paddingnew();
|
1041 |
+
_s_paddingcur();
|
1042 |
+
_position();
|
1043 |
+
_moveitems();
|
1044 |
+
scrl = sc_setScroll(a_dur, sO.easing, conf);
|
1045 |
+
scrl.anims.push([$cfs, { 'opacity': 1 }, _onafter]);
|
1046 |
+
sc_startScroll(scrl, conf);
|
1047 |
+
}]);
|
1048 |
+
break;
|
1049 |
+
|
1050 |
+
case 'crossfade':
|
1051 |
+
$cfs.css({ 'opacity': 0 });
|
1052 |
+
scrl.anims.push([$cf2, { 'opacity': 0 }]);
|
1053 |
+
scrl.anims.push([$cfs, { 'opacity': 1 }, _onafter]);
|
1054 |
+
_a_wrapper();
|
1055 |
+
_s_paddingold();
|
1056 |
+
_s_paddingnew();
|
1057 |
+
_s_paddingcur();
|
1058 |
+
_position();
|
1059 |
+
_moveitems();
|
1060 |
+
break;
|
1061 |
+
|
1062 |
+
case 'cover':
|
1063 |
+
scrl.anims.push([$cf2, a_cfs, function() {
|
1064 |
+
_s_paddingold();
|
1065 |
+
_s_paddingnew();
|
1066 |
+
_s_paddingcur();
|
1067 |
+
_position();
|
1068 |
+
_moveitems();
|
1069 |
+
_onafter();
|
1070 |
+
}]);
|
1071 |
+
_a_wrapper();
|
1072 |
+
break;
|
1073 |
+
|
1074 |
+
case 'cover-fade':
|
1075 |
+
scrl.anims.push([$cfs, { 'opacity': 0 }]);
|
1076 |
+
scrl.anims.push([$cf2, a_cfs, function() {
|
1077 |
+
_s_paddingold();
|
1078 |
+
_s_paddingnew();
|
1079 |
+
_s_paddingcur();
|
1080 |
+
_position();
|
1081 |
+
_moveitems();
|
1082 |
+
_onafter();
|
1083 |
+
}]);
|
1084 |
+
_a_wrapper();
|
1085 |
+
break;
|
1086 |
+
|
1087 |
+
case 'uncover':
|
1088 |
+
scrl.anims.push([$cf2, a_wsz, _onafter]);
|
1089 |
+
_a_wrapper();
|
1090 |
+
_s_paddingold();
|
1091 |
+
_s_paddingnew();
|
1092 |
+
_s_paddingcur();
|
1093 |
+
_position();
|
1094 |
+
_moveitems();
|
1095 |
+
break;
|
1096 |
+
|
1097 |
+
case 'uncover-fade':
|
1098 |
+
$cfs.css({ 'opacity': 0 });
|
1099 |
+
scrl.anims.push([$cfs, { 'opacity': 1 }]);
|
1100 |
+
scrl.anims.push([$cf2, a_wsz, _onafter]);
|
1101 |
+
_a_wrapper();
|
1102 |
+
_s_paddingold();
|
1103 |
+
_s_paddingnew();
|
1104 |
+
_s_paddingcur();
|
1105 |
+
_position();
|
1106 |
+
_moveitems();
|
1107 |
+
break;
|
1108 |
+
|
1109 |
+
default:
|
1110 |
+
scrl.anims.push([$cfs, a_cfs, function() {
|
1111 |
+
_moveitems();
|
1112 |
+
_onafter();
|
1113 |
+
}]);
|
1114 |
+
_a_wrapper();
|
1115 |
+
_a_paddingold();
|
1116 |
+
_a_paddingnew();
|
1117 |
+
_a_paddingcur();
|
1118 |
+
break;
|
1119 |
+
}
|
1120 |
+
|
1121 |
+
sc_startScroll(scrl, conf);
|
1122 |
+
cf_setCookie(opts.cookie, $cfs, conf);
|
1123 |
+
|
1124 |
+
$cfs.trigger(cf_e('updatePageStatus', conf), [false, w_siz]);
|
1125 |
+
|
1126 |
+
return true;
|
1127 |
+
});
|
1128 |
+
|
1129 |
+
|
1130 |
+
// next event
|
1131 |
+
$cfs.bind(cf_e('slide_next', conf), function(e, sO, nI) {
|
1132 |
+
e.stopPropagation();
|
1133 |
+
var a_itm = $cfs.children();
|
1134 |
+
|
1135 |
+
// non-circular at end, scroll to start
|
1136 |
+
if (!opts.circular)
|
1137 |
+
{
|
1138 |
+
if (itms.first == opts.items.visible)
|
1139 |
+
{
|
1140 |
+
if (opts.infinite)
|
1141 |
+
{
|
1142 |
+
$cfs.trigger(cf_e('prev', conf), itms.total-1);
|
1143 |
+
}
|
1144 |
+
return e.stopImmediatePropagation();
|
1145 |
+
}
|
1146 |
+
}
|
1147 |
+
|
1148 |
+
sz_resetMargin(a_itm, opts);
|
1149 |
+
|
1150 |
+
// find number of items to scroll
|
1151 |
+
if (!is_number(nI))
|
1152 |
+
{
|
1153 |
+
if (opts.items.filter != '*')
|
1154 |
+
{
|
1155 |
+
var xI = (is_number(sO.items)) ? sO.items : gn_getVisibleOrg($cfs, opts);
|
1156 |
+
nI = gn_getScrollItemsNextFilter(a_itm, opts, 0, xI);
|
1157 |
+
}
|
1158 |
+
else
|
1159 |
+
{
|
1160 |
+
nI = opts.items.visible;
|
1161 |
+
}
|
1162 |
+
nI = cf_getAdjust(nI, opts, sO.items, $tt0);
|
1163 |
+
}
|
1164 |
+
|
1165 |
+
var lastItemNr = (itms.first == 0) ? itms.total : itms.first;
|
1166 |
+
|
1167 |
+
// prevent non-circular from scrolling to far
|
1168 |
+
if (!opts.circular)
|
1169 |
+
{
|
1170 |
+
if (opts.items.visibleConf.variable)
|
1171 |
+
{
|
1172 |
+
var vI = gn_getVisibleItemsNext(a_itm, opts, nI),
|
1173 |
+
xI = gn_getVisibleItemsPrev(a_itm, opts, lastItemNr-1);
|
1174 |
+
}
|
1175 |
+
else
|
1176 |
+
{
|
1177 |
+
var vI = opts.items.visible,
|
1178 |
+
xI = opts.items.visible;
|
1179 |
+
}
|
1180 |
+
|
1181 |
+
if (nI + vI > lastItemNr)
|
1182 |
+
{
|
1183 |
+
nI = lastItemNr - xI;
|
1184 |
+
}
|
1185 |
+
}
|
1186 |
+
|
1187 |
+
// set new number of visible items
|
1188 |
+
opts.items.visibleConf.old = opts.items.visible;
|
1189 |
+
if (opts.items.visibleConf.variable)
|
1190 |
+
{
|
1191 |
+
var vI = cf_getItemsAdjust(gn_getVisibleItemsNextTestCircular(a_itm, opts, nI, lastItemNr), opts, opts.items.visibleConf.adjust, $tt0);
|
1192 |
+
while (opts.items.visible-nI >= vI && nI < itms.total)
|
1193 |
+
{
|
1194 |
+
nI++;
|
1195 |
+
vI = cf_getItemsAdjust(gn_getVisibleItemsNextTestCircular(a_itm, opts, nI, lastItemNr), opts, opts.items.visibleConf.adjust, $tt0);
|
1196 |
+
}
|
1197 |
+
opts.items.visible = vI;
|
1198 |
+
}
|
1199 |
+
else if (opts.items.filter != '*')
|
1200 |
+
{
|
1201 |
+
var vI = gn_getVisibleItemsNextFilter(a_itm, opts, nI);
|
1202 |
+
opts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0);
|
1203 |
+
}
|
1204 |
+
|
1205 |
+
sz_resetMargin(a_itm, opts, true);
|
1206 |
+
|
1207 |
+
// scroll 0, don't scroll
|
1208 |
+
if (nI == 0)
|
1209 |
+
{
|
1210 |
+
e.stopImmediatePropagation();
|
1211 |
+
return debug(conf, '0 items to scroll: Not scrolling.');
|
1212 |
+
}
|
1213 |
+
debug(conf, 'Scrolling '+nI+' items forward.');
|
1214 |
+
|
1215 |
+
|
1216 |
+
// save new config
|
1217 |
+
itms.first -= nI;
|
1218 |
+
while (itms.first < 0)
|
1219 |
+
{
|
1220 |
+
itms.first += itms.total;
|
1221 |
+
}
|
1222 |
+
|
1223 |
+
// non-circular callback
|
1224 |
+
if (!opts.circular)
|
1225 |
+
{
|
1226 |
+
if (itms.first == opts.items.visible && sO.onEnd)
|
1227 |
+
{
|
1228 |
+
sO.onEnd.call($tt0, 'next');
|
1229 |
+
}
|
1230 |
+
if (!opts.infinite)
|
1231 |
+
{
|
1232 |
+
nv_enableNavi(opts, itms.first, conf);
|
1233 |
+
}
|
1234 |
+
}
|
1235 |
+
|
1236 |
+
// rearrange items
|
1237 |
+
if (itms.total < opts.items.visible+nI)
|
1238 |
+
{
|
1239 |
+
$cfs.children().slice(0, (opts.items.visible+nI)-itms.total).clone(true).appendTo($cfs);
|
1240 |
+
}
|
1241 |
+
|
1242 |
+
// the needed items
|
1243 |
+
var a_itm = $cfs.children(),
|
1244 |
+
i_old = gi_getOldItemsNext(a_itm, opts),
|
1245 |
+
i_new = gi_getNewItemsNext(a_itm, opts, nI),
|
1246 |
+
i_cur_l = a_itm.eq(nI-1),
|
1247 |
+
i_old_l = i_old.last(),
|
1248 |
+
i_new_l = i_new.last();
|
1249 |
+
|
1250 |
+
sz_resetMargin(a_itm, opts);
|
1251 |
+
|
1252 |
+
var pL = 0,
|
1253 |
+
pR = 0;
|
1254 |
+
|
1255 |
+
if (opts.align)
|
1256 |
+
{
|
1257 |
+
var p = cf_getAlignPadding(i_new, opts);
|
1258 |
+
pL = p[0];
|
1259 |
+
pR = p[1];
|
1260 |
+
}
|
1261 |
+
|
1262 |
+
// hide items for fx directscroll
|
1263 |
+
var hiddenitems = false,
|
1264 |
+
i_skp = $();
|
1265 |
+
if (opts.items.visibleConf.old < nI)
|
1266 |
+
{
|
1267 |
+
i_skp = a_itm.slice(opts.items.visibleConf.old, nI);
|
1268 |
+
if (sO.fx == 'directscroll')
|
1269 |
+
{
|
1270 |
+
var orgW = opts.items[opts.d['width']];
|
1271 |
+
hiddenitems = i_skp;
|
1272 |
+
i_cur_l = i_old_l;
|
1273 |
+
sc_hideHiddenItems(hiddenitems);
|
1274 |
+
opts.items[opts.d['width']] = 'variable';
|
1275 |
+
}
|
1276 |
+
}
|
1277 |
+
// save new sizes
|
1278 |
+
var $cf2 = false,
|
1279 |
+
i_siz = ms_getTotalSize(a_itm.slice(0, nI), opts, 'width'),
|
1280 |
+
w_siz = cf_mapWrapperSizes(ms_getSizes(i_new, opts, true), opts, !opts.usePadding),
|
1281 |
+
i_siz_vis = 0,
|
1282 |
+
a_cfs = {},
|
1283 |
+
a_cfs_vis = {},
|
1284 |
+
a_cur = {},
|
1285 |
+
a_old = {},
|
1286 |
+
a_lef = {},
|
1287 |
+
a_dur = sc_getDuration(sO, opts, nI, i_siz);
|
1288 |
+
|
1289 |
+
switch(sO.fx)
|
1290 |
+
{
|
1291 |
+
case 'uncover':
|
1292 |
+
case 'uncover-fade':
|
1293 |
+
i_siz_vis = ms_getTotalSize(a_itm.slice(0, opts.items.visibleConf.old), opts, 'width');
|
1294 |
+
break;
|
1295 |
+
}
|
1296 |
+
|
1297 |
+
if (hiddenitems)
|
1298 |
+
{
|
1299 |
+
opts.items[opts.d['width']] = orgW;
|
1300 |
+
}
|
1301 |
+
|
1302 |
+
if (opts.align)
|
1303 |
+
{
|
1304 |
+
if (opts.padding[opts.d[1]] < 0)
|
1305 |
+
{
|
1306 |
+
opts.padding[opts.d[1]] = 0;
|
1307 |
+
}
|
1308 |
+
}
|
1309 |
+
sz_resetMargin(a_itm, opts, true);
|
1310 |
+
sz_resetMargin(i_old_l, opts, opts.padding[opts.d[1]]);
|
1311 |
+
|
1312 |
+
if (opts.align)
|
1313 |
+
{
|
1314 |
+
opts.padding[opts.d[1]] = pR;
|
1315 |
+
opts.padding[opts.d[3]] = pL;
|
1316 |
+
}
|
1317 |
+
|
1318 |
+
a_lef[opts.d['left']] = (opts.usePadding) ? opts.padding[opts.d[3]] : 0;
|
1319 |
+
|
1320 |
+
// scrolling functions
|
1321 |
+
var _s_wrapper = function() {},
|
1322 |
+
_a_wrapper = function() {},
|
1323 |
+
_s_paddingold = function() {},
|
1324 |
+
_a_paddingold = function() {},
|
1325 |
+
_s_paddingcur = function() {},
|
1326 |
+
_a_paddingcur = function() {},
|
1327 |
+
_onafter = function() {},
|
1328 |
+
_moveitems = function() {},
|
1329 |
+
_position = function() {};
|
1330 |
+
|
1331 |
+
// clone carousel
|
1332 |
+
switch(sO.fx)
|
1333 |
+
{
|
1334 |
+
case 'crossfade':
|
1335 |
+
case 'cover':
|
1336 |
+
case 'cover-fade':
|
1337 |
+
case 'uncover':
|
1338 |
+
case 'uncover-fade':
|
1339 |
+
$cf2 = $cfs.clone(true).appendTo($wrp);
|
1340 |
+
$cf2.children().slice(opts.items.visibleConf.old).remove();
|
1341 |
+
break;
|
1342 |
+
}
|
1343 |
+
switch(sO.fx)
|
1344 |
+
{
|
1345 |
+
case 'crossfade':
|
1346 |
+
case 'cover':
|
1347 |
+
case 'cover-fade':
|
1348 |
+
$cfs.css('zIndex', 1);
|
1349 |
+
$cf2.css('zIndex', 0);
|
1350 |
+
break;
|
1351 |
+
}
|
1352 |
+
|
1353 |
+
// reset all scrolls
|
1354 |
+
scrl = sc_setScroll(a_dur, sO.easing, conf);
|
1355 |
+
|
1356 |
+
// animate / set carousel
|
1357 |
+
a_cfs[opts.d['left']] = -i_siz;
|
1358 |
+
a_cfs_vis[opts.d['left']] = -i_siz_vis;
|
1359 |
+
|
1360 |
+
if (pL < 0)
|
1361 |
+
{
|
1362 |
+
a_cfs[opts.d['left']] += pL;
|
1363 |
+
}
|
1364 |
+
|
1365 |
+
// animate / set wrapper
|
1366 |
+
if (opts[opts.d['width']] == 'variable' || opts[opts.d['height']] == 'variable')
|
1367 |
+
{
|
1368 |
+
_s_wrapper = function() {
|
1369 |
+
$wrp.css(w_siz);
|
1370 |
+
};
|
1371 |
+
_a_wrapper = function() {
|
1372 |
+
scrl.anims.push([$wrp, w_siz]);
|
1373 |
+
};
|
1374 |
+
}
|
1375 |
+
|
1376 |
+
// animate / set items
|
1377 |
+
if (opts.usePadding)
|
1378 |
+
{
|
1379 |
+
var i_new_l_m = i_new_l.data('_cfs_origCssMargin');
|
1380 |
+
|
1381 |
+
if (pR >= 0)
|
1382 |
+
{
|
1383 |
+
i_new_l_m += opts.padding[opts.d[1]];
|
1384 |
+
}
|
1385 |
+
i_new_l.css(opts.d['marginRight'], i_new_l_m);
|
1386 |
+
|
1387 |
+
if (i_cur_l.not(i_old_l).length)
|
1388 |
+
{
|
1389 |
+
a_old[opts.d['marginRight']] = i_old_l.data('_cfs_origCssMargin');
|
1390 |
+
}
|
1391 |
+
_s_paddingold = function() {
|
1392 |
+
i_old_l.css(a_old);
|
1393 |
+
};
|
1394 |
+
_a_paddingold = function() {
|
1395 |
+
scrl.anims.push([i_old_l, a_old]);
|
1396 |
+
};
|
1397 |
+
|
1398 |
+
var i_cur_l_m = i_cur_l.data('_cfs_origCssMargin');
|
1399 |
+
if (pL > 0)
|
1400 |
+
{
|
1401 |
+
i_cur_l_m += opts.padding[opts.d[3]];
|
1402 |
+
}
|
1403 |
+
|
1404 |
+
a_cur[opts.d['marginRight']] = i_cur_l_m;
|
1405 |
+
|
1406 |
+
_s_paddingcur = function() {
|
1407 |
+
i_cur_l.css(a_cur);
|
1408 |
+
};
|
1409 |
+
_a_paddingcur = function() {
|
1410 |
+
scrl.anims.push([i_cur_l, a_cur]);
|
1411 |
+
};
|
1412 |
+
}
|
1413 |
+
|
1414 |
+
// set position
|
1415 |
+
_position = function() {
|
1416 |
+
$cfs.css(a_lef);
|
1417 |
+
};
|
1418 |
+
|
1419 |
+
|
1420 |
+
var overFill = opts.items.visible+nI-itms.total;
|
1421 |
+
|
1422 |
+
// rearrange items
|
1423 |
+
_moveitems = function() {
|
1424 |
+
if (overFill > 0)
|
1425 |
+
{
|
1426 |
+
$cfs.children().slice(itms.total).remove();
|
1427 |
+
}
|
1428 |
+
var l_itm = $cfs.children().slice(0, nI).appendTo($cfs).last();
|
1429 |
+
if (overFill > 0)
|
1430 |
+
{
|
1431 |
+
i_new = gi_getCurrentItems(a_itm, opts);
|
1432 |
+
}
|
1433 |
+
sc_showHiddenItems(hiddenitems);
|
1434 |
+
|
1435 |
+
if (opts.usePadding)
|
1436 |
+
{
|
1437 |
+
if (itms.total < opts.items.visible+nI) {
|
1438 |
+
var i_cur_l = $cfs.children().eq(opts.items.visible-1);
|
1439 |
+
i_cur_l.css(opts.d['marginRight'], i_cur_l.data('_cfs_origCssMargin') + opts.padding[opts.d[1]]);
|
1440 |
+
}
|
1441 |
+
l_itm.css(opts.d['marginRight'], l_itm.data('_cfs_origCssMargin'));
|
1442 |
+
}
|
1443 |
+
};
|
1444 |
+
|
1445 |
+
|
1446 |
+
var cb_arguments = sc_mapCallbackArguments(i_old, i_skp, i_new, nI, 'next', a_dur, w_siz);
|
1447 |
+
|
1448 |
+
// fire onAfter callbacks
|
1449 |
+
_onafter = function() {
|
1450 |
+
$cfs.css('zIndex', $cfs.data('_cfs_origCssZindex'));
|
1451 |
+
sc_afterScroll($cfs, $cf2, sO);
|
1452 |
+
crsl.isScrolling = false;
|
1453 |
+
clbk.onAfter = sc_fireCallbacks($tt0, sO, 'onAfter', cb_arguments, clbk);
|
1454 |
+
queu = sc_fireQueue($cfs, queu, conf);
|
1455 |
+
|
1456 |
+
if (!crsl.isPaused)
|
1457 |
+
{
|
1458 |
+
$cfs.trigger(cf_e('play', conf));
|
1459 |
+
}
|
1460 |
+
};
|
1461 |
+
|
1462 |
+
// fire onBefore callbacks
|
1463 |
+
crsl.isScrolling = true;
|
1464 |
+
tmrs = sc_clearTimers(tmrs);
|
1465 |
+
clbk.onBefore = sc_fireCallbacks($tt0, sO, 'onBefore', cb_arguments, clbk);
|
1466 |
+
|
1467 |
+
switch(sO.fx)
|
1468 |
+
{
|
1469 |
+
case 'none':
|
1470 |
+
$cfs.css(a_cfs);
|
1471 |
+
_s_wrapper();
|
1472 |
+
_s_paddingold();
|
1473 |
+
_s_paddingcur();
|
1474 |
+
_position();
|
1475 |
+
_moveitems();
|
1476 |
+
_onafter();
|
1477 |
+
break;
|
1478 |
+
|
1479 |
+
case 'fade':
|
1480 |
+
scrl.anims.push([$cfs, { 'opacity': 0 }, function() {
|
1481 |
+
_s_wrapper();
|
1482 |
+
_s_paddingold();
|
1483 |
+
_s_paddingcur();
|
1484 |
+
_position();
|
1485 |
+
_moveitems();
|
1486 |
+
scrl = sc_setScroll(a_dur, sO.easing, conf);
|
1487 |
+
scrl.anims.push([$cfs, { 'opacity': 1 }, _onafter]);
|
1488 |
+
sc_startScroll(scrl, conf);
|
1489 |
+
}]);
|
1490 |
+
break;
|
1491 |
+
|
1492 |
+
case 'crossfade':
|
1493 |
+
$cfs.css({ 'opacity': 0 });
|
1494 |
+
scrl.anims.push([$cf2, { 'opacity': 0 }]);
|
1495 |
+
scrl.anims.push([$cfs, { 'opacity': 1 }, _onafter]);
|
1496 |
+
_a_wrapper();
|
1497 |
+
_s_paddingold();
|
1498 |
+
_s_paddingcur();
|
1499 |
+
_position();
|
1500 |
+
_moveitems();
|
1501 |
+
break;
|
1502 |
+
|
1503 |
+
case 'cover':
|
1504 |
+
$cfs.css(opts.d['left'], $wrp[opts.d['width']]());
|
1505 |
+
scrl.anims.push([$cfs, a_lef, _onafter]);
|
1506 |
+
_a_wrapper();
|
1507 |
+
_s_paddingold();
|
1508 |
+
_s_paddingcur();
|
1509 |
+
_moveitems();
|
1510 |
+
break;
|
1511 |
+
|
1512 |
+
case 'cover-fade':
|
1513 |
+
$cfs.css(opts.d['left'], $wrp[opts.d['width']]());
|
1514 |
+
scrl.anims.push([$cf2, { 'opacity': 0 }]);
|
1515 |
+
scrl.anims.push([$cfs, a_lef, _onafter]);
|
1516 |
+
_a_wrapper();
|
1517 |
+
_s_paddingold();
|
1518 |
+
_s_paddingcur();
|
1519 |
+
_moveitems();
|
1520 |
+
break;
|
1521 |
+
|
1522 |
+
case 'uncover':
|
1523 |
+
scrl.anims.push([$cf2, a_cfs_vis, _onafter]);
|
1524 |
+
_a_wrapper();
|
1525 |
+
_s_paddingold();
|
1526 |
+
_s_paddingcur();
|
1527 |
+
_position();
|
1528 |
+
_moveitems();
|
1529 |
+
break;
|
1530 |
+
|
1531 |
+
case 'uncover-fade':
|
1532 |
+
$cfs.css({ 'opacity': 0 });
|
1533 |
+
scrl.anims.push([$cfs, { 'opacity': 1 }]);
|
1534 |
+
scrl.anims.push([$cf2, a_cfs_vis, _onafter]);
|
1535 |
+
_a_wrapper();
|
1536 |
+
_s_paddingold();
|
1537 |
+
_s_paddingcur();
|
1538 |
+
_position();
|
1539 |
+
_moveitems();
|
1540 |
+
break;
|
1541 |
+
|
1542 |
+
default:
|
1543 |
+
scrl.anims.push([$cfs, a_cfs, function() {
|
1544 |
+
_position();
|
1545 |
+
_moveitems();
|
1546 |
+
_onafter();
|
1547 |
+
}]);
|
1548 |
+
_a_wrapper();
|
1549 |
+
_a_paddingold();
|
1550 |
+
_a_paddingcur();
|
1551 |
+
break;
|
1552 |
+
}
|
1553 |
+
|
1554 |
+
sc_startScroll(scrl, conf);
|
1555 |
+
cf_setCookie(opts.cookie, $cfs, conf);
|
1556 |
+
|
1557 |
+
$cfs.trigger(cf_e('updatePageStatus', conf), [false, w_siz]);
|
1558 |
+
|
1559 |
+
return true;
|
1560 |
+
});
|
1561 |
+
|
1562 |
+
|
1563 |
+
// slideTo event
|
1564 |
+
$cfs.bind(cf_e('slideTo', conf), function(e, num, dev, org, obj, dir, clb) {
|
1565 |
+
e.stopPropagation();
|
1566 |
+
|
1567 |
+
var v = [num, dev, org, obj, dir, clb],
|
1568 |
+
t = ['string/number/object', 'number', 'boolean', 'object', 'string', 'function'],
|
1569 |
+
a = cf_sortParams(v, t);
|
1570 |
+
|
1571 |
+
obj = a[3];
|
1572 |
+
dir = a[4];
|
1573 |
+
clb = a[5];
|
1574 |
+
|
1575 |
+
num = gn_getItemIndex(a[0], a[1], a[2], itms, $cfs);
|
1576 |
+
|
1577 |
+
if (num == 0)
|
1578 |
+
{
|
1579 |
+
return false;
|
1580 |
+
}
|
1581 |
+
if (!is_object(obj))
|
1582 |
+
{
|
1583 |
+
obj = false;
|
1584 |
+
}
|
1585 |
+
|
1586 |
+
if (dir != 'prev' && dir != 'next')
|
1587 |
+
{
|
1588 |
+
if (opts.circular)
|
1589 |
+
{
|
1590 |
+
dir = (num <= itms.total / 2) ? 'next' : 'prev';
|
1591 |
+
}
|
1592 |
+
else
|
1593 |
+
{
|
1594 |
+
dir = (itms.first == 0 || itms.first > num) ? 'next' : 'prev';
|
1595 |
+
}
|
1596 |
+
}
|
1597 |
+
|
1598 |
+
if (dir == 'prev')
|
1599 |
+
{
|
1600 |
+
num = itms.total-num;
|
1601 |
+
}
|
1602 |
+
$cfs.trigger(cf_e(dir, conf), [obj, num, clb]);
|
1603 |
+
|
1604 |
+
return true;
|
1605 |
+
});
|
1606 |
+
|
1607 |
+
|
1608 |
+
// prevPage event
|
1609 |
+
$cfs.bind(cf_e('prevPage', conf), function(e, obj, clb) {
|
1610 |
+
e.stopPropagation();
|
1611 |
+
var cur = $cfs.triggerHandler(cf_e('currentPage', conf));
|
1612 |
+
return $cfs.triggerHandler(cf_e('slideToPage', conf), [cur-1, obj, 'prev', clb]);
|
1613 |
+
});
|
1614 |
+
|
1615 |
+
|
1616 |
+
// nextPage event
|
1617 |
+
$cfs.bind(cf_e('nextPage', conf), function(e, obj, clb) {
|
1618 |
+
e.stopPropagation();
|
1619 |
+
var cur = $cfs.triggerHandler(cf_e('currentPage', conf));
|
1620 |
+
return $cfs.triggerHandler(cf_e('slideToPage', conf), [cur+1, obj, 'next', clb]);
|
1621 |
+
});
|
1622 |
+
|
1623 |
+
|
1624 |
+
// slideToPage event
|
1625 |
+
$cfs.bind(cf_e('slideToPage', conf), function(e, pag, obj, dir, clb) {
|
1626 |
+
e.stopPropagation();
|
1627 |
+
if (!is_number(pag))
|
1628 |
+
{
|
1629 |
+
pag = $cfs.triggerHandler(cf_e('currentPage', conf));
|
1630 |
+
}
|
1631 |
+
var ipp = opts.pagination.items || opts.items.visible,
|
1632 |
+
max = Math.ceil(itms.total / ipp)-1;
|
1633 |
+
|
1634 |
+
if (pag < 0)
|
1635 |
+
{
|
1636 |
+
pag = max;
|
1637 |
+
}
|
1638 |
+
if (pag > max)
|
1639 |
+
{
|
1640 |
+
pag = 0;
|
1641 |
+
}
|
1642 |
+
return $cfs.triggerHandler(cf_e('slideTo', conf), [pag*ipp, 0, true, obj, dir, clb]);
|
1643 |
+
});
|
1644 |
+
|
1645 |
+
// jumpToStart event
|
1646 |
+
$cfs.bind(cf_e('jumpToStart', conf), function(e, s) {
|
1647 |
+
e.stopPropagation();
|
1648 |
+
if (s)
|
1649 |
+
{
|
1650 |
+
s = gn_getItemIndex(s, 0, true, itms, $cfs);
|
1651 |
+
}
|
1652 |
+
else
|
1653 |
+
{
|
1654 |
+
s = 0;
|
1655 |
+
}
|
1656 |
+
|
1657 |
+
s += itms.first;
|
1658 |
+
if (s != 0)
|
1659 |
+
{
|
1660 |
+
if (itms.total > 0)
|
1661 |
+
{
|
1662 |
+
while (s > itms.total)
|
1663 |
+
{
|
1664 |
+
s -= itms.total;
|
1665 |
+
}
|
1666 |
+
}
|
1667 |
+
$cfs.prepend($cfs.children().slice(s, itms.total));
|
1668 |
+
}
|
1669 |
+
return true;
|
1670 |
+
});
|
1671 |
+
|
1672 |
+
|
1673 |
+
// synchronise event
|
1674 |
+
$cfs.bind(cf_e('synchronise', conf), function(e, s) {
|
1675 |
+
e.stopPropagation();
|
1676 |
+
if (s)
|
1677 |
+
{
|
1678 |
+
s = cf_getSynchArr(s);
|
1679 |
+
}
|
1680 |
+
else if (opts.synchronise)
|
1681 |
+
{
|
1682 |
+
s = opts.synchronise;
|
1683 |
+
}
|
1684 |
+
else
|
1685 |
+
{
|
1686 |
+
return debug(conf, 'No carousel to synchronise.');
|
1687 |
+
}
|
1688 |
+
|
1689 |
+
var n = $cfs.triggerHandler(cf_e('currentPosition', conf)),
|
1690 |
+
x = true;
|
1691 |
+
|
1692 |
+
for (var j = 0, l = s.length; j < l; j++)
|
1693 |
+
{
|
1694 |
+
if (!s[j][0].triggerHandler(cf_e('slideTo', conf), [n, s[j][3], true]))
|
1695 |
+
{
|
1696 |
+
x = false;
|
1697 |
+
}
|
1698 |
+
}
|
1699 |
+
return x;
|
1700 |
+
});
|
1701 |
+
|
1702 |
+
|
1703 |
+
// queue event
|
1704 |
+
$cfs.bind(cf_e('queue', conf), function(e, dir, opt) {
|
1705 |
+
e.stopPropagation();
|
1706 |
+
if (is_function(dir))
|
1707 |
+
{
|
1708 |
+
dir.call($tt0, queu);
|
1709 |
+
}
|
1710 |
+
else if (is_array(dir))
|
1711 |
+
{
|
1712 |
+
queu = dir;
|
1713 |
+
}
|
1714 |
+
else if (!is_undefined(dir))
|
1715 |
+
{
|
1716 |
+
queu.push([dir, opt]);
|
1717 |
+
}
|
1718 |
+
return queu;
|
1719 |
+
});
|
1720 |
+
|
1721 |
+
|
1722 |
+
// insertItem event
|
1723 |
+
$cfs.bind(cf_e('insertItem', conf), function(e, itm, num, org, dev) {
|
1724 |
+
e.stopPropagation();
|
1725 |
+
|
1726 |
+
var v = [itm, num, org, dev],
|
1727 |
+
t = ['string/object', 'string/number/object', 'boolean', 'number'],
|
1728 |
+
a = cf_sortParams(v, t);
|
1729 |
+
|
1730 |
+
itm = a[0];
|
1731 |
+
num = a[1];
|
1732 |
+
org = a[2];
|
1733 |
+
dev = a[3];
|
1734 |
+
|
1735 |
+
if (is_object(itm) && !is_jquery(itm))
|
1736 |
+
{
|
1737 |
+
itm = $(itm);
|
1738 |
+
}
|
1739 |
+
else if (is_string(itm))
|
1740 |
+
{
|
1741 |
+
itm = $(itm);
|
1742 |
+
}
|
1743 |
+
if (!is_jquery(itm) || itm.length == 0)
|
1744 |
+
{
|
1745 |
+
return debug(conf, 'Not a valid object.');
|
1746 |
+
}
|
1747 |
+
|
1748 |
+
if (is_undefined(num))
|
1749 |
+
{
|
1750 |
+
num = 'end';
|
1751 |
+
}
|
1752 |
+
|
1753 |
+
sz_storeMargin(itm, opts);
|
1754 |
+
sz_storeOrigCss(itm);
|
1755 |
+
|
1756 |
+
var orgNum = num,
|
1757 |
+
before = 'before';
|
1758 |
+
|
1759 |
+
if (num == 'end')
|
1760 |
+
{
|
1761 |
+
if (org)
|
1762 |
+
{
|
1763 |
+
if (itms.first == 0)
|
1764 |
+
{
|
1765 |
+
num = itms.total-1;
|
1766 |
+
before = 'after';
|
1767 |
+
}
|
1768 |
+
else
|
1769 |
+
{
|
1770 |
+
num = itms.first;
|
1771 |
+
itms.first += itm.length;
|
1772 |
+
}
|
1773 |
+
if (num < 0)
|
1774 |
+
{
|
1775 |
+
num = 0;
|
1776 |
+
}
|
1777 |
+
}
|
1778 |
+
else
|
1779 |
+
{
|
1780 |
+
num = itms.total-1;
|
1781 |
+
before = 'after';
|
1782 |
+
}
|
1783 |
+
}
|
1784 |
+
else
|
1785 |
+
{
|
1786 |
+
num = gn_getItemIndex(num, dev, org, itms, $cfs);
|
1787 |
+
}
|
1788 |
+
|
1789 |
+
var $cit = $cfs.children().eq(num);
|
1790 |
+
if ($cit.length)
|
1791 |
+
{
|
1792 |
+
$cit[before](itm);
|
1793 |
+
}
|
1794 |
+
else
|
1795 |
+
{
|
1796 |
+
debug(conf, 'Correct insert-position not found! Appending item to the end.');
|
1797 |
+
$cfs.append(itm);
|
1798 |
+
}
|
1799 |
+
|
1800 |
+
if (orgNum != 'end' && !org)
|
1801 |
+
{
|
1802 |
+
if (num < itms.first)
|
1803 |
+
{
|
1804 |
+
itms.first += itm.length;
|
1805 |
+
}
|
1806 |
+
}
|
1807 |
+
itms.total = $cfs.children().length;
|
1808 |
+
if (itms.first >= itms.total)
|
1809 |
+
{
|
1810 |
+
itms.first -= itms.total;
|
1811 |
+
}
|
1812 |
+
|
1813 |
+
$cfs.trigger(cf_e('updateSizes', conf));
|
1814 |
+
$cfs.trigger(cf_e('linkAnchors', conf));
|
1815 |
+
|
1816 |
+
return true;
|
1817 |
+
});
|
1818 |
+
|
1819 |
+
|
1820 |
+
// removeItem event
|
1821 |
+
$cfs.bind(cf_e('removeItem', conf), function(e, num, org, dev) {
|
1822 |
+
e.stopPropagation();
|
1823 |
+
|
1824 |
+
var v = [num, org, dev],
|
1825 |
+
t = ['string/number/object', 'boolean', 'number'],
|
1826 |
+
a = cf_sortParams(v, t);
|
1827 |
+
|
1828 |
+
num = a[0];
|
1829 |
+
org = a[1];
|
1830 |
+
dev = a[2];
|
1831 |
+
|
1832 |
+
var removed = false;
|
1833 |
+
|
1834 |
+
if (num instanceof $ && num.length > 1)
|
1835 |
+
{
|
1836 |
+
$removed = $();
|
1837 |
+
num.each(function(i, el) {
|
1838 |
+
var $rem = $cfs.trigger(cf_e('removeItem', conf), [$(this), org, dev]);
|
1839 |
+
if ( $rem )
|
1840 |
+
{
|
1841 |
+
$removed = $removed.add($rem);
|
1842 |
+
}
|
1843 |
+
});
|
1844 |
+
return $removed;
|
1845 |
+
}
|
1846 |
+
|
1847 |
+
if (is_undefined(num) || num == 'end')
|
1848 |
+
{
|
1849 |
+
$removed = $cfs.children().last();
|
1850 |
+
}
|
1851 |
+
else
|
1852 |
+
{
|
1853 |
+
num = gn_getItemIndex(num, dev, org, itms, $cfs);
|
1854 |
+
var $removed = $cfs.children().eq(num);
|
1855 |
+
if ( $removed.length )
|
1856 |
+
{
|
1857 |
+
if (num < itms.first)
|
1858 |
+
{
|
1859 |
+
itms.first -= $removed.length;
|
1860 |
+
}
|
1861 |
+
}
|
1862 |
+
}
|
1863 |
+
if ( $removed && $removed.length )
|
1864 |
+
{
|
1865 |
+
$removed.detach();
|
1866 |
+
itms.total = $cfs.children().length;
|
1867 |
+
$cfs.trigger(cf_e('updateSizes', conf));
|
1868 |
+
}
|
1869 |
+
|
1870 |
+
return $removed;
|
1871 |
+
});
|
1872 |
+
|
1873 |
+
|
1874 |
+
// onBefore and onAfter event
|
1875 |
+
$cfs.bind(cf_e('onBefore', conf)+' '+cf_e('onAfter', conf), function(e, fn) {
|
1876 |
+
e.stopPropagation();
|
1877 |
+
var eType = e.type.slice(conf.events.prefix.length);
|
1878 |
+
if (is_array(fn))
|
1879 |
+
{
|
1880 |
+
clbk[eType] = fn;
|
1881 |
+
}
|
1882 |
+
if (is_function(fn))
|
1883 |
+
{
|
1884 |
+
clbk[eType].push(fn);
|
1885 |
+
}
|
1886 |
+
return clbk[eType];
|
1887 |
+
});
|
1888 |
+
|
1889 |
+
|
1890 |
+
// currentPosition event
|
1891 |
+
$cfs.bind(cf_e('currentPosition', conf), function(e, fn) {
|
1892 |
+
e.stopPropagation();
|
1893 |
+
if (itms.first == 0)
|
1894 |
+
{
|
1895 |
+
var val = 0;
|
1896 |
+
}
|
1897 |
+
else
|
1898 |
+
{
|
1899 |
+
var val = itms.total - itms.first;
|
1900 |
+
}
|
1901 |
+
if (is_function(fn))
|
1902 |
+
{
|
1903 |
+
fn.call($tt0, val);
|
1904 |
+
}
|
1905 |
+
return val;
|
1906 |
+
});
|
1907 |
+
|
1908 |
+
|
1909 |
+
// currentPage event
|
1910 |
+
$cfs.bind(cf_e('currentPage', conf), function(e, fn) {
|
1911 |
+
e.stopPropagation();
|
1912 |
+
var ipp = opts.pagination.items || opts.items.visible,
|
1913 |
+
max = Math.ceil(itms.total/ipp-1),
|
1914 |
+
nr;
|
1915 |
+
if (itms.first == 0)
|
1916 |
+
{
|
1917 |
+
nr = 0;
|
1918 |
+
}
|
1919 |
+
else if (itms.first < itms.total % ipp)
|
1920 |
+
{
|
1921 |
+
nr = 0;
|
1922 |
+
}
|
1923 |
+
else if (itms.first == ipp && !opts.circular)
|
1924 |
+
{
|
1925 |
+
nr = max;
|
1926 |
+
}
|
1927 |
+
else
|
1928 |
+
{
|
1929 |
+
nr = Math.round((itms.total-itms.first)/ipp);
|
1930 |
+
}
|
1931 |
+
if (nr < 0)
|
1932 |
+
{
|
1933 |
+
nr = 0;
|
1934 |
+
}
|
1935 |
+
if (nr > max)
|
1936 |
+
{
|
1937 |
+
nr = max;
|
1938 |
+
}
|
1939 |
+
if (is_function(fn))
|
1940 |
+
{
|
1941 |
+
fn.call($tt0, nr);
|
1942 |
+
}
|
1943 |
+
return nr;
|
1944 |
+
});
|
1945 |
+
|
1946 |
+
|
1947 |
+
// currentVisible event
|
1948 |
+
$cfs.bind(cf_e('currentVisible', conf), function(e, fn) {
|
1949 |
+
e.stopPropagation();
|
1950 |
+
var $i = gi_getCurrentItems($cfs.children(), opts);
|
1951 |
+
if (is_function(fn))
|
1952 |
+
{
|
1953 |
+
fn.call($tt0, $i);
|
1954 |
+
}
|
1955 |
+
return $i;
|
1956 |
+
});
|
1957 |
+
|
1958 |
+
|
1959 |
+
// slice event
|
1960 |
+
$cfs.bind(cf_e('slice', conf), function(e, f, l, fn) {
|
1961 |
+
e.stopPropagation();
|
1962 |
+
|
1963 |
+
if (itms.total == 0)
|
1964 |
+
{
|
1965 |
+
return false;
|
1966 |
+
}
|
1967 |
+
|
1968 |
+
var v = [f, l, fn],
|
1969 |
+
t = ['number', 'number', 'function'],
|
1970 |
+
a = cf_sortParams(v, t);
|
1971 |
+
|
1972 |
+
f = (is_number(a[0])) ? a[0] : 0;
|
1973 |
+
l = (is_number(a[1])) ? a[1] : itms.total;
|
1974 |
+
fn = a[2];
|
1975 |
+
|
1976 |
+
f += itms.first;
|
1977 |
+
l += itms.first;
|
1978 |
+
|
1979 |
+
if (items.total > 0)
|
1980 |
+
{
|
1981 |
+
while (f > itms.total)
|
1982 |
+
{
|
1983 |
+
f -= itms.total;
|
1984 |
+
}
|
1985 |
+
while (l > itms.total)
|
1986 |
+
{
|
1987 |
+
l -= itms.total;
|
1988 |
+
}
|
1989 |
+
while (f < 0)
|
1990 |
+
{
|
1991 |
+
f += itms.total;
|
1992 |
+
}
|
1993 |
+
while (l < 0)
|
1994 |
+
{
|
1995 |
+
l += itms.total;
|
1996 |
+
}
|
1997 |
+
}
|
1998 |
+
var $iA = $cfs.children(),
|
1999 |
+
$i;
|
2000 |
+
|
2001 |
+
if (l > f)
|
2002 |
+
{
|
2003 |
+
$i = $iA.slice(f, l);
|
2004 |
+
}
|
2005 |
+
else
|
2006 |
+
{
|
2007 |
+
$i = $( $iA.slice(f, itms.total).get().concat( $iA.slice(0, l).get() ) );
|
2008 |
+
}
|
2009 |
+
|
2010 |
+
if (is_function(fn))
|
2011 |
+
{
|
2012 |
+
fn.call($tt0, $i);
|
2013 |
+
}
|
2014 |
+
return $i;
|
2015 |
+
});
|
2016 |
+
|
2017 |
+
|
2018 |
+
// isPaused, isStopped and isScrolling events
|
2019 |
+
$cfs.bind(cf_e('isPaused', conf)+' '+cf_e('isStopped', conf)+' '+cf_e('isScrolling', conf), function(e, fn) {
|
2020 |
+
e.stopPropagation();
|
2021 |
+
var eType = e.type.slice(conf.events.prefix.length),
|
2022 |
+
value = crsl[eType];
|
2023 |
+
if (is_function(fn))
|
2024 |
+
{
|
2025 |
+
fn.call($tt0, value);
|
2026 |
+
}
|
2027 |
+
return value;
|
2028 |
+
});
|
2029 |
+
|
2030 |
+
|
2031 |
+
// configuration event
|
2032 |
+
$cfs.bind(cf_e('configuration', conf), function(e, a, b, c) {
|
2033 |
+
e.stopPropagation();
|
2034 |
+
var reInit = false;
|
2035 |
+
|
2036 |
+
// return entire configuration-object
|
2037 |
+
if (is_function(a))
|
2038 |
+
{
|
2039 |
+
a.call($tt0, opts);
|
2040 |
+
}
|
2041 |
+
// set multiple options via object
|
2042 |
+
else if (is_object(a))
|
2043 |
+
{
|
2044 |
+
opts_orig = $.extend(true, {}, opts_orig, a);
|
2045 |
+
if (b !== false) reInit = true;
|
2046 |
+
else opts = $.extend(true, {}, opts, a);
|
2047 |
+
|
2048 |
+
}
|
2049 |
+
else if (!is_undefined(a))
|
2050 |
+
{
|
2051 |
+
|
2052 |
+
// callback function for specific option
|
2053 |
+
if (is_function(b))
|
2054 |
+
{
|
2055 |
+
var val = eval('opts.'+a);
|
2056 |
+
if (is_undefined(val))
|
2057 |
+
{
|
2058 |
+
val = '';
|
2059 |
+
}
|
2060 |
+
b.call($tt0, val);
|
2061 |
+
}
|
2062 |
+
// set individual option
|
2063 |
+
else if (!is_undefined(b))
|
2064 |
+
{
|
2065 |
+
if (typeof c !== 'boolean') c = true;
|
2066 |
+
eval('opts_orig.'+a+' = b');
|
2067 |
+
if (c !== false) reInit = true;
|
2068 |
+
else eval('opts.'+a+' = b');
|
2069 |
+
}
|
2070 |
+
// return value for specific option
|
2071 |
+
else
|
2072 |
+
{
|
2073 |
+
return eval('opts.'+a);
|
2074 |
+
}
|
2075 |
+
}
|
2076 |
+
if (reInit)
|
2077 |
+
{
|
2078 |
+
sz_resetMargin($cfs.children(), opts);
|
2079 |
+
FN._init(opts_orig);
|
2080 |
+
FN._bind_buttons();
|
2081 |
+
var sz = sz_setSizes($cfs, opts);
|
2082 |
+
$cfs.trigger(cf_e('updatePageStatus', conf), [true, sz]);
|
2083 |
+
}
|
2084 |
+
return opts;
|
2085 |
+
});
|
2086 |
+
|
2087 |
+
|
2088 |
+
// linkAnchors event
|
2089 |
+
$cfs.bind(cf_e('linkAnchors', conf), function(e, $con, sel) {
|
2090 |
+
e.stopPropagation();
|
2091 |
+
|
2092 |
+
if (is_undefined($con))
|
2093 |
+
{
|
2094 |
+
$con = $('body');
|
2095 |
+
}
|
2096 |
+
else if (is_string($con))
|
2097 |
+
{
|
2098 |
+
$con = $($con);
|
2099 |
+
}
|
2100 |
+
if (!is_jquery($con) || $con.length == 0)
|
2101 |
+
{
|
2102 |
+
return debug(conf, 'Not a valid object.');
|
2103 |
+
}
|
2104 |
+
if (!is_string(sel))
|
2105 |
+
{
|
2106 |
+
sel = 'a.caroufredsel';
|
2107 |
+
}
|
2108 |
+
|
2109 |
+
$con.find(sel).each(function() {
|
2110 |
+
var h = this.hash || '';
|
2111 |
+
if (h.length > 0 && $cfs.children().index($(h)) != -1)
|
2112 |
+
{
|
2113 |
+
$(this).unbind('click').click(function(e) {
|
2114 |
+
e.preventDefault();
|
2115 |
+
$cfs.trigger(cf_e('slideTo', conf), h);
|
2116 |
+
});
|
2117 |
+
}
|
2118 |
+
});
|
2119 |
+
return true;
|
2120 |
+
});
|
2121 |
+
|
2122 |
+
|
2123 |
+
// updatePageStatus event
|
2124 |
+
$cfs.bind(cf_e('updatePageStatus', conf), function(e, build, sizes) {
|
2125 |
+
e.stopPropagation();
|
2126 |
+
if (!opts.pagination.container)
|
2127 |
+
{
|
2128 |
+
return;
|
2129 |
+
}
|
2130 |
+
|
2131 |
+
var ipp = opts.pagination.items || opts.items.visible,
|
2132 |
+
pgs = Math.ceil(itms.total/ipp);
|
2133 |
+
|
2134 |
+
if (build)
|
2135 |
+
{
|
2136 |
+
if (opts.pagination.anchorBuilder)
|
2137 |
+
{
|
2138 |
+
opts.pagination.container.children().remove();
|
2139 |
+
opts.pagination.container.each(function() {
|
2140 |
+
for (var a = 0; a < pgs; a++)
|
2141 |
+
{
|
2142 |
+
var i = $cfs.children().eq( gn_getItemIndex(a*ipp, 0, true, itms, $cfs) );
|
2143 |
+
$(this).append(opts.pagination.anchorBuilder.call(i[0], a+1));
|
2144 |
+
}
|
2145 |
+
});
|
2146 |
+
}
|
2147 |
+
opts.pagination.container.each(function() {
|
2148 |
+
$(this).children().unbind(opts.pagination.event).each(function(a) {
|
2149 |
+
$(this).bind(opts.pagination.event, function(e) {
|
2150 |
+
e.preventDefault();
|
2151 |
+
$cfs.trigger(cf_e('slideTo', conf), [a*ipp, -opts.pagination.deviation, true, opts.pagination]);
|
2152 |
+
});
|
2153 |
+
});
|
2154 |
+
});
|
2155 |
+
}
|
2156 |
+
|
2157 |
+
var selected = $cfs.triggerHandler(cf_e('currentPage', conf)) + opts.pagination.deviation;
|
2158 |
+
if (selected >= pgs)
|
2159 |
+
{
|
2160 |
+
selected = 0;
|
2161 |
+
}
|
2162 |
+
if (selected < 0)
|
2163 |
+
{
|
2164 |
+
selected = pgs-1;
|
2165 |
+
}
|
2166 |
+
opts.pagination.container.each(function() {
|
2167 |
+
$(this).children().removeClass(cf_c('selected', conf)).eq(selected).addClass(cf_c('selected', conf));
|
2168 |
+
});
|
2169 |
+
return true;
|
2170 |
+
});
|
2171 |
+
|
2172 |
+
|
2173 |
+
// updateSizes event
|
2174 |
+
$cfs.bind(cf_e('updateSizes', conf), function(e) {
|
2175 |
+
var vI = opts.items.visible,
|
2176 |
+
a_itm = $cfs.children(),
|
2177 |
+
avail_primary = ms_getParentSize($wrp, opts, 'width');
|
2178 |
+
|
2179 |
+
itms.total = a_itm.length;
|
2180 |
+
|
2181 |
+
if (crsl.primarySizePercentage)
|
2182 |
+
{
|
2183 |
+
opts.maxDimension = avail_primary;
|
2184 |
+
opts[opts.d['width']] = ms_getPercentage(avail_primary, crsl.primarySizePercentage);
|
2185 |
+
}
|
2186 |
+
else
|
2187 |
+
{
|
2188 |
+
opts.maxDimension = ms_getMaxDimension(opts, avail_primary);
|
2189 |
+
}
|
2190 |
+
|
2191 |
+
if (opts.responsive)
|
2192 |
+
{
|
2193 |
+
opts.items.width = opts.items.sizesConf.width;
|
2194 |
+
opts.items.height = opts.items.sizesConf.height;
|
2195 |
+
opts = in_getResponsiveValues(opts, a_itm, avail_primary);
|
2196 |
+
vI = opts.items.visible;
|
2197 |
+
sz_setResponsiveSizes(opts, a_itm);
|
2198 |
+
}
|
2199 |
+
else if (opts.items.visibleConf.variable)
|
2200 |
+
{
|
2201 |
+
vI = gn_getVisibleItemsNext(a_itm, opts, 0);
|
2202 |
+
}
|
2203 |
+
else if (opts.items.filter != '*')
|
2204 |
+
{
|
2205 |
+
vI = gn_getVisibleItemsNextFilter(a_itm, opts, 0);
|
2206 |
+
}
|
2207 |
+
|
2208 |
+
if (!opts.circular && itms.first != 0 && vI > itms.first) {
|
2209 |
+
if (opts.items.visibleConf.variable)
|
2210 |
+
{
|
2211 |
+
var nI = gn_getVisibleItemsPrev(a_itm, opts, itms.first) - itms.first;
|
2212 |
+
}
|
2213 |
+
else if (opts.items.filter != '*')
|
2214 |
+
{
|
2215 |
+
var nI = gn_getVisibleItemsPrevFilter(a_itm, opts, itms.first) - itms.first;
|
2216 |
+
}
|
2217 |
+
else
|
2218 |
+
{
|
2219 |
+
var nI = opts.items.visible - itms.first;
|
2220 |
+
}
|
2221 |
+
debug(conf, 'Preventing non-circular: sliding '+nI+' items backward.');
|
2222 |
+
$cfs.trigger(cf_e('prev', conf), nI);
|
2223 |
+
}
|
2224 |
+
|
2225 |
+
opts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0);
|
2226 |
+
opts.items.visibleConf.old = opts.items.visible;
|
2227 |
+
opts = in_getAlignPadding(opts, a_itm);
|
2228 |
+
|
2229 |
+
var sz = sz_setSizes($cfs, opts);
|
2230 |
+
$cfs.trigger(cf_e('updatePageStatus', conf), [true, sz]);
|
2231 |
+
nv_showNavi(opts, itms.total, conf);
|
2232 |
+
nv_enableNavi(opts, itms.first, conf);
|
2233 |
+
|
2234 |
+
return sz;
|
2235 |
+
});
|
2236 |
+
|
2237 |
+
|
2238 |
+
// destroy event
|
2239 |
+
$cfs.bind(cf_e('destroy', conf), function(e, orgOrder) {
|
2240 |
+
e.stopPropagation();
|
2241 |
+
tmrs = sc_clearTimers(tmrs);
|
2242 |
+
|
2243 |
+
$cfs.data('_cfs_isCarousel', false);
|
2244 |
+
$cfs.trigger(cf_e('finish', conf));
|
2245 |
+
if (orgOrder)
|
2246 |
+
{
|
2247 |
+
$cfs.trigger(cf_e('jumpToStart', conf));
|
2248 |
+
}
|
2249 |
+
sz_restoreOrigCss($cfs.children());
|
2250 |
+
sz_restoreOrigCss($cfs);
|
2251 |
+
FN._unbind_events();
|
2252 |
+
FN._unbind_buttons();
|
2253 |
+
if (conf.wrapper == 'parent')
|
2254 |
+
{
|
2255 |
+
sz_restoreOrigCss($wrp);
|
2256 |
+
}
|
2257 |
+
else
|
2258 |
+
{
|
2259 |
+
$wrp.replaceWith($cfs);
|
2260 |
+
}
|
2261 |
+
|
2262 |
+
return true;
|
2263 |
+
});
|
2264 |
+
|
2265 |
+
|
2266 |
+
// debug event
|
2267 |
+
$cfs.bind(cf_e('debug', conf), function(e) {
|
2268 |
+
debug(conf, 'Carousel width: ' + opts.width);
|
2269 |
+
debug(conf, 'Carousel height: ' + opts.height);
|
2270 |
+
debug(conf, 'Item widths: ' + opts.items.width);
|
2271 |
+
debug(conf, 'Item heights: ' + opts.items.height);
|
2272 |
+
debug(conf, 'Number of items visible: ' + opts.items.visible);
|
2273 |
+
if (opts.auto.play)
|
2274 |
+
{
|
2275 |
+
debug(conf, 'Number of items scrolled automatically: ' + opts.auto.items);
|
2276 |
+
}
|
2277 |
+
if (opts.prev.button)
|
2278 |
+
{
|
2279 |
+
debug(conf, 'Number of items scrolled backward: ' + opts.prev.items);
|
2280 |
+
}
|
2281 |
+
if (opts.next.button)
|
2282 |
+
{
|
2283 |
+
debug(conf, 'Number of items scrolled forward: ' + opts.next.items);
|
2284 |
+
}
|
2285 |
+
return conf.debug;
|
2286 |
+
});
|
2287 |
+
|
2288 |
+
|
2289 |
+
// triggerEvent, making prefixed and namespaced events accessible from outside
|
2290 |
+
$cfs.bind('_cfs_triggerEvent', function(e, n, o) {
|
2291 |
+
e.stopPropagation();
|
2292 |
+
return $cfs.triggerHandler(cf_e(n, conf), o);
|
2293 |
+
});
|
2294 |
+
}; // /bind_events
|
2295 |
+
|
2296 |
+
|
2297 |
+
FN._unbind_events = function() {
|
2298 |
+
$cfs.unbind(cf_e('', conf));
|
2299 |
+
$cfs.unbind(cf_e('', conf, false));
|
2300 |
+
$cfs.unbind('_cfs_triggerEvent');
|
2301 |
+
}; // /unbind_events
|
2302 |
+
|
2303 |
+
|
2304 |
+
FN._bind_buttons = function() {
|
2305 |
+
FN._unbind_buttons();
|
2306 |
+
nv_showNavi(opts, itms.total, conf);
|
2307 |
+
nv_enableNavi(opts, itms.first, conf);
|
2308 |
+
|
2309 |
+
if (opts.auto.pauseOnHover)
|
2310 |
+
{
|
2311 |
+
var pC = bt_pauseOnHoverConfig(opts.auto.pauseOnHover);
|
2312 |
+
$wrp.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); })
|
2313 |
+
.bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); });
|
2314 |
+
}
|
2315 |
+
|
2316 |
+
// play button
|
2317 |
+
if (opts.auto.button)
|
2318 |
+
{
|
2319 |
+
opts.auto.button.bind(cf_e(opts.auto.event, conf, false), function(e) {
|
2320 |
+
e.preventDefault();
|
2321 |
+
var ev = false,
|
2322 |
+
pC = null;
|
2323 |
+
|
2324 |
+
if (crsl.isPaused)
|
2325 |
+
{
|
2326 |
+
ev = 'play';
|
2327 |
+
}
|
2328 |
+
else if (opts.auto.pauseOnEvent)
|
2329 |
+
{
|
2330 |
+
ev = 'pause';
|
2331 |
+
pC = bt_pauseOnHoverConfig(opts.auto.pauseOnEvent);
|
2332 |
+
}
|
2333 |
+
if (ev)
|
2334 |
+
{
|
2335 |
+
$cfs.trigger(cf_e(ev, conf), pC);
|
2336 |
+
}
|
2337 |
+
});
|
2338 |
+
}
|
2339 |
+
|
2340 |
+
// prev button
|
2341 |
+
if (opts.prev.button)
|
2342 |
+
{
|
2343 |
+
opts.prev.button.bind(cf_e(opts.prev.event, conf, false), function(e) {
|
2344 |
+
e.preventDefault();
|
2345 |
+
$cfs.trigger(cf_e('prev', conf));
|
2346 |
+
});
|
2347 |
+
if (opts.prev.pauseOnHover)
|
2348 |
+
{
|
2349 |
+
var pC = bt_pauseOnHoverConfig(opts.prev.pauseOnHover);
|
2350 |
+
opts.prev.button.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); })
|
2351 |
+
.bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); });
|
2352 |
+
}
|
2353 |
+
}
|
2354 |
+
|
2355 |
+
// next butotn
|
2356 |
+
if (opts.next.button)
|
2357 |
+
{
|
2358 |
+
opts.next.button.bind(cf_e(opts.next.event, conf, false), function(e) {
|
2359 |
+
e.preventDefault();
|
2360 |
+
$cfs.trigger(cf_e('next', conf));
|
2361 |
+
});
|
2362 |
+
if (opts.next.pauseOnHover)
|
2363 |
+
{
|
2364 |
+
var pC = bt_pauseOnHoverConfig(opts.next.pauseOnHover);
|
2365 |
+
opts.next.button.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); })
|
2366 |
+
.bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); });
|
2367 |
+
}
|
2368 |
+
}
|
2369 |
+
|
2370 |
+
// pagination
|
2371 |
+
if (opts.pagination.container)
|
2372 |
+
{
|
2373 |
+
if (opts.pagination.pauseOnHover)
|
2374 |
+
{
|
2375 |
+
var pC = bt_pauseOnHoverConfig(opts.pagination.pauseOnHover);
|
2376 |
+
opts.pagination.container.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); })
|
2377 |
+
.bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); });
|
2378 |
+
}
|
2379 |
+
}
|
2380 |
+
|
2381 |
+
// prev/next keys
|
2382 |
+
if (opts.prev.key || opts.next.key)
|
2383 |
+
{
|
2384 |
+
$(document).bind(cf_e('keyup', conf, false, true, true), function(e) {
|
2385 |
+
var k = e.keyCode;
|
2386 |
+
if (k == opts.next.key)
|
2387 |
+
{
|
2388 |
+
e.preventDefault();
|
2389 |
+
$cfs.trigger(cf_e('next', conf));
|
2390 |
+
}
|
2391 |
+
if (k == opts.prev.key)
|
2392 |
+
{
|
2393 |
+
e.preventDefault();
|
2394 |
+
$cfs.trigger(cf_e('prev', conf));
|
2395 |
+
}
|
2396 |
+
});
|
2397 |
+
}
|
2398 |
+
|
2399 |
+
// pagination keys
|
2400 |
+
if (opts.pagination.keys)
|
2401 |
+
{
|
2402 |
+
$(document).bind(cf_e('keyup', conf, false, true, true), function(e) {
|
2403 |
+
var k = e.keyCode;
|
2404 |
+
if (k >= 49 && k < 58)
|
2405 |
+
{
|
2406 |
+
k = (k-49) * opts.items.visible;
|
2407 |
+
if (k <= itms.total)
|
2408 |
+
{
|
2409 |
+
e.preventDefault();
|
2410 |
+
$cfs.trigger(cf_e('slideTo', conf), [k, 0, true, opts.pagination]);
|
2411 |
+
}
|
2412 |
+
}
|
2413 |
+
});
|
2414 |
+
}
|
2415 |
+
|
2416 |
+
// swipe
|
2417 |
+
if ($.fn.swipe)
|
2418 |
+
{
|
2419 |
+
var isTouch = 'ontouchstart' in window;
|
2420 |
+
if ((isTouch && opts.swipe.onTouch) || (!isTouch && opts.swipe.onMouse))
|
2421 |
+
{
|
2422 |
+
var scP = $.extend(true, {}, opts.prev, opts.swipe),
|
2423 |
+
scN = $.extend(true, {}, opts.next, opts.swipe),
|
2424 |
+
swP = function() { $cfs.trigger(cf_e('prev', conf), [scP]) },
|
2425 |
+
swN = function() { $cfs.trigger(cf_e('next', conf), [scN]) };
|
2426 |
+
|
2427 |
+
switch (opts.direction)
|
2428 |
+
{
|
2429 |
+
case 'up':
|
2430 |
+
case 'down':
|
2431 |
+
opts.swipe.options.swipeUp = swN;
|
2432 |
+
opts.swipe.options.swipeDown = swP;
|
2433 |
+
break;
|
2434 |
+
default:
|
2435 |
+
opts.swipe.options.swipeLeft = swN;
|
2436 |
+
opts.swipe.options.swipeRight = swP;
|
2437 |
+
}
|
2438 |
+
if (crsl.swipe)
|
2439 |
+
{
|
2440 |
+
$cfs.swipe('destroy');
|
2441 |
+
}
|
2442 |
+
$wrp.swipe(opts.swipe.options);
|
2443 |
+
$wrp.css('cursor', 'move');
|
2444 |
+
crsl.swipe = true;
|
2445 |
+
}
|
2446 |
+
}
|
2447 |
+
|
2448 |
+
// mousewheel
|
2449 |
+
if ($.fn.mousewheel)
|
2450 |
+
{
|
2451 |
+
|
2452 |
+
if (opts.mousewheel)
|
2453 |
+
{
|
2454 |
+
var mcP = $.extend(true, {}, opts.prev, opts.mousewheel),
|
2455 |
+
mcN = $.extend(true, {}, opts.next, opts.mousewheel);
|
2456 |
+
|
2457 |
+
if (crsl.mousewheel)
|
2458 |
+
{
|
2459 |
+
$wrp.unbind(cf_e('mousewheel', conf, false));
|
2460 |
+
}
|
2461 |
+
$wrp.bind(cf_e('mousewheel', conf, false), function(e, delta) {
|
2462 |
+
e.preventDefault();
|
2463 |
+
if (delta > 0)
|
2464 |
+
{
|
2465 |
+
$cfs.trigger(cf_e('prev', conf), [mcP]);
|
2466 |
+
}
|
2467 |
+
else
|
2468 |
+
{
|
2469 |
+
$cfs.trigger(cf_e('next', conf), [mcN]);
|
2470 |
+
}
|
2471 |
+
});
|
2472 |
+
crsl.mousewheel = true;
|
2473 |
+
}
|
2474 |
+
}
|
2475 |
+
|
2476 |
+
if (opts.auto.play)
|
2477 |
+
{
|
2478 |
+
$cfs.trigger(cf_e('play', conf), opts.auto.delay);
|
2479 |
+
}
|
2480 |
+
|
2481 |
+
if (crsl.upDateOnWindowResize)
|
2482 |
+
{
|
2483 |
+
var resizeFn = function(e) {
|
2484 |
+
$cfs.trigger(cf_e('finish', conf));
|
2485 |
+
if (opts.auto.pauseOnResize && !crsl.isPaused)
|
2486 |
+
{
|
2487 |
+
$cfs.trigger(cf_e('play', conf));
|
2488 |
+
}
|
2489 |
+
sz_resetMargin($cfs.children(), opts);
|
2490 |
+
$cfs.trigger(cf_e('updateSizes', conf));
|
2491 |
+
};
|
2492 |
+
|
2493 |
+
var $w = $(window),
|
2494 |
+
onResize = null;
|
2495 |
+
|
2496 |
+
if ($.debounce && conf.onWindowResize == 'debounce')
|
2497 |
+
{
|
2498 |
+
onResize = $.debounce(200, resizeFn);
|
2499 |
+
}
|
2500 |
+
else if ($.throttle && conf.onWindowResize == 'throttle')
|
2501 |
+
{
|
2502 |
+
onResize = $.throttle(300, resizeFn);
|
2503 |
+
}
|
2504 |
+
else
|
2505 |
+
{
|
2506 |
+
var _windowWidth = 0,
|
2507 |
+
_windowHeight = 0;
|
2508 |
+
|
2509 |
+
onResize = function() {
|
2510 |
+
var nw = $w.width(),
|
2511 |
+
nh = $w.height();
|
2512 |
+
|
2513 |
+
if (nw != _windowWidth || nh != _windowHeight)
|
2514 |
+
{
|
2515 |
+
resizeFn();
|
2516 |
+
_windowWidth = nw;
|
2517 |
+
_windowHeight = nh;
|
2518 |
+
}
|
2519 |
+
};
|
2520 |
+
}
|
2521 |
+
$w.bind(cf_e('resize', conf, false, true, true), onResize);
|
2522 |
+
}
|
2523 |
+
}; // /bind_buttons
|
2524 |
+
|
2525 |
+
|
2526 |
+
FN._unbind_buttons = function() {
|
2527 |
+
var ns1 = cf_e('', conf),
|
2528 |
+
ns2 = cf_e('', conf, false);
|
2529 |
+
ns3 = cf_e('', conf, false, true, true);
|
2530 |
+
|
2531 |
+
$(document).unbind(ns3);
|
2532 |
+
$(window).unbind(ns3);
|
2533 |
+
$wrp.unbind(ns2);
|
2534 |
+
|
2535 |
+
if (opts.auto.button)
|
2536 |
+
{
|
2537 |
+
opts.auto.button.unbind(ns2);
|
2538 |
+
}
|
2539 |
+
if (opts.prev.button)
|
2540 |
+
{
|
2541 |
+
opts.prev.button.unbind(ns2);
|
2542 |
+
}
|
2543 |
+
if (opts.next.button)
|
2544 |
+
{
|
2545 |
+
opts.next.button.unbind(ns2);
|
2546 |
+
}
|
2547 |
+
if (opts.pagination.container)
|
2548 |
+
{
|
2549 |
+
opts.pagination.container.unbind(ns2);
|
2550 |
+
if (opts.pagination.anchorBuilder)
|
2551 |
+
{
|
2552 |
+
opts.pagination.container.children().remove();
|
2553 |
+
}
|
2554 |
+
}
|
2555 |
+
if (crsl.swipe)
|
2556 |
+
{
|
2557 |
+
$cfs.swipe('destroy');
|
2558 |
+
$wrp.css('cursor', 'default');
|
2559 |
+
crsl.swipe = false;
|
2560 |
+
}
|
2561 |
+
if (crsl.mousewheel)
|
2562 |
+
{
|
2563 |
+
crsl.mousewheel = false;
|
2564 |
+
}
|
2565 |
+
|
2566 |
+
nv_showNavi(opts, 'hide', conf);
|
2567 |
+
nv_enableNavi(opts, 'removeClass', conf);
|
2568 |
+
|
2569 |
+
}; // /unbind_buttons
|
2570 |
+
|
2571 |
+
|
2572 |
+
|
2573 |
+
// START
|
2574 |
+
|
2575 |
+
if (is_boolean(configs))
|
2576 |
+
{
|
2577 |
+
configs = {
|
2578 |
+
'debug': configs
|
2579 |
+
};
|
2580 |
+
}
|
2581 |
+
|
2582 |
+
// set vars
|
2583 |
+
var crsl = {
|
2584 |
+
'direction' : 'next',
|
2585 |
+
'isPaused' : true,
|
2586 |
+
'isScrolling' : false,
|
2587 |
+
'isStopped' : false,
|
2588 |
+
'mousewheel' : false,
|
2589 |
+
'swipe' : false
|
2590 |
+
},
|
2591 |
+
itms = {
|
2592 |
+
'total' : $cfs.children().length,
|
2593 |
+
'first' : 0
|
2594 |
+
},
|
2595 |
+
tmrs = {
|
2596 |
+
'auto' : null,
|
2597 |
+
'progress' : null,
|
2598 |
+
'startTime' : getTime(),
|
2599 |
+
'timePassed' : 0
|
2600 |
+
},
|
2601 |
+
scrl = {
|
2602 |
+
'isStopped' : false,
|
2603 |
+
'duration' : 0,
|
2604 |
+
'startTime' : 0,
|
2605 |
+
'easing' : '',
|
2606 |
+
'anims' : []
|
2607 |
+
},
|
2608 |
+
clbk = {
|
2609 |
+
'onBefore' : [],
|
2610 |
+
'onAfter' : []
|
2611 |
+
},
|
2612 |
+
queu = [],
|
2613 |
+
conf = $.extend(true, {}, $.fn.carouFredSel.configs, configs),
|
2614 |
+
opts = {},
|
2615 |
+
opts_orig = $.extend(true, {}, options),
|
2616 |
+
$wrp = (conf.wrapper == 'parent')
|
2617 |
+
? $cfs.parent()
|
2618 |
+
: $cfs.wrap('<'+conf.wrapper.element+' class="'+conf.wrapper.classname+'" />').parent();
|
2619 |
+
|
2620 |
+
|
2621 |
+
conf.selector = $cfs.selector;
|
2622 |
+
conf.serialNumber = $.fn.carouFredSel.serialNumber++;
|
2623 |
+
|
2624 |
+
conf.transition = (conf.transition && $.fn.transition) ? 'transition' : 'animate';
|
2625 |
+
|
2626 |
+
// create carousel
|
2627 |
+
FN._init(opts_orig, true, starting_position);
|
2628 |
+
FN._build();
|
2629 |
+
FN._bind_events();
|
2630 |
+
FN._bind_buttons();
|
2631 |
+
|
2632 |
+
// find item to start
|
2633 |
+
if (is_array(opts.items.start))
|
2634 |
+
{
|
2635 |
+
var start_arr = opts.items.start;
|
2636 |
+
}
|
2637 |
+
else
|
2638 |
+
{
|
2639 |
+
var start_arr = [];
|
2640 |
+
if (opts.items.start != 0)
|
2641 |
+
{
|
2642 |
+
start_arr.push(opts.items.start);
|
2643 |
+
}
|
2644 |
+
}
|
2645 |
+
if (opts.cookie)
|
2646 |
+
{
|
2647 |
+
start_arr.unshift(parseInt(cf_getCookie(opts.cookie), 10));
|
2648 |
+
}
|
2649 |
+
|
2650 |
+
if (start_arr.length > 0)
|
2651 |
+
{
|
2652 |
+
for (var a = 0, l = start_arr.length; a < l; a++)
|
2653 |
+
{
|
2654 |
+
var s = start_arr[a];
|
2655 |
+
if (s == 0)
|
2656 |
+
{
|
2657 |
+
continue;
|
2658 |
+
}
|
2659 |
+
if (s === true)
|
2660 |
+
{
|
2661 |
+
s = window.location.hash;
|
2662 |
+
if (s.length < 1)
|
2663 |
+
{
|
2664 |
+
continue;
|
2665 |
+
}
|
2666 |
+
}
|
2667 |
+
else if (s === 'random')
|
2668 |
+
{
|
2669 |
+
s = Math.floor(Math.random()*itms.total);
|
2670 |
+
}
|
2671 |
+
if ($cfs.triggerHandler(cf_e('slideTo', conf), [s, 0, true, { fx: 'none' }]))
|
2672 |
+
{
|
2673 |
+
break;
|
2674 |
+
}
|
2675 |
+
}
|
2676 |
+
}
|
2677 |
+
var siz = sz_setSizes($cfs, opts),
|
2678 |
+
itm = gi_getCurrentItems($cfs.children(), opts);
|
2679 |
+
|
2680 |
+
if (opts.onCreate)
|
2681 |
+
{
|
2682 |
+
opts.onCreate.call($tt0, {
|
2683 |
+
'width': siz.width,
|
2684 |
+
'height': siz.height,
|
2685 |
+
'items': itm
|
2686 |
+
});
|
2687 |
+
}
|
2688 |
+
|
2689 |
+
$cfs.trigger(cf_e('updatePageStatus', conf), [true, siz]);
|
2690 |
+
$cfs.trigger(cf_e('linkAnchors', conf));
|
2691 |
+
|
2692 |
+
if (conf.debug)
|
2693 |
+
{
|
2694 |
+
$cfs.trigger(cf_e('debug', conf));
|
2695 |
+
}
|
2696 |
+
|
2697 |
+
return $cfs;
|
2698 |
+
};
|
2699 |
+
|
2700 |
+
|
2701 |
+
|
2702 |
+
// GLOBAL PUBLIC
|
2703 |
+
|
2704 |
+
$.fn.carouFredSel.serialNumber = 1;
|
2705 |
+
$.fn.carouFredSel.defaults = {
|
2706 |
+
'synchronise' : false,
|
2707 |
+
'infinite' : true,
|
2708 |
+
'circular' : true,
|
2709 |
+
'responsive' : false,
|
2710 |
+
'direction' : 'left',
|
2711 |
+
'items' : {
|
2712 |
+
'start' : 0
|
2713 |
+
},
|
2714 |
+
'scroll' : {
|
2715 |
+
'easing' : 'swing',
|
2716 |
+
'duration' : 500,
|
2717 |
+
'pauseOnHover' : false,
|
2718 |
+
'event' : 'click',
|
2719 |
+
'queue' : false
|
2720 |
+
}
|
2721 |
+
};
|
2722 |
+
$.fn.carouFredSel.configs = {
|
2723 |
+
'debug' : false,
|
2724 |
+
'transition' : false,
|
2725 |
+
'onWindowResize': 'throttle',
|
2726 |
+
'events' : {
|
2727 |
+
'prefix' : '',
|
2728 |
+
'namespace' : 'cfs'
|
2729 |
+
},
|
2730 |
+
'wrapper' : {
|
2731 |
+
'element' : 'div',
|
2732 |
+
'classname' : 'caroufredsel_wrapper'
|
2733 |
+
},
|
2734 |
+
'classnames' : {}
|
2735 |
+
};
|
2736 |
+
$.fn.carouFredSel.pageAnchorBuilder = function(nr) {
|
2737 |
+
return '<a href="#"><span>'+nr+'</span></a>';
|
2738 |
+
};
|
2739 |
+
$.fn.carouFredSel.progressbarUpdater = function(perc) {
|
2740 |
+
$(this).css('width', perc+'%');
|
2741 |
+
};
|
2742 |
+
|
2743 |
+
$.fn.carouFredSel.cookie = {
|
2744 |
+
get: function(n) {
|
2745 |
+
n += '=';
|
2746 |
+
var ca = document.cookie.split(';');
|
2747 |
+
for (var a = 0, l = ca.length; a < l; a++)
|
2748 |
+
{
|
2749 |
+
var c = ca[a];
|
2750 |
+
while (c.charAt(0) == ' ')
|
2751 |
+
{
|
2752 |
+
c = c.slice(1);
|
2753 |
+
}
|
2754 |
+
if (c.indexOf(n) == 0)
|
2755 |
+
{
|
2756 |
+
return c.slice(n.length);
|
2757 |
+
}
|
2758 |
+
}
|
2759 |
+
return 0;
|
2760 |
+
},
|
2761 |
+
set: function(n, v, d) {
|
2762 |
+
var e = "";
|
2763 |
+
if (d)
|
2764 |
+
{
|
2765 |
+
var date = new Date();
|
2766 |
+
date.setTime(date.getTime() + (d * 24 * 60 * 60 * 1000));
|
2767 |
+
e = "; expires=" + date.toGMTString();
|
2768 |
+
}
|
2769 |
+
document.cookie = n + '=' + v + e + '; path=/';
|
2770 |
+
},
|
2771 |
+
remove: function(n) {
|
2772 |
+
$.fn.carouFredSel.cookie.set(n, "", -1);
|
2773 |
+
}
|
2774 |
+
};
|
2775 |
+
|
2776 |
+
|
2777 |
+
// GLOBAL PRIVATE
|
2778 |
+
|
2779 |
+
// scrolling functions
|
2780 |
+
function sc_setScroll(d, e, c) {
|
2781 |
+
if (c.transition == 'transition')
|
2782 |
+
{
|
2783 |
+
if (e == 'swing')
|
2784 |
+
{
|
2785 |
+
e = 'ease';
|
2786 |
+
}
|
2787 |
+
}
|
2788 |
+
return {
|
2789 |
+
anims: [],
|
2790 |
+
duration: d,
|
2791 |
+
orgDuration: d,
|
2792 |
+
easing: e,
|
2793 |
+
startTime: getTime()
|
2794 |
+
};
|
2795 |
+
}
|
2796 |
+
function sc_startScroll(s, c) {
|
2797 |
+
for (var a = 0, l = s.anims.length; a < l; a++)
|
2798 |
+
{
|
2799 |
+
var b = s.anims[a];
|
2800 |
+
if (!b)
|
2801 |
+
{
|
2802 |
+
continue;
|
2803 |
+
}
|
2804 |
+
b[0][c.transition](b[1], s.duration, s.easing, b[2]);
|
2805 |
+
}
|
2806 |
+
}
|
2807 |
+
function sc_stopScroll(s, finish) {
|
2808 |
+
if (!is_boolean(finish))
|
2809 |
+
{
|
2810 |
+
finish = true;
|
2811 |
+
}
|
2812 |
+
if (is_object(s.pre))
|
2813 |
+
{
|
2814 |
+
sc_stopScroll(s.pre, finish);
|
2815 |
+
}
|
2816 |
+
for (var a = 0, l = s.anims.length; a < l; a++)
|
2817 |
+
{
|
2818 |
+
var b = s.anims[a];
|
2819 |
+
b[0].stop(true);
|
2820 |
+
if (finish)
|
2821 |
+
{
|
2822 |
+
b[0].css(b[1]);
|
2823 |
+
if (is_function(b[2]))
|
2824 |
+
{
|
2825 |
+
b[2]();
|
2826 |
+
}
|
2827 |
+
}
|
2828 |
+
}
|
2829 |
+
if (is_object(s.post))
|
2830 |
+
{
|
2831 |
+
sc_stopScroll(s.post, finish);
|
2832 |
+
}
|
2833 |
+
}
|
2834 |
+
function sc_afterScroll( $c, $c2, o ) {
|
2835 |
+
if ($c2)
|
2836 |
+
{
|
2837 |
+
$c2.remove();
|
2838 |
+
}
|
2839 |
+
|
2840 |
+
switch(o.fx) {
|
2841 |
+
case 'fade':
|
2842 |
+
case 'crossfade':
|
2843 |
+
case 'cover-fade':
|
2844 |
+
case 'uncover-fade':
|
2845 |
+
$c.css('opacity', 1);
|
2846 |
+
$c.css('filter', '');
|
2847 |
+
break;
|
2848 |
+
}
|
2849 |
+
}
|
2850 |
+
function sc_fireCallbacks($t, o, b, a, c) {
|
2851 |
+
if (o[b])
|
2852 |
+
{
|
2853 |
+
o[b].call($t, a);
|
2854 |
+
}
|
2855 |
+
if (c[b].length)
|
2856 |
+
{
|
2857 |
+
for (var i = 0, l = c[b].length; i < l; i++)
|
2858 |
+
{
|
2859 |
+
c[b][i].call($t, a);
|
2860 |
+
}
|
2861 |
+
}
|
2862 |
+
return [];
|
2863 |
+
}
|
2864 |
+
function sc_fireQueue($c, q, c) {
|
2865 |
+
|
2866 |
+
if (q.length)
|
2867 |
+
{
|
2868 |
+
$c.trigger(cf_e(q[0][0], c), q[0][1]);
|
2869 |
+
q.shift();
|
2870 |
+
}
|
2871 |
+
return q;
|
2872 |
+
}
|
2873 |
+
function sc_hideHiddenItems(hiddenitems) {
|
2874 |
+
hiddenitems.each(function() {
|
2875 |
+
var hi = $(this);
|
2876 |
+
hi.data('_cfs_isHidden', hi.is(':hidden')).hide();
|
2877 |
+
});
|
2878 |
+
}
|
2879 |
+
function sc_showHiddenItems(hiddenitems) {
|
2880 |
+
if (hiddenitems)
|
2881 |
+
{
|
2882 |
+
hiddenitems.each(function() {
|
2883 |
+
var hi = $(this);
|
2884 |
+
if (!hi.data('_cfs_isHidden'))
|
2885 |
+
{
|
2886 |
+
hi.show();
|
2887 |
+
}
|
2888 |
+
});
|
2889 |
+
}
|
2890 |
+
}
|
2891 |
+
function sc_clearTimers(t) {
|
2892 |
+
if (t.auto)
|
2893 |
+
{
|
2894 |
+
clearTimeout(t.auto);
|
2895 |
+
}
|
2896 |
+
if (t.progress)
|
2897 |
+
{
|
2898 |
+
clearInterval(t.progress);
|
2899 |
+
}
|
2900 |
+
return t;
|
2901 |
+
}
|
2902 |
+
function sc_mapCallbackArguments(i_old, i_skp, i_new, s_itm, s_dir, s_dur, w_siz) {
|
2903 |
+
return {
|
2904 |
+
'width': w_siz.width,
|
2905 |
+
'height': w_siz.height,
|
2906 |
+
'items': {
|
2907 |
+
'old': i_old,
|
2908 |
+
'skipped': i_skp,
|
2909 |
+
'visible': i_new
|
2910 |
+
},
|
2911 |
+
'scroll': {
|
2912 |
+
'items': s_itm,
|
2913 |
+
'direction': s_dir,
|
2914 |
+
'duration': s_dur
|
2915 |
+
}
|
2916 |
+
};
|
2917 |
+
}
|
2918 |
+
function sc_getDuration( sO, o, nI, siz ) {
|
2919 |
+
var dur = sO.duration;
|
2920 |
+
if (sO.fx == 'none')
|
2921 |
+
{
|
2922 |
+
return 0;
|
2923 |
+
}
|
2924 |
+
if (dur == 'auto')
|
2925 |
+
{
|
2926 |
+
dur = o.scroll.duration / o.scroll.items * nI;
|
2927 |
+
}
|
2928 |
+
else if (dur < 10)
|
2929 |
+
{
|
2930 |
+
dur = siz / dur;
|
2931 |
+
}
|
2932 |
+
if (dur < 1)
|
2933 |
+
{
|
2934 |
+
return 0;
|
2935 |
+
}
|
2936 |
+
if (sO.fx == 'fade')
|
2937 |
+
{
|
2938 |
+
dur = dur / 2;
|
2939 |
+
}
|
2940 |
+
return Math.round(dur);
|
2941 |
+
}
|
2942 |
+
|
2943 |
+
// navigation functions
|
2944 |
+
function nv_showNavi(o, t, c) {
|
2945 |
+
var minimum = (is_number(o.items.minimum)) ? o.items.minimum : o.items.visible + 1;
|
2946 |
+
if (t == 'show' || t == 'hide')
|
2947 |
+
{
|
2948 |
+
var f = t;
|
2949 |
+
}
|
2950 |
+
else if (minimum > t)
|
2951 |
+
{
|
2952 |
+
debug(c, 'Not enough items ('+t+' total, '+minimum+' needed): Hiding navigation.');
|
2953 |
+
var f = 'hide';
|
2954 |
+
}
|
2955 |
+
else
|
2956 |
+
{
|
2957 |
+
var f = 'show';
|
2958 |
+
}
|
2959 |
+
var s = (f == 'show') ? 'removeClass' : 'addClass',
|
2960 |
+
h = cf_c('hidden', c);
|
2961 |
+
|
2962 |
+
if (o.auto.button)
|
2963 |
+
{
|
2964 |
+
o.auto.button[f]()[s](h);
|
2965 |
+
}
|
2966 |
+
if (o.prev.button)
|
2967 |
+
{
|
2968 |
+
o.prev.button[f]()[s](h);
|
2969 |
+
}
|
2970 |
+
if (o.next.button)
|
2971 |
+
{
|
2972 |
+
o.next.button[f]()[s](h);
|
2973 |
+
}
|
2974 |
+
if (o.pagination.container)
|
2975 |
+
{
|
2976 |
+
o.pagination.container[f]()[s](h);
|
2977 |
+
}
|
2978 |
+
}
|
2979 |
+
function nv_enableNavi(o, f, c) {
|
2980 |
+
if (o.circular || o.infinite) return;
|
2981 |
+
var fx = (f == 'removeClass' || f == 'addClass') ? f : false,
|
2982 |
+
di = cf_c('disabled', c);
|
2983 |
+
|
2984 |
+
if (o.auto.button && fx)
|
2985 |
+
{
|
2986 |
+
o.auto.button[fx](di);
|
2987 |
+
}
|
2988 |
+
if (o.prev.button)
|
2989 |
+
{
|
2990 |
+
var fn = fx || (f == 0) ? 'addClass' : 'removeClass';
|
2991 |
+
o.prev.button[fn](di);
|
2992 |
+
}
|
2993 |
+
if (o.next.button)
|
2994 |
+
{
|
2995 |
+
var fn = fx || (f == o.items.visible) ? 'addClass' : 'removeClass';
|
2996 |
+
o.next.button[fn](di);
|
2997 |
+
}
|
2998 |
+
}
|
2999 |
+
|
3000 |
+
// get object functions
|
3001 |
+
function go_getObject($tt, obj) {
|
3002 |
+
if (is_function(obj))
|
3003 |
+
{
|
3004 |
+
obj = obj.call($tt);
|
3005 |
+
}
|
3006 |
+
else if (is_undefined(obj))
|
3007 |
+
{
|
3008 |
+
obj = {};
|
3009 |
+
}
|
3010 |
+
return obj;
|
3011 |
+
}
|
3012 |
+
function go_getItemsObject($tt, obj) {
|
3013 |
+
obj = go_getObject($tt, obj);
|
3014 |
+
if (is_number(obj))
|
3015 |
+
{
|
3016 |
+
obj = {
|
3017 |
+
'visible': obj
|
3018 |
+
};
|
3019 |
+
}
|
3020 |
+
else if (obj == 'variable')
|
3021 |
+
{
|
3022 |
+
obj = {
|
3023 |
+
'visible': obj,
|
3024 |
+
'width': obj,
|
3025 |
+
'height': obj
|
3026 |
+
};
|
3027 |
+
}
|
3028 |
+
else if (!is_object(obj))
|
3029 |
+
{
|
3030 |
+
obj = {};
|
3031 |
+
}
|
3032 |
+
return obj;
|
3033 |
+
}
|
3034 |
+
function go_getScrollObject($tt, obj) {
|
3035 |
+
obj = go_getObject($tt, obj);
|
3036 |
+
if (is_number(obj))
|
3037 |
+
{
|
3038 |
+
if (obj <= 50)
|
3039 |
+
{
|
3040 |
+
obj = {
|
3041 |
+
'items': obj
|
3042 |
+
};
|
3043 |
+
}
|
3044 |
+
else
|
3045 |
+
{
|
3046 |
+
obj = {
|
3047 |
+
'duration': obj
|
3048 |
+
};
|
3049 |
+
}
|
3050 |
+
}
|
3051 |
+
else if (is_string(obj))
|
3052 |
+
{
|
3053 |
+
obj = {
|
3054 |
+
'easing': obj
|
3055 |
+
};
|
3056 |
+
}
|
3057 |
+
else if (!is_object(obj))
|
3058 |
+
{
|
3059 |
+
obj = {};
|
3060 |
+
}
|
3061 |
+
return obj;
|
3062 |
+
}
|
3063 |
+
function go_getNaviObject($tt, obj) {
|
3064 |
+
obj = go_getObject($tt, obj);
|
3065 |
+
if (is_string(obj))
|
3066 |
+
{
|
3067 |
+
var temp = cf_getKeyCode(obj);
|
3068 |
+
if (temp == -1)
|
3069 |
+
{
|
3070 |
+
obj = $(obj);
|
3071 |
+
}
|
3072 |
+
else
|
3073 |
+
{
|
3074 |
+
obj = temp;
|
3075 |
+
}
|
3076 |
+
}
|
3077 |
+
return obj;
|
3078 |
+
}
|
3079 |
+
|
3080 |
+
function go_getAutoObject($tt, obj) {
|
3081 |
+
obj = go_getNaviObject($tt, obj);
|
3082 |
+
if (is_jquery(obj))
|
3083 |
+
{
|
3084 |
+
obj = {
|
3085 |
+
'button': obj
|
3086 |
+
};
|
3087 |
+
}
|
3088 |
+
else if (is_boolean(obj))
|
3089 |
+
{
|
3090 |
+
obj = {
|
3091 |
+
'play': obj
|
3092 |
+
};
|
3093 |
+
}
|
3094 |
+
else if (is_number(obj))
|
3095 |
+
{
|
3096 |
+
obj = {
|
3097 |
+
'timeoutDuration': obj
|
3098 |
+
};
|
3099 |
+
}
|
3100 |
+
if (obj.progress)
|
3101 |
+
{
|
3102 |
+
if (is_string(obj.progress) || is_jquery(obj.progress))
|
3103 |
+
{
|
3104 |
+
obj.progress = {
|
3105 |
+
'bar': obj.progress
|
3106 |
+
};
|
3107 |
+
}
|
3108 |
+
}
|
3109 |
+
return obj;
|
3110 |
+
}
|
3111 |
+
function go_complementAutoObject($tt, obj) {
|
3112 |
+
if (is_function(obj.button))
|
3113 |
+
{
|
3114 |
+
obj.button = obj.button.call($tt);
|
3115 |
+
}
|
3116 |
+
if (is_string(obj.button))
|
3117 |
+
{
|
3118 |
+
obj.button = $(obj.button);
|
3119 |
+
}
|
3120 |
+
if (!is_boolean(obj.play))
|
3121 |
+
{
|
3122 |
+
obj.play = true;
|
3123 |
+
}
|
3124 |
+
if (!is_number(obj.delay))
|
3125 |
+
{
|
3126 |
+
obj.delay = 0;
|
3127 |
+
}
|
3128 |
+
if (is_undefined(obj.pauseOnEvent))
|
3129 |
+
{
|
3130 |
+
obj.pauseOnEvent = true;
|
3131 |
+
}
|
3132 |
+
if (!is_boolean(obj.pauseOnResize))
|
3133 |
+
{
|
3134 |
+
obj.pauseOnResize = true;
|
3135 |
+
}
|
3136 |
+
if (!is_number(obj.timeoutDuration))
|
3137 |
+
{
|
3138 |
+
obj.timeoutDuration = (obj.duration < 10)
|
3139 |
+
? 2500
|
3140 |
+
: obj.duration * 5;
|
3141 |
+
}
|
3142 |
+
if (obj.progress)
|
3143 |
+
{
|
3144 |
+
if (is_function(obj.progress.bar))
|
3145 |
+
{
|
3146 |
+
obj.progress.bar = obj.progress.bar.call($tt);
|
3147 |
+
}
|
3148 |
+
if (is_string(obj.progress.bar))
|
3149 |
+
{
|
3150 |
+
obj.progress.bar = $(obj.progress.bar);
|
3151 |
+
}
|
3152 |
+
if (obj.progress.bar)
|
3153 |
+
{
|
3154 |
+
if (!is_function(obj.progress.updater))
|
3155 |
+
{
|
3156 |
+
obj.progress.updater = $.fn.carouFredSel.progressbarUpdater;
|
3157 |
+
}
|
3158 |
+
if (!is_number(obj.progress.interval))
|
3159 |
+
{
|
3160 |
+
obj.progress.interval = 50;
|
3161 |
+
}
|
3162 |
+
}
|
3163 |
+
else
|
3164 |
+
{
|
3165 |
+
obj.progress = false;
|
3166 |
+
}
|
3167 |
+
}
|
3168 |
+
return obj;
|
3169 |
+
}
|
3170 |
+
|
3171 |
+
function go_getPrevNextObject($tt, obj) {
|
3172 |
+
obj = go_getNaviObject($tt, obj);
|
3173 |
+
if (is_jquery(obj))
|
3174 |
+
{
|
3175 |
+
obj = {
|
3176 |
+
'button': obj
|
3177 |
+
};
|
3178 |
+
}
|
3179 |
+
else if (is_number(obj))
|
3180 |
+
{
|
3181 |
+
obj = {
|
3182 |
+
'key': obj
|
3183 |
+
};
|
3184 |
+
}
|
3185 |
+
return obj;
|
3186 |
+
}
|
3187 |
+
function go_complementPrevNextObject($tt, obj) {
|
3188 |
+
if (is_function(obj.button))
|
3189 |
+
{
|
3190 |
+
obj.button = obj.button.call($tt);
|
3191 |
+
}
|
3192 |
+
if (is_string(obj.button))
|
3193 |
+
{
|
3194 |
+
obj.button = $(obj.button);
|
3195 |
+
}
|
3196 |
+
if (is_string(obj.key))
|
3197 |
+
{
|
3198 |
+
obj.key = cf_getKeyCode(obj.key);
|
3199 |
+
}
|
3200 |
+
return obj;
|
3201 |
+
}
|
3202 |
+
|
3203 |
+
function go_getPaginationObject($tt, obj) {
|
3204 |
+
obj = go_getNaviObject($tt, obj);
|
3205 |
+
if (is_jquery(obj))
|
3206 |
+
{
|
3207 |
+
obj = {
|
3208 |
+
'container': obj
|
3209 |
+
};
|
3210 |
+
}
|
3211 |
+
else if (is_boolean(obj))
|
3212 |
+
{
|
3213 |
+
obj = {
|
3214 |
+
'keys': obj
|
3215 |
+
};
|
3216 |
+
}
|
3217 |
+
return obj;
|
3218 |
+
}
|
3219 |
+
function go_complementPaginationObject($tt, obj) {
|
3220 |
+
if (is_function(obj.container))
|
3221 |
+
{
|
3222 |
+
obj.container = obj.container.call($tt);
|
3223 |
+
}
|
3224 |
+
if (is_string(obj.container))
|
3225 |
+
{
|
3226 |
+
obj.container = $(obj.container);
|
3227 |
+
}
|
3228 |
+
if (!is_number(obj.items))
|
3229 |
+
{
|
3230 |
+
obj.items = false;
|
3231 |
+
}
|
3232 |
+
if (!is_boolean(obj.keys))
|
3233 |
+
{
|
3234 |
+
obj.keys = false;
|
3235 |
+
}
|
3236 |
+
if (!is_function(obj.anchorBuilder) && !is_false(obj.anchorBuilder))
|
3237 |
+
{
|
3238 |
+
obj.anchorBuilder = $.fn.carouFredSel.pageAnchorBuilder;
|
3239 |
+
}
|
3240 |
+
if (!is_number(obj.deviation))
|
3241 |
+
{
|
3242 |
+
obj.deviation = 0;
|
3243 |
+
}
|
3244 |
+
return obj;
|
3245 |
+
}
|
3246 |
+
|
3247 |
+
function go_getSwipeObject($tt, obj) {
|
3248 |
+
if (is_function(obj))
|
3249 |
+
{
|
3250 |
+
obj = obj.call($tt);
|
3251 |
+
}
|
3252 |
+
if (is_undefined(obj))
|
3253 |
+
{
|
3254 |
+
obj = {
|
3255 |
+
'onTouch': false
|
3256 |
+
};
|
3257 |
+
}
|
3258 |
+
if (is_true(obj))
|
3259 |
+
{
|
3260 |
+
obj = {
|
3261 |
+
'onTouch': obj
|
3262 |
+
};
|
3263 |
+
}
|
3264 |
+
else if (is_number(obj))
|
3265 |
+
{
|
3266 |
+
obj = {
|
3267 |
+
'items': obj
|
3268 |
+
};
|
3269 |
+
}
|
3270 |
+
return obj;
|
3271 |
+
}
|
3272 |
+
function go_complementSwipeObject($tt, obj) {
|
3273 |
+
if (!is_boolean(obj.onTouch))
|
3274 |
+
{
|
3275 |
+
obj.onTouch = true;
|
3276 |
+
}
|
3277 |
+
if (!is_boolean(obj.onMouse))
|
3278 |
+
{
|
3279 |
+
obj.onMouse = false;
|
3280 |
+
}
|
3281 |
+
if (!is_object(obj.options))
|
3282 |
+
{
|
3283 |
+
obj.options = {};
|
3284 |
+
}
|
3285 |
+
if (!is_boolean(obj.options.triggerOnTouchEnd))
|
3286 |
+
{
|
3287 |
+
obj.options.triggerOnTouchEnd = false;
|
3288 |
+
}
|
3289 |
+
return obj;
|
3290 |
+
}
|
3291 |
+
function go_getMousewheelObject($tt, obj) {
|
3292 |
+
if (is_function(obj))
|
3293 |
+
{
|
3294 |
+
obj = obj.call($tt);
|
3295 |
+
}
|
3296 |
+
if (is_true(obj))
|
3297 |
+
{
|
3298 |
+
obj = {};
|
3299 |
+
}
|
3300 |
+
else if (is_number(obj))
|
3301 |
+
{
|
3302 |
+
obj = {
|
3303 |
+
'items': obj
|
3304 |
+
};
|
3305 |
+
}
|
3306 |
+
else if (is_undefined(obj))
|
3307 |
+
{
|
3308 |
+
obj = false;
|
3309 |
+
}
|
3310 |
+
return obj;
|
3311 |
+
}
|
3312 |
+
function go_complementMousewheelObject($tt, obj) {
|
3313 |
+
return obj;
|
3314 |
+
}
|
3315 |
+
|
3316 |
+
// get number functions
|
3317 |
+
function gn_getItemIndex(num, dev, org, items, $cfs) {
|
3318 |
+
if (is_string(num))
|
3319 |
+
{
|
3320 |
+
num = $(num, $cfs);
|
3321 |
+
}
|
3322 |
+
|
3323 |
+
if (is_object(num))
|
3324 |
+
{
|
3325 |
+
num = $(num, $cfs);
|
3326 |
+
}
|
3327 |
+
if (is_jquery(num))
|
3328 |
+
{
|
3329 |
+
num = $cfs.children().index(num);
|
3330 |
+
if (!is_boolean(org))
|
3331 |
+
{
|
3332 |
+
org = false;
|
3333 |
+
}
|
3334 |
+
}
|
3335 |
+
else
|
3336 |
+
{
|
3337 |
+
if (!is_boolean(org))
|
3338 |
+
{
|
3339 |
+
org = true;
|
3340 |
+
}
|
3341 |
+
}
|
3342 |
+
if (!is_number(num))
|
3343 |
+
{
|
3344 |
+
num = 0;
|
3345 |
+
}
|
3346 |
+
if (!is_number(dev))
|
3347 |
+
{
|
3348 |
+
dev = 0;
|
3349 |
+
}
|
3350 |
+
|
3351 |
+
if (org)
|
3352 |
+
{
|
3353 |
+
num += items.first;
|
3354 |
+
}
|
3355 |
+
num += dev;
|
3356 |
+
if (items.total > 0)
|
3357 |
+
{
|
3358 |
+
while (num >= items.total)
|
3359 |
+
{
|
3360 |
+
num -= items.total;
|
3361 |
+
}
|
3362 |
+
while (num < 0)
|
3363 |
+
{
|
3364 |
+
num += items.total;
|
3365 |
+
}
|
3366 |
+
}
|
3367 |
+
return num;
|
3368 |
+
}
|
3369 |
+
|
3370 |
+
// items prev
|
3371 |
+
function gn_getVisibleItemsPrev(i, o, s) {
|
3372 |
+
var t = 0,
|
3373 |
+
x = 0;
|
3374 |
+
|
3375 |
+
for (var a = s; a >= 0; a--)
|
3376 |
+
{
|
3377 |
+
var j = i.eq(a);
|
3378 |
+
t += (j.is(':visible')) ? j[o.d['outerWidth']](true) : 0;
|
3379 |
+
if (t > o.maxDimension)
|
3380 |
+
{
|
3381 |
+
return x;
|
3382 |
+
}
|
3383 |
+
if (a == 0)
|
3384 |
+
{
|
3385 |
+
a = i.length;
|
3386 |
+
}
|
3387 |
+
x++;
|
3388 |
+
}
|
3389 |
+
}
|
3390 |
+
function gn_getVisibleItemsPrevFilter(i, o, s) {
|
3391 |
+
return gn_getItemsPrevFilter(i, o.items.filter, o.items.visibleConf.org, s);
|
3392 |
+
}
|
3393 |
+
function gn_getScrollItemsPrevFilter(i, o, s, m) {
|
3394 |
+
return gn_getItemsPrevFilter(i, o.items.filter, m, s);
|
3395 |
+
}
|
3396 |
+
function gn_getItemsPrevFilter(i, f, m, s) {
|
3397 |
+
var t = 0,
|
3398 |
+
x = 0;
|
3399 |
+
|
3400 |
+
for (var a = s, l = i.length; a >= 0; a--)
|
3401 |
+
{
|
3402 |
+
x++;
|
3403 |
+
if (x == l)
|
3404 |
+
{
|
3405 |
+
return x;
|
3406 |
+
}
|
3407 |
+
|
3408 |
+
var j = i.eq(a);
|
3409 |
+
if (j.is(f))
|
3410 |
+
{
|
3411 |
+
t++;
|
3412 |
+
if (t == m)
|
3413 |
+
{
|
3414 |
+
return x;
|
3415 |
+
}
|
3416 |
+
}
|
3417 |
+
if (a == 0)
|
3418 |
+
{
|
3419 |
+
a = l;
|
3420 |
+
}
|
3421 |
+
}
|
3422 |
+
}
|
3423 |
+
|
3424 |
+
function gn_getVisibleOrg($c, o) {
|
3425 |
+
return o.items.visibleConf.org || $c.children().slice(0, o.items.visible).filter(o.items.filter).length;
|
3426 |
+
}
|
3427 |
+
|
3428 |
+
// items next
|
3429 |
+
function gn_getVisibleItemsNext(i, o, s) {
|
3430 |
+
var t = 0,
|
3431 |
+
x = 0;
|
3432 |
+
|
3433 |
+
for (var a = s, l = i.length-1; a <= l; a++)
|
3434 |
+
{
|
3435 |
+
var j = i.eq(a);
|
3436 |
+
|
3437 |
+
t += (j.is(':visible')) ? j[o.d['outerWidth']](true) : 0;
|
3438 |
+
if (t > o.maxDimension)
|
3439 |
+
{
|
3440 |
+
return x;
|
3441 |
+
}
|
3442 |
+
|
3443 |
+
x++;
|
3444 |
+
if (x == l+1)
|
3445 |
+
{
|
3446 |
+
return x;
|
3447 |
+
}
|
3448 |
+
if (a == l)
|
3449 |
+
{
|
3450 |
+
a = -1;
|
3451 |
+
}
|
3452 |
+
}
|
3453 |
+
}
|
3454 |
+
function gn_getVisibleItemsNextTestCircular(i, o, s, l) {
|
3455 |
+
var v = gn_getVisibleItemsNext(i, o, s);
|
3456 |
+
if (!o.circular)
|
3457 |
+
{
|
3458 |
+
if (s + v > l)
|
3459 |
+
{
|
3460 |
+
v = l - s;
|
3461 |
+
}
|
3462 |
+
}
|
3463 |
+
return v;
|
3464 |
+
}
|
3465 |
+
function gn_getVisibleItemsNextFilter(i, o, s) {
|
3466 |
+
return gn_getItemsNextFilter(i, o.items.filter, o.items.visibleConf.org, s, o.circular);
|
3467 |
+
}
|
3468 |
+
function gn_getScrollItemsNextFilter(i, o, s, m) {
|
3469 |
+
return gn_getItemsNextFilter(i, o.items.filter, m+1, s, o.circular) - 1;
|
3470 |
+
}
|
3471 |
+
function gn_getItemsNextFilter(i, f, m, s, c) {
|
3472 |
+
var t = 0,
|
3473 |
+
x = 0;
|
3474 |
+
|
3475 |
+
for (var a = s, l = i.length-1; a <= l; a++)
|
3476 |
+
{
|
3477 |
+
x++;
|
3478 |
+
if (x >= l)
|
3479 |
+
{
|
3480 |
+
return x;
|
3481 |
+
}
|
3482 |
+
|
3483 |
+
var j = i.eq(a);
|
3484 |
+
if (j.is(f))
|
3485 |
+
{
|
3486 |
+
t++;
|
3487 |
+
if (t == m)
|
3488 |
+
{
|
3489 |
+
return x;
|
3490 |
+
}
|
3491 |
+
}
|
3492 |
+
if (a == l)
|
3493 |
+
{
|
3494 |
+
a = -1;
|
3495 |
+
}
|
3496 |
+
}
|
3497 |
+
}
|
3498 |
+
|
3499 |
+
// get items functions
|
3500 |
+
function gi_getCurrentItems(i, o) {
|
3501 |
+
return i.slice(0, o.items.visible);
|
3502 |
+
}
|
3503 |
+
function gi_getOldItemsPrev(i, o, n) {
|
3504 |
+
return i.slice(n, o.items.visibleConf.old+n);
|
3505 |
+
}
|
3506 |
+
function gi_getNewItemsPrev(i, o) {
|
3507 |
+
return i.slice(0, o.items.visible);
|
3508 |
+
}
|
3509 |
+
function gi_getOldItemsNext(i, o) {
|
3510 |
+
return i.slice(0, o.items.visibleConf.old);
|
3511 |
+
}
|
3512 |
+
function gi_getNewItemsNext(i, o, n) {
|
3513 |
+
return i.slice(n, o.items.visible+n);
|
3514 |
+
}
|
3515 |
+
|
3516 |
+
// sizes functions
|
3517 |
+
function sz_storeMargin(i, o, d) {
|
3518 |
+
if (o.usePadding)
|
3519 |
+
{
|
3520 |
+
if (!is_string(d))
|
3521 |
+
{
|
3522 |
+
d = '_cfs_origCssMargin';
|
3523 |
+
}
|
3524 |
+
i.each(function() {
|
3525 |
+
var j = $(this),
|
3526 |
+
m = parseInt(j.css(o.d['marginRight']), 10);
|
3527 |
+
if (!is_number(m))
|
3528 |
+
{
|
3529 |
+
m = 0;
|
3530 |
+
}
|
3531 |
+
j.data(d, m);
|
3532 |
+
});
|
3533 |
+
}
|
3534 |
+
}
|
3535 |
+
function sz_resetMargin(i, o, m) {
|
3536 |
+
if (o.usePadding)
|
3537 |
+
{
|
3538 |
+
var x = (is_boolean(m)) ? m : false;
|
3539 |
+
if (!is_number(m))
|
3540 |
+
{
|
3541 |
+
m = 0;
|
3542 |
+
}
|
3543 |
+
sz_storeMargin(i, o, '_cfs_tempCssMargin');
|
3544 |
+
i.each(function() {
|
3545 |
+
var j = $(this);
|
3546 |
+
j.css(o.d['marginRight'], ((x) ? j.data('_cfs_tempCssMargin') : m + j.data('_cfs_origCssMargin')));
|
3547 |
+
});
|
3548 |
+
}
|
3549 |
+
}
|
3550 |
+
function sz_storeOrigCss(i) {
|
3551 |
+
i.each(function() {
|
3552 |
+
var j = $(this);
|
3553 |
+
j.data('_cfs_origCss', j.attr('style') || '');
|
3554 |
+
});
|
3555 |
+
}
|
3556 |
+
function sz_restoreOrigCss(i) {
|
3557 |
+
i.each(function() {
|
3558 |
+
var j = $(this);
|
3559 |
+
j.attr('style', j.data('_cfs_origCss') || '');
|
3560 |
+
});
|
3561 |
+
}
|
3562 |
+
function sz_setResponsiveSizes(o, all) {
|
3563 |
+
var visb = o.items.visible,
|
3564 |
+
newS = o.items[o.d['width']],
|
3565 |
+
seco = o[o.d['height']],
|
3566 |
+
secp = is_percentage(seco);
|
3567 |
+
|
3568 |
+
all.each(function() {
|
3569 |
+
var $t = $(this),
|
3570 |
+
nw = newS - ms_getPaddingBorderMargin($t, o, 'Width');
|
3571 |
+
|
3572 |
+
$t[o.d['width']](nw);
|
3573 |
+
if (secp)
|
3574 |
+
{
|
3575 |
+
$t[o.d['height']](ms_getPercentage(nw, seco));
|
3576 |
+
}
|
3577 |
+
});
|
3578 |
+
}
|
3579 |
+
function sz_setSizes($c, o) {
|
3580 |
+
var $w = $c.parent(),
|
3581 |
+
$i = $c.children(),
|
3582 |
+
$v = gi_getCurrentItems($i, o),
|
3583 |
+
sz = cf_mapWrapperSizes(ms_getSizes($v, o, true), o, false);
|
3584 |
+
|
3585 |
+
$w.css(sz);
|
3586 |
+
|
3587 |
+
if (o.usePadding)
|
3588 |
+
{
|
3589 |
+
var p = o.padding,
|
3590 |
+
r = p[o.d[1]];
|
3591 |
+
|
3592 |
+
if (o.align && r < 0)
|
3593 |
+
{
|
3594 |
+
r = 0;
|
3595 |
+
}
|
3596 |
+
var $l = $v.last();
|
3597 |
+
$l.css(o.d['marginRight'], $l.data('_cfs_origCssMargin') + r);
|
3598 |
+
$c.css(o.d['top'], p[o.d[0]]);
|
3599 |
+
$c.css(o.d['left'], p[o.d[3]]);
|
3600 |
+
}
|
3601 |
+
|
3602 |
+
$c.css(o.d['width'], sz[o.d['width']]+(ms_getTotalSize($i, o, 'width')*2));
|
3603 |
+
$c.css(o.d['height'], ms_getLargestSize($i, o, 'height'));
|
3604 |
+
return sz;
|
3605 |
+
}
|
3606 |
+
|
3607 |
+
// measuring functions
|
3608 |
+
function ms_getSizes(i, o, wrapper) {
|
3609 |
+
return [ms_getTotalSize(i, o, 'width', wrapper), ms_getLargestSize(i, o, 'height', wrapper)];
|
3610 |
+
}
|
3611 |
+
function ms_getLargestSize(i, o, dim, wrapper) {
|
3612 |
+
if (!is_boolean(wrapper))
|
3613 |
+
{
|
3614 |
+
wrapper = false;
|
3615 |
+
}
|
3616 |
+
if (is_number(o[o.d[dim]]) && wrapper)
|
3617 |
+
{
|
3618 |
+
return o[o.d[dim]];
|
3619 |
+
}
|
3620 |
+
if (is_number(o.items[o.d[dim]]))
|
3621 |
+
{
|
3622 |
+
return o.items[o.d[dim]];
|
3623 |
+
}
|
3624 |
+
dim = (dim.toLowerCase().indexOf('width') > -1) ? 'outerWidth' : 'outerHeight';
|
3625 |
+
return ms_getTrueLargestSize(i, o, dim);
|
3626 |
+
}
|
3627 |
+
function ms_getTrueLargestSize(i, o, dim) {
|
3628 |
+
var s = 0;
|
3629 |
+
|
3630 |
+
for (var a = 0, l = i.length; a < l; a++)
|
3631 |
+
{
|
3632 |
+
var j = i.eq(a);
|
3633 |
+
|
3634 |
+
var m = (j.is(':visible')) ? j[o.d[dim]](true) : 0;
|
3635 |
+
if (s < m)
|
3636 |
+
{
|
3637 |
+
s = m;
|
3638 |
+
}
|
3639 |
+
}
|
3640 |
+
return s;
|
3641 |
+
}
|
3642 |
+
|
3643 |
+
function ms_getTotalSize(i, o, dim, wrapper) {
|
3644 |
+
if (!is_boolean(wrapper))
|
3645 |
+
{
|
3646 |
+
wrapper = false;
|
3647 |
+
}
|
3648 |
+
if (is_number(o[o.d[dim]]) && wrapper)
|
3649 |
+
{
|
3650 |
+
return o[o.d[dim]];
|
3651 |
+
}
|
3652 |
+
if (is_number(o.items[o.d[dim]]))
|
3653 |
+
{
|
3654 |
+
return o.items[o.d[dim]] * i.length;
|
3655 |
+
}
|
3656 |
+
|
3657 |
+
var d = (dim.toLowerCase().indexOf('width') > -1) ? 'outerWidth' : 'outerHeight',
|
3658 |
+
s = 0;
|
3659 |
+
|
3660 |
+
for (var a = 0, l = i.length; a < l; a++)
|
3661 |
+
{
|
3662 |
+
var j = i.eq(a);
|
3663 |
+
s += (j.is(':visible')) ? j[o.d[d]](true) : 0;
|
3664 |
+
}
|
3665 |
+
return s;
|
3666 |
+
}
|
3667 |
+
function ms_getParentSize($w, o, d) {
|
3668 |
+
var isVisible = $w.is(':visible');
|
3669 |
+
if (isVisible)
|
3670 |
+
{
|
3671 |
+
$w.hide();
|
3672 |
+
}
|
3673 |
+
var s = $w.parent()[o.d[d]]();
|
3674 |
+
if (isVisible)
|
3675 |
+
{
|
3676 |
+
$w.show();
|
3677 |
+
}
|
3678 |
+
return s;
|
3679 |
+
}
|
3680 |
+
function ms_getMaxDimension(o, a) {
|
3681 |
+
return (is_number(o[o.d['width']])) ? o[o.d['width']] : a;
|
3682 |
+
}
|
3683 |
+
function ms_hasVariableSizes(i, o, dim) {
|
3684 |
+
var s = false,
|
3685 |
+
v = false;
|
3686 |
+
|
3687 |
+
for (var a = 0, l = i.length; a < l; a++)
|
3688 |
+
{
|
3689 |
+
var j = i.eq(a);
|
3690 |
+
|
3691 |
+
var c = (j.is(':visible')) ? j[o.d[dim]](true) : 0;
|
3692 |
+
if (s === false)
|
3693 |
+
{
|
3694 |
+
s = c;
|
3695 |
+
}
|
3696 |
+
else if (s != c)
|
3697 |
+
{
|
3698 |
+
v = true;
|
3699 |
+
}
|
3700 |
+
if (s == 0)
|
3701 |
+
{
|
3702 |
+
v = true;
|
3703 |
+
}
|
3704 |
+
}
|
3705 |
+
return v;
|
3706 |
+
}
|
3707 |
+
function ms_getPaddingBorderMargin(i, o, d) {
|
3708 |
+
return i[o.d['outer'+d]](true) - i[o.d[d.toLowerCase()]]();
|
3709 |
+
}
|
3710 |
+
function ms_getPercentage(s, o) {
|
3711 |
+
if (is_percentage(o))
|
3712 |
+
{
|
3713 |
+
o = parseInt( o.slice(0, -1), 10 );
|
3714 |
+
if (!is_number(o))
|
3715 |
+
{
|
3716 |
+
return s;
|
3717 |
+
}
|
3718 |
+
s *= o/100;
|
3719 |
+
}
|
3720 |
+
return s;
|
3721 |
+
}
|
3722 |
+
|
3723 |
+
// config functions
|
3724 |
+
function cf_e(n, c, pf, ns, rd) {
|
3725 |
+
if (!is_boolean(pf))
|
3726 |
+
{
|
3727 |
+
pf = true;
|
3728 |
+
}
|
3729 |
+
if (!is_boolean(ns))
|
3730 |
+
{
|
3731 |
+
ns = true;
|
3732 |
+
}
|
3733 |
+
if (!is_boolean(rd))
|
3734 |
+
{
|
3735 |
+
rd = false;
|
3736 |
+
}
|
3737 |
+
|
3738 |
+
if (pf)
|
3739 |
+
{
|
3740 |
+
n = c.events.prefix + n;
|
3741 |
+
}
|
3742 |
+
if (ns)
|
3743 |
+
{
|
3744 |
+
n = n +'.'+ c.events.namespace;
|
3745 |
+
}
|
3746 |
+
if (ns && rd)
|
3747 |
+
{
|
3748 |
+
n += c.serialNumber;
|
3749 |
+
}
|
3750 |
+
|
3751 |
+
return n;
|
3752 |
+
}
|
3753 |
+
function cf_c(n, c) {
|
3754 |
+
return (is_string(c.classnames[n])) ? c.classnames[n] : n;
|
3755 |
+
}
|
3756 |
+
function cf_mapWrapperSizes(ws, o, p) {
|
3757 |
+
|
3758 |
+
if (!is_boolean(p))
|
3759 |
+
{
|
3760 |
+
p = true;
|
3761 |
+
}
|
3762 |
+
var pad = (o.usePadding && p) ? o.padding : [0, 0, 0, 0];
|
3763 |
+
var wra = {};
|
3764 |
+
|
3765 |
+
wra[o.d['width']] = ws[0] + pad[1] + pad[3];
|
3766 |
+
wra[o.d['height']] = ws[1] + pad[0] + pad[2];
|
3767 |
+
|
3768 |
+
return wra;
|
3769 |
+
}
|
3770 |
+
function cf_sortParams(vals, typs) {
|
3771 |
+
var arr = [];
|
3772 |
+
for (var a = 0, l1 = vals.length; a < l1; a++)
|
3773 |
+
{
|
3774 |
+
for (var b = 0, l2 = typs.length; b < l2; b++)
|
3775 |
+
{
|
3776 |
+
if (typs[b].indexOf(typeof vals[a]) > -1 && is_undefined(arr[b]))
|
3777 |
+
{
|
3778 |
+
arr[b] = vals[a];
|
3779 |
+
break;
|
3780 |
+
}
|
3781 |
+
}
|
3782 |
+
}
|
3783 |
+
return arr;
|
3784 |
+
}
|
3785 |
+
function cf_getPadding(p) {
|
3786 |
+
if (is_undefined(p))
|
3787 |
+
{
|
3788 |
+
return [0, 0, 0, 0];
|
3789 |
+
}
|
3790 |
+
if (is_number(p))
|
3791 |
+
{
|
3792 |
+
return [p, p, p, p];
|
3793 |
+
}
|
3794 |
+
if (is_string(p))
|
3795 |
+
{
|
3796 |
+
p = p.split('px').join('').split('em').join('').split(' ');
|
3797 |
+
}
|
3798 |
+
|
3799 |
+
if (!is_array(p))
|
3800 |
+
{
|
3801 |
+
return [0, 0, 0, 0];
|
3802 |
+
}
|
3803 |
+
for (var i = 0; i < 4; i++)
|
3804 |
+
{
|
3805 |
+
p[i] = parseInt(p[i], 10);
|
3806 |
+
}
|
3807 |
+
switch (p.length)
|
3808 |
+
{
|
3809 |
+
case 0:
|
3810 |
+
return [0, 0, 0, 0];
|
3811 |
+
case 1:
|
3812 |
+
return [p[0], p[0], p[0], p[0]];
|
3813 |
+
case 2:
|
3814 |
+
return [p[0], p[1], p[0], p[1]];
|
3815 |
+
case 3:
|
3816 |
+
return [p[0], p[1], p[2], p[1]];
|
3817 |
+
default:
|
3818 |
+
return [p[0], p[1], p[2], p[3]];
|
3819 |
+
}
|
3820 |
+
}
|
3821 |
+
function cf_getAlignPadding(itm, o) {
|
3822 |
+
var x = (is_number(o[o.d['width']])) ? Math.ceil(o[o.d['width']] - ms_getTotalSize(itm, o, 'width')) : 0;
|
3823 |
+
switch (o.align)
|
3824 |
+
{
|
3825 |
+
case 'left':
|
3826 |
+
return [0, x];
|
3827 |
+
case 'right':
|
3828 |
+
return [x, 0];
|
3829 |
+
case 'center':
|
3830 |
+
default:
|
3831 |
+
return [Math.ceil(x/2), Math.floor(x/2)];
|
3832 |
+
}
|
3833 |
+
}
|
3834 |
+
function cf_getDimensions(o) {
|
3835 |
+
var dm = [
|
3836 |
+
['width' , 'innerWidth' , 'outerWidth' , 'height' , 'innerHeight' , 'outerHeight' , 'left', 'top' , 'marginRight' , 0, 1, 2, 3],
|
3837 |
+
['height' , 'innerHeight' , 'outerHeight' , 'width' , 'innerWidth' , 'outerWidth' , 'top' , 'left', 'marginBottom', 3, 2, 1, 0]
|
3838 |
+
];
|
3839 |
+
|
3840 |
+
var dl = dm[0].length,
|
3841 |
+
dx = (o.direction == 'right' || o.direction == 'left') ? 0 : 1;
|
3842 |
+
|
3843 |
+
var dimensions = {};
|
3844 |
+
for (var d = 0; d < dl; d++)
|
3845 |
+
{
|
3846 |
+
dimensions[dm[0][d]] = dm[dx][d];
|
3847 |
+
}
|
3848 |
+
return dimensions;
|
3849 |
+
}
|
3850 |
+
function cf_getAdjust(x, o, a, $t) {
|
3851 |
+
var v = x;
|
3852 |
+
if (is_function(a))
|
3853 |
+
{
|
3854 |
+
v = a.call($t, v);
|
3855 |
+
|
3856 |
+
}
|
3857 |
+
else if (is_string(a))
|
3858 |
+
{
|
3859 |
+
var p = a.split('+'),
|
3860 |
+
m = a.split('-');
|
3861 |
+
|
3862 |
+
if (m.length > p.length)
|
3863 |
+
{
|
3864 |
+
var neg = true,
|
3865 |
+
sta = m[0],
|
3866 |
+
adj = m[1];
|
3867 |
+
}
|
3868 |
+
else
|
3869 |
+
{
|
3870 |
+
var neg = false,
|
3871 |
+
sta = p[0],
|
3872 |
+
adj = p[1];
|
3873 |
+
}
|
3874 |
+
|
3875 |
+
switch(sta)
|
3876 |
+
{
|
3877 |
+
case 'even':
|
3878 |
+
v = (x % 2 == 1) ? x-1 : x;
|
3879 |
+
break;
|
3880 |
+
case 'odd':
|
3881 |
+
v = (x % 2 == 0) ? x-1 : x;
|
3882 |
+
break;
|
3883 |
+
default:
|
3884 |
+
v = x;
|
3885 |
+
break;
|
3886 |
+
}
|
3887 |
+
adj = parseInt(adj, 10);
|
3888 |
+
if (is_number(adj))
|
3889 |
+
{
|
3890 |
+
if (neg)
|
3891 |
+
{
|
3892 |
+
adj = -adj;
|
3893 |
+
}
|
3894 |
+
v += adj;
|
3895 |
+
}
|
3896 |
+
}
|
3897 |
+
if (!is_number(v) || v < 1)
|
3898 |
+
{
|
3899 |
+
v = 1;
|
3900 |
+
}
|
3901 |
+
return v;
|
3902 |
+
}
|
3903 |
+
function cf_getItemsAdjust(x, o, a, $t) {
|
3904 |
+
return cf_getItemAdjustMinMax(cf_getAdjust(x, o, a, $t), o.items.visibleConf);
|
3905 |
+
}
|
3906 |
+
function cf_getItemAdjustMinMax(v, i) {
|
3907 |
+
if (is_number(i.min) && v < i.min)
|
3908 |
+
{
|
3909 |
+
v = i.min;
|
3910 |
+
}
|
3911 |
+
if (is_number(i.max) && v > i.max)
|
3912 |
+
{
|
3913 |
+
v = i.max;
|
3914 |
+
}
|
3915 |
+
if (v < 1)
|
3916 |
+
{
|
3917 |
+
v = 1;
|
3918 |
+
}
|
3919 |
+
return v;
|
3920 |
+
}
|
3921 |
+
function cf_getSynchArr(s) {
|
3922 |
+
if (!is_array(s))
|
3923 |
+
{
|
3924 |
+
s = [[s]];
|
3925 |
+
}
|
3926 |
+
if (!is_array(s[0]))
|
3927 |
+
{
|
3928 |
+
s = [s];
|
3929 |
+
}
|
3930 |
+
for (var j = 0, l = s.length; j < l; j++)
|
3931 |
+
{
|
3932 |
+
if (is_string(s[j][0]))
|
3933 |
+
{
|
3934 |
+
s[j][0] = $(s[j][0]);
|
3935 |
+
}
|
3936 |
+
if (!is_boolean(s[j][1]))
|
3937 |
+
{
|
3938 |
+
s[j][1] = true;
|
3939 |
+
}
|
3940 |
+
if (!is_boolean(s[j][2]))
|
3941 |
+
{
|
3942 |
+
s[j][2] = true;
|
3943 |
+
}
|
3944 |
+
if (!is_number(s[j][3]))
|
3945 |
+
{
|
3946 |
+
s[j][3] = 0;
|
3947 |
+
}
|
3948 |
+
}
|
3949 |
+
return s;
|
3950 |
+
}
|
3951 |
+
function cf_getKeyCode(k) {
|
3952 |
+
if (k == 'right')
|
3953 |
+
{
|
3954 |
+
return 39;
|
3955 |
+
}
|
3956 |
+
if (k == 'left')
|
3957 |
+
{
|
3958 |
+
return 37;
|
3959 |
+
}
|
3960 |
+
if (k == 'up')
|
3961 |
+
{
|
3962 |
+
return 38;
|
3963 |
+
}
|
3964 |
+
if (k == 'down')
|
3965 |
+
{
|
3966 |
+
return 40;
|
3967 |
+
}
|
3968 |
+
return -1;
|
3969 |
+
}
|
3970 |
+
function cf_setCookie(n, $c, c) {
|
3971 |
+
if (n)
|
3972 |
+
{
|
3973 |
+
var v = $c.triggerHandler(cf_e('currentPosition', c));
|
3974 |
+
$.fn.carouFredSel.cookie.set(n, v);
|
3975 |
+
}
|
3976 |
+
}
|
3977 |
+
function cf_getCookie(n) {
|
3978 |
+
var c = $.fn.carouFredSel.cookie.get(n);
|
3979 |
+
return (c == '') ? 0 : c;
|
3980 |
+
}
|
3981 |
+
|
3982 |
+
// init function
|
3983 |
+
function in_mapCss($elem, props) {
|
3984 |
+
var css = {};
|
3985 |
+
for (var p = 0, l = props.length; p < l; p++)
|
3986 |
+
{
|
3987 |
+
css[props[p]] = $elem.css(props[p]);
|
3988 |
+
}
|
3989 |
+
return css;
|
3990 |
+
}
|
3991 |
+
function in_complementItems(obj, opt, itm, sta) {
|
3992 |
+
if (!is_object(obj.visibleConf))
|
3993 |
+
{
|
3994 |
+
obj.visibleConf = {};
|
3995 |
+
}
|
3996 |
+
if (!is_object(obj.sizesConf))
|
3997 |
+
{
|
3998 |
+
obj.sizesConf = {};
|
3999 |
+
}
|
4000 |
+
|
4001 |
+
if (obj.start == 0 && is_number(sta))
|
4002 |
+
{
|
4003 |
+
obj.start = sta;
|
4004 |
+
}
|
4005 |
+
|
4006 |
+
// visible items
|
4007 |
+
if (is_object(obj.visible))
|
4008 |
+
{
|
4009 |
+
obj.visibleConf.min = obj.visible.min;
|
4010 |
+
obj.visibleConf.max = obj.visible.max;
|
4011 |
+
obj.visible = false;
|
4012 |
+
}
|
4013 |
+
else if (is_string(obj.visible))
|
4014 |
+
{
|
4015 |
+
// variable visible items
|
4016 |
+
if (obj.visible == 'variable')
|
4017 |
+
{
|
4018 |
+
obj.visibleConf.variable = true;
|
4019 |
+
}
|
4020 |
+
// adjust string visible items
|
4021 |
+
else
|
4022 |
+
{
|
4023 |
+
obj.visibleConf.adjust = obj.visible;
|
4024 |
+
}
|
4025 |
+
obj.visible = false;
|
4026 |
+
}
|
4027 |
+
else if (is_function(obj.visible))
|
4028 |
+
{
|
4029 |
+
obj.visibleConf.adjust = obj.visible;
|
4030 |
+
obj.visible = false;
|
4031 |
+
}
|
4032 |
+
|
4033 |
+
// set items filter
|
4034 |
+
if (!is_string(obj.filter))
|
4035 |
+
{
|
4036 |
+
obj.filter = (itm.filter(':hidden').length > 0) ? ':visible' : '*';
|
4037 |
+
}
|
4038 |
+
|
4039 |
+
// primary item-size not set
|
4040 |
+
if (!obj[opt.d['width']])
|
4041 |
+
{
|
4042 |
+
// responsive carousel -> set to largest
|
4043 |
+
if (opt.responsive)
|
4044 |
+
{
|
4045 |
+
debug(true, 'Set a '+opt.d['width']+' for the items!');
|
4046 |
+
obj[opt.d['width']] = ms_getTrueLargestSize(itm, opt, 'outerWidth');
|
4047 |
+
}
|
4048 |
+
// non-responsive -> measure it or set to "variable"
|
4049 |
+
else
|
4050 |
+
{
|
4051 |
+
obj[opt.d['width']] = (ms_hasVariableSizes(itm, opt, 'outerWidth'))
|
4052 |
+
? 'variable'
|
4053 |
+
: itm[opt.d['outerWidth']](true);
|
4054 |
+
}
|
4055 |
+
}
|
4056 |
+
|
4057 |
+
// secondary item-size not set -> measure it or set to "variable"
|
4058 |
+
if (!obj[opt.d['height']])
|
4059 |
+
{
|
4060 |
+
obj[opt.d['height']] = (ms_hasVariableSizes(itm, opt, 'outerHeight'))
|
4061 |
+
? 'variable'
|
4062 |
+
: itm[opt.d['outerHeight']](true);
|
4063 |
+
}
|
4064 |
+
|
4065 |
+
obj.sizesConf.width = obj.width;
|
4066 |
+
obj.sizesConf.height = obj.height;
|
4067 |
+
return obj;
|
4068 |
+
}
|
4069 |
+
function in_complementVisibleItems(opt, avl) {
|
4070 |
+
// primary item-size variable -> set visible items variable
|
4071 |
+
if (opt.items[opt.d['width']] == 'variable')
|
4072 |
+
{
|
4073 |
+
opt.items.visibleConf.variable = true;
|
4074 |
+
}
|
4075 |
+
if (!opt.items.visibleConf.variable) {
|
4076 |
+
// primary size is number -> calculate visible-items
|
4077 |
+
if (is_number(opt[opt.d['width']]))
|
4078 |
+
{
|
4079 |
+
opt.items.visible = Math.floor(opt[opt.d['width']] / opt.items[opt.d['width']]);
|
4080 |
+
}
|
4081 |
+
// measure and calculate primary size and visible-items
|
4082 |
+
else
|
4083 |
+
{
|
4084 |
+
opt.items.visible = Math.floor(avl / opt.items[opt.d['width']]);
|
4085 |
+
opt[opt.d['width']] = opt.items.visible * opt.items[opt.d['width']];
|
4086 |
+
if (!opt.items.visibleConf.adjust)
|
4087 |
+
{
|
4088 |
+
opt.align = false;
|
4089 |
+
}
|
4090 |
+
}
|
4091 |
+
if (opt.items.visible == 'Infinity' || opt.items.visible < 1)
|
4092 |
+
{
|
4093 |
+
debug(true, 'Not a valid number of visible items: Set to "variable".');
|
4094 |
+
opt.items.visibleConf.variable = true;
|
4095 |
+
}
|
4096 |
+
}
|
4097 |
+
return opt;
|
4098 |
+
}
|
4099 |
+
function in_complementPrimarySize(obj, opt, all) {
|
4100 |
+
// primary size set to auto -> measure largest item-size and set it
|
4101 |
+
if (obj == 'auto')
|
4102 |
+
{
|
4103 |
+
obj = ms_getTrueLargestSize(all, opt, 'outerWidth');
|
4104 |
+
}
|
4105 |
+
return obj;
|
4106 |
+
}
|
4107 |
+
function in_complementSecondarySize(obj, opt, all) {
|
4108 |
+
// secondary size set to auto -> measure largest item-size and set it
|
4109 |
+
if (obj == 'auto')
|
4110 |
+
{
|
4111 |
+
obj = ms_getTrueLargestSize(all, opt, 'outerHeight');
|
4112 |
+
}
|
4113 |
+
// secondary size not set -> set to secondary item-size
|
4114 |
+
if (!obj)
|
4115 |
+
{
|
4116 |
+
obj = opt.items[opt.d['height']];
|
4117 |
+
}
|
4118 |
+
return obj;
|
4119 |
+
}
|
4120 |
+
function in_getAlignPadding(o, all) {
|
4121 |
+
var p = cf_getAlignPadding(gi_getCurrentItems(all, o), o);
|
4122 |
+
o.padding[o.d[1]] = p[1];
|
4123 |
+
o.padding[o.d[3]] = p[0];
|
4124 |
+
return o;
|
4125 |
+
}
|
4126 |
+
function in_getResponsiveValues(o, all, avl) {
|
4127 |
+
|
4128 |
+
var visb = cf_getItemAdjustMinMax(Math.ceil(o[o.d['width']] / o.items[o.d['width']]), o.items.visibleConf);
|
4129 |
+
if (visb > all.length)
|
4130 |
+
{
|
4131 |
+
visb = all.length;
|
4132 |
+
}
|
4133 |
+
|
4134 |
+
var newS = Math.floor(o[o.d['width']]/visb);
|
4135 |
+
|
4136 |
+
o.items.visible = visb;
|
4137 |
+
o.items[o.d['width']] = newS;
|
4138 |
+
o[o.d['width']] = visb * newS;
|
4139 |
+
return o;
|
4140 |
+
}
|
4141 |
+
|
4142 |
+
|
4143 |
+
// buttons functions
|
4144 |
+
function bt_pauseOnHoverConfig(p) {
|
4145 |
+
if (is_string(p))
|
4146 |
+
{
|
4147 |
+
var i = (p.indexOf('immediate') > -1) ? true : false,
|
4148 |
+
r = (p.indexOf('resume') > -1) ? true : false;
|
4149 |
+
}
|
4150 |
+
else
|
4151 |
+
{
|
4152 |
+
var i = r = false;
|
4153 |
+
}
|
4154 |
+
return [i, r];
|
4155 |
+
}
|
4156 |
+
function bt_mousesheelNumber(mw) {
|
4157 |
+
return (is_number(mw)) ? mw : null
|
4158 |
+
}
|
4159 |
+
|
4160 |
+
// helper functions
|
4161 |
+
function is_null(a) {
|
4162 |
+
return (a === null);
|
4163 |
+
}
|
4164 |
+
function is_undefined(a) {
|
4165 |
+
return (is_null(a) || typeof a == 'undefined' || a === '' || a === 'undefined');
|
4166 |
+
}
|
4167 |
+
function is_array(a) {
|
4168 |
+
return (a instanceof Array);
|
4169 |
+
}
|
4170 |
+
function is_jquery(a) {
|
4171 |
+
return (a instanceof jQuery);
|
4172 |
+
}
|
4173 |
+
function is_object(a) {
|
4174 |
+
return ((a instanceof Object || typeof a == 'object') && !is_null(a) && !is_jquery(a) && !is_array(a) && !is_function(a));
|
4175 |
+
}
|
4176 |
+
function is_number(a) {
|
4177 |
+
return ((a instanceof Number || typeof a == 'number') && !isNaN(a));
|
4178 |
+
}
|
4179 |
+
function is_string(a) {
|
4180 |
+
return ((a instanceof String || typeof a == 'string') && !is_undefined(a) && !is_true(a) && !is_false(a));
|
4181 |
+
}
|
4182 |
+
function is_function(a) {
|
4183 |
+
return (a instanceof Function || typeof a == 'function');
|
4184 |
+
}
|
4185 |
+
function is_boolean(a) {
|
4186 |
+
return (a instanceof Boolean || typeof a == 'boolean' || is_true(a) || is_false(a));
|
4187 |
+
}
|
4188 |
+
function is_true(a) {
|
4189 |
+
return (a === true || a === 'true');
|
4190 |
+
}
|
4191 |
+
function is_false(a) {
|
4192 |
+
return (a === false || a === 'false');
|
4193 |
+
}
|
4194 |
+
function is_percentage(x) {
|
4195 |
+
return (is_string(x) && x.slice(-1) == '%');
|
4196 |
+
}
|
4197 |
+
|
4198 |
+
|
4199 |
+
function getTime() {
|
4200 |
+
return new Date().getTime();
|
4201 |
+
}
|
4202 |
+
|
4203 |
+
function deprecated( o, n ) {
|
4204 |
+
debug(true, o+' is DEPRECATED, support for it will be removed. Use '+n+' instead.');
|
4205 |
+
}
|
4206 |
+
function debug(d, m) {
|
4207 |
+
if (!is_undefined(window.console) && !is_undefined(window.console.log))
|
4208 |
+
{
|
4209 |
+
if (is_object(d))
|
4210 |
+
{
|
4211 |
+
var s = ' ('+d.selector+')';
|
4212 |
+
d = d.debug;
|
4213 |
+
}
|
4214 |
+
else
|
4215 |
+
{
|
4216 |
+
var s = '';
|
4217 |
+
}
|
4218 |
+
if (!d)
|
4219 |
+
{
|
4220 |
+
return false;
|
4221 |
+
}
|
4222 |
+
|
4223 |
+
if (is_string(m))
|
4224 |
+
{
|
4225 |
+
m = 'carouFredSel'+s+': ' + m;
|
4226 |
+
}
|
4227 |
+
else
|
4228 |
+
{
|
4229 |
+
m = ['carouFredSel'+s+':', m];
|
4230 |
+
}
|
4231 |
+
window.console.log(m);
|
4232 |
+
}
|
4233 |
+
return false;
|
4234 |
+
}
|
4235 |
+
|
4236 |
+
|
4237 |
+
|
4238 |
+
// EASING FUNCTIONS
|
4239 |
+
$.extend($.easing, {
|
4240 |
+
'quadratic': function(t) {
|
4241 |
+
var t2 = t * t;
|
4242 |
+
return t * (-t2 * t + 4 * t2 - 6 * t + 4);
|
4243 |
+
},
|
4244 |
+
'cubic': function(t) {
|
4245 |
+
return t * (4 * t * t - 9 * t + 6);
|
4246 |
+
},
|
4247 |
+
'elastic': function(t) {
|
4248 |
+
var t2 = t * t;
|
4249 |
+
return t * (33 * t2 * t2 - 106 * t2 * t + 126 * t2 - 67 * t + 15);
|
4250 |
+
}
|
4251 |
+
});
|
4252 |
+
|
4253 |
+
|
4254 |
})(jQuery);
|
assets/js/jquery.carouFredSel.min.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
!function($){function sc_setScroll(t,e,s){return"transition"==s.transition&&"swing"==e&&(e="ease"),{anims:[],duration:t,orgDuration:t,easing:e,startTime:getTime()}}function sc_startScroll(t,e){for(var s=0,i=t.anims.length;i>s;s++){var o=t.anims[s];o&&o[0][e.transition](o[1],t.duration,t.easing,o[2])}}function sc_stopScroll(t,e){is_boolean(e)||(e=!0),is_object(t.pre)&&sc_stopScroll(t.pre,e);for(var s=0,i=t.anims.length;i>s;s++){var o=t.anims[s];o[0].stop(!0),e&&(o[0].css(o[1]),is_function(o[2])&&o[2]())}is_object(t.post)&&sc_stopScroll(t.post,e)}function sc_afterScroll(t,e,s){switch(e&&e.remove(),s.fx){case"fade":case"crossfade":case"cover-fade":case"uncover-fade":t.css("opacity",1),t.css("filter","")}}function sc_fireCallbacks(t,e,s,i,o){if(e[s]&&e[s].call(t,i),o[s].length)for(var n=0,r=o[s].length;r>n;n++)o[s][n].call(t,i);return[]}function sc_fireQueue(t,e,s){return e.length&&(t.trigger(cf_e(e[0][0],s),e[0][1]),e.shift()),e}function sc_hideHiddenItems(t){t.each(function(){var t=$(this);t.data("_cfs_isHidden",t.is(":hidden")).hide()})}function sc_showHiddenItems(t){t&&t.each(function(){var t=$(this);t.data("_cfs_isHidden")||t.show()})}function sc_clearTimers(t){return t.auto&&clearTimeout(t.auto),t.progress&&clearInterval(t.progress),t}function sc_mapCallbackArguments(t,e,s,i,o,n,r){return{width:r.width,height:r.height,items:{old:t,skipped:e,visible:s},scroll:{items:i,direction:o,duration:n}}}function sc_getDuration(t,e,s,i){var o=t.duration;return"none"==t.fx?0:("auto"==o?o=e.scroll.duration/e.scroll.items*s:10>o&&(o=i/o),1>o?0:("fade"==t.fx&&(o/=2),Math.round(o)))}function nv_showNavi(t,e,s){var i=is_number(t.items.minimum)?t.items.minimum:t.items.visible+1;if("show"==e||"hide"==e)var o=e;else if(i>e){debug(s,"Not enough items ("+e+" total, "+i+" needed): Hiding navigation.");var o="hide"}else var o="show";var n="show"==o?"removeClass":"addClass",r=cf_c("hidden",s);t.auto.button&&t.auto.button[o]()[n](r),t.prev.button&&t.prev.button[o]()[n](r),t.next.button&&t.next.button[o]()[n](r),t.pagination.container&&t.pagination.container[o]()[n](r)}function nv_enableNavi(t,e,s){if(!t.circular&&!t.infinite){var i="removeClass"==e||"addClass"==e?e:!1,o=cf_c("disabled",s);if(t.auto.button&&i&&t.auto.button[i](o),t.prev.button){var n=i||0==e?"addClass":"removeClass";t.prev.button[n](o)}if(t.next.button){var n=i||e==t.items.visible?"addClass":"removeClass";t.next.button[n](o)}}}function go_getObject(t,e){return is_function(e)?e=e.call(t):is_undefined(e)&&(e={}),e}function go_getItemsObject(t,e){return e=go_getObject(t,e),is_number(e)?e={visible:e}:"variable"==e?e={visible:e,width:e,height:e}:is_object(e)||(e={}),e}function go_getScrollObject(t,e){return e=go_getObject(t,e),is_number(e)?e=50>=e?{items:e}:{duration:e}:is_string(e)?e={easing:e}:is_object(e)||(e={}),e}function go_getNaviObject(t,e){if(e=go_getObject(t,e),is_string(e)){var s=cf_getKeyCode(e);e=-1==s?$(e):s}return e}function go_getAutoObject(t,e){return e=go_getNaviObject(t,e),is_jquery(e)?e={button:e}:is_boolean(e)?e={play:e}:is_number(e)&&(e={timeoutDuration:e}),e.progress&&(is_string(e.progress)||is_jquery(e.progress))&&(e.progress={bar:e.progress}),e}function go_complementAutoObject(t,e){return is_function(e.button)&&(e.button=e.button.call(t)),is_string(e.button)&&(e.button=$(e.button)),is_boolean(e.play)||(e.play=!0),is_number(e.delay)||(e.delay=0),is_undefined(e.pauseOnEvent)&&(e.pauseOnEvent=!0),is_boolean(e.pauseOnResize)||(e.pauseOnResize=!0),is_number(e.timeoutDuration)||(e.timeoutDuration=e.duration<10?2500:5*e.duration),e.progress&&(is_function(e.progress.bar)&&(e.progress.bar=e.progress.bar.call(t)),is_string(e.progress.bar)&&(e.progress.bar=$(e.progress.bar)),e.progress.bar?(is_function(e.progress.updater)||(e.progress.updater=$.fn.carouFredSel.progressbarUpdater),is_number(e.progress.interval)||(e.progress.interval=50)):e.progress=!1),e}function go_getPrevNextObject(t,e){return e=go_getNaviObject(t,e),is_jquery(e)?e={button:e}:is_number(e)&&(e={key:e}),e}function go_complementPrevNextObject(t,e){return is_function(e.button)&&(e.button=e.button.call(t)),is_string(e.button)&&(e.button=$(e.button)),is_string(e.key)&&(e.key=cf_getKeyCode(e.key)),e}function go_getPaginationObject(t,e){return e=go_getNaviObject(t,e),is_jquery(e)?e={container:e}:is_boolean(e)&&(e={keys:e}),e}function go_complementPaginationObject(t,e){return is_function(e.container)&&(e.container=e.container.call(t)),is_string(e.container)&&(e.container=$(e.container)),is_number(e.items)||(e.items=!1),is_boolean(e.keys)||(e.keys=!1),is_function(e.anchorBuilder)||is_false(e.anchorBuilder)||(e.anchorBuilder=$.fn.carouFredSel.pageAnchorBuilder),is_number(e.deviation)||(e.deviation=0),e}function go_getSwipeObject(t,e){return is_function(e)&&(e=e.call(t)),is_undefined(e)&&(e={onTouch:!1}),is_true(e)?e={onTouch:e}:is_number(e)&&(e={items:e}),e}function go_complementSwipeObject(t,e){return is_boolean(e.onTouch)||(e.onTouch=!0),is_boolean(e.onMouse)||(e.onMouse=!1),is_object(e.options)||(e.options={}),is_boolean(e.options.triggerOnTouchEnd)||(e.options.triggerOnTouchEnd=!1),e}function go_getMousewheelObject(t,e){return is_function(e)&&(e=e.call(t)),is_true(e)?e={}:is_number(e)?e={items:e}:is_undefined(e)&&(e=!1),e}function go_complementMousewheelObject(t,e){return e}function gn_getItemIndex(t,e,s,i,o){if(is_string(t)&&(t=$(t,o)),is_object(t)&&(t=$(t,o)),is_jquery(t)?(t=o.children().index(t),is_boolean(s)||(s=!1)):is_boolean(s)||(s=!0),is_number(t)||(t=0),is_number(e)||(e=0),s&&(t+=i.first),t+=e,i.total>0){for(;t>=i.total;)t-=i.total;for(;0>t;)t+=i.total}return t}function gn_getVisibleItemsPrev(t,e,s){for(var i=0,o=0,n=s;n>=0;n--){var r=t.eq(n);if(i+=r.is(":visible")?r[e.d.outerWidth](!0):0,i>e.maxDimension)return o;0==n&&(n=t.length),o++}}function gn_getVisibleItemsPrevFilter(t,e,s){return gn_getItemsPrevFilter(t,e.items.filter,e.items.visibleConf.org,s)}function gn_getScrollItemsPrevFilter(t,e,s,i){return gn_getItemsPrevFilter(t,e.items.filter,i,s)}function gn_getItemsPrevFilter(t,e,s,i){for(var o=0,n=0,r=i,c=t.length;r>=0;r--){if(n++,n==c)return n;var a=t.eq(r);if(a.is(e)&&(o++,o==s))return n;0==r&&(r=c)}}function gn_getVisibleOrg(t,e){return e.items.visibleConf.org||t.children().slice(0,e.items.visible).filter(e.items.filter).length}function gn_getVisibleItemsNext(t,e,s){for(var i=0,o=0,n=s,r=t.length-1;r>=n;n++){var c=t.eq(n);if(i+=c.is(":visible")?c[e.d.outerWidth](!0):0,i>e.maxDimension)return o;if(o++,o==r+1)return o;n==r&&(n=-1)}}function gn_getVisibleItemsNextTestCircular(t,e,s,i){var o=gn_getVisibleItemsNext(t,e,s);return e.circular||s+o>i&&(o=i-s),o}function gn_getVisibleItemsNextFilter(t,e,s){return gn_getItemsNextFilter(t,e.items.filter,e.items.visibleConf.org,s,e.circular)}function gn_getScrollItemsNextFilter(t,e,s,i){return gn_getItemsNextFilter(t,e.items.filter,i+1,s,e.circular)-1}function gn_getItemsNextFilter(t,e,s,i){for(var o=0,n=0,r=i,c=t.length-1;c>=r;r++){if(n++,n>=c)return n;var a=t.eq(r);if(a.is(e)&&(o++,o==s))return n;r==c&&(r=-1)}}function gi_getCurrentItems(t,e){return t.slice(0,e.items.visible)}function gi_getOldItemsPrev(t,e,s){return t.slice(s,e.items.visibleConf.old+s)}function gi_getNewItemsPrev(t,e){return t.slice(0,e.items.visible)}function gi_getOldItemsNext(t,e){return t.slice(0,e.items.visibleConf.old)}function gi_getNewItemsNext(t,e,s){return t.slice(s,e.items.visible+s)}function sz_storeMargin(t,e,s){e.usePadding&&(is_string(s)||(s="_cfs_origCssMargin"),t.each(function(){var t=$(this),i=parseInt(t.css(e.d.marginRight),10);is_number(i)||(i=0),t.data(s,i)}))}function sz_resetMargin(t,e,s){if(e.usePadding){var i=is_boolean(s)?s:!1;is_number(s)||(s=0),sz_storeMargin(t,e,"_cfs_tempCssMargin"),t.each(function(){var t=$(this);t.css(e.d.marginRight,i?t.data("_cfs_tempCssMargin"):s+t.data("_cfs_origCssMargin"))})}}function sz_storeOrigCss(t){t.each(function(){var t=$(this);t.data("_cfs_origCss",t.attr("style")||"")})}function sz_restoreOrigCss(t){t.each(function(){var t=$(this);t.attr("style",t.data("_cfs_origCss")||"")})}function sz_setResponsiveSizes(t,e){var s=(t.items.visible,t.items[t.d.width]),i=t[t.d.height],o=is_percentage(i);e.each(function(){var e=$(this),n=s-ms_getPaddingBorderMargin(e,t,"Width");e[t.d.width](n),o&&e[t.d.height](ms_getPercentage(n,i))})}function sz_setSizes(t,e){var s=t.parent(),i=t.children(),o=gi_getCurrentItems(i,e),n=cf_mapWrapperSizes(ms_getSizes(o,e,!0),e,!1);if(s.css(n),e.usePadding){var r=e.padding,c=r[e.d[1]];e.align&&0>c&&(c=0);var a=o.last();a.css(e.d.marginRight,a.data("_cfs_origCssMargin")+c),t.css(e.d.top,r[e.d[0]]),t.css(e.d.left,r[e.d[3]])}return t.css(e.d.width,n[e.d.width]+2*ms_getTotalSize(i,e,"width")),t.css(e.d.height,ms_getLargestSize(i,e,"height")),n}function ms_getSizes(t,e,s){return[ms_getTotalSize(t,e,"width",s),ms_getLargestSize(t,e,"height",s)]}function ms_getLargestSize(t,e,s,i){return is_boolean(i)||(i=!1),is_number(e[e.d[s]])&&i?e[e.d[s]]:is_number(e.items[e.d[s]])?e.items[e.d[s]]:(s=s.toLowerCase().indexOf("width")>-1?"outerWidth":"outerHeight",ms_getTrueLargestSize(t,e,s))}function ms_getTrueLargestSize(t,e,s){for(var i=0,o=0,n=t.length;n>o;o++){var r=t.eq(o),c=r.is(":visible")?r[e.d[s]](!0):0;c>i&&(i=c)}return i}function ms_getTotalSize(t,e,s,i){if(is_boolean(i)||(i=!1),is_number(e[e.d[s]])&&i)return e[e.d[s]];if(is_number(e.items[e.d[s]]))return e.items[e.d[s]]*t.length;for(var o=s.toLowerCase().indexOf("width")>-1?"outerWidth":"outerHeight",n=0,r=0,c=t.length;c>r;r++){var a=t.eq(r);n+=a.is(":visible")?a[e.d[o]](!0):0}return n}function ms_getParentSize(t,e,s){var i=t.is(":visible");i&&t.hide();var o=t.parent()[e.d[s]]();return i&&t.show(),o}function ms_getMaxDimension(t,e){return is_number(t[t.d.width])?t[t.d.width]:e}function ms_hasVariableSizes(t,e,s){for(var i=!1,o=!1,n=0,r=t.length;r>n;n++){var c=t.eq(n),a=c.is(":visible")?c[e.d[s]](!0):0;i===!1?i=a:i!=a&&(o=!0),0==i&&(o=!0)}return o}function ms_getPaddingBorderMargin(t,e,s){return t[e.d["outer"+s]](!0)-t[e.d[s.toLowerCase()]]()}function ms_getPercentage(t,e){if(is_percentage(e)){if(e=parseInt(e.slice(0,-1),10),!is_number(e))return t;t*=e/100}return t}function cf_e(t,e,s,i,o){return is_boolean(s)||(s=!0),is_boolean(i)||(i=!0),is_boolean(o)||(o=!1),s&&(t=e.events.prefix+t),i&&(t=t+"."+e.events.namespace),i&&o&&(t+=e.serialNumber),t}function cf_c(t,e){return is_string(e.classnames[t])?e.classnames[t]:t}function cf_mapWrapperSizes(t,e,s){is_boolean(s)||(s=!0);var i=e.usePadding&&s?e.padding:[0,0,0,0],o={};return o[e.d.width]=t[0]+i[1]+i[3],o[e.d.height]=t[1]+i[0]+i[2],o}function cf_sortParams(t,e){for(var s=[],i=0,o=t.length;o>i;i++)for(var n=0,r=e.length;r>n;n++)if(e[n].indexOf(typeof t[i])>-1&&is_undefined(s[n])){s[n]=t[i];break}return s}function cf_getPadding(t){if(is_undefined(t))return[0,0,0,0];if(is_number(t))return[t,t,t,t];if(is_string(t)&&(t=t.split("px").join("").split("em").join("").split(" ")),!is_array(t))return[0,0,0,0];for(var e=0;4>e;e++)t[e]=parseInt(t[e],10);switch(t.length){case 0:return[0,0,0,0];case 1:return[t[0],t[0],t[0],t[0]];case 2:return[t[0],t[1],t[0],t[1]];case 3:return[t[0],t[1],t[2],t[1]];default:return[t[0],t[1],t[2],t[3]]}}function cf_getAlignPadding(t,e){var s=is_number(e[e.d.width])?Math.ceil(e[e.d.width]-ms_getTotalSize(t,e,"width")):0;switch(e.align){case"left":return[0,s];case"right":return[s,0];case"center":default:return[Math.ceil(s/2),Math.floor(s/2)]}}function cf_getDimensions(t){for(var e=[["width","innerWidth","outerWidth","height","innerHeight","outerHeight","left","top","marginRight",0,1,2,3],["height","innerHeight","outerHeight","width","innerWidth","outerWidth","top","left","marginBottom",3,2,1,0]],s=e[0].length,i="right"==t.direction||"left"==t.direction?0:1,o={},n=0;s>n;n++)o[e[0][n]]=e[i][n];return o}function cf_getAdjust(t,e,s,i){var o=t;if(is_function(s))o=s.call(i,o);else if(is_string(s)){var n=s.split("+"),r=s.split("-");if(r.length>n.length)var c=!0,a=r[0],f=r[1];else var c=!1,a=n[0],f=n[1];switch(a){case"even":o=t%2==1?t-1:t;break;case"odd":o=t%2==0?t-1:t;break;default:o=t}f=parseInt(f,10),is_number(f)&&(c&&(f=-f),o+=f)}return(!is_number(o)||1>o)&&(o=1),o}function cf_getItemsAdjust(t,e,s,i){return cf_getItemAdjustMinMax(cf_getAdjust(t,e,s,i),e.items.visibleConf)}function cf_getItemAdjustMinMax(t,e){return is_number(e.min)&&t<e.min&&(t=e.min),is_number(e.max)&&t>e.max&&(t=e.max),1>t&&(t=1),t}function cf_getSynchArr(t){is_array(t)||(t=[[t]]),is_array(t[0])||(t=[t]);for(var e=0,s=t.length;s>e;e++)is_string(t[e][0])&&(t[e][0]=$(t[e][0])),is_boolean(t[e][1])||(t[e][1]=!0),is_boolean(t[e][2])||(t[e][2]=!0),is_number(t[e][3])||(t[e][3]=0);return t}function cf_getKeyCode(t){return"right"==t?39:"left"==t?37:"up"==t?38:"down"==t?40:-1}function cf_setCookie(t,e,s){if(t){var i=e.triggerHandler(cf_e("currentPosition",s));$.fn.carouFredSel.cookie.set(t,i)}}function cf_getCookie(t){var e=$.fn.carouFredSel.cookie.get(t);return""==e?0:e}function in_mapCss(t,e){for(var s={},i=0,o=e.length;o>i;i++)s[e[i]]=t.css(e[i]);return s}function in_complementItems(t,e,s,i){return is_object(t.visibleConf)||(t.visibleConf={}),is_object(t.sizesConf)||(t.sizesConf={}),0==t.start&&is_number(i)&&(t.start=i),is_object(t.visible)?(t.visibleConf.min=t.visible.min,t.visibleConf.max=t.visible.max,t.visible=!1):is_string(t.visible)?("variable"==t.visible?t.visibleConf.variable=!0:t.visibleConf.adjust=t.visible,t.visible=!1):is_function(t.visible)&&(t.visibleConf.adjust=t.visible,t.visible=!1),is_string(t.filter)||(t.filter=s.filter(":hidden").length>0?":visible":"*"),t[e.d.width]||(e.responsive?(debug(!0,"Set a "+e.d.width+" for the items!"),t[e.d.width]=ms_getTrueLargestSize(s,e,"outerWidth")):t[e.d.width]=ms_hasVariableSizes(s,e,"outerWidth")?"variable":s[e.d.outerWidth](!0)),t[e.d.height]||(t[e.d.height]=ms_hasVariableSizes(s,e,"outerHeight")?"variable":s[e.d.outerHeight](!0)),t.sizesConf.width=t.width,t.sizesConf.height=t.height,t}function in_complementVisibleItems(t,e){return"variable"==t.items[t.d.width]&&(t.items.visibleConf.variable=!0),t.items.visibleConf.variable||(is_number(t[t.d.width])?t.items.visible=Math.floor(t[t.d.width]/t.items[t.d.width]):(t.items.visible=Math.floor(e/t.items[t.d.width]),t[t.d.width]=t.items.visible*t.items[t.d.width],t.items.visibleConf.adjust||(t.align=!1)),("Infinity"==t.items.visible||t.items.visible<1)&&(debug(!0,'Not a valid number of visible items: Set to "variable".'),t.items.visibleConf.variable=!0)),t}function in_complementPrimarySize(t,e,s){return"auto"==t&&(t=ms_getTrueLargestSize(s,e,"outerWidth")),t}function in_complementSecondarySize(t,e,s){return"auto"==t&&(t=ms_getTrueLargestSize(s,e,"outerHeight")),t||(t=e.items[e.d.height]),t}function in_getAlignPadding(t,e){var s=cf_getAlignPadding(gi_getCurrentItems(e,t),t);return t.padding[t.d[1]]=s[1],t.padding[t.d[3]]=s[0],t}function in_getResponsiveValues(t,e){var s=cf_getItemAdjustMinMax(Math.ceil(t[t.d.width]/t.items[t.d.width]),t.items.visibleConf);s>e.length&&(s=e.length);var i=Math.floor(t[t.d.width]/s);return t.items.visible=s,t.items[t.d.width]=i,t[t.d.width]=s*i,t}function bt_pauseOnHoverConfig(t){if(is_string(t))var e=t.indexOf("immediate")>-1?!0:!1,s=t.indexOf("resume")>-1?!0:!1;else var e=s=!1;return[e,s]}function bt_mousesheelNumber(t){return is_number(t)?t:null}function is_null(t){return null===t}function is_undefined(t){return is_null(t)||"undefined"==typeof t||""===t||"undefined"===t}function is_array(t){return t instanceof Array}function is_jquery(t){return t instanceof jQuery}function is_object(t){return(t instanceof Object||"object"==typeof t)&&!is_null(t)&&!is_jquery(t)&&!is_array(t)&&!is_function(t)}function is_number(t){return(t instanceof Number||"number"==typeof t)&&!isNaN(t)}function is_string(t){return(t instanceof String||"string"==typeof t)&&!is_undefined(t)&&!is_true(t)&&!is_false(t)}function is_function(t){return t instanceof Function||"function"==typeof t}function is_boolean(t){return t instanceof Boolean||"boolean"==typeof t||is_true(t)||is_false(t)}function is_true(t){return t===!0||"true"===t}function is_false(t){return t===!1||"false"===t}function is_percentage(t){return is_string(t)&&"%"==t.slice(-1)}function getTime(){return(new Date).getTime()}function deprecated(t,e){debug(!0,t+" is DEPRECATED, support for it will be removed. Use "+e+" instead.")}function debug(t,e){if(!is_undefined(window.console)&&!is_undefined(window.console.log)){if(is_object(t)){var s=" ("+t.selector+")";t=t.debug}else var s="";if(!t)return!1;e=is_string(e)?"carouFredSel"+s+": "+e:["carouFredSel"+s+":",e],window.console.log(e)}return!1}$.fn.carouFredSel||($.fn.caroufredsel=$.fn.carouFredSel=function(options,configs){if(0==this.length)return debug(!0,'No element found for "'+this.selector+'".'),this;if(this.length>1)return this.each(function(){$(this).carouFredSel(options,configs)});var $cfs=this,$tt0=this[0],starting_position=!1;$cfs.data("_cfs_isCarousel")&&(starting_position=$cfs.triggerHandler("_cfs_triggerEvent","currentPosition"),$cfs.trigger("_cfs_triggerEvent",["destroy",!0]));var FN={};FN._init=function(t,e,s){t=go_getObject($tt0,t),t.items=go_getItemsObject($tt0,t.items),t.scroll=go_getScrollObject($tt0,t.scroll),t.auto=go_getAutoObject($tt0,t.auto),t.prev=go_getPrevNextObject($tt0,t.prev),t.next=go_getPrevNextObject($tt0,t.next),t.pagination=go_getPaginationObject($tt0,t.pagination),t.swipe=go_getSwipeObject($tt0,t.swipe),t.mousewheel=go_getMousewheelObject($tt0,t.mousewheel),e&&(opts_orig=$.extend(!0,{},$.fn.carouFredSel.defaults,t)),opts=$.extend(!0,{},$.fn.carouFredSel.defaults,t),opts.d=cf_getDimensions(opts),crsl.direction="up"==opts.direction||"left"==opts.direction?"next":"prev";var i=$cfs.children(),o=ms_getParentSize($wrp,opts,"width");if(is_true(opts.cookie)&&(opts.cookie="caroufredsel_cookie_"+conf.serialNumber),opts.maxDimension=ms_getMaxDimension(opts,o),opts.items=in_complementItems(opts.items,opts,i,s),opts[opts.d.width]=in_complementPrimarySize(opts[opts.d.width],opts,i),opts[opts.d.height]=in_complementSecondarySize(opts[opts.d.height],opts,i),opts.responsive&&(is_percentage(opts[opts.d.width])||(opts[opts.d.width]="100%")),is_percentage(opts[opts.d.width])&&(crsl.upDateOnWindowResize=!0,crsl.primarySizePercentage=opts[opts.d.width],opts[opts.d.width]=ms_getPercentage(o,crsl.primarySizePercentage),opts.items.visible||(opts.items.visibleConf.variable=!0)),opts.responsive?(opts.usePadding=!1,opts.padding=[0,0,0,0],opts.align=!1,opts.items.visibleConf.variable=!1):(opts.items.visible||(opts=in_complementVisibleItems(opts,o)),opts[opts.d.width]||(!opts.items.visibleConf.variable&&is_number(opts.items[opts.d.width])&&"*"==opts.items.filter?(opts[opts.d.width]=opts.items.visible*opts.items[opts.d.width],opts.align=!1):opts[opts.d.width]="variable"),is_undefined(opts.align)&&(opts.align=is_number(opts[opts.d.width])?"center":!1),opts.items.visibleConf.variable&&(opts.items.visible=gn_getVisibleItemsNext(i,opts,0))),"*"==opts.items.filter||opts.items.visibleConf.variable||(opts.items.visibleConf.org=opts.items.visible,opts.items.visible=gn_getVisibleItemsNextFilter(i,opts,0)),opts.items.visible=cf_getItemsAdjust(opts.items.visible,opts,opts.items.visibleConf.adjust,$tt0),opts.items.visibleConf.old=opts.items.visible,opts.responsive)opts.items.visibleConf.min||(opts.items.visibleConf.min=opts.items.visible),opts.items.visibleConf.max||(opts.items.visibleConf.max=opts.items.visible),opts=in_getResponsiveValues(opts,i,o);else switch(opts.padding=cf_getPadding(opts.padding),"top"==opts.align?opts.align="left":"bottom"==opts.align&&(opts.align="right"),opts.align){case"center":case"left":case"right":"variable"!=opts[opts.d.width]&&(opts=in_getAlignPadding(opts,i),opts.usePadding=!0);break;default:opts.align=!1,opts.usePadding=0==opts.padding[0]&&0==opts.padding[1]&&0==opts.padding[2]&&0==opts.padding[3]?!1:!0}is_number(opts.scroll.duration)||(opts.scroll.duration=500),is_undefined(opts.scroll.items)&&(opts.scroll.items=opts.responsive||opts.items.visibleConf.variable||"*"!=opts.items.filter?"visible":opts.items.visible),opts.auto=$.extend(!0,{},opts.scroll,opts.auto),opts.prev=$.extend(!0,{},opts.scroll,opts.prev),opts.next=$.extend(!0,{},opts.scroll,opts.next),opts.pagination=$.extend(!0,{},opts.scroll,opts.pagination),opts.auto=go_complementAutoObject($tt0,opts.auto),opts.prev=go_complementPrevNextObject($tt0,opts.prev),opts.next=go_complementPrevNextObject($tt0,opts.next),opts.pagination=go_complementPaginationObject($tt0,opts.pagination),opts.swipe=go_complementSwipeObject($tt0,opts.swipe),opts.mousewheel=go_complementMousewheelObject($tt0,opts.mousewheel),opts.synchronise&&(opts.synchronise=cf_getSynchArr(opts.synchronise)),opts.auto.onPauseStart&&(opts.auto.onTimeoutStart=opts.auto.onPauseStart,deprecated("auto.onPauseStart","auto.onTimeoutStart")),opts.auto.onPausePause&&(opts.auto.onTimeoutPause=opts.auto.onPausePause,deprecated("auto.onPausePause","auto.onTimeoutPause")),opts.auto.onPauseEnd&&(opts.auto.onTimeoutEnd=opts.auto.onPauseEnd,deprecated("auto.onPauseEnd","auto.onTimeoutEnd")),opts.auto.pauseDuration&&(opts.auto.timeoutDuration=opts.auto.pauseDuration,deprecated("auto.pauseDuration","auto.timeoutDuration"))},FN._build=function(){$cfs.data("_cfs_isCarousel",!0);var t=$cfs.children(),e=in_mapCss($cfs,["textAlign","float","position","top","right","bottom","left","zIndex","width","height","marginTop","marginRight","marginBottom","marginLeft"]),s="relative";switch(e.position){case"absolute":case"fixed":s=e.position}"parent"==conf.wrapper?sz_storeOrigCss($wrp):$wrp.css(e),$wrp.css({overflow:"hidden",position:s}),sz_storeOrigCss($cfs),$cfs.data("_cfs_origCssZindex",e.zIndex),$cfs.css({textAlign:"left","float":"none",position:"absolute",top:0,right:"auto",bottom:"auto",left:0,marginTop:0,marginRight:0,marginBottom:0,marginLeft:0}),sz_storeMargin(t,opts),sz_storeOrigCss(t),opts.responsive&&sz_setResponsiveSizes(opts,t)},FN._bind_events=function(){FN._unbind_events(),$cfs.bind(cf_e("stop",conf),function(t,e){return t.stopPropagation(),crsl.isStopped||opts.auto.button&&opts.auto.button.addClass(cf_c("stopped",conf)),crsl.isStopped=!0,opts.auto.play&&(opts.auto.play=!1,$cfs.trigger(cf_e("pause",conf),e)),!0}),$cfs.bind(cf_e("finish",conf),function(t){return t.stopPropagation(),crsl.isScrolling&&sc_stopScroll(scrl),!0}),$cfs.bind(cf_e("pause",conf),function(t,e,s){if(t.stopPropagation(),tmrs=sc_clearTimers(tmrs),e&&crsl.isScrolling){scrl.isStopped=!0;var i=getTime()-scrl.startTime;scrl.duration-=i,scrl.pre&&(scrl.pre.duration-=i),scrl.post&&(scrl.post.duration-=i),sc_stopScroll(scrl,!1)}if(crsl.isPaused||crsl.isScrolling||s&&(tmrs.timePassed+=getTime()-tmrs.startTime),crsl.isPaused||opts.auto.button&&opts.auto.button.addClass(cf_c("paused",conf)),crsl.isPaused=!0,opts.auto.onTimeoutPause){var o=opts.auto.timeoutDuration-tmrs.timePassed,n=100-Math.ceil(100*o/opts.auto.timeoutDuration);opts.auto.onTimeoutPause.call($tt0,n,o)}return!0}),$cfs.bind(cf_e("play",conf),function(t,e,s,i){t.stopPropagation(),tmrs=sc_clearTimers(tmrs);var o=[e,s,i],n=["string","number","boolean"],r=cf_sortParams(o,n);if(e=r[0],s=r[1],i=r[2],"prev"!=e&&"next"!=e&&(e=crsl.direction),is_number(s)||(s=0),is_boolean(i)||(i=!1),i&&(crsl.isStopped=!1,opts.auto.play=!0),!opts.auto.play)return t.stopImmediatePropagation(),debug(conf,"Carousel stopped: Not scrolling.");crsl.isPaused&&opts.auto.button&&(opts.auto.button.removeClass(cf_c("stopped",conf)),opts.auto.button.removeClass(cf_c("paused",conf))),crsl.isPaused=!1,tmrs.startTime=getTime();var c=opts.auto.timeoutDuration+s;return dur2=c-tmrs.timePassed,perc=100-Math.ceil(100*dur2/c),opts.auto.progress&&(tmrs.progress=setInterval(function(){var t=getTime()-tmrs.startTime+tmrs.timePassed,e=Math.ceil(100*t/c);opts.auto.progress.updater.call(opts.auto.progress.bar[0],e)},opts.auto.progress.interval)),tmrs.auto=setTimeout(function(){opts.auto.progress&&opts.auto.progress.updater.call(opts.auto.progress.bar[0],100),opts.auto.onTimeoutEnd&&opts.auto.onTimeoutEnd.call($tt0,perc,dur2),crsl.isScrolling?$cfs.trigger(cf_e("play",conf),e):$cfs.trigger(cf_e(e,conf),opts.auto)},dur2),opts.auto.onTimeoutStart&&opts.auto.onTimeoutStart.call($tt0,perc,dur2),!0}),$cfs.bind(cf_e("resume",conf),function(t){return t.stopPropagation(),scrl.isStopped?(scrl.isStopped=!1,crsl.isPaused=!1,crsl.isScrolling=!0,scrl.startTime=getTime(),sc_startScroll(scrl,conf)):$cfs.trigger(cf_e("play",conf)),!0}),$cfs.bind(cf_e("prev",conf)+" "+cf_e("next",conf),function(t,e,s,i,o){if(t.stopPropagation(),crsl.isStopped||$cfs.is(":hidden"))return t.stopImmediatePropagation(),debug(conf,"Carousel stopped or hidden: Not scrolling.");var n=is_number(opts.items.minimum)?opts.items.minimum:opts.items.visible+1;if(n>itms.total)return t.stopImmediatePropagation(),debug(conf,"Not enough items ("+itms.total+" total, "+n+" needed): Not scrolling.");var r=[e,s,i,o],c=["object","number/string","function","boolean"],a=cf_sortParams(r,c);e=a[0],s=a[1],i=a[2],o=a[3];var f=t.type.slice(conf.events.prefix.length);if(is_object(e)||(e={}),is_function(i)&&(e.onAfter=i),is_boolean(o)&&(e.queue=o),e=$.extend(!0,{},opts[f],e),e.conditions&&!e.conditions.call($tt0,f))return t.stopImmediatePropagation(),debug(conf,'Callback "conditions" returned false.');if(!is_number(s)){if("*"!=opts.items.filter)s="visible";else for(var l=[s,e.items,opts[f].items],a=0,u=l.length;u>a;a++)if(is_number(l[a])||"page"==l[a]||"visible"==l[a]){s=l[a];break}switch(s){case"page":return t.stopImmediatePropagation(),$cfs.triggerHandler(cf_e(f+"Page",conf),[e,i]);case"visible":opts.items.visibleConf.variable||"*"!=opts.items.filter||(s=opts.items.visible)}}if(scrl.isStopped)return $cfs.trigger(cf_e("resume",conf)),$cfs.trigger(cf_e("queue",conf),[f,[e,s,i]]),t.stopImmediatePropagation(),debug(conf,"Carousel resumed scrolling.");if(e.duration>0&&crsl.isScrolling)return e.queue&&("last"==e.queue&&(queu=[]),("first"!=e.queue||0==queu.length)&&$cfs.trigger(cf_e("queue",conf),[f,[e,s,i]])),t.stopImmediatePropagation(),debug(conf,"Carousel currently scrolling.");if(tmrs.timePassed=0,$cfs.trigger(cf_e("slide_"+f,conf),[e,s]),opts.synchronise)for(var p=opts.synchronise,d=[e,s],g=0,u=p.length;u>g;g++){var m=f;p[g][2]||(m="prev"==m?"next":"prev"),p[g][1]||(d[0]=p[g][0].triggerHandler("_cfs_triggerEvent",["configuration",m])),d[1]=s+p[g][3],p[g][0].trigger("_cfs_triggerEvent",["slide_"+m,d])}return!0}),$cfs.bind(cf_e("slide_prev",conf),function(t,e,s){t.stopPropagation();var i=$cfs.children();if(!opts.circular&&0==itms.first)return opts.infinite&&$cfs.trigger(cf_e("next",conf),itms.total-1),t.stopImmediatePropagation();if(sz_resetMargin(i,opts),!is_number(s)){if(opts.items.visibleConf.variable)s=gn_getVisibleItemsPrev(i,opts,itms.total-1);else if("*"!=opts.items.filter){var o=is_number(e.items)?e.items:gn_getVisibleOrg($cfs,opts);s=gn_getScrollItemsPrevFilter(i,opts,itms.total-1,o)}else s=opts.items.visible;s=cf_getAdjust(s,opts,e.items,$tt0)}if(opts.circular||itms.total-s<itms.first&&(s=itms.total-itms.first),opts.items.visibleConf.old=opts.items.visible,opts.items.visibleConf.variable){var n=cf_getItemsAdjust(gn_getVisibleItemsNext(i,opts,itms.total-s),opts,opts.items.visibleConf.adjust,$tt0);opts.items.visible+s<=n&&s<itms.total&&(s++,n=cf_getItemsAdjust(gn_getVisibleItemsNext(i,opts,itms.total-s),opts,opts.items.visibleConf.adjust,$tt0)),opts.items.visible=n}else if("*"!=opts.items.filter){var n=gn_getVisibleItemsNextFilter(i,opts,itms.total-s);opts.items.visible=cf_getItemsAdjust(n,opts,opts.items.visibleConf.adjust,$tt0)}if(sz_resetMargin(i,opts,!0),0==s)return t.stopImmediatePropagation(),debug(conf,"0 items to scroll: Not scrolling.");for(debug(conf,"Scrolling "+s+" items backward."),itms.first+=s;itms.first>=itms.total;)itms.first-=itms.total;opts.circular||(0==itms.first&&e.onEnd&&e.onEnd.call($tt0,"prev"),opts.infinite||nv_enableNavi(opts,itms.first,conf)),$cfs.children().slice(itms.total-s,itms.total).prependTo($cfs),itms.total<opts.items.visible+s&&$cfs.children().slice(0,opts.items.visible+s-itms.total).clone(!0).appendTo($cfs);var i=$cfs.children(),r=gi_getOldItemsPrev(i,opts,s),c=gi_getNewItemsPrev(i,opts),a=i.eq(s-1),f=r.last(),l=c.last();sz_resetMargin(i,opts);var u=0,p=0;if(opts.align){var d=cf_getAlignPadding(c,opts);u=d[0],p=d[1]}var g=0>u?opts.padding[opts.d[3]]:0,m=!1,_=$();if(opts.items.visible<s&&(_=i.slice(opts.items.visibleConf.old,s),"directscroll"==e.fx)){var b=opts.items[opts.d.width];m=_,a=l,sc_hideHiddenItems(m),opts.items[opts.d.width]="variable"}var v=!1,h=ms_getTotalSize(i.slice(0,s),opts,"width"),w=cf_mapWrapperSizes(ms_getSizes(c,opts,!0),opts,!opts.usePadding),P=0,C={},x={},S={},y={},I={},z={},j={},N=sc_getDuration(e,opts,s,h);switch(e.fx){case"cover":case"cover-fade":P=ms_getTotalSize(i.slice(0,opts.items.visible),opts,"width")}m&&(opts.items[opts.d.width]=b),sz_resetMargin(i,opts,!0),p>=0&&sz_resetMargin(f,opts,opts.padding[opts.d[1]]),u>=0&&sz_resetMargin(a,opts,opts.padding[opts.d[3]]),opts.align&&(opts.padding[opts.d[1]]=p,opts.padding[opts.d[3]]=u),z[opts.d.left]=-(h-g),j[opts.d.left]=-(P-g),x[opts.d.left]=w[opts.d.width];var k=function(){},O=function(){},T=function(){},M=function(){},F=function(){},A=function(){},H=function(){},q=function(){},D=function(){},V=function(){},R=function(){};switch(e.fx){case"crossfade":case"cover":case"cover-fade":case"uncover":case"uncover-fade":v=$cfs.clone(!0).appendTo($wrp)}switch(e.fx){case"crossfade":case"uncover":case"uncover-fade":v.children().slice(0,s).remove(),v.children().slice(opts.items.visibleConf.old).remove();break;case"cover":case"cover-fade":v.children().slice(opts.items.visible).remove(),v.css(j)}if($cfs.css(z),scrl=sc_setScroll(N,e.easing,conf),C[opts.d.left]=opts.usePadding?opts.padding[opts.d[3]]:0,("variable"==opts[opts.d.width]||"variable"==opts[opts.d.height])&&(k=function(){$wrp.css(w)},O=function(){scrl.anims.push([$wrp,w])}),opts.usePadding){switch(l.not(a).length&&(S[opts.d.marginRight]=a.data("_cfs_origCssMargin"),0>u?a.css(S):(H=function(){a.css(S)},q=function(){scrl.anims.push([a,S])})),e.fx){case"cover":case"cover-fade":v.children().eq(s-1).css(S)}l.not(f).length&&(y[opts.d.marginRight]=f.data("_cfs_origCssMargin"),T=function(){f.css(y)},M=function(){scrl.anims.push([f,y])}),p>=0&&(I[opts.d.marginRight]=l.data("_cfs_origCssMargin")+opts.padding[opts.d[1]],F=function(){l.css(I)},A=function(){scrl.anims.push([l,I])})}R=function(){$cfs.css(C)};var E=opts.items.visible+s-itms.total;V=function(){if(E>0&&($cfs.children().slice(itms.total).remove(),r=$($cfs.children().slice(itms.total-(opts.items.visible-E)).get().concat($cfs.children().slice(0,E).get()))),sc_showHiddenItems(m),opts.usePadding){var t=$cfs.children().eq(opts.items.visible+s-1);t.css(opts.d.marginRight,t.data("_cfs_origCssMargin"))}};var W=sc_mapCallbackArguments(r,_,c,s,"prev",N,w);switch(D=function(){sc_afterScroll($cfs,v,e),crsl.isScrolling=!1,clbk.onAfter=sc_fireCallbacks($tt0,e,"onAfter",W,clbk),queu=sc_fireQueue($cfs,queu,conf),crsl.isPaused||$cfs.trigger(cf_e("play",conf))},crsl.isScrolling=!0,tmrs=sc_clearTimers(tmrs),clbk.onBefore=sc_fireCallbacks($tt0,e,"onBefore",W,clbk),e.fx){case"none":$cfs.css(C),k(),T(),F(),H(),R(),V(),D();break;case"fade":scrl.anims.push([$cfs,{opacity:0},function(){k(),T(),F(),H(),R(),V(),scrl=sc_setScroll(N,e.easing,conf),scrl.anims.push([$cfs,{opacity:1},D]),sc_startScroll(scrl,conf)}]);break;case"crossfade":$cfs.css({opacity:0}),scrl.anims.push([v,{opacity:0}]),scrl.anims.push([$cfs,{opacity:1},D]),O(),T(),F(),H(),R(),V();break;case"cover":scrl.anims.push([v,C,function(){T(),F(),H(),R(),V(),D()}]),O();break;case"cover-fade":scrl.anims.push([$cfs,{opacity:0}]),scrl.anims.push([v,C,function(){T(),F(),H(),R(),V(),D()}]),O();break;case"uncover":scrl.anims.push([v,x,D]),O(),T(),F(),H(),R(),V();break;case"uncover-fade":$cfs.css({opacity:0}),scrl.anims.push([$cfs,{opacity:1}]),scrl.anims.push([v,x,D]),O(),T(),F(),H(),R(),V();break;default:scrl.anims.push([$cfs,C,function(){V(),D()}]),O(),M(),A(),q()}return sc_startScroll(scrl,conf),cf_setCookie(opts.cookie,$cfs,conf),$cfs.trigger(cf_e("updatePageStatus",conf),[!1,w]),!0
|
2 |
}),$cfs.bind(cf_e("slide_next",conf),function(t,e,s){t.stopPropagation();var i=$cfs.children();if(!opts.circular&&itms.first==opts.items.visible)return opts.infinite&&$cfs.trigger(cf_e("prev",conf),itms.total-1),t.stopImmediatePropagation();if(sz_resetMargin(i,opts),!is_number(s)){if("*"!=opts.items.filter){var o=is_number(e.items)?e.items:gn_getVisibleOrg($cfs,opts);s=gn_getScrollItemsNextFilter(i,opts,0,o)}else s=opts.items.visible;s=cf_getAdjust(s,opts,e.items,$tt0)}var n=0==itms.first?itms.total:itms.first;if(!opts.circular){if(opts.items.visibleConf.variable)var r=gn_getVisibleItemsNext(i,opts,s),o=gn_getVisibleItemsPrev(i,opts,n-1);else var r=opts.items.visible,o=opts.items.visible;s+r>n&&(s=n-o)}if(opts.items.visibleConf.old=opts.items.visible,opts.items.visibleConf.variable){for(var r=cf_getItemsAdjust(gn_getVisibleItemsNextTestCircular(i,opts,s,n),opts,opts.items.visibleConf.adjust,$tt0);opts.items.visible-s>=r&&s<itms.total;)s++,r=cf_getItemsAdjust(gn_getVisibleItemsNextTestCircular(i,opts,s,n),opts,opts.items.visibleConf.adjust,$tt0);opts.items.visible=r}else if("*"!=opts.items.filter){var r=gn_getVisibleItemsNextFilter(i,opts,s);opts.items.visible=cf_getItemsAdjust(r,opts,opts.items.visibleConf.adjust,$tt0)}if(sz_resetMargin(i,opts,!0),0==s)return t.stopImmediatePropagation(),debug(conf,"0 items to scroll: Not scrolling.");for(debug(conf,"Scrolling "+s+" items forward."),itms.first-=s;itms.first<0;)itms.first+=itms.total;opts.circular||(itms.first==opts.items.visible&&e.onEnd&&e.onEnd.call($tt0,"next"),opts.infinite||nv_enableNavi(opts,itms.first,conf)),itms.total<opts.items.visible+s&&$cfs.children().slice(0,opts.items.visible+s-itms.total).clone(!0).appendTo($cfs);var i=$cfs.children(),c=gi_getOldItemsNext(i,opts),a=gi_getNewItemsNext(i,opts,s),f=i.eq(s-1),l=c.last(),u=a.last();sz_resetMargin(i,opts);var p=0,d=0;if(opts.align){var g=cf_getAlignPadding(a,opts);p=g[0],d=g[1]}var m=!1,_=$();if(opts.items.visibleConf.old<s&&(_=i.slice(opts.items.visibleConf.old,s),"directscroll"==e.fx)){var b=opts.items[opts.d.width];m=_,f=l,sc_hideHiddenItems(m),opts.items[opts.d.width]="variable"}var v=!1,h=ms_getTotalSize(i.slice(0,s),opts,"width"),w=cf_mapWrapperSizes(ms_getSizes(a,opts,!0),opts,!opts.usePadding),P=0,C={},x={},S={},y={},I={},z=sc_getDuration(e,opts,s,h);switch(e.fx){case"uncover":case"uncover-fade":P=ms_getTotalSize(i.slice(0,opts.items.visibleConf.old),opts,"width")}m&&(opts.items[opts.d.width]=b),opts.align&&opts.padding[opts.d[1]]<0&&(opts.padding[opts.d[1]]=0),sz_resetMargin(i,opts,!0),sz_resetMargin(l,opts,opts.padding[opts.d[1]]),opts.align&&(opts.padding[opts.d[1]]=d,opts.padding[opts.d[3]]=p),I[opts.d.left]=opts.usePadding?opts.padding[opts.d[3]]:0;var j=function(){},N=function(){},k=function(){},O=function(){},T=function(){},M=function(){},F=function(){},A=function(){},H=function(){};switch(e.fx){case"crossfade":case"cover":case"cover-fade":case"uncover":case"uncover-fade":v=$cfs.clone(!0).appendTo($wrp),v.children().slice(opts.items.visibleConf.old).remove()}switch(e.fx){case"crossfade":case"cover":case"cover-fade":$cfs.css("zIndex",1),v.css("zIndex",0)}if(scrl=sc_setScroll(z,e.easing,conf),C[opts.d.left]=-h,x[opts.d.left]=-P,0>p&&(C[opts.d.left]+=p),("variable"==opts[opts.d.width]||"variable"==opts[opts.d.height])&&(j=function(){$wrp.css(w)},N=function(){scrl.anims.push([$wrp,w])}),opts.usePadding){var q=u.data("_cfs_origCssMargin");d>=0&&(q+=opts.padding[opts.d[1]]),u.css(opts.d.marginRight,q),f.not(l).length&&(y[opts.d.marginRight]=l.data("_cfs_origCssMargin")),k=function(){l.css(y)},O=function(){scrl.anims.push([l,y])};var D=f.data("_cfs_origCssMargin");p>0&&(D+=opts.padding[opts.d[3]]),S[opts.d.marginRight]=D,T=function(){f.css(S)},M=function(){scrl.anims.push([f,S])}}H=function(){$cfs.css(I)};var V=opts.items.visible+s-itms.total;A=function(){V>0&&$cfs.children().slice(itms.total).remove();var t=$cfs.children().slice(0,s).appendTo($cfs).last();if(V>0&&(a=gi_getCurrentItems(i,opts)),sc_showHiddenItems(m),opts.usePadding){if(itms.total<opts.items.visible+s){var e=$cfs.children().eq(opts.items.visible-1);e.css(opts.d.marginRight,e.data("_cfs_origCssMargin")+opts.padding[opts.d[1]])}t.css(opts.d.marginRight,t.data("_cfs_origCssMargin"))}};var R=sc_mapCallbackArguments(c,_,a,s,"next",z,w);switch(F=function(){$cfs.css("zIndex",$cfs.data("_cfs_origCssZindex")),sc_afterScroll($cfs,v,e),crsl.isScrolling=!1,clbk.onAfter=sc_fireCallbacks($tt0,e,"onAfter",R,clbk),queu=sc_fireQueue($cfs,queu,conf),crsl.isPaused||$cfs.trigger(cf_e("play",conf))},crsl.isScrolling=!0,tmrs=sc_clearTimers(tmrs),clbk.onBefore=sc_fireCallbacks($tt0,e,"onBefore",R,clbk),e.fx){case"none":$cfs.css(C),j(),k(),T(),H(),A(),F();break;case"fade":scrl.anims.push([$cfs,{opacity:0},function(){j(),k(),T(),H(),A(),scrl=sc_setScroll(z,e.easing,conf),scrl.anims.push([$cfs,{opacity:1},F]),sc_startScroll(scrl,conf)}]);break;case"crossfade":$cfs.css({opacity:0}),scrl.anims.push([v,{opacity:0}]),scrl.anims.push([$cfs,{opacity:1},F]),N(),k(),T(),H(),A();break;case"cover":$cfs.css(opts.d.left,$wrp[opts.d.width]()),scrl.anims.push([$cfs,I,F]),N(),k(),T(),A();break;case"cover-fade":$cfs.css(opts.d.left,$wrp[opts.d.width]()),scrl.anims.push([v,{opacity:0}]),scrl.anims.push([$cfs,I,F]),N(),k(),T(),A();break;case"uncover":scrl.anims.push([v,x,F]),N(),k(),T(),H(),A();break;case"uncover-fade":$cfs.css({opacity:0}),scrl.anims.push([$cfs,{opacity:1}]),scrl.anims.push([v,x,F]),N(),k(),T(),H(),A();break;default:scrl.anims.push([$cfs,C,function(){H(),A(),F()}]),N(),O(),M()}return sc_startScroll(scrl,conf),cf_setCookie(opts.cookie,$cfs,conf),$cfs.trigger(cf_e("updatePageStatus",conf),[!1,w]),!0}),$cfs.bind(cf_e("slideTo",conf),function(t,e,s,i,o,n,r){t.stopPropagation();var c=[e,s,i,o,n,r],a=["string/number/object","number","boolean","object","string","function"],f=cf_sortParams(c,a);return o=f[3],n=f[4],r=f[5],e=gn_getItemIndex(f[0],f[1],f[2],itms,$cfs),0==e?!1:(is_object(o)||(o=!1),"prev"!=n&&"next"!=n&&(n=opts.circular?e<=itms.total/2?"next":"prev":0==itms.first||itms.first>e?"next":"prev"),"prev"==n&&(e=itms.total-e),$cfs.trigger(cf_e(n,conf),[o,e,r]),!0)}),$cfs.bind(cf_e("prevPage",conf),function(t,e,s){t.stopPropagation();var i=$cfs.triggerHandler(cf_e("currentPage",conf));return $cfs.triggerHandler(cf_e("slideToPage",conf),[i-1,e,"prev",s])}),$cfs.bind(cf_e("nextPage",conf),function(t,e,s){t.stopPropagation();var i=$cfs.triggerHandler(cf_e("currentPage",conf));return $cfs.triggerHandler(cf_e("slideToPage",conf),[i+1,e,"next",s])}),$cfs.bind(cf_e("slideToPage",conf),function(t,e,s,i,o){t.stopPropagation(),is_number(e)||(e=$cfs.triggerHandler(cf_e("currentPage",conf)));var n=opts.pagination.items||opts.items.visible,r=Math.ceil(itms.total/n)-1;return 0>e&&(e=r),e>r&&(e=0),$cfs.triggerHandler(cf_e("slideTo",conf),[e*n,0,!0,s,i,o])}),$cfs.bind(cf_e("jumpToStart",conf),function(t,e){if(t.stopPropagation(),e=e?gn_getItemIndex(e,0,!0,itms,$cfs):0,e+=itms.first,0!=e){if(itms.total>0)for(;e>itms.total;)e-=itms.total;$cfs.prepend($cfs.children().slice(e,itms.total))}return!0}),$cfs.bind(cf_e("synchronise",conf),function(t,e){if(t.stopPropagation(),e)e=cf_getSynchArr(e);else{if(!opts.synchronise)return debug(conf,"No carousel to synchronise.");e=opts.synchronise}for(var s=$cfs.triggerHandler(cf_e("currentPosition",conf)),i=!0,o=0,n=e.length;n>o;o++)e[o][0].triggerHandler(cf_e("slideTo",conf),[s,e[o][3],!0])||(i=!1);return i}),$cfs.bind(cf_e("queue",conf),function(t,e,s){return t.stopPropagation(),is_function(e)?e.call($tt0,queu):is_array(e)?queu=e:is_undefined(e)||queu.push([e,s]),queu}),$cfs.bind(cf_e("insertItem",conf),function(t,e,s,i,o){t.stopPropagation();var n=[e,s,i,o],r=["string/object","string/number/object","boolean","number"],c=cf_sortParams(n,r);if(e=c[0],s=c[1],i=c[2],o=c[3],is_object(e)&&!is_jquery(e)?e=$(e):is_string(e)&&(e=$(e)),!is_jquery(e)||0==e.length)return debug(conf,"Not a valid object.");is_undefined(s)&&(s="end"),sz_storeMargin(e,opts),sz_storeOrigCss(e);var a=s,f="before";"end"==s?i?(0==itms.first?(s=itms.total-1,f="after"):(s=itms.first,itms.first+=e.length),0>s&&(s=0)):(s=itms.total-1,f="after"):s=gn_getItemIndex(s,o,i,itms,$cfs);var l=$cfs.children().eq(s);return l.length?l[f](e):(debug(conf,"Correct insert-position not found! Appending item to the end."),$cfs.append(e)),"end"==a||i||s<itms.first&&(itms.first+=e.length),itms.total=$cfs.children().length,itms.first>=itms.total&&(itms.first-=itms.total),$cfs.trigger(cf_e("updateSizes",conf)),$cfs.trigger(cf_e("linkAnchors",conf)),!0}),$cfs.bind(cf_e("removeItem",conf),function(t,e,s,i){t.stopPropagation();var o=[e,s,i],n=["string/number/object","boolean","number"],r=cf_sortParams(o,n);e=r[0],s=r[1],i=r[2];if(e instanceof $&&e.length>1)return c=$(),e.each(function(){var t=$cfs.trigger(cf_e("removeItem",conf),[$(this),s,i]);t&&(c=c.add(t))}),c;if(is_undefined(e)||"end"==e)c=$cfs.children().last();else{e=gn_getItemIndex(e,i,s,itms,$cfs);var c=$cfs.children().eq(e);c.length&&e<itms.first&&(itms.first-=c.length)}return c&&c.length&&(c.detach(),itms.total=$cfs.children().length,$cfs.trigger(cf_e("updateSizes",conf))),c}),$cfs.bind(cf_e("onBefore",conf)+" "+cf_e("onAfter",conf),function(t,e){t.stopPropagation();var s=t.type.slice(conf.events.prefix.length);return is_array(e)&&(clbk[s]=e),is_function(e)&&clbk[s].push(e),clbk[s]}),$cfs.bind(cf_e("currentPosition",conf),function(t,e){if(t.stopPropagation(),0==itms.first)var s=0;else var s=itms.total-itms.first;return is_function(e)&&e.call($tt0,s),s}),$cfs.bind(cf_e("currentPage",conf),function(t,e){t.stopPropagation();var s,i=opts.pagination.items||opts.items.visible,o=Math.ceil(itms.total/i-1);return s=0==itms.first?0:itms.first<itms.total%i?0:itms.first!=i||opts.circular?Math.round((itms.total-itms.first)/i):o,0>s&&(s=0),s>o&&(s=o),is_function(e)&&e.call($tt0,s),s}),$cfs.bind(cf_e("currentVisible",conf),function(t,e){t.stopPropagation();var s=gi_getCurrentItems($cfs.children(),opts);return is_function(e)&&e.call($tt0,s),s}),$cfs.bind(cf_e("slice",conf),function(t,e,s,i){if(t.stopPropagation(),0==itms.total)return!1;var o=[e,s,i],n=["number","number","function"],r=cf_sortParams(o,n);if(e=is_number(r[0])?r[0]:0,s=is_number(r[1])?r[1]:itms.total,i=r[2],e+=itms.first,s+=itms.first,items.total>0){for(;e>itms.total;)e-=itms.total;for(;s>itms.total;)s-=itms.total;for(;0>e;)e+=itms.total;for(;0>s;)s+=itms.total}var c,a=$cfs.children();return c=s>e?a.slice(e,s):$(a.slice(e,itms.total).get().concat(a.slice(0,s).get())),is_function(i)&&i.call($tt0,c),c}),$cfs.bind(cf_e("isPaused",conf)+" "+cf_e("isStopped",conf)+" "+cf_e("isScrolling",conf),function(t,e){t.stopPropagation();var s=t.type.slice(conf.events.prefix.length),i=crsl[s];return is_function(e)&&e.call($tt0,i),i}),$cfs.bind(cf_e("configuration",conf),function(e,a,b,c){e.stopPropagation();var reInit=!1;if(is_function(a))a.call($tt0,opts);else if(is_object(a))opts_orig=$.extend(!0,{},opts_orig,a),b!==!1?reInit=!0:opts=$.extend(!0,{},opts,a);else if(!is_undefined(a))if(is_function(b)){var val=eval("opts."+a);is_undefined(val)&&(val=""),b.call($tt0,val)}else{if(is_undefined(b))return eval("opts."+a);"boolean"!=typeof c&&(c=!0),eval("opts_orig."+a+" = b"),c!==!1?reInit=!0:eval("opts."+a+" = b")}if(reInit){sz_resetMargin($cfs.children(),opts),FN._init(opts_orig),FN._bind_buttons();var sz=sz_setSizes($cfs,opts);$cfs.trigger(cf_e("updatePageStatus",conf),[!0,sz])}return opts}),$cfs.bind(cf_e("linkAnchors",conf),function(t,e,s){return t.stopPropagation(),is_undefined(e)?e=$("body"):is_string(e)&&(e=$(e)),is_jquery(e)&&0!=e.length?(is_string(s)||(s="a.caroufredsel"),e.find(s).each(function(){var t=this.hash||"";t.length>0&&-1!=$cfs.children().index($(t))&&$(this).unbind("click").click(function(e){e.preventDefault(),$cfs.trigger(cf_e("slideTo",conf),t)})}),!0):debug(conf,"Not a valid object.")}),$cfs.bind(cf_e("updatePageStatus",conf),function(t,e){if(t.stopPropagation(),opts.pagination.container){var s=opts.pagination.items||opts.items.visible,i=Math.ceil(itms.total/s);e&&(opts.pagination.anchorBuilder&&(opts.pagination.container.children().remove(),opts.pagination.container.each(function(){for(var t=0;i>t;t++){var e=$cfs.children().eq(gn_getItemIndex(t*s,0,!0,itms,$cfs));$(this).append(opts.pagination.anchorBuilder.call(e[0],t+1))}})),opts.pagination.container.each(function(){$(this).children().unbind(opts.pagination.event).each(function(t){$(this).bind(opts.pagination.event,function(e){e.preventDefault(),$cfs.trigger(cf_e("slideTo",conf),[t*s,-opts.pagination.deviation,!0,opts.pagination])})})}));var o=$cfs.triggerHandler(cf_e("currentPage",conf))+opts.pagination.deviation;return o>=i&&(o=0),0>o&&(o=i-1),opts.pagination.container.each(function(){$(this).children().removeClass(cf_c("selected",conf)).eq(o).addClass(cf_c("selected",conf))}),!0}}),$cfs.bind(cf_e("updateSizes",conf),function(){var t=opts.items.visible,e=$cfs.children(),s=ms_getParentSize($wrp,opts,"width");if(itms.total=e.length,crsl.primarySizePercentage?(opts.maxDimension=s,opts[opts.d.width]=ms_getPercentage(s,crsl.primarySizePercentage)):opts.maxDimension=ms_getMaxDimension(opts,s),opts.responsive?(opts.items.width=opts.items.sizesConf.width,opts.items.height=opts.items.sizesConf.height,opts=in_getResponsiveValues(opts,e,s),t=opts.items.visible,sz_setResponsiveSizes(opts,e)):opts.items.visibleConf.variable?t=gn_getVisibleItemsNext(e,opts,0):"*"!=opts.items.filter&&(t=gn_getVisibleItemsNextFilter(e,opts,0)),!opts.circular&&0!=itms.first&&t>itms.first){if(opts.items.visibleConf.variable)var i=gn_getVisibleItemsPrev(e,opts,itms.first)-itms.first;else if("*"!=opts.items.filter)var i=gn_getVisibleItemsPrevFilter(e,opts,itms.first)-itms.first;else var i=opts.items.visible-itms.first;debug(conf,"Preventing non-circular: sliding "+i+" items backward."),$cfs.trigger(cf_e("prev",conf),i)}opts.items.visible=cf_getItemsAdjust(t,opts,opts.items.visibleConf.adjust,$tt0),opts.items.visibleConf.old=opts.items.visible,opts=in_getAlignPadding(opts,e);var o=sz_setSizes($cfs,opts);return $cfs.trigger(cf_e("updatePageStatus",conf),[!0,o]),nv_showNavi(opts,itms.total,conf),nv_enableNavi(opts,itms.first,conf),o}),$cfs.bind(cf_e("destroy",conf),function(t,e){return t.stopPropagation(),tmrs=sc_clearTimers(tmrs),$cfs.data("_cfs_isCarousel",!1),$cfs.trigger(cf_e("finish",conf)),e&&$cfs.trigger(cf_e("jumpToStart",conf)),sz_restoreOrigCss($cfs.children()),sz_restoreOrigCss($cfs),FN._unbind_events(),FN._unbind_buttons(),"parent"==conf.wrapper?sz_restoreOrigCss($wrp):$wrp.replaceWith($cfs),!0}),$cfs.bind(cf_e("debug",conf),function(){return debug(conf,"Carousel width: "+opts.width),debug(conf,"Carousel height: "+opts.height),debug(conf,"Item widths: "+opts.items.width),debug(conf,"Item heights: "+opts.items.height),debug(conf,"Number of items visible: "+opts.items.visible),opts.auto.play&&debug(conf,"Number of items scrolled automatically: "+opts.auto.items),opts.prev.button&&debug(conf,"Number of items scrolled backward: "+opts.prev.items),opts.next.button&&debug(conf,"Number of items scrolled forward: "+opts.next.items),conf.debug}),$cfs.bind("_cfs_triggerEvent",function(t,e,s){return t.stopPropagation(),$cfs.triggerHandler(cf_e(e,conf),s)})},FN._unbind_events=function(){$cfs.unbind(cf_e("",conf)),$cfs.unbind(cf_e("",conf,!1)),$cfs.unbind("_cfs_triggerEvent")},FN._bind_buttons=function(){if(FN._unbind_buttons(),nv_showNavi(opts,itms.total,conf),nv_enableNavi(opts,itms.first,conf),opts.auto.pauseOnHover){var t=bt_pauseOnHoverConfig(opts.auto.pauseOnHover);$wrp.bind(cf_e("mouseenter",conf,!1),function(){$cfs.trigger(cf_e("pause",conf),t)}).bind(cf_e("mouseleave",conf,!1),function(){$cfs.trigger(cf_e("resume",conf))})}if(opts.auto.button&&opts.auto.button.bind(cf_e(opts.auto.event,conf,!1),function(t){t.preventDefault();var e=!1,s=null;crsl.isPaused?e="play":opts.auto.pauseOnEvent&&(e="pause",s=bt_pauseOnHoverConfig(opts.auto.pauseOnEvent)),e&&$cfs.trigger(cf_e(e,conf),s)}),opts.prev.button&&(opts.prev.button.bind(cf_e(opts.prev.event,conf,!1),function(t){t.preventDefault(),$cfs.trigger(cf_e("prev",conf))}),opts.prev.pauseOnHover)){var t=bt_pauseOnHoverConfig(opts.prev.pauseOnHover);opts.prev.button.bind(cf_e("mouseenter",conf,!1),function(){$cfs.trigger(cf_e("pause",conf),t)}).bind(cf_e("mouseleave",conf,!1),function(){$cfs.trigger(cf_e("resume",conf))})}if(opts.next.button&&(opts.next.button.bind(cf_e(opts.next.event,conf,!1),function(t){t.preventDefault(),$cfs.trigger(cf_e("next",conf))}),opts.next.pauseOnHover)){var t=bt_pauseOnHoverConfig(opts.next.pauseOnHover);opts.next.button.bind(cf_e("mouseenter",conf,!1),function(){$cfs.trigger(cf_e("pause",conf),t)}).bind(cf_e("mouseleave",conf,!1),function(){$cfs.trigger(cf_e("resume",conf))})}if(opts.pagination.container&&opts.pagination.pauseOnHover){var t=bt_pauseOnHoverConfig(opts.pagination.pauseOnHover);opts.pagination.container.bind(cf_e("mouseenter",conf,!1),function(){$cfs.trigger(cf_e("pause",conf),t)}).bind(cf_e("mouseleave",conf,!1),function(){$cfs.trigger(cf_e("resume",conf))})}if((opts.prev.key||opts.next.key)&&$(document).bind(cf_e("keyup",conf,!1,!0,!0),function(t){var e=t.keyCode;e==opts.next.key&&(t.preventDefault(),$cfs.trigger(cf_e("next",conf))),e==opts.prev.key&&(t.preventDefault(),$cfs.trigger(cf_e("prev",conf)))}),opts.pagination.keys&&$(document).bind(cf_e("keyup",conf,!1,!0,!0),function(t){var e=t.keyCode;e>=49&&58>e&&(e=(e-49)*opts.items.visible,e<=itms.total&&(t.preventDefault(),$cfs.trigger(cf_e("slideTo",conf),[e,0,!0,opts.pagination])))}),$.fn.swipe){var e="ontouchstart"in window;if(e&&opts.swipe.onTouch||!e&&opts.swipe.onMouse){var s=$.extend(!0,{},opts.prev,opts.swipe),i=$.extend(!0,{},opts.next,opts.swipe),o=function(){$cfs.trigger(cf_e("prev",conf),[s])},n=function(){$cfs.trigger(cf_e("next",conf),[i])};switch(opts.direction){case"up":case"down":opts.swipe.options.swipeUp=n,opts.swipe.options.swipeDown=o;break;default:opts.swipe.options.swipeLeft=n,opts.swipe.options.swipeRight=o}crsl.swipe&&$cfs.swipe("destroy"),$wrp.swipe(opts.swipe.options),$wrp.css("cursor","move"),crsl.swipe=!0}}if($.fn.mousewheel&&opts.mousewheel){var r=$.extend(!0,{},opts.prev,opts.mousewheel),c=$.extend(!0,{},opts.next,opts.mousewheel);crsl.mousewheel&&$wrp.unbind(cf_e("mousewheel",conf,!1)),$wrp.bind(cf_e("mousewheel",conf,!1),function(t,e){t.preventDefault(),e>0?$cfs.trigger(cf_e("prev",conf),[r]):$cfs.trigger(cf_e("next",conf),[c])}),crsl.mousewheel=!0}if(opts.auto.play&&$cfs.trigger(cf_e("play",conf),opts.auto.delay),crsl.upDateOnWindowResize){var a=function(){$cfs.trigger(cf_e("finish",conf)),opts.auto.pauseOnResize&&!crsl.isPaused&&$cfs.trigger(cf_e("play",conf)),sz_resetMargin($cfs.children(),opts),$cfs.trigger(cf_e("updateSizes",conf))},f=$(window),l=null;if($.debounce&&"debounce"==conf.onWindowResize)l=$.debounce(200,a);else if($.throttle&&"throttle"==conf.onWindowResize)l=$.throttle(300,a);else{var u=0,p=0;l=function(){var t=f.width(),e=f.height();(t!=u||e!=p)&&(a(),u=t,p=e)}}f.bind(cf_e("resize",conf,!1,!0,!0),l)}},FN._unbind_buttons=function(){var t=(cf_e("",conf),cf_e("",conf,!1));ns3=cf_e("",conf,!1,!0,!0),$(document).unbind(ns3),$(window).unbind(ns3),$wrp.unbind(t),opts.auto.button&&opts.auto.button.unbind(t),opts.prev.button&&opts.prev.button.unbind(t),opts.next.button&&opts.next.button.unbind(t),opts.pagination.container&&(opts.pagination.container.unbind(t),opts.pagination.anchorBuilder&&opts.pagination.container.children().remove()),crsl.swipe&&($cfs.swipe("destroy"),$wrp.css("cursor","default"),crsl.swipe=!1),crsl.mousewheel&&(crsl.mousewheel=!1),nv_showNavi(opts,"hide",conf),nv_enableNavi(opts,"removeClass",conf)},is_boolean(configs)&&(configs={debug:configs});var crsl={direction:"next",isPaused:!0,isScrolling:!1,isStopped:!1,mousewheel:!1,swipe:!1},itms={total:$cfs.children().length,first:0},tmrs={auto:null,progress:null,startTime:getTime(),timePassed:0},scrl={isStopped:!1,duration:0,startTime:0,easing:"",anims:[]},clbk={onBefore:[],onAfter:[]},queu=[],conf=$.extend(!0,{},$.fn.carouFredSel.configs,configs),opts={},opts_orig=$.extend(!0,{},options),$wrp="parent"==conf.wrapper?$cfs.parent():$cfs.wrap("<"+conf.wrapper.element+' class="'+conf.wrapper.classname+'" />').parent();if(conf.selector=$cfs.selector,conf.serialNumber=$.fn.carouFredSel.serialNumber++,conf.transition=conf.transition&&$.fn.transition?"transition":"animate",FN._init(opts_orig,!0,starting_position),FN._build(),FN._bind_events(),FN._bind_buttons(),is_array(opts.items.start))var start_arr=opts.items.start;else{var start_arr=[];0!=opts.items.start&&start_arr.push(opts.items.start)}if(opts.cookie&&start_arr.unshift(parseInt(cf_getCookie(opts.cookie),10)),start_arr.length>0)for(var a=0,l=start_arr.length;l>a;a++){var s=start_arr[a];if(0!=s){if(s===!0){if(s=window.location.hash,s.length<1)continue}else"random"===s&&(s=Math.floor(Math.random()*itms.total));if($cfs.triggerHandler(cf_e("slideTo",conf),[s,0,!0,{fx:"none"}]))break}}var siz=sz_setSizes($cfs,opts),itm=gi_getCurrentItems($cfs.children(),opts);return opts.onCreate&&opts.onCreate.call($tt0,{width:siz.width,height:siz.height,items:itm}),$cfs.trigger(cf_e("updatePageStatus",conf),[!0,siz]),$cfs.trigger(cf_e("linkAnchors",conf)),conf.debug&&$cfs.trigger(cf_e("debug",conf)),$cfs},$.fn.carouFredSel.serialNumber=1,$.fn.carouFredSel.defaults={synchronise:!1,infinite:!0,circular:!0,responsive:!1,direction:"left",items:{start:0},scroll:{easing:"swing",duration:500,pauseOnHover:!1,event:"click",queue:!1}},$.fn.carouFredSel.configs={debug:!1,transition:!1,onWindowResize:"throttle",events:{prefix:"",namespace:"cfs"},wrapper:{element:"div",classname:"caroufredsel_wrapper"},classnames:{}},$.fn.carouFredSel.pageAnchorBuilder=function(t){return'<a href="#"><span>'+t+"</span></a>"},$.fn.carouFredSel.progressbarUpdater=function(t){$(this).css("width",t+"%")},$.fn.carouFredSel.cookie={get:function(t){t+="=";for(var e=document.cookie.split(";"),s=0,i=e.length;i>s;s++){for(var o=e[s];" "==o.charAt(0);)o=o.slice(1);if(0==o.indexOf(t))return o.slice(t.length)}return 0},set:function(t,e,s){var i="";if(s){var o=new Date;o.setTime(o.getTime()+24*s*60*60*1e3),i="; expires="+o.toGMTString()}document.cookie=t+"="+e+i+"; path=/"},remove:function(t){$.fn.carouFredSel.cookie.set(t,"",-1)}},$.extend($.easing,{quadratic:function(t){var e=t*t;return t*(-e*t+4*e-6*t+4)},cubic:function(t){return t*(4*t*t-9*t+6)},elastic:function(t){var e=t*t;return t*(33*e*e-106*e*t+126*e-67*t+15)}}))}(jQuery);
|
1 |
+
!function($){function sc_setScroll(t,e,s){return"transition"==s.transition&&"swing"==e&&(e="ease"),{anims:[],duration:t,orgDuration:t,easing:e,startTime:getTime()}}function sc_startScroll(t,e){for(var s=0,i=t.anims.length;i>s;s++){var o=t.anims[s];o&&o[0][e.transition](o[1],t.duration,t.easing,o[2])}}function sc_stopScroll(t,e){is_boolean(e)||(e=!0),is_object(t.pre)&&sc_stopScroll(t.pre,e);for(var s=0,i=t.anims.length;i>s;s++){var o=t.anims[s];o[0].stop(!0),e&&(o[0].css(o[1]),is_function(o[2])&&o[2]())}is_object(t.post)&&sc_stopScroll(t.post,e)}function sc_afterScroll(t,e,s){switch(e&&e.remove(),s.fx){case"fade":case"crossfade":case"cover-fade":case"uncover-fade":t.css("opacity",1),t.css("filter","")}}function sc_fireCallbacks(t,e,s,i,o){if(e[s]&&e[s].call(t,i),o[s].length)for(var n=0,r=o[s].length;r>n;n++)o[s][n].call(t,i);return[]}function sc_fireQueue(t,e,s){return e.length&&(t.trigger(cf_e(e[0][0],s),e[0][1]),e.shift()),e}function sc_hideHiddenItems(t){t.each(function(){var t=$(this);t.data("_cfs_isHidden",t.is(":hidden")).hide()})}function sc_showHiddenItems(t){t&&t.each(function(){var t=$(this);t.data("_cfs_isHidden")||t.show()})}function sc_clearTimers(t){return t.auto&&clearTimeout(t.auto),t.progress&&clearInterval(t.progress),t}function sc_mapCallbackArguments(t,e,s,i,o,n,r){return{width:r.width,height:r.height,items:{old:t,skipped:e,visible:s},scroll:{items:i,direction:o,duration:n}}}function sc_getDuration(t,e,s,i){var o=t.duration;return"none"==t.fx?0:("auto"==o?o=e.scroll.duration/e.scroll.items*s:10>o&&(o=i/o),1>o?0:("fade"==t.fx&&(o/=2),Math.round(o)))}function nv_showNavi(t,e,s){var i=is_number(t.items.minimum)?t.items.minimum:t.items.visible+1;if("show"==e||"hide"==e)var o=e;else if(i>e){debug(s,"Not enough items ("+e+" total, "+i+" needed): Hiding navigation.");var o="hide"}else var o="show";var n="show"==o?"removeClass":"addClass",r=cf_c("hidden",s);t.auto.button&&t.auto.button[o]()[n](r),t.prev.button&&t.prev.button[o]()[n](r),t.next.button&&t.next.button[o]()[n](r),t.pagination.container&&t.pagination.container[o]()[n](r)}function nv_enableNavi(t,e,s){if(!t.circular&&!t.infinite){var i="removeClass"==e||"addClass"==e?e:!1,o=cf_c("disabled",s);if(t.auto.button&&i&&t.auto.button[i](o),t.prev.button){var n=i||0==e?"addClass":"removeClass";t.prev.button[n](o)}if(t.next.button){var n=i||e==t.items.visible?"addClass":"removeClass";t.next.button[n](o)}}}function go_getObject(t,e){return is_function(e)?e=e.call(t):is_undefined(e)&&(e={}),e}function go_getItemsObject(t,e){return e=go_getObject(t,e),is_number(e)?e={visible:e}:"variable"==e?e={visible:e,width:e,height:e}:is_object(e)||(e={}),e}function go_getScrollObject(t,e){return e=go_getObject(t,e),is_number(e)?e=50>=e?{items:e}:{duration:e}:is_string(e)?e={easing:e}:is_object(e)||(e={}),e}function go_getNaviObject(t,e){if(e=go_getObject(t,e),is_string(e)){var s=cf_getKeyCode(e);e=-1==s?$(e):s}return e}function go_getAutoObject(t,e){return e=go_getNaviObject(t,e),is_jquery(e)?e={button:e}:is_boolean(e)?e={play:e}:is_number(e)&&(e={timeoutDuration:e}),e.progress&&(is_string(e.progress)||is_jquery(e.progress))&&(e.progress={bar:e.progress}),e}function go_complementAutoObject(t,e){return is_function(e.button)&&(e.button=e.button.call(t)),is_string(e.button)&&(e.button=$(e.button)),is_boolean(e.play)||(e.play=!0),is_number(e.delay)||(e.delay=0),is_undefined(e.pauseOnEvent)&&(e.pauseOnEvent=!0),is_boolean(e.pauseOnResize)||(e.pauseOnResize=!0),is_number(e.timeoutDuration)||(e.timeoutDuration=e.duration<10?2500:5*e.duration),e.progress&&(is_function(e.progress.bar)&&(e.progress.bar=e.progress.bar.call(t)),is_string(e.progress.bar)&&(e.progress.bar=$(e.progress.bar)),e.progress.bar?(is_function(e.progress.updater)||(e.progress.updater=$.fn.carouFredSel.progressbarUpdater),is_number(e.progress.interval)||(e.progress.interval=50)):e.progress=!1),e}function go_getPrevNextObject(t,e){return e=go_getNaviObject(t,e),is_jquery(e)?e={button:e}:is_number(e)&&(e={key:e}),e}function go_complementPrevNextObject(t,e){return is_function(e.button)&&(e.button=e.button.call(t)),is_string(e.button)&&(e.button=$(e.button)),is_string(e.key)&&(e.key=cf_getKeyCode(e.key)),e}function go_getPaginationObject(t,e){return e=go_getNaviObject(t,e),is_jquery(e)?e={container:e}:is_boolean(e)&&(e={keys:e}),e}function go_complementPaginationObject(t,e){return is_function(e.container)&&(e.container=e.container.call(t)),is_string(e.container)&&(e.container=$(e.container)),is_number(e.items)||(e.items=!1),is_boolean(e.keys)||(e.keys=!1),is_function(e.anchorBuilder)||is_false(e.anchorBuilder)||(e.anchorBuilder=$.fn.carouFredSel.pageAnchorBuilder),is_number(e.deviation)||(e.deviation=0),e}function go_getSwipeObject(t,e){return is_function(e)&&(e=e.call(t)),is_undefined(e)&&(e={onTouch:!1}),is_true(e)?e={onTouch:e}:is_number(e)&&(e={items:e}),e}function go_complementSwipeObject(t,e){return is_boolean(e.onTouch)||(e.onTouch=!0),is_boolean(e.onMouse)||(e.onMouse=!1),is_object(e.options)||(e.options={}),is_boolean(e.options.triggerOnTouchEnd)||(e.options.triggerOnTouchEnd=!1),e}function go_getMousewheelObject(t,e){return is_function(e)&&(e=e.call(t)),is_true(e)?e={}:is_number(e)?e={items:e}:is_undefined(e)&&(e=!1),e}function go_complementMousewheelObject(t,e){return e}function gn_getItemIndex(t,e,s,i,o){if(is_string(t)&&(t=$(t,o)),is_object(t)&&(t=$(t,o)),is_jquery(t)?(t=o.children().index(t),is_boolean(s)||(s=!1)):is_boolean(s)||(s=!0),is_number(t)||(t=0),is_number(e)||(e=0),s&&(t+=i.first),t+=e,i.total>0){for(;t>=i.total;)t-=i.total;for(;0>t;)t+=i.total}return t}function gn_getVisibleItemsPrev(t,e,s){for(var i=0,o=0,n=s;n>=0;n--){var r=t.eq(n);if(i+=r.is(":visible")?r[e.d.outerWidth](!0):0,i>e.maxDimension)return o;0==n&&(n=t.length),o++}}function gn_getVisibleItemsPrevFilter(t,e,s){return gn_getItemsPrevFilter(t,e.items.filter,e.items.visibleConf.org,s)}function gn_getScrollItemsPrevFilter(t,e,s,i){return gn_getItemsPrevFilter(t,e.items.filter,i,s)}function gn_getItemsPrevFilter(t,e,s,i){for(var o=0,n=0,r=i,c=t.length;r>=0;r--){if(n++,n==c)return n;var a=t.eq(r);if(a.is(e)&&(o++,o==s))return n;0==r&&(r=c)}}function gn_getVisibleOrg(t,e){return e.items.visibleConf.org||t.children().slice(0,e.items.visible).filter(e.items.filter).length}function gn_getVisibleItemsNext(t,e,s){for(var i=0,o=0,n=s,r=t.length-1;r>=n;n++){var c=t.eq(n);if(i+=c.is(":visible")?c[e.d.outerWidth](!0):0,i>e.maxDimension)return o;if(o++,o==r+1)return o;n==r&&(n=-1)}}function gn_getVisibleItemsNextTestCircular(t,e,s,i){var o=gn_getVisibleItemsNext(t,e,s);return e.circular||s+o>i&&(o=i-s),o}function gn_getVisibleItemsNextFilter(t,e,s){return gn_getItemsNextFilter(t,e.items.filter,e.items.visibleConf.org,s,e.circular)}function gn_getScrollItemsNextFilter(t,e,s,i){return gn_getItemsNextFilter(t,e.items.filter,i+1,s,e.circular)-1}function gn_getItemsNextFilter(t,e,s,i){for(var o=0,n=0,r=i,c=t.length-1;c>=r;r++){if(n++,n>=c)return n;var a=t.eq(r);if(a.is(e)&&(o++,o==s))return n;r==c&&(r=-1)}}function gi_getCurrentItems(t,e){return t.slice(0,e.items.visible)}function gi_getOldItemsPrev(t,e,s){return t.slice(s,e.items.visibleConf.old+s)}function gi_getNewItemsPrev(t,e){return t.slice(0,e.items.visible)}function gi_getOldItemsNext(t,e){return t.slice(0,e.items.visibleConf.old)}function gi_getNewItemsNext(t,e,s){return t.slice(s,e.items.visible+s)}function sz_storeMargin(t,e,s){e.usePadding&&(is_string(s)||(s="_cfs_origCssMargin"),t.each(function(){var t=$(this),i=parseInt(t.css(e.d.marginRight),10);is_number(i)||(i=0),t.data(s,i)}))}function sz_resetMargin(t,e,s){if(e.usePadding){var i=is_boolean(s)?s:!1;is_number(s)||(s=0),sz_storeMargin(t,e,"_cfs_tempCssMargin"),t.each(function(){var t=$(this);t.css(e.d.marginRight,i?t.data("_cfs_tempCssMargin"):s+t.data("_cfs_origCssMargin"))})}}function sz_storeOrigCss(t){t.each(function(){var t=$(this);t.data("_cfs_origCss",t.attr("style")||"")})}function sz_restoreOrigCss(t){t.each(function(){var t=$(this);t.attr("style",t.data("_cfs_origCss")||"")})}function sz_setResponsiveSizes(t,e){var s=(t.items.visible,t.items[t.d.width]),i=t[t.d.height],o=is_percentage(i);e.each(function(){var e=$(this),n=s-ms_getPaddingBorderMargin(e,t,"Width");e[t.d.width](n),o&&e[t.d.height](ms_getPercentage(n,i))})}function sz_setSizes(t,e){var s=t.parent(),i=t.children(),o=gi_getCurrentItems(i,e),n=cf_mapWrapperSizes(ms_getSizes(o,e,!0),e,!1);if(s.css(n),e.usePadding){var r=e.padding,c=r[e.d[1]];e.align&&0>c&&(c=0);var a=o.last();a.css(e.d.marginRight,a.data("_cfs_origCssMargin")+c),t.css(e.d.top,r[e.d[0]]),t.css(e.d.left,r[e.d[3]])}return t.css(e.d.width,n[e.d.width]+2*ms_getTotalSize(i,e,"width")),t.css(e.d.height,ms_getLargestSize(i,e,"height")),n}function ms_getSizes(t,e,s){return[ms_getTotalSize(t,e,"width",s),ms_getLargestSize(t,e,"height",s)]}function ms_getLargestSize(t,e,s,i){return is_boolean(i)||(i=!1),is_number(e[e.d[s]])&&i?e[e.d[s]]:is_number(e.items[e.d[s]])?e.items[e.d[s]]:(s=s.toLowerCase().indexOf("width")>-1?"outerWidth":"outerHeight",ms_getTrueLargestSize(t,e,s))}function ms_getTrueLargestSize(t,e,s){for(var i=0,o=0,n=t.length;n>o;o++){var r=t.eq(o),c=r.is(":visible")?r[e.d[s]](!0):0;c>i&&(i=c)}return i}function ms_getTotalSize(t,e,s,i){if(is_boolean(i)||(i=!1),is_number(e[e.d[s]])&&i)return e[e.d[s]];if(is_number(e.items[e.d[s]]))return e.items[e.d[s]]*t.length;for(var o=s.toLowerCase().indexOf("width")>-1?"outerWidth":"outerHeight",n=0,r=0,c=t.length;c>r;r++){var a=t.eq(r);n+=a.is(":visible")?a[e.d[o]](!0):0}return n}function ms_getParentSize(t,e,s){var i=t.is(":visible");i&&t.hide();var o=t.parent()[e.d[s]]();return i&&t.show(),o}function ms_getMaxDimension(t,e){return is_number(t[t.d.width])?t[t.d.width]:e}function ms_hasVariableSizes(t,e,s){for(var i=!1,o=!1,n=0,r=t.length;r>n;n++){var c=t.eq(n),a=c.is(":visible")?c[e.d[s]](!0):0;i===!1?i=a:i!=a&&(o=!0),0==i&&(o=!0)}return o}function ms_getPaddingBorderMargin(t,e,s){return t[e.d["outer"+s]](!0)-t[e.d[s.toLowerCase()]]()}function ms_getPercentage(t,e){if(is_percentage(e)){if(e=parseInt(e.slice(0,-1),10),!is_number(e))return t;t*=e/100}return t}function cf_e(t,e,s,i,o){return is_boolean(s)||(s=!0),is_boolean(i)||(i=!0),is_boolean(o)||(o=!1),s&&(t=e.events.prefix+t),i&&(t=t+"."+e.events.namespace),i&&o&&(t+=e.serialNumber),t}function cf_c(t,e){return is_string(e.classnames[t])?e.classnames[t]:t}function cf_mapWrapperSizes(t,e,s){is_boolean(s)||(s=!0);var i=e.usePadding&&s?e.padding:[0,0,0,0],o={};return o[e.d.width]=t[0]+i[1]+i[3],o[e.d.height]=t[1]+i[0]+i[2],o}function cf_sortParams(t,e){for(var s=[],i=0,o=t.length;o>i;i++)for(var n=0,r=e.length;r>n;n++)if(e[n].indexOf(typeof t[i])>-1&&is_undefined(s[n])){s[n]=t[i];break}return s}function cf_getPadding(t){if(is_undefined(t))return[0,0,0,0];if(is_number(t))return[t,t,t,t];if(is_string(t)&&(t=t.split("px").join("").split("em").join("").split(" ")),!is_array(t))return[0,0,0,0];for(var e=0;4>e;e++)t[e]=parseInt(t[e],10);switch(t.length){case 0:return[0,0,0,0];case 1:return[t[0],t[0],t[0],t[0]];case 2:return[t[0],t[1],t[0],t[1]];case 3:return[t[0],t[1],t[2],t[1]];default:return[t[0],t[1],t[2],t[3]]}}function cf_getAlignPadding(t,e){var s=is_number(e[e.d.width])?Math.ceil(e[e.d.width]-ms_getTotalSize(t,e,"width")):0;switch(e.align){case"left":return[0,s];case"right":return[s,0];case"center":default:return[Math.ceil(s/2),Math.floor(s/2)]}}function cf_getDimensions(t){for(var e=[["width","innerWidth","outerWidth","height","innerHeight","outerHeight","left","top","marginRight",0,1,2,3],["height","innerHeight","outerHeight","width","innerWidth","outerWidth","top","left","marginBottom",3,2,1,0]],s=e[0].length,i="right"==t.direction||"left"==t.direction?0:1,o={},n=0;s>n;n++)o[e[0][n]]=e[i][n];return o}function cf_getAdjust(t,e,s,i){var o=t;if(is_function(s))o=s.call(i,o);else if(is_string(s)){var n=s.split("+"),r=s.split("-");if(r.length>n.length)var c=!0,a=r[0],f=r[1];else var c=!1,a=n[0],f=n[1];switch(a){case"even":o=t%2==1?t-1:t;break;case"odd":o=t%2==0?t-1:t;break;default:o=t}f=parseInt(f,10),is_number(f)&&(c&&(f=-f),o+=f)}return(!is_number(o)||1>o)&&(o=1),o}function cf_getItemsAdjust(t,e,s,i){return cf_getItemAdjustMinMax(cf_getAdjust(t,e,s,i),e.items.visibleConf)}function cf_getItemAdjustMinMax(t,e){return is_number(e.min)&&t<e.min&&(t=e.min),is_number(e.max)&&t>e.max&&(t=e.max),1>t&&(t=1),t}function cf_getSynchArr(t){is_array(t)||(t=[[t]]),is_array(t[0])||(t=[t]);for(var e=0,s=t.length;s>e;e++)is_string(t[e][0])&&(t[e][0]=$(t[e][0])),is_boolean(t[e][1])||(t[e][1]=!0),is_boolean(t[e][2])||(t[e][2]=!0),is_number(t[e][3])||(t[e][3]=0);return t}function cf_getKeyCode(t){return"right"==t?39:"left"==t?37:"up"==t?38:"down"==t?40:-1}function cf_setCookie(t,e,s){if(t){var i=e.triggerHandler(cf_e("currentPosition",s));$.fn.carouFredSel.cookie.set(t,i)}}function cf_getCookie(t){var e=$.fn.carouFredSel.cookie.get(t);return""==e?0:e}function in_mapCss(t,e){for(var s={},i=0,o=e.length;o>i;i++)s[e[i]]=t.css(e[i]);return s}function in_complementItems(t,e,s,i){return is_object(t.visibleConf)||(t.visibleConf={}),is_object(t.sizesConf)||(t.sizesConf={}),0==t.start&&is_number(i)&&(t.start=i),is_object(t.visible)?(t.visibleConf.min=t.visible.min,t.visibleConf.max=t.visible.max,t.visible=!1):is_string(t.visible)?("variable"==t.visible?t.visibleConf.variable=!0:t.visibleConf.adjust=t.visible,t.visible=!1):is_function(t.visible)&&(t.visibleConf.adjust=t.visible,t.visible=!1),is_string(t.filter)||(t.filter=s.filter(":hidden").length>0?":visible":"*"),t[e.d.width]||(e.responsive?(debug(!0,"Set a "+e.d.width+" for the items!"),t[e.d.width]=ms_getTrueLargestSize(s,e,"outerWidth")):t[e.d.width]=ms_hasVariableSizes(s,e,"outerWidth")?"variable":s[e.d.outerWidth](!0)),t[e.d.height]||(t[e.d.height]=ms_hasVariableSizes(s,e,"outerHeight")?"variable":s[e.d.outerHeight](!0)),t.sizesConf.width=t.width,t.sizesConf.height=t.height,t}function in_complementVisibleItems(t,e){return"variable"==t.items[t.d.width]&&(t.items.visibleConf.variable=!0),t.items.visibleConf.variable||(is_number(t[t.d.width])?t.items.visible=Math.floor(t[t.d.width]/t.items[t.d.width]):(t.items.visible=Math.floor(e/t.items[t.d.width]),t[t.d.width]=t.items.visible*t.items[t.d.width],t.items.visibleConf.adjust||(t.align=!1)),("Infinity"==t.items.visible||t.items.visible<1)&&(debug(!0,'Not a valid number of visible items: Set to "variable".'),t.items.visibleConf.variable=!0)),t}function in_complementPrimarySize(t,e,s){return"auto"==t&&(t=ms_getTrueLargestSize(s,e,"outerWidth")),t}function in_complementSecondarySize(t,e,s){return"auto"==t&&(t=ms_getTrueLargestSize(s,e,"outerHeight")),t||(t=e.items[e.d.height]),t}function in_getAlignPadding(t,e){var s=cf_getAlignPadding(gi_getCurrentItems(e,t),t);return t.padding[t.d[1]]=s[1],t.padding[t.d[3]]=s[0],t}function in_getResponsiveValues(t,e){var s=cf_getItemAdjustMinMax(Math.ceil(t[t.d.width]/t.items[t.d.width]),t.items.visibleConf);s>e.length&&(s=e.length);var i=Math.floor(t[t.d.width]/s);return t.items.visible=s,t.items[t.d.width]=i,t[t.d.width]=s*i,t}function bt_pauseOnHoverConfig(t){if(is_string(t))var e=t.indexOf("immediate")>-1?!0:!1,s=t.indexOf("resume")>-1?!0:!1;else var e=s=!1;return[e,s]}function bt_mousesheelNumber(t){return is_number(t)?t:null}function is_null(t){return null===t}function is_undefined(t){return is_null(t)||"undefined"==typeof t||""===t||"undefined"===t}function is_array(t){return t instanceof Array}function is_jquery(t){return t instanceof jQuery}function is_object(t){return(t instanceof Object||"object"==typeof t)&&!is_null(t)&&!is_jquery(t)&&!is_array(t)&&!is_function(t)}function is_number(t){return(t instanceof Number||"number"==typeof t)&&!isNaN(t)}function is_string(t){return(t instanceof String||"string"==typeof t)&&!is_undefined(t)&&!is_true(t)&&!is_false(t)}function is_function(t){return t instanceof Function||"function"==typeof t}function is_boolean(t){return t instanceof Boolean||"boolean"==typeof t||is_true(t)||is_false(t)}function is_true(t){return t===!0||"true"===t}function is_false(t){return t===!1||"false"===t}function is_percentage(t){return is_string(t)&&"%"==t.slice(-1)}function getTime(){return(new Date).getTime()}function deprecated(t,e){debug(!0,t+" is DEPRECATED, support for it will be removed. Use "+e+" instead.")}function debug(t,e){if(!is_undefined(window.console)&&!is_undefined(window.console.log)){if(is_object(t)){var s=" ("+t.selector+")";t=t.debug}else var s="";if(!t)return!1;e=is_string(e)?"carouFredSel"+s+": "+e:["carouFredSel"+s+":",e],window.console.log(e)}return!1}$.fn.carouFredSel||($.fn.caroufredsel=$.fn.carouFredSel=function(options,configs){if(0==this.length)return debug(!0,'No element found for "'+this.selector+'".'),this;if(this.length>1)return this.each(function(){$(this).carouFredSel(options,configs)});var $cfs=this,$tt0=this[0],starting_position=!1;$cfs.data("_cfs_isCarousel")&&(starting_position=$cfs.triggerHandler("_cfs_triggerEvent","currentPosition"),$cfs.trigger("_cfs_triggerEvent",["destroy",!0]));var FN={};FN._init=function(t,e,s){t=go_getObject($tt0,t),t.items=go_getItemsObject($tt0,t.items),t.scroll=go_getScrollObject($tt0,t.scroll),t.auto=go_getAutoObject($tt0,t.auto),t.prev=go_getPrevNextObject($tt0,t.prev),t.next=go_getPrevNextObject($tt0,t.next),t.pagination=go_getPaginationObject($tt0,t.pagination),t.swipe=go_getSwipeObject($tt0,t.swipe),t.mousewheel=go_getMousewheelObject($tt0,t.mousewheel),e&&(opts_orig=$.extend(!0,{},$.fn.carouFredSel.defaults,t)),opts=$.extend(!0,{},$.fn.carouFredSel.defaults,t),opts.d=cf_getDimensions(opts),crsl.direction="up"==opts.direction||"left"==opts.direction?"next":"prev";var i=$cfs.children(),o=ms_getParentSize($wrp,opts,"width");if(is_true(opts.cookie)&&(opts.cookie="caroufredsel_cookie_"+conf.serialNumber),opts.maxDimension=ms_getMaxDimension(opts,o),opts.items=in_complementItems(opts.items,opts,i,s),opts[opts.d.width]=in_complementPrimarySize(opts[opts.d.width],opts,i),opts[opts.d.height]=in_complementSecondarySize(opts[opts.d.height],opts,i),opts.responsive&&(is_percentage(opts[opts.d.width])||(opts[opts.d.width]="100%")),is_percentage(opts[opts.d.width])&&(crsl.upDateOnWindowResize=!0,crsl.primarySizePercentage=opts[opts.d.width],opts[opts.d.width]=ms_getPercentage(o,crsl.primarySizePercentage),opts.items.visible||(opts.items.visibleConf.variable=!0)),opts.responsive?(opts.usePadding=!1,opts.padding=[0,0,0,0],opts.align=!1,opts.items.visibleConf.variable=!1):(opts.items.visible||(opts=in_complementVisibleItems(opts,o)),opts[opts.d.width]||(!opts.items.visibleConf.variable&&is_number(opts.items[opts.d.width])&&"*"==opts.items.filter?(opts[opts.d.width]=opts.items.visible*opts.items[opts.d.width],opts.align=!1):opts[opts.d.width]="variable"),is_undefined(opts.align)&&(opts.align=is_number(opts[opts.d.width])?"center":!1),opts.items.visibleConf.variable&&(opts.items.visible=gn_getVisibleItemsNext(i,opts,0))),"*"==opts.items.filter||opts.items.visibleConf.variable||(opts.items.visibleConf.org=opts.items.visible,opts.items.visible=gn_getVisibleItemsNextFilter(i,opts,0)),opts.items.visible=cf_getItemsAdjust(opts.items.visible,opts,opts.items.visibleConf.adjust,$tt0),opts.items.visibleConf.old=opts.items.visible,opts.responsive)opts.items.visibleConf.min||(opts.items.visibleConf.min=opts.items.visible),opts.items.visibleConf.max||(opts.items.visibleConf.max=opts.items.visible),opts=in_getResponsiveValues(opts,i,o);else switch(opts.padding=cf_getPadding(opts.padding),"top"==opts.align?opts.align="left":"bottom"==opts.align&&(opts.align="right"),opts.align){case"center":case"left":case"right":"variable"!=opts[opts.d.width]&&(opts=in_getAlignPadding(opts,i),opts.usePadding=!0);break;default:opts.align=!1,opts.usePadding=0==opts.padding[0]&&0==opts.padding[1]&&0==opts.padding[2]&&0==opts.padding[3]?!1:!0}is_number(opts.scroll.duration)||(opts.scroll.duration=500),is_undefined(opts.scroll.items)&&(opts.scroll.items=opts.responsive||opts.items.visibleConf.variable||"*"!=opts.items.filter?"visible":opts.items.visible),opts.auto=$.extend(!0,{},opts.scroll,opts.auto),opts.prev=$.extend(!0,{},opts.scroll,opts.prev),opts.next=$.extend(!0,{},opts.scroll,opts.next),opts.pagination=$.extend(!0,{},opts.scroll,opts.pagination),opts.auto=go_complementAutoObject($tt0,opts.auto),opts.prev=go_complementPrevNextObject($tt0,opts.prev),opts.next=go_complementPrevNextObject($tt0,opts.next),opts.pagination=go_complementPaginationObject($tt0,opts.pagination),opts.swipe=go_complementSwipeObject($tt0,opts.swipe),opts.mousewheel=go_complementMousewheelObject($tt0,opts.mousewheel),opts.synchronise&&(opts.synchronise=cf_getSynchArr(opts.synchronise)),opts.auto.onPauseStart&&(opts.auto.onTimeoutStart=opts.auto.onPauseStart,deprecated("auto.onPauseStart","auto.onTimeoutStart")),opts.auto.onPausePause&&(opts.auto.onTimeoutPause=opts.auto.onPausePause,deprecated("auto.onPausePause","auto.onTimeoutPause")),opts.auto.onPauseEnd&&(opts.auto.onTimeoutEnd=opts.auto.onPauseEnd,deprecated("auto.onPauseEnd","auto.onTimeoutEnd")),opts.auto.pauseDuration&&(opts.auto.timeoutDuration=opts.auto.pauseDuration,deprecated("auto.pauseDuration","auto.timeoutDuration"))},FN._build=function(){$cfs.data("_cfs_isCarousel",!0);var t=$cfs.children(),e=in_mapCss($cfs,["textAlign","float","position","top","right","bottom","left","zIndex","width","height","marginTop","marginRight","marginBottom","marginLeft"]),s="relative";switch(e.position){case"absolute":case"fixed":s=e.position}"parent"==conf.wrapper?sz_storeOrigCss($wrp):$wrp.css(e),$wrp.css({overflow:"hidden",position:s}),sz_storeOrigCss($cfs),$cfs.data("_cfs_origCssZindex",e.zIndex),$cfs.css({textAlign:"left","float":"none",position:"absolute",top:0,right:"auto",bottom:"auto",left:0,marginTop:0,marginRight:0,marginBottom:0,marginLeft:0}),sz_storeMargin(t,opts),sz_storeOrigCss(t),opts.responsive&&sz_setResponsiveSizes(opts,t)},FN._bind_events=function(){FN._unbind_events(),$cfs.bind(cf_e("stop",conf),function(t,e){return t.stopPropagation(),crsl.isStopped||opts.auto.button&&opts.auto.button.addClass(cf_c("stopped",conf)),crsl.isStopped=!0,opts.auto.play&&(opts.auto.play=!1,$cfs.trigger(cf_e("pause",conf),e)),!0}),$cfs.bind(cf_e("finish",conf),function(t){return t.stopPropagation(),crsl.isScrolling&&sc_stopScroll(scrl),!0}),$cfs.bind(cf_e("pause",conf),function(t,e,s){if(t.stopPropagation(),tmrs=sc_clearTimers(tmrs),e&&crsl.isScrolling){scrl.isStopped=!0;var i=getTime()-scrl.startTime;scrl.duration-=i,scrl.pre&&(scrl.pre.duration-=i),scrl.post&&(scrl.post.duration-=i),sc_stopScroll(scrl,!1)}if(crsl.isPaused||crsl.isScrolling||s&&(tmrs.timePassed+=getTime()-tmrs.startTime),crsl.isPaused||opts.auto.button&&opts.auto.button.addClass(cf_c("paused",conf)),crsl.isPaused=!0,opts.auto.onTimeoutPause){var o=opts.auto.timeoutDuration-tmrs.timePassed,n=100-Math.ceil(100*o/opts.auto.timeoutDuration);opts.auto.onTimeoutPause.call($tt0,n,o)}return!0}),$cfs.bind(cf_e("play",conf),function(t,e,s,i){t.stopPropagation(),tmrs=sc_clearTimers(tmrs);var o=[e,s,i],n=["string","number","boolean"],r=cf_sortParams(o,n);if(e=r[0],s=r[1],i=r[2],"prev"!=e&&"next"!=e&&(e=crsl.direction),is_number(s)||(s=0),is_boolean(i)||(i=!1),i&&(crsl.isStopped=!1,opts.auto.play=!0),!opts.auto.play)return t.stopImmediatePropagation(),debug(conf,"Carousel stopped: Not scrolling.");crsl.isPaused&&opts.auto.button&&(opts.auto.button.removeClass(cf_c("stopped",conf)),opts.auto.button.removeClass(cf_c("paused",conf))),crsl.isPaused=!1,tmrs.startTime=getTime();var c=opts.auto.timeoutDuration+s;return dur2=c-tmrs.timePassed,perc=100-Math.ceil(100*dur2/c),opts.auto.progress&&(tmrs.progress=setInterval(function(){var t=getTime()-tmrs.startTime+tmrs.timePassed,e=Math.ceil(100*t/c);opts.auto.progress.updater.call(opts.auto.progress.bar[0],e)},opts.auto.progress.interval)),tmrs.auto=setTimeout(function(){opts.auto.progress&&opts.auto.progress.updater.call(opts.auto.progress.bar[0],100),opts.auto.onTimeoutEnd&&opts.auto.onTimeoutEnd.call($tt0,perc,dur2),crsl.isScrolling?$cfs.trigger(cf_e("play",conf),e):$cfs.trigger(cf_e(e,conf),opts.auto)},dur2),opts.auto.onTimeoutStart&&opts.auto.onTimeoutStart.call($tt0,perc,dur2),!0}),$cfs.bind(cf_e("resume",conf),function(t){return t.stopPropagation(),scrl.isStopped?(scrl.isStopped=!1,crsl.isPaused=!1,crsl.isScrolling=!0,scrl.startTime=getTime(),sc_startScroll(scrl,conf)):$cfs.trigger(cf_e("play",conf)),!0}),$cfs.bind(cf_e("prev",conf)+" "+cf_e("next",conf),function(t,e,s,i,o){if(t.stopPropagation(),crsl.isStopped||$cfs.is(":hidden"))return t.stopImmediatePropagation(),debug(conf,"Carousel stopped or hidden: Not scrolling.");var n=is_number(opts.items.minimum)?opts.items.minimum:opts.items.visible+1;if(n>itms.total)return t.stopImmediatePropagation(),debug(conf,"Not enough items ("+itms.total+" total, "+n+" needed): Not scrolling.");var r=[e,s,i,o],c=["object","number/string","function","boolean"],a=cf_sortParams(r,c);e=a[0],s=a[1],i=a[2],o=a[3];var f=t.type.slice(conf.events.prefix.length);if(is_object(e)||(e={}),is_function(i)&&(e.onAfter=i),is_boolean(o)&&(e.queue=o),e=$.extend(!0,{},opts[f],e),e.conditions&&!e.conditions.call($tt0,f))return t.stopImmediatePropagation(),debug(conf,'Callback "conditions" returned false.');if(!is_number(s)){if("*"!=opts.items.filter)s="visible";else for(var l=[s,e.items,opts[f].items],a=0,u=l.length;u>a;a++)if(is_number(l[a])||"page"==l[a]||"visible"==l[a]){s=l[a];break}switch(s){case"page":return t.stopImmediatePropagation(),$cfs.triggerHandler(cf_e(f+"Page",conf),[e,i]);case"visible":opts.items.visibleConf.variable||"*"!=opts.items.filter||(s=opts.items.visible)}}if(scrl.isStopped)return $cfs.trigger(cf_e("resume",conf)),$cfs.trigger(cf_e("queue",conf),[f,[e,s,i]]),t.stopImmediatePropagation(),debug(conf,"Carousel resumed scrolling.");if(e.duration>0&&crsl.isScrolling)return e.queue&&("last"==e.queue&&(queu=[]),("first"!=e.queue||0==queu.length)&&$cfs.trigger(cf_e("queue",conf),[f,[e,s,i]])),t.stopImmediatePropagation(),debug(conf,"Carousel currently scrolling.");if(tmrs.timePassed=0,$cfs.trigger(cf_e("slide_"+f,conf),[e,s]),opts.synchronise)for(var p=opts.synchronise,d=[e,s],g=0,u=p.length;u>g;g++){var m=f;p[g][2]||(m="prev"==m?"next":"prev"),p[g][1]||(d[0]=p[g][0].triggerHandler("_cfs_triggerEvent",["configuration",m])),d[1]=s+p[g][3],p[g][0].trigger("_cfs_triggerEvent",["slide_"+m,d])}return!0}),$cfs.bind(cf_e("slide_prev",conf),function(t,e,s){t.stopPropagation();var i=$cfs.children();if(!opts.circular&&0==itms.first)return opts.infinite&&$cfs.trigger(cf_e("next",conf),itms.total-1),t.stopImmediatePropagation();if(sz_resetMargin(i,opts),!is_number(s)){if(opts.items.visibleConf.variable)s=gn_getVisibleItemsPrev(i,opts,itms.total-1);else if("*"!=opts.items.filter){var o=is_number(e.items)?e.items:gn_getVisibleOrg($cfs,opts);s=gn_getScrollItemsPrevFilter(i,opts,itms.total-1,o)}else s=opts.items.visible;s=cf_getAdjust(s,opts,e.items,$tt0)}if(opts.circular||itms.total-s<itms.first&&(s=itms.total-itms.first),opts.items.visibleConf.old=opts.items.visible,opts.items.visibleConf.variable){var n=cf_getItemsAdjust(gn_getVisibleItemsNext(i,opts,itms.total-s),opts,opts.items.visibleConf.adjust,$tt0);opts.items.visible+s<=n&&s<itms.total&&(s++,n=cf_getItemsAdjust(gn_getVisibleItemsNext(i,opts,itms.total-s),opts,opts.items.visibleConf.adjust,$tt0)),opts.items.visible=n}else if("*"!=opts.items.filter){var n=gn_getVisibleItemsNextFilter(i,opts,itms.total-s);opts.items.visible=cf_getItemsAdjust(n,opts,opts.items.visibleConf.adjust,$tt0)}if(sz_resetMargin(i,opts,!0),0==s)return t.stopImmediatePropagation(),debug(conf,"0 items to scroll: Not scrolling.");for(debug(conf,"Scrolling "+s+" items backward."),itms.first+=s;itms.first>=itms.total;)itms.first-=itms.total;opts.circular||(0==itms.first&&e.onEnd&&e.onEnd.call($tt0,"prev"),opts.infinite||nv_enableNavi(opts,itms.first,conf)),$cfs.children().slice(itms.total-s,itms.total).prependTo($cfs),itms.total<opts.items.visible+s&&$cfs.children().slice(0,opts.items.visible+s-itms.total).clone(!0).appendTo($cfs);var i=$cfs.children(),r=gi_getOldItemsPrev(i,opts,s),c=gi_getNewItemsPrev(i,opts),a=i.eq(s-1),f=r.last(),l=c.last();sz_resetMargin(i,opts);var u=0,p=0;if(opts.align){var d=cf_getAlignPadding(c,opts);u=d[0],p=d[1]}var g=0>u?opts.padding[opts.d[3]]:0,m=!1,_=$();if(opts.items.visible<s&&(_=i.slice(opts.items.visibleConf.old,s),"directscroll"==e.fx)){var b=opts.items[opts.d.width];m=_,a=l,sc_hideHiddenItems(m),opts.items[opts.d.width]="variable"}var v=!1,h=ms_getTotalSize(i.slice(0,s),opts,"width"),w=cf_mapWrapperSizes(ms_getSizes(c,opts,!0),opts,!opts.usePadding),P=0,C={},x={},S={},y={},I={},z={},j={},N=sc_getDuration(e,opts,s,h);switch(e.fx){case"cover":case"cover-fade":P=ms_getTotalSize(i.slice(0,opts.items.visible),opts,"width")}m&&(opts.items[opts.d.width]=b),sz_resetMargin(i,opts,!0),p>=0&&sz_resetMargin(f,opts,opts.padding[opts.d[1]]),u>=0&&sz_resetMargin(a,opts,opts.padding[opts.d[3]]),opts.align&&(opts.padding[opts.d[1]]=p,opts.padding[opts.d[3]]=u),z[opts.d.left]=-(h-g),j[opts.d.left]=-(P-g),x[opts.d.left]=w[opts.d.width];var k=function(){},O=function(){},T=function(){},M=function(){},F=function(){},A=function(){},H=function(){},q=function(){},D=function(){},V=function(){},R=function(){};switch(e.fx){case"crossfade":case"cover":case"cover-fade":case"uncover":case"uncover-fade":v=$cfs.clone(!0).appendTo($wrp)}switch(e.fx){case"crossfade":case"uncover":case"uncover-fade":v.children().slice(0,s).remove(),v.children().slice(opts.items.visibleConf.old).remove();break;case"cover":case"cover-fade":v.children().slice(opts.items.visible).remove(),v.css(j)}if($cfs.css(z),scrl=sc_setScroll(N,e.easing,conf),C[opts.d.left]=opts.usePadding?opts.padding[opts.d[3]]:0,("variable"==opts[opts.d.width]||"variable"==opts[opts.d.height])&&(k=function(){$wrp.css(w)},O=function(){scrl.anims.push([$wrp,w])}),opts.usePadding){switch(l.not(a).length&&(S[opts.d.marginRight]=a.data("_cfs_origCssMargin"),0>u?a.css(S):(H=function(){a.css(S)},q=function(){scrl.anims.push([a,S])})),e.fx){case"cover":case"cover-fade":v.children().eq(s-1).css(S)}l.not(f).length&&(y[opts.d.marginRight]=f.data("_cfs_origCssMargin"),T=function(){f.css(y)},M=function(){scrl.anims.push([f,y])}),p>=0&&(I[opts.d.marginRight]=l.data("_cfs_origCssMargin")+opts.padding[opts.d[1]],F=function(){l.css(I)},A=function(){scrl.anims.push([l,I])})}R=function(){$cfs.css(C)};var E=opts.items.visible+s-itms.total;V=function(){if(E>0&&($cfs.children().slice(itms.total).remove(),r=$($cfs.children().slice(itms.total-(opts.items.visible-E)).get().concat($cfs.children().slice(0,E).get()))),sc_showHiddenItems(m),opts.usePadding){var t=$cfs.children().eq(opts.items.visible+s-1);t.css(opts.d.marginRight,t.data("_cfs_origCssMargin"))}};var W=sc_mapCallbackArguments(r,_,c,s,"prev",N,w);switch(D=function(){sc_afterScroll($cfs,v,e),crsl.isScrolling=!1,clbk.onAfter=sc_fireCallbacks($tt0,e,"onAfter",W,clbk),queu=sc_fireQueue($cfs,queu,conf),crsl.isPaused||$cfs.trigger(cf_e("play",conf))},crsl.isScrolling=!0,tmrs=sc_clearTimers(tmrs),clbk.onBefore=sc_fireCallbacks($tt0,e,"onBefore",W,clbk),e.fx){case"none":$cfs.css(C),k(),T(),F(),H(),R(),V(),D();break;case"fade":scrl.anims.push([$cfs,{opacity:0},function(){k(),T(),F(),H(),R(),V(),scrl=sc_setScroll(N,e.easing,conf),scrl.anims.push([$cfs,{opacity:1},D]),sc_startScroll(scrl,conf)}]);break;case"crossfade":$cfs.css({opacity:0}),scrl.anims.push([v,{opacity:0}]),scrl.anims.push([$cfs,{opacity:1},D]),O(),T(),F(),H(),R(),V();break;case"cover":scrl.anims.push([v,C,function(){T(),F(),H(),R(),V(),D()}]),O();break;case"cover-fade":scrl.anims.push([$cfs,{opacity:0}]),scrl.anims.push([v,C,function(){T(),F(),H(),R(),V(),D()}]),O();break;case"uncover":scrl.anims.push([v,x,D]),O(),T(),F(),H(),R(),V();break;case"uncover-fade":$cfs.css({opacity:0}),scrl.anims.push([$cfs,{opacity:1}]),scrl.anims.push([v,x,D]),O(),T(),F(),H(),R(),V();break;default:scrl.anims.push([$cfs,C,function(){V(),D()}]),O(),M(),A(),q()}return sc_startScroll(scrl,conf),cf_setCookie(opts.cookie,$cfs,conf),$cfs.trigger(cf_e("updatePageStatus",conf),[!1,w]),!0
|
2 |
}),$cfs.bind(cf_e("slide_next",conf),function(t,e,s){t.stopPropagation();var i=$cfs.children();if(!opts.circular&&itms.first==opts.items.visible)return opts.infinite&&$cfs.trigger(cf_e("prev",conf),itms.total-1),t.stopImmediatePropagation();if(sz_resetMargin(i,opts),!is_number(s)){if("*"!=opts.items.filter){var o=is_number(e.items)?e.items:gn_getVisibleOrg($cfs,opts);s=gn_getScrollItemsNextFilter(i,opts,0,o)}else s=opts.items.visible;s=cf_getAdjust(s,opts,e.items,$tt0)}var n=0==itms.first?itms.total:itms.first;if(!opts.circular){if(opts.items.visibleConf.variable)var r=gn_getVisibleItemsNext(i,opts,s),o=gn_getVisibleItemsPrev(i,opts,n-1);else var r=opts.items.visible,o=opts.items.visible;s+r>n&&(s=n-o)}if(opts.items.visibleConf.old=opts.items.visible,opts.items.visibleConf.variable){for(var r=cf_getItemsAdjust(gn_getVisibleItemsNextTestCircular(i,opts,s,n),opts,opts.items.visibleConf.adjust,$tt0);opts.items.visible-s>=r&&s<itms.total;)s++,r=cf_getItemsAdjust(gn_getVisibleItemsNextTestCircular(i,opts,s,n),opts,opts.items.visibleConf.adjust,$tt0);opts.items.visible=r}else if("*"!=opts.items.filter){var r=gn_getVisibleItemsNextFilter(i,opts,s);opts.items.visible=cf_getItemsAdjust(r,opts,opts.items.visibleConf.adjust,$tt0)}if(sz_resetMargin(i,opts,!0),0==s)return t.stopImmediatePropagation(),debug(conf,"0 items to scroll: Not scrolling.");for(debug(conf,"Scrolling "+s+" items forward."),itms.first-=s;itms.first<0;)itms.first+=itms.total;opts.circular||(itms.first==opts.items.visible&&e.onEnd&&e.onEnd.call($tt0,"next"),opts.infinite||nv_enableNavi(opts,itms.first,conf)),itms.total<opts.items.visible+s&&$cfs.children().slice(0,opts.items.visible+s-itms.total).clone(!0).appendTo($cfs);var i=$cfs.children(),c=gi_getOldItemsNext(i,opts),a=gi_getNewItemsNext(i,opts,s),f=i.eq(s-1),l=c.last(),u=a.last();sz_resetMargin(i,opts);var p=0,d=0;if(opts.align){var g=cf_getAlignPadding(a,opts);p=g[0],d=g[1]}var m=!1,_=$();if(opts.items.visibleConf.old<s&&(_=i.slice(opts.items.visibleConf.old,s),"directscroll"==e.fx)){var b=opts.items[opts.d.width];m=_,f=l,sc_hideHiddenItems(m),opts.items[opts.d.width]="variable"}var v=!1,h=ms_getTotalSize(i.slice(0,s),opts,"width"),w=cf_mapWrapperSizes(ms_getSizes(a,opts,!0),opts,!opts.usePadding),P=0,C={},x={},S={},y={},I={},z=sc_getDuration(e,opts,s,h);switch(e.fx){case"uncover":case"uncover-fade":P=ms_getTotalSize(i.slice(0,opts.items.visibleConf.old),opts,"width")}m&&(opts.items[opts.d.width]=b),opts.align&&opts.padding[opts.d[1]]<0&&(opts.padding[opts.d[1]]=0),sz_resetMargin(i,opts,!0),sz_resetMargin(l,opts,opts.padding[opts.d[1]]),opts.align&&(opts.padding[opts.d[1]]=d,opts.padding[opts.d[3]]=p),I[opts.d.left]=opts.usePadding?opts.padding[opts.d[3]]:0;var j=function(){},N=function(){},k=function(){},O=function(){},T=function(){},M=function(){},F=function(){},A=function(){},H=function(){};switch(e.fx){case"crossfade":case"cover":case"cover-fade":case"uncover":case"uncover-fade":v=$cfs.clone(!0).appendTo($wrp),v.children().slice(opts.items.visibleConf.old).remove()}switch(e.fx){case"crossfade":case"cover":case"cover-fade":$cfs.css("zIndex",1),v.css("zIndex",0)}if(scrl=sc_setScroll(z,e.easing,conf),C[opts.d.left]=-h,x[opts.d.left]=-P,0>p&&(C[opts.d.left]+=p),("variable"==opts[opts.d.width]||"variable"==opts[opts.d.height])&&(j=function(){$wrp.css(w)},N=function(){scrl.anims.push([$wrp,w])}),opts.usePadding){var q=u.data("_cfs_origCssMargin");d>=0&&(q+=opts.padding[opts.d[1]]),u.css(opts.d.marginRight,q),f.not(l).length&&(y[opts.d.marginRight]=l.data("_cfs_origCssMargin")),k=function(){l.css(y)},O=function(){scrl.anims.push([l,y])};var D=f.data("_cfs_origCssMargin");p>0&&(D+=opts.padding[opts.d[3]]),S[opts.d.marginRight]=D,T=function(){f.css(S)},M=function(){scrl.anims.push([f,S])}}H=function(){$cfs.css(I)};var V=opts.items.visible+s-itms.total;A=function(){V>0&&$cfs.children().slice(itms.total).remove();var t=$cfs.children().slice(0,s).appendTo($cfs).last();if(V>0&&(a=gi_getCurrentItems(i,opts)),sc_showHiddenItems(m),opts.usePadding){if(itms.total<opts.items.visible+s){var e=$cfs.children().eq(opts.items.visible-1);e.css(opts.d.marginRight,e.data("_cfs_origCssMargin")+opts.padding[opts.d[1]])}t.css(opts.d.marginRight,t.data("_cfs_origCssMargin"))}};var R=sc_mapCallbackArguments(c,_,a,s,"next",z,w);switch(F=function(){$cfs.css("zIndex",$cfs.data("_cfs_origCssZindex")),sc_afterScroll($cfs,v,e),crsl.isScrolling=!1,clbk.onAfter=sc_fireCallbacks($tt0,e,"onAfter",R,clbk),queu=sc_fireQueue($cfs,queu,conf),crsl.isPaused||$cfs.trigger(cf_e("play",conf))},crsl.isScrolling=!0,tmrs=sc_clearTimers(tmrs),clbk.onBefore=sc_fireCallbacks($tt0,e,"onBefore",R,clbk),e.fx){case"none":$cfs.css(C),j(),k(),T(),H(),A(),F();break;case"fade":scrl.anims.push([$cfs,{opacity:0},function(){j(),k(),T(),H(),A(),scrl=sc_setScroll(z,e.easing,conf),scrl.anims.push([$cfs,{opacity:1},F]),sc_startScroll(scrl,conf)}]);break;case"crossfade":$cfs.css({opacity:0}),scrl.anims.push([v,{opacity:0}]),scrl.anims.push([$cfs,{opacity:1},F]),N(),k(),T(),H(),A();break;case"cover":$cfs.css(opts.d.left,$wrp[opts.d.width]()),scrl.anims.push([$cfs,I,F]),N(),k(),T(),A();break;case"cover-fade":$cfs.css(opts.d.left,$wrp[opts.d.width]()),scrl.anims.push([v,{opacity:0}]),scrl.anims.push([$cfs,I,F]),N(),k(),T(),A();break;case"uncover":scrl.anims.push([v,x,F]),N(),k(),T(),H(),A();break;case"uncover-fade":$cfs.css({opacity:0}),scrl.anims.push([$cfs,{opacity:1}]),scrl.anims.push([v,x,F]),N(),k(),T(),H(),A();break;default:scrl.anims.push([$cfs,C,function(){H(),A(),F()}]),N(),O(),M()}return sc_startScroll(scrl,conf),cf_setCookie(opts.cookie,$cfs,conf),$cfs.trigger(cf_e("updatePageStatus",conf),[!1,w]),!0}),$cfs.bind(cf_e("slideTo",conf),function(t,e,s,i,o,n,r){t.stopPropagation();var c=[e,s,i,o,n,r],a=["string/number/object","number","boolean","object","string","function"],f=cf_sortParams(c,a);return o=f[3],n=f[4],r=f[5],e=gn_getItemIndex(f[0],f[1],f[2],itms,$cfs),0==e?!1:(is_object(o)||(o=!1),"prev"!=n&&"next"!=n&&(n=opts.circular?e<=itms.total/2?"next":"prev":0==itms.first||itms.first>e?"next":"prev"),"prev"==n&&(e=itms.total-e),$cfs.trigger(cf_e(n,conf),[o,e,r]),!0)}),$cfs.bind(cf_e("prevPage",conf),function(t,e,s){t.stopPropagation();var i=$cfs.triggerHandler(cf_e("currentPage",conf));return $cfs.triggerHandler(cf_e("slideToPage",conf),[i-1,e,"prev",s])}),$cfs.bind(cf_e("nextPage",conf),function(t,e,s){t.stopPropagation();var i=$cfs.triggerHandler(cf_e("currentPage",conf));return $cfs.triggerHandler(cf_e("slideToPage",conf),[i+1,e,"next",s])}),$cfs.bind(cf_e("slideToPage",conf),function(t,e,s,i,o){t.stopPropagation(),is_number(e)||(e=$cfs.triggerHandler(cf_e("currentPage",conf)));var n=opts.pagination.items||opts.items.visible,r=Math.ceil(itms.total/n)-1;return 0>e&&(e=r),e>r&&(e=0),$cfs.triggerHandler(cf_e("slideTo",conf),[e*n,0,!0,s,i,o])}),$cfs.bind(cf_e("jumpToStart",conf),function(t,e){if(t.stopPropagation(),e=e?gn_getItemIndex(e,0,!0,itms,$cfs):0,e+=itms.first,0!=e){if(itms.total>0)for(;e>itms.total;)e-=itms.total;$cfs.prepend($cfs.children().slice(e,itms.total))}return!0}),$cfs.bind(cf_e("synchronise",conf),function(t,e){if(t.stopPropagation(),e)e=cf_getSynchArr(e);else{if(!opts.synchronise)return debug(conf,"No carousel to synchronise.");e=opts.synchronise}for(var s=$cfs.triggerHandler(cf_e("currentPosition",conf)),i=!0,o=0,n=e.length;n>o;o++)e[o][0].triggerHandler(cf_e("slideTo",conf),[s,e[o][3],!0])||(i=!1);return i}),$cfs.bind(cf_e("queue",conf),function(t,e,s){return t.stopPropagation(),is_function(e)?e.call($tt0,queu):is_array(e)?queu=e:is_undefined(e)||queu.push([e,s]),queu}),$cfs.bind(cf_e("insertItem",conf),function(t,e,s,i,o){t.stopPropagation();var n=[e,s,i,o],r=["string/object","string/number/object","boolean","number"],c=cf_sortParams(n,r);if(e=c[0],s=c[1],i=c[2],o=c[3],is_object(e)&&!is_jquery(e)?e=$(e):is_string(e)&&(e=$(e)),!is_jquery(e)||0==e.length)return debug(conf,"Not a valid object.");is_undefined(s)&&(s="end"),sz_storeMargin(e,opts),sz_storeOrigCss(e);var a=s,f="before";"end"==s?i?(0==itms.first?(s=itms.total-1,f="after"):(s=itms.first,itms.first+=e.length),0>s&&(s=0)):(s=itms.total-1,f="after"):s=gn_getItemIndex(s,o,i,itms,$cfs);var l=$cfs.children().eq(s);return l.length?l[f](e):(debug(conf,"Correct insert-position not found! Appending item to the end."),$cfs.append(e)),"end"==a||i||s<itms.first&&(itms.first+=e.length),itms.total=$cfs.children().length,itms.first>=itms.total&&(itms.first-=itms.total),$cfs.trigger(cf_e("updateSizes",conf)),$cfs.trigger(cf_e("linkAnchors",conf)),!0}),$cfs.bind(cf_e("removeItem",conf),function(t,e,s,i){t.stopPropagation();var o=[e,s,i],n=["string/number/object","boolean","number"],r=cf_sortParams(o,n);e=r[0],s=r[1],i=r[2];if(e instanceof $&&e.length>1)return c=$(),e.each(function(){var t=$cfs.trigger(cf_e("removeItem",conf),[$(this),s,i]);t&&(c=c.add(t))}),c;if(is_undefined(e)||"end"==e)c=$cfs.children().last();else{e=gn_getItemIndex(e,i,s,itms,$cfs);var c=$cfs.children().eq(e);c.length&&e<itms.first&&(itms.first-=c.length)}return c&&c.length&&(c.detach(),itms.total=$cfs.children().length,$cfs.trigger(cf_e("updateSizes",conf))),c}),$cfs.bind(cf_e("onBefore",conf)+" "+cf_e("onAfter",conf),function(t,e){t.stopPropagation();var s=t.type.slice(conf.events.prefix.length);return is_array(e)&&(clbk[s]=e),is_function(e)&&clbk[s].push(e),clbk[s]}),$cfs.bind(cf_e("currentPosition",conf),function(t,e){if(t.stopPropagation(),0==itms.first)var s=0;else var s=itms.total-itms.first;return is_function(e)&&e.call($tt0,s),s}),$cfs.bind(cf_e("currentPage",conf),function(t,e){t.stopPropagation();var s,i=opts.pagination.items||opts.items.visible,o=Math.ceil(itms.total/i-1);return s=0==itms.first?0:itms.first<itms.total%i?0:itms.first!=i||opts.circular?Math.round((itms.total-itms.first)/i):o,0>s&&(s=0),s>o&&(s=o),is_function(e)&&e.call($tt0,s),s}),$cfs.bind(cf_e("currentVisible",conf),function(t,e){t.stopPropagation();var s=gi_getCurrentItems($cfs.children(),opts);return is_function(e)&&e.call($tt0,s),s}),$cfs.bind(cf_e("slice",conf),function(t,e,s,i){if(t.stopPropagation(),0==itms.total)return!1;var o=[e,s,i],n=["number","number","function"],r=cf_sortParams(o,n);if(e=is_number(r[0])?r[0]:0,s=is_number(r[1])?r[1]:itms.total,i=r[2],e+=itms.first,s+=itms.first,items.total>0){for(;e>itms.total;)e-=itms.total;for(;s>itms.total;)s-=itms.total;for(;0>e;)e+=itms.total;for(;0>s;)s+=itms.total}var c,a=$cfs.children();return c=s>e?a.slice(e,s):$(a.slice(e,itms.total).get().concat(a.slice(0,s).get())),is_function(i)&&i.call($tt0,c),c}),$cfs.bind(cf_e("isPaused",conf)+" "+cf_e("isStopped",conf)+" "+cf_e("isScrolling",conf),function(t,e){t.stopPropagation();var s=t.type.slice(conf.events.prefix.length),i=crsl[s];return is_function(e)&&e.call($tt0,i),i}),$cfs.bind(cf_e("configuration",conf),function(e,a,b,c){e.stopPropagation();var reInit=!1;if(is_function(a))a.call($tt0,opts);else if(is_object(a))opts_orig=$.extend(!0,{},opts_orig,a),b!==!1?reInit=!0:opts=$.extend(!0,{},opts,a);else if(!is_undefined(a))if(is_function(b)){var val=eval("opts."+a);is_undefined(val)&&(val=""),b.call($tt0,val)}else{if(is_undefined(b))return eval("opts."+a);"boolean"!=typeof c&&(c=!0),eval("opts_orig."+a+" = b"),c!==!1?reInit=!0:eval("opts."+a+" = b")}if(reInit){sz_resetMargin($cfs.children(),opts),FN._init(opts_orig),FN._bind_buttons();var sz=sz_setSizes($cfs,opts);$cfs.trigger(cf_e("updatePageStatus",conf),[!0,sz])}return opts}),$cfs.bind(cf_e("linkAnchors",conf),function(t,e,s){return t.stopPropagation(),is_undefined(e)?e=$("body"):is_string(e)&&(e=$(e)),is_jquery(e)&&0!=e.length?(is_string(s)||(s="a.caroufredsel"),e.find(s).each(function(){var t=this.hash||"";t.length>0&&-1!=$cfs.children().index($(t))&&$(this).unbind("click").click(function(e){e.preventDefault(),$cfs.trigger(cf_e("slideTo",conf),t)})}),!0):debug(conf,"Not a valid object.")}),$cfs.bind(cf_e("updatePageStatus",conf),function(t,e){if(t.stopPropagation(),opts.pagination.container){var s=opts.pagination.items||opts.items.visible,i=Math.ceil(itms.total/s);e&&(opts.pagination.anchorBuilder&&(opts.pagination.container.children().remove(),opts.pagination.container.each(function(){for(var t=0;i>t;t++){var e=$cfs.children().eq(gn_getItemIndex(t*s,0,!0,itms,$cfs));$(this).append(opts.pagination.anchorBuilder.call(e[0],t+1))}})),opts.pagination.container.each(function(){$(this).children().unbind(opts.pagination.event).each(function(t){$(this).bind(opts.pagination.event,function(e){e.preventDefault(),$cfs.trigger(cf_e("slideTo",conf),[t*s,-opts.pagination.deviation,!0,opts.pagination])})})}));var o=$cfs.triggerHandler(cf_e("currentPage",conf))+opts.pagination.deviation;return o>=i&&(o=0),0>o&&(o=i-1),opts.pagination.container.each(function(){$(this).children().removeClass(cf_c("selected",conf)).eq(o).addClass(cf_c("selected",conf))}),!0}}),$cfs.bind(cf_e("updateSizes",conf),function(){var t=opts.items.visible,e=$cfs.children(),s=ms_getParentSize($wrp,opts,"width");if(itms.total=e.length,crsl.primarySizePercentage?(opts.maxDimension=s,opts[opts.d.width]=ms_getPercentage(s,crsl.primarySizePercentage)):opts.maxDimension=ms_getMaxDimension(opts,s),opts.responsive?(opts.items.width=opts.items.sizesConf.width,opts.items.height=opts.items.sizesConf.height,opts=in_getResponsiveValues(opts,e,s),t=opts.items.visible,sz_setResponsiveSizes(opts,e)):opts.items.visibleConf.variable?t=gn_getVisibleItemsNext(e,opts,0):"*"!=opts.items.filter&&(t=gn_getVisibleItemsNextFilter(e,opts,0)),!opts.circular&&0!=itms.first&&t>itms.first){if(opts.items.visibleConf.variable)var i=gn_getVisibleItemsPrev(e,opts,itms.first)-itms.first;else if("*"!=opts.items.filter)var i=gn_getVisibleItemsPrevFilter(e,opts,itms.first)-itms.first;else var i=opts.items.visible-itms.first;debug(conf,"Preventing non-circular: sliding "+i+" items backward."),$cfs.trigger(cf_e("prev",conf),i)}opts.items.visible=cf_getItemsAdjust(t,opts,opts.items.visibleConf.adjust,$tt0),opts.items.visibleConf.old=opts.items.visible,opts=in_getAlignPadding(opts,e);var o=sz_setSizes($cfs,opts);return $cfs.trigger(cf_e("updatePageStatus",conf),[!0,o]),nv_showNavi(opts,itms.total,conf),nv_enableNavi(opts,itms.first,conf),o}),$cfs.bind(cf_e("destroy",conf),function(t,e){return t.stopPropagation(),tmrs=sc_clearTimers(tmrs),$cfs.data("_cfs_isCarousel",!1),$cfs.trigger(cf_e("finish",conf)),e&&$cfs.trigger(cf_e("jumpToStart",conf)),sz_restoreOrigCss($cfs.children()),sz_restoreOrigCss($cfs),FN._unbind_events(),FN._unbind_buttons(),"parent"==conf.wrapper?sz_restoreOrigCss($wrp):$wrp.replaceWith($cfs),!0}),$cfs.bind(cf_e("debug",conf),function(){return debug(conf,"Carousel width: "+opts.width),debug(conf,"Carousel height: "+opts.height),debug(conf,"Item widths: "+opts.items.width),debug(conf,"Item heights: "+opts.items.height),debug(conf,"Number of items visible: "+opts.items.visible),opts.auto.play&&debug(conf,"Number of items scrolled automatically: "+opts.auto.items),opts.prev.button&&debug(conf,"Number of items scrolled backward: "+opts.prev.items),opts.next.button&&debug(conf,"Number of items scrolled forward: "+opts.next.items),conf.debug}),$cfs.bind("_cfs_triggerEvent",function(t,e,s){return t.stopPropagation(),$cfs.triggerHandler(cf_e(e,conf),s)})},FN._unbind_events=function(){$cfs.unbind(cf_e("",conf)),$cfs.unbind(cf_e("",conf,!1)),$cfs.unbind("_cfs_triggerEvent")},FN._bind_buttons=function(){if(FN._unbind_buttons(),nv_showNavi(opts,itms.total,conf),nv_enableNavi(opts,itms.first,conf),opts.auto.pauseOnHover){var t=bt_pauseOnHoverConfig(opts.auto.pauseOnHover);$wrp.bind(cf_e("mouseenter",conf,!1),function(){$cfs.trigger(cf_e("pause",conf),t)}).bind(cf_e("mouseleave",conf,!1),function(){$cfs.trigger(cf_e("resume",conf))})}if(opts.auto.button&&opts.auto.button.bind(cf_e(opts.auto.event,conf,!1),function(t){t.preventDefault();var e=!1,s=null;crsl.isPaused?e="play":opts.auto.pauseOnEvent&&(e="pause",s=bt_pauseOnHoverConfig(opts.auto.pauseOnEvent)),e&&$cfs.trigger(cf_e(e,conf),s)}),opts.prev.button&&(opts.prev.button.bind(cf_e(opts.prev.event,conf,!1),function(t){t.preventDefault(),$cfs.trigger(cf_e("prev",conf))}),opts.prev.pauseOnHover)){var t=bt_pauseOnHoverConfig(opts.prev.pauseOnHover);opts.prev.button.bind(cf_e("mouseenter",conf,!1),function(){$cfs.trigger(cf_e("pause",conf),t)}).bind(cf_e("mouseleave",conf,!1),function(){$cfs.trigger(cf_e("resume",conf))})}if(opts.next.button&&(opts.next.button.bind(cf_e(opts.next.event,conf,!1),function(t){t.preventDefault(),$cfs.trigger(cf_e("next",conf))}),opts.next.pauseOnHover)){var t=bt_pauseOnHoverConfig(opts.next.pauseOnHover);opts.next.button.bind(cf_e("mouseenter",conf,!1),function(){$cfs.trigger(cf_e("pause",conf),t)}).bind(cf_e("mouseleave",conf,!1),function(){$cfs.trigger(cf_e("resume",conf))})}if(opts.pagination.container&&opts.pagination.pauseOnHover){var t=bt_pauseOnHoverConfig(opts.pagination.pauseOnHover);opts.pagination.container.bind(cf_e("mouseenter",conf,!1),function(){$cfs.trigger(cf_e("pause",conf),t)}).bind(cf_e("mouseleave",conf,!1),function(){$cfs.trigger(cf_e("resume",conf))})}if((opts.prev.key||opts.next.key)&&$(document).bind(cf_e("keyup",conf,!1,!0,!0),function(t){var e=t.keyCode;e==opts.next.key&&(t.preventDefault(),$cfs.trigger(cf_e("next",conf))),e==opts.prev.key&&(t.preventDefault(),$cfs.trigger(cf_e("prev",conf)))}),opts.pagination.keys&&$(document).bind(cf_e("keyup",conf,!1,!0,!0),function(t){var e=t.keyCode;e>=49&&58>e&&(e=(e-49)*opts.items.visible,e<=itms.total&&(t.preventDefault(),$cfs.trigger(cf_e("slideTo",conf),[e,0,!0,opts.pagination])))}),$.fn.swipe){var e="ontouchstart"in window;if(e&&opts.swipe.onTouch||!e&&opts.swipe.onMouse){var s=$.extend(!0,{},opts.prev,opts.swipe),i=$.extend(!0,{},opts.next,opts.swipe),o=function(){$cfs.trigger(cf_e("prev",conf),[s])},n=function(){$cfs.trigger(cf_e("next",conf),[i])};switch(opts.direction){case"up":case"down":opts.swipe.options.swipeUp=n,opts.swipe.options.swipeDown=o;break;default:opts.swipe.options.swipeLeft=n,opts.swipe.options.swipeRight=o}crsl.swipe&&$cfs.swipe("destroy"),$wrp.swipe(opts.swipe.options),$wrp.css("cursor","move"),crsl.swipe=!0}}if($.fn.mousewheel&&opts.mousewheel){var r=$.extend(!0,{},opts.prev,opts.mousewheel),c=$.extend(!0,{},opts.next,opts.mousewheel);crsl.mousewheel&&$wrp.unbind(cf_e("mousewheel",conf,!1)),$wrp.bind(cf_e("mousewheel",conf,!1),function(t,e){t.preventDefault(),e>0?$cfs.trigger(cf_e("prev",conf),[r]):$cfs.trigger(cf_e("next",conf),[c])}),crsl.mousewheel=!0}if(opts.auto.play&&$cfs.trigger(cf_e("play",conf),opts.auto.delay),crsl.upDateOnWindowResize){var a=function(){$cfs.trigger(cf_e("finish",conf)),opts.auto.pauseOnResize&&!crsl.isPaused&&$cfs.trigger(cf_e("play",conf)),sz_resetMargin($cfs.children(),opts),$cfs.trigger(cf_e("updateSizes",conf))},f=$(window),l=null;if($.debounce&&"debounce"==conf.onWindowResize)l=$.debounce(200,a);else if($.throttle&&"throttle"==conf.onWindowResize)l=$.throttle(300,a);else{var u=0,p=0;l=function(){var t=f.width(),e=f.height();(t!=u||e!=p)&&(a(),u=t,p=e)}}f.bind(cf_e("resize",conf,!1,!0,!0),l)}},FN._unbind_buttons=function(){var t=(cf_e("",conf),cf_e("",conf,!1));ns3=cf_e("",conf,!1,!0,!0),$(document).unbind(ns3),$(window).unbind(ns3),$wrp.unbind(t),opts.auto.button&&opts.auto.button.unbind(t),opts.prev.button&&opts.prev.button.unbind(t),opts.next.button&&opts.next.button.unbind(t),opts.pagination.container&&(opts.pagination.container.unbind(t),opts.pagination.anchorBuilder&&opts.pagination.container.children().remove()),crsl.swipe&&($cfs.swipe("destroy"),$wrp.css("cursor","default"),crsl.swipe=!1),crsl.mousewheel&&(crsl.mousewheel=!1),nv_showNavi(opts,"hide",conf),nv_enableNavi(opts,"removeClass",conf)},is_boolean(configs)&&(configs={debug:configs});var crsl={direction:"next",isPaused:!0,isScrolling:!1,isStopped:!1,mousewheel:!1,swipe:!1},itms={total:$cfs.children().length,first:0},tmrs={auto:null,progress:null,startTime:getTime(),timePassed:0},scrl={isStopped:!1,duration:0,startTime:0,easing:"",anims:[]},clbk={onBefore:[],onAfter:[]},queu=[],conf=$.extend(!0,{},$.fn.carouFredSel.configs,configs),opts={},opts_orig=$.extend(!0,{},options),$wrp="parent"==conf.wrapper?$cfs.parent():$cfs.wrap("<"+conf.wrapper.element+' class="'+conf.wrapper.classname+'" />').parent();if(conf.selector=$cfs.selector,conf.serialNumber=$.fn.carouFredSel.serialNumber++,conf.transition=conf.transition&&$.fn.transition?"transition":"animate",FN._init(opts_orig,!0,starting_position),FN._build(),FN._bind_events(),FN._bind_buttons(),is_array(opts.items.start))var start_arr=opts.items.start;else{var start_arr=[];0!=opts.items.start&&start_arr.push(opts.items.start)}if(opts.cookie&&start_arr.unshift(parseInt(cf_getCookie(opts.cookie),10)),start_arr.length>0)for(var a=0,l=start_arr.length;l>a;a++){var s=start_arr[a];if(0!=s){if(s===!0){if(s=window.location.hash,s.length<1)continue}else"random"===s&&(s=Math.floor(Math.random()*itms.total));if($cfs.triggerHandler(cf_e("slideTo",conf),[s,0,!0,{fx:"none"}]))break}}var siz=sz_setSizes($cfs,opts),itm=gi_getCurrentItems($cfs.children(),opts);return opts.onCreate&&opts.onCreate.call($tt0,{width:siz.width,height:siz.height,items:itm}),$cfs.trigger(cf_e("updatePageStatus",conf),[!0,siz]),$cfs.trigger(cf_e("linkAnchors",conf)),conf.debug&&$cfs.trigger(cf_e("debug",conf)),$cfs},$.fn.carouFredSel.serialNumber=1,$.fn.carouFredSel.defaults={synchronise:!1,infinite:!0,circular:!0,responsive:!1,direction:"left",items:{start:0},scroll:{easing:"swing",duration:500,pauseOnHover:!1,event:"click",queue:!1}},$.fn.carouFredSel.configs={debug:!1,transition:!1,onWindowResize:"throttle",events:{prefix:"",namespace:"cfs"},wrapper:{element:"div",classname:"caroufredsel_wrapper"},classnames:{}},$.fn.carouFredSel.pageAnchorBuilder=function(t){return'<a href="#"><span>'+t+"</span></a>"},$.fn.carouFredSel.progressbarUpdater=function(t){$(this).css("width",t+"%")},$.fn.carouFredSel.cookie={get:function(t){t+="=";for(var e=document.cookie.split(";"),s=0,i=e.length;i>s;s++){for(var o=e[s];" "==o.charAt(0);)o=o.slice(1);if(0==o.indexOf(t))return o.slice(t.length)}return 0},set:function(t,e,s){var i="";if(s){var o=new Date;o.setTime(o.getTime()+24*s*60*60*1e3),i="; expires="+o.toGMTString()}document.cookie=t+"="+e+i+"; path=/"},remove:function(t){$.fn.carouFredSel.cookie.set(t,"",-1)}},$.extend($.easing,{quadratic:function(t){var e=t*t;return t*(-e*t+4*e-6*t+4)},cubic:function(t){return t*(4*t*t-9*t+6)},elastic:function(t){var e=t*t;return t*(33*e*e-106*e*t+126*e-67*t+15)}}))}(jQuery);
|
assets/js/ywzm_frontend.js
CHANGED
@@ -1,60 +1,60 @@
|
|
1 |
-
/**
|
2 |
-
* frontend.js
|
3 |
-
*
|
4 |
-
* @author Your Inspiration Themes
|
5 |
-
* @package YITH WooCommerce Zoom Magnifier
|
6 |
-
*/
|
7 |
-
jQuery(document).ready(function ($) {
|
8 |
-
|
9 |
-
var yith_wcmg = $('.images');
|
10 |
-
var yith_wcmg_zoom = $('.yith_magnifier_zoom');
|
11 |
-
var yith_wcmg_image = $('.yith_magnifier_zoom img').first();
|
12 |
-
|
13 |
-
var yith_wcmg_default_zoom = yith_wcmg.find('.yith_magnifier_zoom').attr('href');
|
14 |
-
var yith_wcmg_default_image = yith_wcmg.find('.yith_magnifier_zoom img').attr('src');
|
15 |
-
|
16 |
-
if (typeof yith_magnifier_options == 'undefined') {
|
17 |
-
return false;
|
18 |
-
}
|
19 |
-
|
20 |
-
yith_wcmg.yith_magnifier(yith_magnifier_options);
|
21 |
-
|
22 |
-
$(document).on('found_variation', 'form.variations_form', function (event, variation) {
|
23 |
-
|
24 |
-
var image_magnifier = variation.image_magnifier ? variation.image_magnifier : yith_wcmg_default_zoom;
|
25 |
-
|
26 |
-
var image_src = yith_wcmg_default_image;
|
27 |
-
if (ywzm_data.wc_before_3_0) {
|
28 |
-
if (variation.image_src) {
|
29 |
-
image_src = variation.image_src;
|
30 |
-
}
|
31 |
-
}
|
32 |
-
else if (variation.image.src) {
|
33 |
-
image_src = variation.image.src;
|
34 |
-
}
|
35 |
-
|
36 |
-
yith_wcmg_zoom.attr('href', image_magnifier);
|
37 |
-
yith_wcmg_image.attr('src', image_src);
|
38 |
-
yith_wcmg_image.attr('srcset', image_src);
|
39 |
-
yith_wcmg_image.attr('src-orig', image_src);
|
40 |
-
|
41 |
-
if (yith_wcmg.data('yith_magnifier')) {
|
42 |
-
yith_wcmg.yith_magnifier('destroy');
|
43 |
-
}
|
44 |
-
|
45 |
-
yith_wcmg.yith_magnifier(yith_magnifier_options);
|
46 |
-
}).on('reset_image', function (event) {
|
47 |
-
yith_wcmg_zoom.attr('href', yith_wcmg_default_zoom);
|
48 |
-
yith_wcmg_image.attr('src', yith_wcmg_default_image);
|
49 |
-
yith_wcmg_image.attr('srcset', yith_wcmg_default_image);
|
50 |
-
yith_wcmg_image.attr('src-orig', yith_wcmg_default_image);
|
51 |
-
|
52 |
-
if (yith_wcmg.data('yith_magnifier')) {
|
53 |
-
yith_wcmg.yith_magnifier('destroy');
|
54 |
-
}
|
55 |
-
|
56 |
-
yith_wcmg.yith_magnifier(yith_magnifier_options);
|
57 |
-
});
|
58 |
-
|
59 |
-
$('form.variations_form .variations select').trigger('change');
|
60 |
});
|
1 |
+
/**
|
2 |
+
* frontend.js
|
3 |
+
*
|
4 |
+
* @author Your Inspiration Themes
|
5 |
+
* @package YITH WooCommerce Zoom Magnifier
|
6 |
+
*/
|
7 |
+
jQuery(document).ready(function ($) {
|
8 |
+
|
9 |
+
var yith_wcmg = $('.images');
|
10 |
+
var yith_wcmg_zoom = $('.yith_magnifier_zoom');
|
11 |
+
var yith_wcmg_image = $('.yith_magnifier_zoom img').first();
|
12 |
+
|
13 |
+
var yith_wcmg_default_zoom = yith_wcmg.find('.yith_magnifier_zoom').attr('href');
|
14 |
+
var yith_wcmg_default_image = yith_wcmg.find('.yith_magnifier_zoom img').attr('src');
|
15 |
+
|
16 |
+
if (typeof yith_magnifier_options == 'undefined') {
|
17 |
+
return false;
|
18 |
+
}
|
19 |
+
|
20 |
+
yith_wcmg.yith_magnifier(yith_magnifier_options);
|
21 |
+
|
22 |
+
$(document).on('found_variation', 'form.variations_form', function (event, variation) {
|
23 |
+
|
24 |
+
var image_magnifier = variation.image_magnifier ? variation.image_magnifier : yith_wcmg_default_zoom;
|
25 |
+
|
26 |
+
var image_src = yith_wcmg_default_image;
|
27 |
+
if (ywzm_data.wc_before_3_0) {
|
28 |
+
if (variation.image_src) {
|
29 |
+
image_src = variation.image_src;
|
30 |
+
}
|
31 |
+
}
|
32 |
+
else if (variation.image.src) {
|
33 |
+
image_src = variation.image.src;
|
34 |
+
}
|
35 |
+
|
36 |
+
yith_wcmg_zoom.attr('href', image_magnifier);
|
37 |
+
yith_wcmg_image.attr('src', image_src);
|
38 |
+
yith_wcmg_image.attr('srcset', image_src);
|
39 |
+
yith_wcmg_image.attr('src-orig', image_src);
|
40 |
+
|
41 |
+
if (yith_wcmg.data('yith_magnifier')) {
|
42 |
+
yith_wcmg.yith_magnifier('destroy');
|
43 |
+
}
|
44 |
+
|
45 |
+
yith_wcmg.yith_magnifier(yith_magnifier_options);
|
46 |
+
}).on('reset_image', function (event) {
|
47 |
+
yith_wcmg_zoom.attr('href', yith_wcmg_default_zoom);
|
48 |
+
yith_wcmg_image.attr('src', yith_wcmg_default_image);
|
49 |
+
yith_wcmg_image.attr('srcset', yith_wcmg_default_image);
|
50 |
+
yith_wcmg_image.attr('src-orig', yith_wcmg_default_image);
|
51 |
+
|
52 |
+
if (yith_wcmg.data('yith_magnifier')) {
|
53 |
+
yith_wcmg.yith_magnifier('destroy');
|
54 |
+
}
|
55 |
+
|
56 |
+
yith_wcmg.yith_magnifier(yith_magnifier_options);
|
57 |
+
});
|
58 |
+
|
59 |
+
$('form.variations_form .variations select').trigger('change');
|
60 |
});
|
changelog.txt
CHANGED
@@ -1,191 +1,191 @@
|
|
1 |
-
=== YITH WooCommerce Zoom Magnifier ===
|
2 |
-
|
3 |
-
== Changelog History ==
|
4 |
-
|
5 |
-
= Version 1.2.18 - Released: May 02, 2016 =
|
6 |
-
|
7 |
-
* Updated: plugin compatible with WordPress 4.5
|
8 |
-
* Updated: plugin author name
|
9 |
-
* Updated: YITH Plugin Framework
|
10 |
-
|
11 |
-
= Version 1.2.17 - Released: Feb 24, 2016 =
|
12 |
-
|
13 |
-
* Updated: YITH Plugin FW
|
14 |
-
* Fixed: removed trailing comma in JS script that break the page rendering on old IE browser
|
15 |
-
|
16 |
-
= Version 1.2.16 - Released: Jan 18, 2016 =
|
17 |
-
|
18 |
-
* Updated: YITH Plugin FW loading remove unused YIT constant
|
19 |
-
* Added: filter yith_ywzm_zoom_wrap_additional_css for customizing CSS class for the wrapping div
|
20 |
-
* Updated: plugin ready for WooCommerce 2.5
|
21 |
-
|
22 |
-
= Version 1.2.15 - Released: Jan 04, 2016 =
|
23 |
-
|
24 |
-
* Fixed: Cannot redeclare yith_ywzm_install_woocommerce_admin_notice() when the plugin is loaded from YITH Essential Kit
|
25 |
-
|
26 |
-
= Version 1.2.14 - Released: Dec 29, 2015 =
|
27 |
-
|
28 |
-
* Added: Compatibility with YIT WooCommerce Featured Audio & Video Content
|
29 |
-
|
30 |
-
= Version 1.2.13 - Released: Dec 21, 2015 =
|
31 |
-
|
32 |
-
* Fixed: multiple wrap of zoom element with the div with class yith_magnifier_zoom_wrap
|
33 |
-
* Updated: jquery-ui.css is no more linked as external resource but shipped within the plugin, as wordpress.org asked
|
34 |
-
|
35 |
-
= Version 1.2.12 - Released: Oct 29, 2015 =
|
36 |
-
|
37 |
-
* Updated: YITH plugin framework
|
38 |
-
|
39 |
-
= Version 1.2.11 - Released: Oct 23, 2015 =
|
40 |
-
|
41 |
-
* Updated: compatibility with YITH WooCommerce Quick View.
|
42 |
-
|
43 |
-
= Version 1.2.10 - Released: Sep 24, 2015 =
|
44 |
-
|
45 |
-
* Updated: changed text domain as translate.wordpress.org requisite.
|
46 |
-
|
47 |
-
= Version 1.2.9 - Released: Sep 04, 2015 =
|
48 |
-
|
49 |
-
* Updated: Languages file
|
50 |
-
* Fixed: Changed plugin text domain from yit to ywmz
|
51 |
-
* Fixed: featured image shown one time on slider.
|
52 |
-
* Fixed: div not shown if loading text is empty.
|
53 |
-
|
54 |
-
= Version 1.2.8 - Released: Sep 01, 2015 =
|
55 |
-
|
56 |
-
* Fixed: removed deprecated woocommerce_update_option_X hook.
|
57 |
-
|
58 |
-
= Version 1.2.7 - Released: Aug 27, 2015 =
|
59 |
-
|
60 |
-
* Fixed: resolved XSS vulnerability.
|
61 |
-
|
62 |
-
= Version 1.2.6 - Released: Aug 12, 2015 =
|
63 |
-
|
64 |
-
* Tweak: update YITH Plugin framework.
|
65 |
-
|
66 |
-
= Version 1.2.5 - Released: Jul 23, 2015 =
|
67 |
-
|
68 |
-
* Added: italian language.
|
69 |
-
|
70 |
-
= Version 1.2.4 - Released: Jun 26, 2015 =
|
71 |
-
|
72 |
-
* Added: support to srcset and src-orig attributes.
|
73 |
-
|
74 |
-
= Version 1.2.3 - Released: May 29, 2015 =
|
75 |
-
|
76 |
-
* Added: included jquery-migrate as prerequisite.
|
77 |
-
|
78 |
-
= Version 1.2.2 - Released: May 22, 2015 =
|
79 |
-
|
80 |
-
* Fixed: CSS fix for EssentialGrid conflicts.
|
81 |
-
|
82 |
-
= Version 1.2.1 - Released: May 04, 2015 =
|
83 |
-
|
84 |
-
* Fixed: removed z-index that made the zoom area hiding other elements in certain themes.
|
85 |
-
|
86 |
-
= Version 1.2.0 - Released: Apr 22, 2015 =
|
87 |
-
|
88 |
-
* Fix : security issue (https://make.wordpress.org/plugins/2015/04/20/fixing-add_query_arg-and-remove_query_arg-usage/)
|
89 |
-
* Tweak : support up to Wordpress 4.2
|
90 |
-
|
91 |
-
= 1.1.8 =
|
92 |
-
|
93 |
-
* Fixed: compatibility with some YITHEMES themes.
|
94 |
-
|
95 |
-
= 1.1.7 =
|
96 |
-
|
97 |
-
* Fixed: Unwanted expand link on product image.
|
98 |
-
|
99 |
-
= 1.1.6 =
|
100 |
-
|
101 |
-
* Added: the plugin can be disabled on mobile devices.
|
102 |
-
|
103 |
-
= 1.1.5 =
|
104 |
-
|
105 |
-
* Fixed: multiple wrap
|
106 |
-
|
107 |
-
= 1.1.4 =
|
108 |
-
|
109 |
-
* Tweak: WooCommerce 2.2. support
|
110 |
-
* Fixed: Placeholder in product without featured image
|
111 |
-
* Fixed: Slider items number options doesn't work
|
112 |
-
|
113 |
-
= 1.1.3 =
|
114 |
-
|
115 |
-
* Added: Support to WC 2.2.2
|
116 |
-
* Updated: Plugin Core Framework
|
117 |
-
|
118 |
-
= 1.1.2 =
|
119 |
-
|
120 |
-
* Restored: Image size options on WC 2.1.x
|
121 |
-
* Fixed: Items number option on thumb slider
|
122 |
-
* Fixed: Hard crop issue on WC 2.1.x
|
123 |
-
|
124 |
-
= 1.1.1 =
|
125 |
-
|
126 |
-
* Fixed: Thumbnails slider direction on single product page
|
127 |
-
|
128 |
-
= 1.1.0 =
|
129 |
-
|
130 |
-
* Added: Support to WooCommerce 2.1.x
|
131 |
-
|
132 |
-
= 1.0.8 =
|
133 |
-
|
134 |
-
* Added: ability to change the slider programmatically
|
135 |
-
|
136 |
-
= 1.0.7 =
|
137 |
-
|
138 |
-
* Fixed: zoomed image did not change when select a variation
|
139 |
-
|
140 |
-
= 1.0.6 =
|
141 |
-
|
142 |
-
* Removed white space from frontend.php
|
143 |
-
|
144 |
-
= 1.0.5 =
|
145 |
-
|
146 |
-
* Fixed: magnifier override the plugin for featured video
|
147 |
-
|
148 |
-
= 1.0.4 =
|
149 |
-
|
150 |
-
* Minor bugs fixes
|
151 |
-
|
152 |
-
= 1.0.3 =
|
153 |
-
|
154 |
-
* Added ability to load the plugin even when WooCommerce is installed in a different folder
|
155 |
-
|
156 |
-
= 1.0.2 =
|
157 |
-
|
158 |
-
* Fixed fatal error to yit_debug with yit themes
|
159 |
-
|
160 |
-
= 1.0.1 =
|
161 |
-
|
162 |
-
* Optimized images
|
163 |
-
* Updated internal framework
|
164 |
-
|
165 |
-
= 1.0.0 =
|
166 |
-
|
167 |
-
* Initial release
|
168 |
-
|
169 |
-
== Suggestions ==
|
170 |
-
|
171 |
-
If you have suggestions about how to improve YITH WooCommerce Zoom Magnifier, you can [write us](mailto:plugins@yithemes.com "Your Inspiration Themes") so we can bundle them into YITH Zoom WooCommerce Magnifier.
|
172 |
-
|
173 |
-
== Translators ==
|
174 |
-
|
175 |
-
= Available Languages =
|
176 |
-
* English (Default)
|
177 |
-
* Italian
|
178 |
-
* Spanish
|
179 |
-
|
180 |
-
If you have created your own language pack, or have an update for an existing one, you can send [gettext PO and MO file](http://codex.wordpress.org/Translating_WordPress "Translating WordPress")
|
181 |
-
[use](http://yithemes.com/contact/ "Your Inspiration Themes") so we can bundle it into YITH WooCommerce Zoom Magnfier Languages.
|
182 |
-
|
183 |
-
== Documentation ==
|
184 |
-
|
185 |
-
Full documentation is available [here](http://yithemes.com/docs-plugins/yith_woocommerce_magnifier/).
|
186 |
-
|
187 |
-
== Upgrade notice ==
|
188 |
-
|
189 |
-
= 1.0.0 =
|
190 |
-
|
191 |
Initial release
|
1 |
+
=== YITH WooCommerce Zoom Magnifier ===
|
2 |
+
|
3 |
+
== Changelog History ==
|
4 |
+
|
5 |
+
= Version 1.2.18 - Released: May 02, 2016 =
|
6 |
+
|
7 |
+
* Updated: plugin compatible with WordPress 4.5
|
8 |
+
* Updated: plugin author name
|
9 |
+
* Updated: YITH Plugin Framework
|
10 |
+
|
11 |
+
= Version 1.2.17 - Released: Feb 24, 2016 =
|
12 |
+
|
13 |
+
* Updated: YITH Plugin FW
|
14 |
+
* Fixed: removed trailing comma in JS script that break the page rendering on old IE browser
|
15 |
+
|
16 |
+
= Version 1.2.16 - Released: Jan 18, 2016 =
|
17 |
+
|
18 |
+
* Updated: YITH Plugin FW loading remove unused YIT constant
|
19 |
+
* Added: filter yith_ywzm_zoom_wrap_additional_css for customizing CSS class for the wrapping div
|
20 |
+
* Updated: plugin ready for WooCommerce 2.5
|
21 |
+
|
22 |
+
= Version 1.2.15 - Released: Jan 04, 2016 =
|
23 |
+
|
24 |
+
* Fixed: Cannot redeclare yith_ywzm_install_woocommerce_admin_notice() when the plugin is loaded from YITH Essential Kit
|
25 |
+
|
26 |
+
= Version 1.2.14 - Released: Dec 29, 2015 =
|
27 |
+
|
28 |
+
* Added: Compatibility with YIT WooCommerce Featured Audio & Video Content
|
29 |
+
|
30 |
+
= Version 1.2.13 - Released: Dec 21, 2015 =
|
31 |
+
|
32 |
+
* Fixed: multiple wrap of zoom element with the div with class yith_magnifier_zoom_wrap
|
33 |
+
* Updated: jquery-ui.css is no more linked as external resource but shipped within the plugin, as wordpress.org asked
|
34 |
+
|
35 |
+
= Version 1.2.12 - Released: Oct 29, 2015 =
|
36 |
+
|
37 |
+
* Updated: YITH plugin framework
|
38 |
+
|
39 |
+
= Version 1.2.11 - Released: Oct 23, 2015 =
|
40 |
+
|
41 |
+
* Updated: compatibility with YITH WooCommerce Quick View.
|
42 |
+
|
43 |
+
= Version 1.2.10 - Released: Sep 24, 2015 =
|
44 |
+
|
45 |
+
* Updated: changed text domain as translate.wordpress.org requisite.
|
46 |
+
|
47 |
+
= Version 1.2.9 - Released: Sep 04, 2015 =
|
48 |
+
|
49 |
+
* Updated: Languages file
|
50 |
+
* Fixed: Changed plugin text domain from yit to ywmz
|
51 |
+
* Fixed: featured image shown one time on slider.
|
52 |
+
* Fixed: div not shown if loading text is empty.
|
53 |
+
|
54 |
+
= Version 1.2.8 - Released: Sep 01, 2015 =
|
55 |
+
|
56 |
+
* Fixed: removed deprecated woocommerce_update_option_X hook.
|
57 |
+
|
58 |
+
= Version 1.2.7 - Released: Aug 27, 2015 =
|
59 |
+
|
60 |
+
* Fixed: resolved XSS vulnerability.
|
61 |
+
|
62 |
+
= Version 1.2.6 - Released: Aug 12, 2015 =
|
63 |
+
|
64 |
+
* Tweak: update YITH Plugin framework.
|
65 |
+
|
66 |
+
= Version 1.2.5 - Released: Jul 23, 2015 =
|
67 |
+
|
68 |
+
* Added: italian language.
|
69 |
+
|
70 |
+
= Version 1.2.4 - Released: Jun 26, 2015 =
|
71 |
+
|
72 |
+
* Added: support to srcset and src-orig attributes.
|
73 |
+
|
74 |
+
= Version 1.2.3 - Released: May 29, 2015 =
|
75 |
+
|
76 |
+
* Added: included jquery-migrate as prerequisite.
|
77 |
+
|
78 |
+
= Version 1.2.2 - Released: May 22, 2015 =
|
79 |
+
|
80 |
+
* Fixed: CSS fix for EssentialGrid conflicts.
|
81 |
+
|
82 |
+
= Version 1.2.1 - Released: May 04, 2015 =
|
83 |
+
|
84 |
+
* Fixed: removed z-index that made the zoom area hiding other elements in certain themes.
|
85 |
+
|
86 |
+
= Version 1.2.0 - Released: Apr 22, 2015 =
|
87 |
+
|
88 |
+
* Fix : security issue (https://make.wordpress.org/plugins/2015/04/20/fixing-add_query_arg-and-remove_query_arg-usage/)
|
89 |
+
* Tweak : support up to Wordpress 4.2
|
90 |
+
|
91 |
+
= 1.1.8 =
|
92 |
+
|
93 |
+
* Fixed: compatibility with some YITHEMES themes.
|
94 |
+
|
95 |
+
= 1.1.7 =
|
96 |
+
|
97 |
+
* Fixed: Unwanted expand link on product image.
|
98 |
+
|
99 |
+
= 1.1.6 =
|
100 |
+
|
101 |
+
* Added: the plugin can be disabled on mobile devices.
|
102 |
+
|
103 |
+
= 1.1.5 =
|
104 |
+
|
105 |
+
* Fixed: multiple wrap
|
106 |
+
|
107 |
+
= 1.1.4 =
|
108 |
+
|
109 |
+
* Tweak: WooCommerce 2.2. support
|
110 |
+
* Fixed: Placeholder in product without featured image
|
111 |
+
* Fixed: Slider items number options doesn't work
|
112 |
+
|
113 |
+
= 1.1.3 =
|
114 |
+
|
115 |
+
* Added: Support to WC 2.2.2
|
116 |
+
* Updated: Plugin Core Framework
|
117 |
+
|
118 |
+
= 1.1.2 =
|
119 |
+
|
120 |
+
* Restored: Image size options on WC 2.1.x
|
121 |
+
* Fixed: Items number option on thumb slider
|
122 |
+
* Fixed: Hard crop issue on WC 2.1.x
|
123 |
+
|
124 |
+
= 1.1.1 =
|
125 |
+
|
126 |
+
* Fixed: Thumbnails slider direction on single product page
|
127 |
+
|
128 |
+
= 1.1.0 =
|
129 |
+
|
130 |
+
* Added: Support to WooCommerce 2.1.x
|
131 |
+
|
132 |
+
= 1.0.8 =
|
133 |
+
|
134 |
+
* Added: ability to change the slider programmatically
|
135 |
+
|
136 |
+
= 1.0.7 =
|
137 |
+
|
138 |
+
* Fixed: zoomed image did not change when select a variation
|
139 |
+
|
140 |
+
= 1.0.6 =
|
141 |
+
|
142 |
+
* Removed white space from frontend.php
|
143 |
+
|
144 |
+
= 1.0.5 =
|
145 |
+
|
146 |
+
* Fixed: magnifier override the plugin for featured video
|
147 |
+
|
148 |
+
= 1.0.4 =
|
149 |
+
|
150 |
+
* Minor bugs fixes
|
151 |
+
|
152 |
+
= 1.0.3 =
|
153 |
+
|
154 |
+
* Added ability to load the plugin even when WooCommerce is installed in a different folder
|
155 |
+
|
156 |
+
= 1.0.2 =
|
157 |
+
|
158 |
+
* Fixed fatal error to yit_debug with yit themes
|
159 |
+
|
160 |
+
= 1.0.1 =
|
161 |
+
|
162 |
+
* Optimized images
|
163 |
+
* Updated internal framework
|
164 |
+
|
165 |
+
= 1.0.0 =
|
166 |
+
|
167 |
+
* Initial release
|
168 |
+
|
169 |
+
== Suggestions ==
|
170 |
+
|
171 |
+
If you have suggestions about how to improve YITH WooCommerce Zoom Magnifier, you can [write us](mailto:plugins@yithemes.com "Your Inspiration Themes") so we can bundle them into YITH Zoom WooCommerce Magnifier.
|
172 |
+
|
173 |
+
== Translators ==
|
174 |
+
|
175 |
+
= Available Languages =
|
176 |
+
* English (Default)
|
177 |
+
* Italian
|
178 |
+
* Spanish
|
179 |
+
|
180 |
+
If you have created your own language pack, or have an update for an existing one, you can send [gettext PO and MO file](http://codex.wordpress.org/Translating_WordPress "Translating WordPress")
|
181 |
+
[use](http://yithemes.com/contact/ "Your Inspiration Themes") so we can bundle it into YITH WooCommerce Zoom Magnfier Languages.
|
182 |
+
|
183 |
+
== Documentation ==
|
184 |
+
|
185 |
+
Full documentation is available [here](http://yithemes.com/docs-plugins/yith_woocommerce_magnifier/).
|
186 |
+
|
187 |
+
== Upgrade notice ==
|
188 |
+
|
189 |
+
= 1.0.0 =
|
190 |
+
|
191 |
Initial release
|
class.yith-wcmg-admin.php
CHANGED
@@ -1,112 +1,112 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Admin class
|
4 |
-
*
|
5 |
-
* @author Your Inspiration Themes
|
6 |
-
* @package YITH WooCommerce Zoom Magnifier
|
7 |
-
* @version 1.1.2
|
8 |
-
*/
|
9 |
-
|
10 |
-
if ( ! defined( 'YITH_WCMG' ) ) {
|
11 |
-
exit;
|
12 |
-
} // Exit if accessed directly
|
13 |
-
|
14 |
-
if ( ! class_exists( 'YITH_WCMG_Admin' ) ) {
|
15 |
-
/**
|
16 |
-
* Admin class.
|
17 |
-
* The class manage all the admin behaviors.
|
18 |
-
*
|
19 |
-
* @since 1.0.0
|
20 |
-
*/
|
21 |
-
class YITH_WCMG_Admin {
|
22 |
-
/**
|
23 |
-
* Plugin options
|
24 |
-
*
|
25 |
-
* @var array
|
26 |
-
* @access public
|
27 |
-
* @since 1.0.0
|
28 |
-
*/
|
29 |
-
public $options = array();
|
30 |
-
|
31 |
-
/**
|
32 |
-
* Various links
|
33 |
-
*
|
34 |
-
* @var string
|
35 |
-
* @access public
|
36 |
-
* @since 1.0.0
|
37 |
-
*/
|
38 |
-
public $doc_url = 'https://docs.yithemes.com/yith-woocommerce-zoom-magnifier/';
|
39 |
-
|
40 |
-
/**
|
41 |
-
* Constructor
|
42 |
-
*
|
43 |
-
* @access public
|
44 |
-
* @since 1.0.0
|
45 |
-
*/
|
46 |
-
public function __construct( ) {
|
47 |
-
|
48 |
-
//Actions
|
49 |
-
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_styles_scripts' ) );
|
50 |
-
|
51 |
-
add_action( 'woocommerce_update_options_yith_wcmg', array( $this, 'update_options' ) );
|
52 |
-
|
53 |
-
add_action( 'woocommerce_admin_field_banner', array( $this, 'admin_fields_banner' ) );
|
54 |
-
|
55 |
-
add_filter( 'woocommerce_catalog_settings', array( $this, 'add_catalog_image_size' ) );
|
56 |
-
|
57 |
-
// YITH WCMG Loaded
|
58 |
-
do_action( 'yith_wcmg_loaded' );
|
59 |
-
}
|
60 |
-
|
61 |
-
/**
|
62 |
-
* Add Zoom Image size to Woocommerce -> Catalog
|
63 |
-
*
|
64 |
-
* @access public
|
65 |
-
*
|
66 |
-
* @param array $settings
|
67 |
-
*
|
68 |
-
* @return array
|
69 |
-
*/
|
70 |
-
public function add_catalog_image_size( $settings ) {
|
71 |
-
$tmp = $settings[count( $settings ) - 1];
|
72 |
-
unset( $settings[count( $settings ) - 1] );
|
73 |
-
|
74 |
-
$settings[] = array(
|
75 |
-
'name' => __( 'Image Size', 'yith-woocommerce-zoom-magnifier' ),
|
76 |
-
'desc' => __( 'The size of the images used within the magnifier box', 'yith-woocommerce-zoom-magnifier' ),
|
77 |
-
'id' => 'woocommerce_magnifier_image',
|
78 |
-
'css' => '',
|
79 |
-
'type' => 'image_width',
|
80 |
-
'default' => array(
|
81 |
-
'width' => 600,
|
82 |
-
'height' => 600,
|
83 |
-
'crop' => true
|
84 |
-
),
|
85 |
-
'std' => array(
|
86 |
-
'width' => 600,
|
87 |
-
'height' => 600,
|
88 |
-
'crop' => true
|
89 |
-
),
|
90 |
-
'desc_tip' => true
|
91 |
-
);
|
92 |
-
$settings[] = $tmp;
|
93 |
-
return $settings;
|
94 |
-
}
|
95 |
-
|
96 |
-
/**
|
97 |
-
* Enqueue admin styles and scripts
|
98 |
-
*
|
99 |
-
* @access public
|
100 |
-
* @return void
|
101 |
-
* @since 1.0.0
|
102 |
-
*/
|
103 |
-
public function enqueue_styles_scripts() {
|
104 |
-
wp_enqueue_script( 'jquery-ui' );
|
105 |
-
wp_enqueue_script( 'jquery-ui-core' );
|
106 |
-
wp_enqueue_script( 'jquery-ui-mouse' );
|
107 |
-
wp_enqueue_script( 'jquery-ui-slider' );
|
108 |
-
|
109 |
-
wp_enqueue_style( 'yith_wcmg_admin', YITH_WCMG_URL . 'assets/css/admin.css' );
|
110 |
-
}
|
111 |
-
}
|
112 |
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Admin class
|
4 |
+
*
|
5 |
+
* @author Your Inspiration Themes
|
6 |
+
* @package YITH WooCommerce Zoom Magnifier
|
7 |
+
* @version 1.1.2
|
8 |
+
*/
|
9 |
+
|
10 |
+
if ( ! defined( 'YITH_WCMG' ) ) {
|
11 |
+
exit;
|
12 |
+
} // Exit if accessed directly
|
13 |
+
|
14 |
+
if ( ! class_exists( 'YITH_WCMG_Admin' ) ) {
|
15 |
+
/**
|
16 |
+
* Admin class.
|
17 |
+
* The class manage all the admin behaviors.
|
18 |
+
*
|
19 |
+
* @since 1.0.0
|
20 |
+
*/
|
21 |
+
class YITH_WCMG_Admin {
|
22 |
+
/**
|
23 |
+
* Plugin options
|
24 |
+
*
|
25 |
+
* @var array
|
26 |
+
* @access public
|
27 |
+
* @since 1.0.0
|
28 |
+
*/
|
29 |
+
public $options = array();
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Various links
|
33 |
+
*
|
34 |
+
* @var string
|
35 |
+
* @access public
|
36 |
+
* @since 1.0.0
|
37 |
+
*/
|
38 |
+
public $doc_url = 'https://docs.yithemes.com/yith-woocommerce-zoom-magnifier/';
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Constructor
|
42 |
+
*
|
43 |
+
* @access public
|
44 |
+
* @since 1.0.0
|
45 |
+
*/
|
46 |
+
public function __construct( ) {
|
47 |
+
|
48 |
+
//Actions
|
49 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_styles_scripts' ) );
|
50 |
+
|
51 |
+
add_action( 'woocommerce_update_options_yith_wcmg', array( $this, 'update_options' ) );
|
52 |
+
|
53 |
+
add_action( 'woocommerce_admin_field_banner', array( $this, 'admin_fields_banner' ) );
|
54 |
+
|
55 |
+
add_filter( 'woocommerce_catalog_settings', array( $this, 'add_catalog_image_size' ) );
|
56 |
+
|
57 |
+
// YITH WCMG Loaded
|
58 |
+
do_action( 'yith_wcmg_loaded' );
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Add Zoom Image size to Woocommerce -> Catalog
|
63 |
+
*
|
64 |
+
* @access public
|
65 |
+
*
|
66 |
+
* @param array $settings
|
67 |
+
*
|
68 |
+
* @return array
|
69 |
+
*/
|
70 |
+
public function add_catalog_image_size( $settings ) {
|
71 |
+
$tmp = $settings[count( $settings ) - 1];
|
72 |
+
unset( $settings[count( $settings ) - 1] );
|
73 |
+
|
74 |
+
$settings[] = array(
|
75 |
+
'name' => __( 'Image Size', 'yith-woocommerce-zoom-magnifier' ),
|
76 |
+
'desc' => __( 'The size of the images used within the magnifier box', 'yith-woocommerce-zoom-magnifier' ),
|
77 |
+
'id' => 'woocommerce_magnifier_image',
|
78 |
+
'css' => '',
|
79 |
+
'type' => 'image_width',
|
80 |
+
'default' => array(
|
81 |
+
'width' => 600,
|
82 |
+
'height' => 600,
|
83 |
+
'crop' => true
|
84 |
+
),
|
85 |
+
'std' => array(
|
86 |
+
'width' => 600,
|
87 |
+
'height' => 600,
|
88 |
+
'crop' => true
|
89 |
+
),
|
90 |
+
'desc_tip' => true
|
91 |
+
);
|
92 |
+
$settings[] = $tmp;
|
93 |
+
return $settings;
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Enqueue admin styles and scripts
|
98 |
+
*
|
99 |
+
* @access public
|
100 |
+
* @return void
|
101 |
+
* @since 1.0.0
|
102 |
+
*/
|
103 |
+
public function enqueue_styles_scripts() {
|
104 |
+
wp_enqueue_script( 'jquery-ui' );
|
105 |
+
wp_enqueue_script( 'jquery-ui-core' );
|
106 |
+
wp_enqueue_script( 'jquery-ui-mouse' );
|
107 |
+
wp_enqueue_script( 'jquery-ui-slider' );
|
108 |
+
|
109 |
+
wp_enqueue_style( 'yith_wcmg_admin', YITH_WCMG_URL . 'assets/css/admin.css' );
|
110 |
+
}
|
111 |
+
}
|
112 |
}
|
class.yith-wcmg-frontend.php
CHANGED
@@ -1,173 +1,173 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Frontend class
|
4 |
-
*
|
5 |
-
* @author Your Inspiration Themes
|
6 |
-
* @package YITH WooCommerce Zoom Magnifier
|
7 |
-
* @version 1.1.2
|
8 |
-
*/
|
9 |
-
|
10 |
-
if ( ! defined ( 'YITH_WCMG' ) ) {
|
11 |
-
exit;
|
12 |
-
} // Exit if accessed directly
|
13 |
-
|
14 |
-
if ( ! class_exists ( 'YITH_WCMG_Frontend' ) ) {
|
15 |
-
/**
|
16 |
-
* Admin class.
|
17 |
-
* The class manage all the Frontend behaviors.
|
18 |
-
*
|
19 |
-
* @since 1.0.0
|
20 |
-
*/
|
21 |
-
class YITH_WCMG_Frontend {
|
22 |
-
|
23 |
-
|
24 |
-
/**
|
25 |
-
* Constructor
|
26 |
-
*
|
27 |
-
* @access public
|
28 |
-
* @since 1.0.0
|
29 |
-
*/
|
30 |
-
public function __construct() {
|
31 |
-
|
32 |
-
// add the action only when the loop is initializate
|
33 |
-
add_action ( 'template_redirect', array( $this, 'render' ) );
|
34 |
-
|
35 |
-
}
|
36 |
-
|
37 |
-
public function render() {
|
38 |
-
if ( yith_wcmg_is_enabled () && ! apply_filters ( 'yith_wczm_featured_video_enabled', false ) ) {
|
39 |
-
//change the templates
|
40 |
-
remove_action ( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_images', 20 );
|
41 |
-
remove_action ( 'woocommerce_product_thumbnails', 'woocommerce_show_product_thumbnails', 20 );
|
42 |
-
add_action ( 'woocommerce_before_single_product_summary', array( $this, 'show_product_images' ), 20 );
|
43 |
-
add_action ( 'woocommerce_product_thumbnails', array( $this, 'show_product_thumbnails' ), 20 );
|
44 |
-
|
45 |
-
//custom styles and javascripts
|
46 |
-
add_action ( 'wp_enqueue_scripts', array( $this, 'enqueue_styles_scripts' ) );
|
47 |
-
|
48 |
-
//add attributes to product variations
|
49 |
-
add_filter ( 'woocommerce_available_variation', array( $this, 'available_variation' ), 10, 3 );
|
50 |
-
}
|
51 |
-
}
|
52 |
-
|
53 |
-
|
54 |
-
/**
|
55 |
-
* Change product-single.php template
|
56 |
-
*
|
57 |
-
* @access public
|
58 |
-
* @return void
|
59 |
-
* @since 1.0.0
|
60 |
-
*/
|
61 |
-
public function show_product_images() {
|
62 |
-
|
63 |
-
/** FIX WOO 2.1 */
|
64 |
-
$wc_get_template = function_exists ( 'wc_get_template' ) ? 'wc_get_template' : 'woocommerce_get_template';
|
65 |
-
$wc_get_template( 'single-product/product-image-magnifier.php', array(), '', YITH_YWZM_DIR . 'templates/' );
|
66 |
-
}
|
67 |
-
|
68 |
-
|
69 |
-
/**
|
70 |
-
* Change product-thumbnails.php template
|
71 |
-
*
|
72 |
-
* @access public
|
73 |
-
* @return void
|
74 |
-
* @since 1.0.0
|
75 |
-
*/
|
76 |
-
public function show_product_thumbnails() {
|
77 |
-
|
78 |
-
/** FIX WOO 2.1 */
|
79 |
-
$wc_get_template = function_exists ( 'wc_get_template' ) ? 'wc_get_template' : 'woocommerce_get_template';
|
80 |
-
|
81 |
-
$wc_get_template( 'single-product/product-thumbnails-magnifier.php', array(), '', YITH_YWZM_DIR . 'templates/' );
|
82 |
-
}
|
83 |
-
|
84 |
-
|
85 |
-
/**
|
86 |
-
* Enqueue styles and scripts
|
87 |
-
*
|
88 |
-
* @access public
|
89 |
-
* @return void
|
90 |
-
* @since 1.0.0
|
91 |
-
*/
|
92 |
-
public function enqueue_styles_scripts() {
|
93 |
-
global $post;
|
94 |
-
|
95 |
-
$suffix = defined ( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
|
96 |
-
|
97 |
-
wp_register_script ( 'ywzm-magnifier-slider',
|
98 |
-
YITH_WCMG_URL . 'assets/js/' . yit_load_js_file ( 'jquery.carouFredSel.js' ),
|
99 |
-
array(
|
100 |
-
'jquery',
|
101 |
-
'jquery-migrate',
|
102 |
-
),
|
103 |
-
'6.2.1',
|
104 |
-
true );
|
105 |
-
|
106 |
-
wp_register_script ( 'ywzm-magnifier',
|
107 |
-
YITH_WCMG_URL . 'assets/js/' . yit_load_js_file ( 'yith_magnifier.js' ),
|
108 |
-
array( 'jquery' ),
|
109 |
-
YITH_YWZM_VERSION,
|
110 |
-
true );
|
111 |
-
|
112 |
-
wp_localize_script( 'ywzm-magnifier', 'yith_wc_zoom_magnifier_storage_object', apply_filters( 'yith_wc_zoom_magnifier_front_magnifier_localize', array(
|
113 |
-
'ajax_url' => admin_url( 'admin-ajax.php' ),
|
114 |
-
) ) );
|
115 |
-
|
116 |
-
wp_register_script ( 'ywzm_frontend',
|
117 |
-
YITH_WCMG_URL . 'assets/js/' . yit_load_js_file ( 'ywzm_frontend.js' ),
|
118 |
-
array(
|
119 |
-
'jquery',
|
120 |
-
'ywzm-magnifier',
|
121 |
-
),
|
122 |
-
YITH_YWZM_VERSION,
|
123 |
-
true );
|
124 |
-
|
125 |
-
wp_register_style ( 'ywzm-magnifier', YITH_WCMG_URL . 'assets/css/yith_magnifier.css' );
|
126 |
-
|
127 |
-
if ( is_product () || ( ! empty( $post->post_content ) && strstr ( $post->post_content, '[product_page' ) ) ) {
|
128 |
-
|
129 |
-
wp_localize_script ( 'ywzm_frontend',
|
130 |
-
'ywzm_data', array(
|
131 |
-
'wc_before_3_0' => version_compare ( WC ()->version, '3.0', '<' ),
|
132 |
-
)
|
133 |
-
);
|
134 |
-
|
135 |
-
// Enqueue PrettyPhoto style and script
|
136 |
-
$wc_assets_path = str_replace ( array( 'http:', 'https:' ), '', WC ()->plugin_url () ) . '/assets/';
|
137 |
-
|
138 |
-
// Enqueue scripts
|
139 |
-
wp_enqueue_script ( 'prettyPhoto', $wc_assets_path . 'js/prettyPhoto/jquery.prettyPhoto' . $suffix . '.js', array( 'jquery' ), '3.1.6', true );
|
140 |
-
wp_enqueue_script ( 'ywzm-magnifier-slider' );
|
141 |
-
wp_enqueue_script ( 'ywzm-magnifier' );
|
142 |
-
wp_enqueue_script ( 'ywzm_frontend' );
|
143 |
-
|
144 |
-
// Enqueue Style
|
145 |
-
$css = file_exists ( get_stylesheet_directory () . '/woocommerce/yith_magnifier.css' ) ? get_stylesheet_directory_uri () . '/woocommerce/yith_magnifier.css' : YITH_WCMG_URL . 'assets/css/frontend.css';
|
146 |
-
wp_enqueue_style ( 'ywzm-prettyPhoto', $wc_assets_path . 'css/prettyPhoto.css' );
|
147 |
-
wp_enqueue_style ( 'ywzm-magnifier' );
|
148 |
-
wp_enqueue_style ( 'ywzm_frontend', $css );
|
149 |
-
}
|
150 |
-
}
|
151 |
-
|
152 |
-
|
153 |
-
/**
|
154 |
-
* Add attributes to product variations
|
155 |
-
*
|
156 |
-
* @param array $data
|
157 |
-
* @param WC_Product_Variable $wc_prod
|
158 |
-
* @param WC_Product_Variation $variation
|
159 |
-
*
|
160 |
-
* @return mixed
|
161 |
-
*/
|
162 |
-
public function available_variation( $data, $wc_prod, $variation ) {
|
163 |
-
|
164 |
-
$attachment_id = get_post_thumbnail_id ( version_compare ( WC ()->version, '3.0', '<' ) ? $variation->get_variation_id () : $variation->get_id () );
|
165 |
-
$attachment = wp_get_attachment_image_src ( $attachment_id, 'shop_magnifier' );
|
166 |
-
|
167 |
-
$data['image_magnifier'] = $attachment ? current ( $attachment ) : '';
|
168 |
-
|
169 |
-
return $data;
|
170 |
-
}
|
171 |
-
|
172 |
-
}
|
173 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Frontend class
|
4 |
+
*
|
5 |
+
* @author Your Inspiration Themes
|
6 |
+
* @package YITH WooCommerce Zoom Magnifier
|
7 |
+
* @version 1.1.2
|
8 |
+
*/
|
9 |
+
|
10 |
+
if ( ! defined ( 'YITH_WCMG' ) ) {
|
11 |
+
exit;
|
12 |
+
} // Exit if accessed directly
|
13 |
+
|
14 |
+
if ( ! class_exists ( 'YITH_WCMG_Frontend' ) ) {
|
15 |
+
/**
|
16 |
+
* Admin class.
|
17 |
+
* The class manage all the Frontend behaviors.
|
18 |
+
*
|
19 |
+
* @since 1.0.0
|
20 |
+
*/
|
21 |
+
class YITH_WCMG_Frontend {
|
22 |
+
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Constructor
|
26 |
+
*
|
27 |
+
* @access public
|
28 |
+
* @since 1.0.0
|
29 |
+
*/
|
30 |
+
public function __construct() {
|
31 |
+
|
32 |
+
// add the action only when the loop is initializate
|
33 |
+
add_action ( 'template_redirect', array( $this, 'render' ) );
|
34 |
+
|
35 |
+
}
|
36 |
+
|
37 |
+
public function render() {
|
38 |
+
if ( yith_wcmg_is_enabled () && ! apply_filters ( 'yith_wczm_featured_video_enabled', false ) ) {
|
39 |
+
//change the templates
|
40 |
+
remove_action ( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_images', 20 );
|
41 |
+
remove_action ( 'woocommerce_product_thumbnails', 'woocommerce_show_product_thumbnails', 20 );
|
42 |
+
add_action ( 'woocommerce_before_single_product_summary', array( $this, 'show_product_images' ), 20 );
|
43 |
+
add_action ( 'woocommerce_product_thumbnails', array( $this, 'show_product_thumbnails' ), 20 );
|
44 |
+
|
45 |
+
//custom styles and javascripts
|
46 |
+
add_action ( 'wp_enqueue_scripts', array( $this, 'enqueue_styles_scripts' ) );
|
47 |
+
|
48 |
+
//add attributes to product variations
|
49 |
+
add_filter ( 'woocommerce_available_variation', array( $this, 'available_variation' ), 10, 3 );
|
50 |
+
}
|
51 |
+
}
|
52 |
+
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Change product-single.php template
|
56 |
+
*
|
57 |
+
* @access public
|
58 |
+
* @return void
|
59 |
+
* @since 1.0.0
|
60 |
+
*/
|
61 |
+
public function show_product_images() {
|
62 |
+
|
63 |
+
/** FIX WOO 2.1 */
|
64 |
+
$wc_get_template = function_exists ( 'wc_get_template' ) ? 'wc_get_template' : 'woocommerce_get_template';
|
65 |
+
$wc_get_template( 'single-product/product-image-magnifier.php', array(), '', YITH_YWZM_DIR . 'templates/' );
|
66 |
+
}
|
67 |
+
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Change product-thumbnails.php template
|
71 |
+
*
|
72 |
+
* @access public
|
73 |
+
* @return void
|
74 |
+
* @since 1.0.0
|
75 |
+
*/
|
76 |
+
public function show_product_thumbnails() {
|
77 |
+
|
78 |
+
/** FIX WOO 2.1 */
|
79 |
+
$wc_get_template = function_exists ( 'wc_get_template' ) ? 'wc_get_template' : 'woocommerce_get_template';
|
80 |
+
|
81 |
+
$wc_get_template( 'single-product/product-thumbnails-magnifier.php', array(), '', YITH_YWZM_DIR . 'templates/' );
|
82 |
+
}
|
83 |
+
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Enqueue styles and scripts
|
87 |
+
*
|
88 |
+
* @access public
|
89 |
+
* @return void
|
90 |
+
* @since 1.0.0
|
91 |
+
*/
|
92 |
+
public function enqueue_styles_scripts() {
|
93 |
+
global $post;
|
94 |
+
|
95 |
+
$suffix = defined ( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
|
96 |
+
|
97 |
+
wp_register_script ( 'ywzm-magnifier-slider',
|
98 |
+
YITH_WCMG_URL . 'assets/js/' . yit_load_js_file ( 'jquery.carouFredSel.js' ),
|
99 |
+
array(
|
100 |
+
'jquery',
|
101 |
+
'jquery-migrate',
|
102 |
+
),
|
103 |
+
'6.2.1',
|
104 |
+
true );
|
105 |
+
|
106 |
+
wp_register_script ( 'ywzm-magnifier',
|
107 |
+
YITH_WCMG_URL . 'assets/js/' . yit_load_js_file ( 'yith_magnifier.js' ),
|
108 |
+
array( 'jquery' ),
|
109 |
+
YITH_YWZM_VERSION,
|
110 |
+
true );
|
111 |
+
|
112 |
+
wp_localize_script( 'ywzm-magnifier', 'yith_wc_zoom_magnifier_storage_object', apply_filters( 'yith_wc_zoom_magnifier_front_magnifier_localize', array(
|
113 |
+
'ajax_url' => admin_url( 'admin-ajax.php' ),
|
114 |
+
) ) );
|
115 |
+
|
116 |
+
wp_register_script ( 'ywzm_frontend',
|
117 |
+
YITH_WCMG_URL . 'assets/js/' . yit_load_js_file ( 'ywzm_frontend.js' ),
|
118 |
+
array(
|
119 |
+
'jquery',
|
120 |
+
'ywzm-magnifier',
|
121 |
+
),
|
122 |
+
YITH_YWZM_VERSION,
|
123 |
+
true );
|
124 |
+
|
125 |
+
wp_register_style ( 'ywzm-magnifier', YITH_WCMG_URL . 'assets/css/yith_magnifier.css' );
|
126 |
+
|
127 |
+
if ( is_product () || ( ! empty( $post->post_content ) && strstr ( $post->post_content, '[product_page' ) ) ) {
|
128 |
+
|
129 |
+
wp_localize_script ( 'ywzm_frontend',
|
130 |
+
'ywzm_data', array(
|
131 |
+
'wc_before_3_0' => version_compare ( WC ()->version, '3.0', '<' ),
|
132 |
+
)
|
133 |
+
);
|
134 |
+
|
135 |
+
// Enqueue PrettyPhoto style and script
|
136 |
+
$wc_assets_path = str_replace ( array( 'http:', 'https:' ), '', WC ()->plugin_url () ) . '/assets/';
|
137 |
+
|
138 |
+
// Enqueue scripts
|
139 |
+
wp_enqueue_script ( 'prettyPhoto', $wc_assets_path . 'js/prettyPhoto/jquery.prettyPhoto' . $suffix . '.js', array( 'jquery' ), '3.1.6', true );
|
140 |
+
wp_enqueue_script ( 'ywzm-magnifier-slider' );
|
141 |
+
wp_enqueue_script ( 'ywzm-magnifier' );
|
142 |
+
wp_enqueue_script ( 'ywzm_frontend' );
|
143 |
+
|
144 |
+
// Enqueue Style
|
145 |
+
$css = file_exists ( get_stylesheet_directory () . '/woocommerce/yith_magnifier.css' ) ? get_stylesheet_directory_uri () . '/woocommerce/yith_magnifier.css' : YITH_WCMG_URL . 'assets/css/frontend.css';
|
146 |
+
wp_enqueue_style ( 'ywzm-prettyPhoto', $wc_assets_path . 'css/prettyPhoto.css' );
|
147 |
+
wp_enqueue_style ( 'ywzm-magnifier' );
|
148 |
+
wp_enqueue_style ( 'ywzm_frontend', $css );
|
149 |
+
}
|
150 |
+
}
|
151 |
+
|
152 |
+
|
153 |
+
/**
|
154 |
+
* Add attributes to product variations
|
155 |
+
*
|
156 |
+
* @param array $data
|
157 |
+
* @param WC_Product_Variable $wc_prod
|
158 |
+
* @param WC_Product_Variation $variation
|
159 |
+
*
|
160 |
+
* @return mixed
|
161 |
+
*/
|
162 |
+
public function available_variation( $data, $wc_prod, $variation ) {
|
163 |
+
|
164 |
+
$attachment_id = get_post_thumbnail_id ( version_compare ( WC ()->version, '3.0', '<' ) ? $variation->get_variation_id () : $variation->get_id () );
|
165 |
+
$attachment = wp_get_attachment_image_src ( $attachment_id, 'shop_magnifier' );
|
166 |
+
|
167 |
+
$data['image_magnifier'] = $attachment ? current ( $attachment ) : '';
|
168 |
+
|
169 |
+
return $data;
|
170 |
+
}
|
171 |
+
|
172 |
+
}
|
173 |
+
}
|
functions.yith-wcmg.php
CHANGED
@@ -1,78 +1,78 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Functions
|
4 |
-
*
|
5 |
-
* @author Your Inspiration Themes
|
6 |
-
* @package YITH WooCommerce Zoom Magnifier
|
7 |
-
* @version 1.1.2
|
8 |
-
*/
|
9 |
-
|
10 |
-
if ( ! defined ( 'YITH_WCMG' ) ) {
|
11 |
-
exit;
|
12 |
-
} // Exit if accessed directly
|
13 |
-
|
14 |
-
if ( ! function_exists ( 'yith_wcmg_is_enabled' ) ) {
|
15 |
-
/**
|
16 |
-
* Check if the plugin is enabled for the current context
|
17 |
-
*
|
18 |
-
* @return bool
|
19 |
-
* @since 1.0.0
|
20 |
-
*/
|
21 |
-
function yith_wcmg_is_enabled () {
|
22 |
-
if ( wp_is_mobile () ) {
|
23 |
-
return ( 'yes' == get_option ( 'yith_wcmg_enable_mobile' ) );
|
24 |
-
}
|
25 |
-
|
26 |
-
return get_option ( 'yith_wcmg_enable_plugin' ) == 'yes';
|
27 |
-
}
|
28 |
-
}
|
29 |
-
|
30 |
-
if ( ! function_exists ( 'yit_shop_single_w' ) ) {
|
31 |
-
/**
|
32 |
-
* Return the shop_single image width
|
33 |
-
*
|
34 |
-
* @return integer
|
35 |
-
* @since 1.0.0
|
36 |
-
*/
|
37 |
-
function yit_shop_single_w () {
|
38 |
-
$size = yit_get_image_size ( 'shop_single' );
|
39 |
-
|
40 |
-
return $size[ 'width' ];
|
41 |
-
}
|
42 |
-
}
|
43 |
-
|
44 |
-
if ( ! function_exists ( 'yit_shop_thumbnail_w' ) ) {
|
45 |
-
/**
|
46 |
-
* Return the shop_thumbnail image width
|
47 |
-
*
|
48 |
-
* @return integer
|
49 |
-
* @since 1.0.0
|
50 |
-
*/
|
51 |
-
function yit_shop_thumbnail_w () {
|
52 |
-
$size = yit_get_image_size ( 'shop_thumbnail' );
|
53 |
-
|
54 |
-
return $size[ 'width' ];
|
55 |
-
}
|
56 |
-
}
|
57 |
-
|
58 |
-
/* FIX TO WOOCOMMERCE 2.1 */
|
59 |
-
if ( ! function_exists ( 'yit_get_image_size' ) ) {
|
60 |
-
/**
|
61 |
-
* Get default image size
|
62 |
-
*
|
63 |
-
* @param array $size current size
|
64 |
-
*
|
65 |
-
* @return array
|
66 |
-
* @author Lorenzo Giuffrida
|
67 |
-
* @since 1.0.0
|
68 |
-
*/
|
69 |
-
function yit_get_image_size ( $size ) {
|
70 |
-
if ( function_exists ( 'wc_get_image_size' ) ) {
|
71 |
-
return wc_get_image_size ( $size );
|
72 |
-
} else {
|
73 |
-
global $woocommerce;
|
74 |
-
|
75 |
-
return $woocommerce->get_image_size ( $size );
|
76 |
-
}
|
77 |
-
}
|
78 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Functions
|
4 |
+
*
|
5 |
+
* @author Your Inspiration Themes
|
6 |
+
* @package YITH WooCommerce Zoom Magnifier
|
7 |
+
* @version 1.1.2
|
8 |
+
*/
|
9 |
+
|
10 |
+
if ( ! defined ( 'YITH_WCMG' ) ) {
|
11 |
+
exit;
|
12 |
+
} // Exit if accessed directly
|
13 |
+
|
14 |
+
if ( ! function_exists ( 'yith_wcmg_is_enabled' ) ) {
|
15 |
+
/**
|
16 |
+
* Check if the plugin is enabled for the current context
|
17 |
+
*
|
18 |
+
* @return bool
|
19 |
+
* @since 1.0.0
|
20 |
+
*/
|
21 |
+
function yith_wcmg_is_enabled () {
|
22 |
+
if ( wp_is_mobile () ) {
|
23 |
+
return ( 'yes' == get_option ( 'yith_wcmg_enable_mobile' ) );
|
24 |
+
}
|
25 |
+
|
26 |
+
return get_option ( 'yith_wcmg_enable_plugin' ) == 'yes';
|
27 |
+
}
|
28 |
+
}
|
29 |
+
|
30 |
+
if ( ! function_exists ( 'yit_shop_single_w' ) ) {
|
31 |
+
/**
|
32 |
+
* Return the shop_single image width
|
33 |
+
*
|
34 |
+
* @return integer
|
35 |
+
* @since 1.0.0
|
36 |
+
*/
|
37 |
+
function yit_shop_single_w () {
|
38 |
+
$size = yit_get_image_size ( 'shop_single' );
|
39 |
+
|
40 |
+
return $size[ 'width' ];
|
41 |
+
}
|
42 |
+
}
|
43 |
+
|
44 |
+
if ( ! function_exists ( 'yit_shop_thumbnail_w' ) ) {
|
45 |
+
/**
|
46 |
+
* Return the shop_thumbnail image width
|
47 |
+
*
|
48 |
+
* @return integer
|
49 |
+
* @since 1.0.0
|
50 |
+
*/
|
51 |
+
function yit_shop_thumbnail_w () {
|
52 |
+
$size = yit_get_image_size ( 'shop_thumbnail' );
|
53 |
+
|
54 |
+
return $size[ 'width' ];
|
55 |
+
}
|
56 |
+
}
|
57 |
+
|
58 |
+
/* FIX TO WOOCOMMERCE 2.1 */
|
59 |
+
if ( ! function_exists ( 'yit_get_image_size' ) ) {
|
60 |
+
/**
|
61 |
+
* Get default image size
|
62 |
+
*
|
63 |
+
* @param array $size current size
|
64 |
+
*
|
65 |
+
* @return array
|
66 |
+
* @author Lorenzo Giuffrida
|
67 |
+
* @since 1.0.0
|
68 |
+
*/
|
69 |
+
function yit_get_image_size ( $size ) {
|
70 |
+
if ( function_exists ( 'wc_get_image_size' ) ) {
|
71 |
+
return wc_get_image_size ( $size );
|
72 |
+
} else {
|
73 |
+
global $woocommerce;
|
74 |
+
|
75 |
+
return $woocommerce->get_image_size ( $size );
|
76 |
+
}
|
77 |
+
}
|
78 |
+
}
|
init.php
CHANGED
@@ -1,164 +1,164 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Plugin Name: YITH WooCommerce Zoom Magnifier
|
4 |
-
* Plugin URI: https://yithemes.com/themes/plugins/yith-woocommerce-zoom-magnifier/
|
5 |
-
* Description: <code><strong>YITH WooCommerce Zoom Magnifier</strong></code> allows you to add a zoom effect to product images and a thumbnail slider for the product image gallery. <a href="https://yithemes.com/" target="_blank">Get more plugins for your e-commerce shop on <strong>YITH</strong></a>.
|
6 |
-
* Version: 1.3.
|
7 |
-
* Author: YITH
|
8 |
-
* Author URI: https://yithemes.com/
|
9 |
-
* Text Domain: yith-woocommerce-zoom-magnifier
|
10 |
-
* Domain Path: /languages/
|
11 |
-
* WC requires at least: 3.3.0
|
12 |
-
* WC tested up to: 3.5.x
|
13 |
-
**/
|
14 |
-
|
15 |
-
/* Copyright 2013-2018 Your Inspiration Themes (email : plugins@yithemes.com)
|
16 |
-
|
17 |
-
This program is free software; you can redistribute it and/or modify
|
18 |
-
it under the terms of the GNU General Public License, version 2, as
|
19 |
-
published by the Free Software Foundation.
|
20 |
-
|
21 |
-
This program is distributed in the hope that it will be useful,
|
22 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
23 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
24 |
-
GNU General Public License for more details.
|
25 |
-
|
26 |
-
You should have received a copy of the GNU General Public License
|
27 |
-
along with this program; if not, write to the Free Software
|
28 |
-
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
29 |
-
*/
|
30 |
-
|
31 |
-
if ( ! defined ( 'ABSPATH' ) ) {
|
32 |
-
exit;
|
33 |
-
} // Exit if accessed directly
|
34 |
-
|
35 |
-
if ( ! function_exists( 'is_plugin_active' ) ) {
|
36 |
-
if ( ! function_exists( 'get_plugin_data' ) ) {
|
37 |
-
require_once(ABSPATH . 'wp-admin/includes/plugin.php');
|
38 |
-
}
|
39 |
-
}
|
40 |
-
|
41 |
-
if ( ! function_exists ( 'yith_ywzm_install_woocommerce_admin_notice' ) ) {
|
42 |
-
/**
|
43 |
-
* WooCommerce is not enabled, the plugin will not be effective
|
44 |
-
*
|
45 |
-
* @author Lorenzo Giuffrida
|
46 |
-
* @since 1.0.0
|
47 |
-
*/
|
48 |
-
function yith_ywzm_install_woocommerce_admin_notice () {
|
49 |
-
?>
|
50 |
-
<div class="error">
|
51 |
-
<p><?php _e ( 'YITH WooCommerce Zoom Magnifier is enabled but not effective. It requires WooCommerce in order to work.', 'yith-woocommerce-zoom-magnifier' ); ?></p>
|
52 |
-
</div>
|
53 |
-
<?php
|
54 |
-
}
|
55 |
-
}
|
56 |
-
|
57 |
-
if ( ! function_exists ( 'yith_ywzm_install_free_admin_notice' ) ) {
|
58 |
-
/**
|
59 |
-
* Unable to activate the free version while the premium version is active
|
60 |
-
*
|
61 |
-
* @author Lorenzo Giuffrida
|
62 |
-
* @since 1.0.0
|
63 |
-
*/
|
64 |
-
function yith_ywzm_install_free_admin_notice () {
|
65 |
-
?>
|
66 |
-
<div class="error">
|
67 |
-
<p><?php _e ( 'You can\'t activate the free version of YITH WooCommerce Zoom Magnifier while you are using the premium one.', 'yith-woocommerce-zoom-magnifier' ); ?></p>
|
68 |
-
</div>
|
69 |
-
<?php
|
70 |
-
}
|
71 |
-
}
|
72 |
-
|
73 |
-
if ( ! function_exists ( 'yith_plugin_registration_hook' ) ) {
|
74 |
-
require_once 'plugin-fw/yit-plugin-registration-hook.php';
|
75 |
-
}
|
76 |
-
|
77 |
-
register_activation_hook ( __FILE__, 'yith_plugin_registration_hook' );
|
78 |
-
|
79 |
-
defined ( 'YITH_YWZM_FREE_INIT' ) || define ( 'YITH_YWZM_FREE_INIT', plugin_basename ( __FILE__ ) );
|
80 |
-
defined ( 'YITH_YWZM_SLUG' ) || define ( 'YITH_YWZM_SLUG', 'yith-woocommerce-zoom-magnifier' );
|
81 |
-
defined ( 'YITH_YWZM_VERSION' ) || define ( 'YITH_YWZM_VERSION', '1.3.
|
82 |
-
defined ( 'YITH_YWZM_FILE' ) || define ( 'YITH_YWZM_FILE', __FILE__ );
|
83 |
-
defined ( 'YITH_YWZM_DIR' ) || define ( 'YITH_YWZM_DIR', plugin_dir_path ( __FILE__ ) );
|
84 |
-
defined ( 'YITH_YWZM_URL' ) || define ( 'YITH_YWZM_URL', plugins_url ( '/', __FILE__ ) );
|
85 |
-
defined ( 'YITH_YWZM_ASSETS_URL' ) || define ( 'YITH_YWZM_ASSETS_URL', YITH_YWZM_URL . 'assets' );
|
86 |
-
defined ( 'YITH_YWZM_TEMPLATE_DIR' ) || define ( 'YITH_YWZM_TEMPLATE_DIR', YITH_YWZM_DIR . 'templates' );
|
87 |
-
defined ( 'YITH_YWZM_ASSETS_IMAGES_URL' ) || define ( 'YITH_YWZM_ASSETS_IMAGES_URL', YITH_YWZM_ASSETS_URL . '/images/' );
|
88 |
-
defined ( 'YITH_YWZM_LIB_DIR' ) || define ( 'YITH_YWZM_LIB_DIR', YITH_YWZM_DIR . 'lib/' );
|
89 |
-
|
90 |
-
/* Plugin Framework Version Check */
|
91 |
-
if ( ! function_exists ( 'yit_maybe_plugin_fw_loader' ) && file_exists ( YITH_YWZM_DIR . 'plugin-fw/init.php' ) ) {
|
92 |
-
require_once ( YITH_YWZM_DIR . 'plugin-fw/init.php' );
|
93 |
-
}
|
94 |
-
yit_maybe_plugin_fw_loader ( YITH_YWZM_DIR );
|
95 |
-
|
96 |
-
if ( ! function_exists ( 'yith_ywzm_init' ) ) {
|
97 |
-
/**
|
98 |
-
* Init the plugin
|
99 |
-
*
|
100 |
-
* @author Lorenzo Giuffrida
|
101 |
-
* @since 1.0.0
|
102 |
-
*/
|
103 |
-
function yith_ywzm_init () {
|
104 |
-
|
105 |
-
/**
|
106 |
-
* Load text domain and start plugin
|
107 |
-
*/
|
108 |
-
load_plugin_textdomain ( 'yith-woocommerce-zoom-magnifier', false, dirname ( plugin_basename ( __FILE__ ) ) . '/languages/' );
|
109 |
-
|
110 |
-
add_option ( 'yith_wcmg_slider_direction', apply_filters ( 'yith_wcmg_slider_direction', 'left' ) );
|
111 |
-
|
112 |
-
define ( 'YITH_WCMG', true );
|
113 |
-
define ( 'YITH_WCMG_URL', plugin_dir_url ( __FILE__ ) );
|
114 |
-
|
115 |
-
// Load required classes and functions
|
116 |
-
require_once ( 'functions.yith-wcmg.php' );
|
117 |
-
require_once ( 'class.yith-wcmg-admin.php' );
|
118 |
-
require_once ( 'class.yith-wcmg-frontend.php' );
|
119 |
-
|
120 |
-
require_once ( YITH_YWZM_LIB_DIR . 'class.yith-woocommerce-zoom-magnifier.php' );
|
121 |
-
require_once ( YITH_YWZM_LIB_DIR . 'class.yith-ywzm-plugin-fw-loader.php' );
|
122 |
-
require_once ( YITH_YWZM_LIB_DIR . 'class.yith-ywzm-custom-types.php' );
|
123 |
-
|
124 |
-
YITH_YWZM_Plugin_FW_Loader::get_instance ();
|
125 |
-
|
126 |
-
// Let's start the game!
|
127 |
-
global $yith_wcmg;
|
128 |
-
|
129 |
-
$yith_wcmg = new YITH_WooCommerce_Zoom_Magnifier();
|
130 |
-
}
|
131 |
-
}
|
132 |
-
add_action ( 'yith_ywzm_init', 'yith_ywzm_init' );
|
133 |
-
|
134 |
-
if ( ! function_exists ( 'yith_ywzm_install' ) ) {
|
135 |
-
/**
|
136 |
-
* install the plugin
|
137 |
-
*
|
138 |
-
* @author Lorenzo Giuffrida
|
139 |
-
* @since 1.0.0
|
140 |
-
*/
|
141 |
-
function yith_ywzm_install () {
|
142 |
-
|
143 |
-
if ( ! function_exists ( 'WC' ) ) {
|
144 |
-
add_action ( 'admin_notices', 'yith_ywzm_install_woocommerce_admin_notice' );
|
145 |
-
} elseif ( defined ( 'YITH_YWZM_PREMIUM' ) ) {
|
146 |
-
add_action ( 'admin_notices', 'yith_ywzm_install_free_admin_notice' );
|
147 |
-
deactivate_plugins ( plugin_basename ( __FILE__ ) );
|
148 |
-
} else {
|
149 |
-
do_action ( 'yith_ywzm_init' );
|
150 |
-
}
|
151 |
-
|
152 |
-
}
|
153 |
-
}
|
154 |
-
|
155 |
-
add_action ( 'plugins_loaded', 'yith_ywzm_install', 11 );
|
156 |
-
|
157 |
-
/*add_action( 'wp_ajax_nopriv_yith_wc_zoom_magnifier_get_main_image', 'test', 10 );
|
158 |
-
|
159 |
-
add_action( 'wp_ajax_yith_wc_zoom_magnifier_get_main_image', 'test', 10 );
|
160 |
-
|
161 |
-
function test(){
|
162 |
-
|
163 |
-
error_log( 'testing -> ' . print_r( 'test yeaaaaaaaah', true ) );
|
164 |
}*/
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Plugin Name: YITH WooCommerce Zoom Magnifier
|
4 |
+
* Plugin URI: https://yithemes.com/themes/plugins/yith-woocommerce-zoom-magnifier/
|
5 |
+
* Description: <code><strong>YITH WooCommerce Zoom Magnifier</strong></code> allows you to add a zoom effect to product images and a thumbnail slider for the product image gallery. <a href="https://yithemes.com/" target="_blank">Get more plugins for your e-commerce shop on <strong>YITH</strong></a>.
|
6 |
+
* Version: 1.3.8
|
7 |
+
* Author: YITH
|
8 |
+
* Author URI: https://yithemes.com/
|
9 |
+
* Text Domain: yith-woocommerce-zoom-magnifier
|
10 |
+
* Domain Path: /languages/
|
11 |
+
* WC requires at least: 3.3.0
|
12 |
+
* WC tested up to: 3.5.x
|
13 |
+
**/
|
14 |
+
|
15 |
+
/* Copyright 2013-2018 Your Inspiration Themes (email : plugins@yithemes.com)
|
16 |
+
|
17 |
+
This program is free software; you can redistribute it and/or modify
|
18 |
+
it under the terms of the GNU General Public License, version 2, as
|
19 |
+
published by the Free Software Foundation.
|
20 |
+
|
21 |
+
This program is distributed in the hope that it will be useful,
|
22 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
23 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
24 |
+
GNU General Public License for more details.
|
25 |
+
|
26 |
+
You should have received a copy of the GNU General Public License
|
27 |
+
along with this program; if not, write to the Free Software
|
28 |
+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
29 |
+
*/
|
30 |
+
|
31 |
+
if ( ! defined ( 'ABSPATH' ) ) {
|
32 |
+
exit;
|
33 |
+
} // Exit if accessed directly
|
34 |
+
|
35 |
+
if ( ! function_exists( 'is_plugin_active' ) ) {
|
36 |
+
if ( ! function_exists( 'get_plugin_data' ) ) {
|
37 |
+
require_once(ABSPATH . 'wp-admin/includes/plugin.php');
|
38 |
+
}
|
39 |
+
}
|
40 |
+
|
41 |
+
if ( ! function_exists ( 'yith_ywzm_install_woocommerce_admin_notice' ) ) {
|
42 |
+
/**
|
43 |
+
* WooCommerce is not enabled, the plugin will not be effective
|
44 |
+
*
|
45 |
+
* @author Lorenzo Giuffrida
|
46 |
+
* @since 1.0.0
|
47 |
+
*/
|
48 |
+
function yith_ywzm_install_woocommerce_admin_notice () {
|
49 |
+
?>
|
50 |
+
<div class="error">
|
51 |
+
<p><?php _e ( 'YITH WooCommerce Zoom Magnifier is enabled but not effective. It requires WooCommerce in order to work.', 'yith-woocommerce-zoom-magnifier' ); ?></p>
|
52 |
+
</div>
|
53 |
+
<?php
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
if ( ! function_exists ( 'yith_ywzm_install_free_admin_notice' ) ) {
|
58 |
+
/**
|
59 |
+
* Unable to activate the free version while the premium version is active
|
60 |
+
*
|
61 |
+
* @author Lorenzo Giuffrida
|
62 |
+
* @since 1.0.0
|
63 |
+
*/
|
64 |
+
function yith_ywzm_install_free_admin_notice () {
|
65 |
+
?>
|
66 |
+
<div class="error">
|
67 |
+
<p><?php _e ( 'You can\'t activate the free version of YITH WooCommerce Zoom Magnifier while you are using the premium one.', 'yith-woocommerce-zoom-magnifier' ); ?></p>
|
68 |
+
</div>
|
69 |
+
<?php
|
70 |
+
}
|
71 |
+
}
|
72 |
+
|
73 |
+
if ( ! function_exists ( 'yith_plugin_registration_hook' ) ) {
|
74 |
+
require_once 'plugin-fw/yit-plugin-registration-hook.php';
|
75 |
+
}
|
76 |
+
|
77 |
+
register_activation_hook ( __FILE__, 'yith_plugin_registration_hook' );
|
78 |
+
|
79 |
+
defined ( 'YITH_YWZM_FREE_INIT' ) || define ( 'YITH_YWZM_FREE_INIT', plugin_basename ( __FILE__ ) );
|
80 |
+
defined ( 'YITH_YWZM_SLUG' ) || define ( 'YITH_YWZM_SLUG', 'yith-woocommerce-zoom-magnifier' );
|
81 |
+
defined ( 'YITH_YWZM_VERSION' ) || define ( 'YITH_YWZM_VERSION', '1.3.8' );
|
82 |
+
defined ( 'YITH_YWZM_FILE' ) || define ( 'YITH_YWZM_FILE', __FILE__ );
|
83 |
+
defined ( 'YITH_YWZM_DIR' ) || define ( 'YITH_YWZM_DIR', plugin_dir_path ( __FILE__ ) );
|
84 |
+
defined ( 'YITH_YWZM_URL' ) || define ( 'YITH_YWZM_URL', plugins_url ( '/', __FILE__ ) );
|
85 |
+
defined ( 'YITH_YWZM_ASSETS_URL' ) || define ( 'YITH_YWZM_ASSETS_URL', YITH_YWZM_URL . 'assets' );
|
86 |
+
defined ( 'YITH_YWZM_TEMPLATE_DIR' ) || define ( 'YITH_YWZM_TEMPLATE_DIR', YITH_YWZM_DIR . 'templates' );
|
87 |
+
defined ( 'YITH_YWZM_ASSETS_IMAGES_URL' ) || define ( 'YITH_YWZM_ASSETS_IMAGES_URL', YITH_YWZM_ASSETS_URL . '/images/' );
|
88 |
+
defined ( 'YITH_YWZM_LIB_DIR' ) || define ( 'YITH_YWZM_LIB_DIR', YITH_YWZM_DIR . 'lib/' );
|
89 |
+
|
90 |
+
/* Plugin Framework Version Check */
|
91 |
+
if ( ! function_exists ( 'yit_maybe_plugin_fw_loader' ) && file_exists ( YITH_YWZM_DIR . 'plugin-fw/init.php' ) ) {
|
92 |
+
require_once ( YITH_YWZM_DIR . 'plugin-fw/init.php' );
|
93 |
+
}
|
94 |
+
yit_maybe_plugin_fw_loader ( YITH_YWZM_DIR );
|
95 |
+
|
96 |
+
if ( ! function_exists ( 'yith_ywzm_init' ) ) {
|
97 |
+
/**
|
98 |
+
* Init the plugin
|
99 |
+
*
|
100 |
+
* @author Lorenzo Giuffrida
|
101 |
+
* @since 1.0.0
|
102 |
+
*/
|
103 |
+
function yith_ywzm_init () {
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Load text domain and start plugin
|
107 |
+
*/
|
108 |
+
load_plugin_textdomain ( 'yith-woocommerce-zoom-magnifier', false, dirname ( plugin_basename ( __FILE__ ) ) . '/languages/' );
|
109 |
+
|
110 |
+
add_option ( 'yith_wcmg_slider_direction', apply_filters ( 'yith_wcmg_slider_direction', 'left' ) );
|
111 |
+
|
112 |
+
define ( 'YITH_WCMG', true );
|
113 |
+
define ( 'YITH_WCMG_URL', plugin_dir_url ( __FILE__ ) );
|
114 |
+
|
115 |
+
// Load required classes and functions
|
116 |
+
require_once ( 'functions.yith-wcmg.php' );
|
117 |
+
require_once ( 'class.yith-wcmg-admin.php' );
|
118 |
+
require_once ( 'class.yith-wcmg-frontend.php' );
|
119 |
+
|
120 |
+
require_once ( YITH_YWZM_LIB_DIR . 'class.yith-woocommerce-zoom-magnifier.php' );
|
121 |
+
require_once ( YITH_YWZM_LIB_DIR . 'class.yith-ywzm-plugin-fw-loader.php' );
|
122 |
+
require_once ( YITH_YWZM_LIB_DIR . 'class.yith-ywzm-custom-types.php' );
|
123 |
+
|
124 |
+
YITH_YWZM_Plugin_FW_Loader::get_instance ();
|
125 |
+
|
126 |
+
// Let's start the game!
|
127 |
+
global $yith_wcmg;
|
128 |
+
|
129 |
+
$yith_wcmg = new YITH_WooCommerce_Zoom_Magnifier();
|
130 |
+
}
|
131 |
+
}
|
132 |
+
add_action ( 'yith_ywzm_init', 'yith_ywzm_init' );
|
133 |
+
|
134 |
+
if ( ! function_exists ( 'yith_ywzm_install' ) ) {
|
135 |
+
/**
|
136 |
+
* install the plugin
|
137 |
+
*
|
138 |
+
* @author Lorenzo Giuffrida
|
139 |
+
* @since 1.0.0
|
140 |
+
*/
|
141 |
+
function yith_ywzm_install () {
|
142 |
+
|
143 |
+
if ( ! function_exists ( 'WC' ) ) {
|
144 |
+
add_action ( 'admin_notices', 'yith_ywzm_install_woocommerce_admin_notice' );
|
145 |
+
} elseif ( defined ( 'YITH_YWZM_PREMIUM' ) ) {
|
146 |
+
add_action ( 'admin_notices', 'yith_ywzm_install_free_admin_notice' );
|
147 |
+
deactivate_plugins ( plugin_basename ( __FILE__ ) );
|
148 |
+
} else {
|
149 |
+
do_action ( 'yith_ywzm_init' );
|
150 |
+
}
|
151 |
+
|
152 |
+
}
|
153 |
+
}
|
154 |
+
|
155 |
+
add_action ( 'plugins_loaded', 'yith_ywzm_install', 11 );
|
156 |
+
|
157 |
+
/*add_action( 'wp_ajax_nopriv_yith_wc_zoom_magnifier_get_main_image', 'test', 10 );
|
158 |
+
|
159 |
+
add_action( 'wp_ajax_yith_wc_zoom_magnifier_get_main_image', 'test', 10 );
|
160 |
+
|
161 |
+
function test(){
|
162 |
+
|
163 |
+
error_log( 'testing -> ' . print_r( 'test yeaaaaaaaah', true ) );
|
164 |
}*/
|
languages/yith-woocommerce-zoom-magnifier-es_ES.po
CHANGED
@@ -1,489 +1,489 @@
|
|
1 |
-
msgid ""
|
2 |
-
msgstr ""
|
3 |
-
"Project-Id-Version: YITH WooCommerce Order Tracking\n"
|
4 |
-
"POT-Creation-Date: 2016-06-13 16:57+0200\n"
|
5 |
-
"PO-Revision-Date: 2016-06-13 16:57+0200\n"
|
6 |
-
"Last-Translator: \n"
|
7 |
-
"Language-Team: Your Inspiration Themes <plugins@yithemes.com>\n"
|
8 |
-
"Language: es_ES\n"
|
9 |
-
"MIME-Version: 1.0\n"
|
10 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
-
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"X-Generator: Poedit 1.8.4\n"
|
13 |
-
"X-Poedit-Basepath: ..\n"
|
14 |
-
"Plural-Forms: nplurals=2; plural=n!=1;\n"
|
15 |
-
"X-Poedit-KeywordsList: __ ;_e;_n:1,2;__ngettext:1,2;__ngettext_noop:1,2;"
|
16 |
-
"_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
|
17 |
-
"X-Poedit-SourceCharset: UTF-8\n"
|
18 |
-
"X-Poedit-SearchPath-0: .\n"
|
19 |
-
"X-Poedit-SearchPathExcluded-0: plugin-fw\n"
|
20 |
-
|
21 |
-
#: class.yith-wcmg-admin.php:81
|
22 |
-
msgid "Image Size"
|
23 |
-
msgstr "Tamaño de la imagen"
|
24 |
-
|
25 |
-
#: class.yith-wcmg-admin.php:82 plugin-options/general-options.php:17
|
26 |
-
msgid "The size of the images used within the magnifier box"
|
27 |
-
msgstr "El tamaño de las imágenes usadas dentro de la caja de zoom"
|
28 |
-
|
29 |
-
#: init.php:50
|
30 |
-
msgid ""
|
31 |
-
"YITH WooCommerce Zoom Magnifier is enabled but not effective. It requires "
|
32 |
-
"WooCommerce in order to work."
|
33 |
-
msgstr ""
|
34 |
-
"YITH WooCommerce Zoom Magnifier está habilitado pero no es efectivo. "
|
35 |
-
"Requiere WooCommerce para funcionar."
|
36 |
-
|
37 |
-
#: init.php:66
|
38 |
-
msgid ""
|
39 |
-
"You can't activate the free version of YITH WooCommerce Zoom Magnifier while "
|
40 |
-
"you are using the premium one."
|
41 |
-
msgstr ""
|
42 |
-
|
43 |
-
#: lib/class.yith-ywzm-custom-types.php:159
|
44 |
-
msgid "Do you want to hard crop the image?"
|
45 |
-
msgstr "¿Quieres recortar la imagen?"
|
46 |
-
|
47 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:124
|
48 |
-
msgid "General"
|
49 |
-
msgstr "General"
|
50 |
-
|
51 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:127
|
52 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:191
|
53 |
-
msgid "Premium Version"
|
54 |
-
msgstr "Versión Premium"
|
55 |
-
|
56 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:129
|
57 |
-
msgid "Product exclusion list"
|
58 |
-
msgstr ""
|
59 |
-
|
60 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:188
|
61 |
-
msgid "Settings"
|
62 |
-
msgstr "Ajustes"
|
63 |
-
|
64 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:216
|
65 |
-
msgid "Plugin Documentation"
|
66 |
-
msgstr "Documentación del Plugin"
|
67 |
-
|
68 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:229
|
69 |
-
msgid ""
|
70 |
-
"YITH WooCommerce Zoom Magnifier is available in an outstanding PREMIUM "
|
71 |
-
"version with many new options, discover it now."
|
72 |
-
msgstr ""
|
73 |
-
"YITH WooCommerce Zoom Magnifier está disponible en una espectacular versión "
|
74 |
-
"PREMIUM con muchas nuevas opciones, descúbrela ahora."
|
75 |
-
|
76 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:230
|
77 |
-
msgid "Premium version"
|
78 |
-
msgstr "Versión Pemium"
|
79 |
-
|
80 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:237
|
81 |
-
#: plugin-options/general-options.php:217
|
82 |
-
msgid "YITH WooCommerce Zoom Magnifier"
|
83 |
-
msgstr "YITH WooCommerce Zoom Magnifier"
|
84 |
-
|
85 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:238
|
86 |
-
msgid ""
|
87 |
-
"In YIT Plugins tab you can find YITH WooCommerce Zoom Magnifier options."
|
88 |
-
"<br> From this menu you can access all settings of the YITH plugins "
|
89 |
-
"activated."
|
90 |
-
msgstr ""
|
91 |
-
"En la pestaña YITH Plugins puedes encontrar opciones de YITH WooCommerce "
|
92 |
-
"Zoom Magnifier. <br> Desde este menú puedes acceder a todos los ajustes de "
|
93 |
-
"los plugin YITH activados."
|
94 |
-
|
95 |
-
#: plugin-options/general-options.php:16
|
96 |
-
msgid "Image size"
|
97 |
-
msgstr "Tamaño de imagen"
|
98 |
-
|
99 |
-
#: plugin-options/general-options.php:36
|
100 |
-
msgid "General Settings"
|
101 |
-
msgstr "Ajustes Generales"
|
102 |
-
|
103 |
-
#: plugin-options/general-options.php:42
|
104 |
-
msgid "Activate YITH WooCommerce Zoom Magnifier"
|
105 |
-
msgstr "Activar YITH WooCommerce Zoom Magnifier"
|
106 |
-
|
107 |
-
#: plugin-options/general-options.php:43
|
108 |
-
msgid "Activate the plugin or use the WooCommerce default product image."
|
109 |
-
msgstr ""
|
110 |
-
"Activar el plugin o usar la imagen de producto por defecto de WooComerce."
|
111 |
-
|
112 |
-
#: plugin-options/general-options.php:50
|
113 |
-
msgid "Activate on mobile device"
|
114 |
-
msgstr "Activar en dispositivos móviles"
|
115 |
-
|
116 |
-
#: plugin-options/general-options.php:51
|
117 |
-
msgid ""
|
118 |
-
"Set if zoom and slider functionalities should be shown also on mobile "
|
119 |
-
"devices."
|
120 |
-
msgstr ""
|
121 |
-
"Establecer si las funcionalidades del zoom y el deslizador deberían "
|
122 |
-
"mostrarse también en dispositivos móviles."
|
123 |
-
|
124 |
-
#: plugin-options/general-options.php:59
|
125 |
-
msgid "Forced Image Size"
|
126 |
-
msgstr "Tamaño de imagen obligatiorio"
|
127 |
-
|
128 |
-
#: plugin-options/general-options.php:60
|
129 |
-
msgid ""
|
130 |
-
"If disabled, you will able to customize the sizes of the zoomed images. "
|
131 |
-
"Disable it at your own risk; the magnifier could not properly work with "
|
132 |
-
"images out of proportion."
|
133 |
-
msgstr ""
|
134 |
-
"Si está deshabilitado, podrás personalizar los tamaños de las imágenes "
|
135 |
-
"aumentadas. Desactívalo bajo tu propio riesgo, la lupa no funciona "
|
136 |
-
"correctamente con imágenes desproporcionadas."
|
137 |
-
|
138 |
-
#: plugin-options/general-options.php:74
|
139 |
-
msgid "Magnifier Settings"
|
140 |
-
msgstr "Ajustes del xoom"
|
141 |
-
|
142 |
-
#: plugin-options/general-options.php:80
|
143 |
-
msgid "Zoom Box Width"
|
144 |
-
msgstr "Ancho del cuadro de zoom"
|
145 |
-
|
146 |
-
#: plugin-options/general-options.php:81
|
147 |
-
msgid "The width of the magnifier box (default: auto)"
|
148 |
-
msgstr "El ancho del cuadro de zoom (por defecto: auto)"
|
149 |
-
|
150 |
-
#: plugin-options/general-options.php:88
|
151 |
-
msgid "Zoom Box Height"
|
152 |
-
msgstr "Altura del cuadro de zoom"
|
153 |
-
|
154 |
-
#: plugin-options/general-options.php:89
|
155 |
-
msgid "The height of the magnifier box (default: auto)"
|
156 |
-
msgstr "La altura del cuadro de zoom (por defecto: auto)"
|
157 |
-
|
158 |
-
#: plugin-options/general-options.php:97
|
159 |
-
msgid "Zoom Box Position"
|
160 |
-
msgstr "Posición del cuadro de zoom"
|
161 |
-
|
162 |
-
#: plugin-options/general-options.php:98
|
163 |
-
msgid "The magnifier position"
|
164 |
-
msgstr "La posición del cuadro de zoom"
|
165 |
-
|
166 |
-
#: plugin-options/general-options.php:104
|
167 |
-
msgid "Right"
|
168 |
-
msgstr "Derecha"
|
169 |
-
|
170 |
-
#: plugin-options/general-options.php:105
|
171 |
-
#: plugin-options/general-options.php:117
|
172 |
-
msgid "Inside"
|
173 |
-
msgstr "Dentro"
|
174 |
-
|
175 |
-
#: plugin-options/general-options.php:109
|
176 |
-
msgid "Zoom Box Position for mobile devices"
|
177 |
-
msgstr "Posición del cuadro de zoom en dispositivos móviles"
|
178 |
-
|
179 |
-
#: plugin-options/general-options.php:110
|
180 |
-
msgid "The magnifier position for the mobile devices (iPhone, Android, etc.)"
|
181 |
-
msgstr "La posición del zoom en dispositivos móviles (iPhone, Android, etc.)"
|
182 |
-
|
183 |
-
#: plugin-options/general-options.php:116
|
184 |
-
msgid "Default"
|
185 |
-
msgstr "Por defecto"
|
186 |
-
|
187 |
-
#: plugin-options/general-options.php:118
|
188 |
-
msgid "Disable"
|
189 |
-
msgstr "Deshabilitar"
|
190 |
-
|
191 |
-
#: plugin-options/general-options.php:122
|
192 |
-
msgid "Loading label"
|
193 |
-
msgstr "Etiqueta de cargando"
|
194 |
-
|
195 |
-
#: plugin-options/general-options.php:125
|
196 |
-
#: plugin-options/general-options.php:126
|
197 |
-
msgid "Loading..."
|
198 |
-
msgstr "Cargando..."
|
199 |
-
|
200 |
-
#: plugin-options/general-options.php:131
|
201 |
-
msgid "Lens Opacity"
|
202 |
-
msgstr "Opacidad de la lente"
|
203 |
-
|
204 |
-
#: plugin-options/general-options.php:142
|
205 |
-
msgid "Blur"
|
206 |
-
msgstr "Difuminar"
|
207 |
-
|
208 |
-
#: plugin-options/general-options.php:143
|
209 |
-
msgid "Add a blur effect to the small image on mouse hover."
|
210 |
-
msgstr ""
|
211 |
-
"Añadir un efecto de disolverse a la imagen pequeña con el evento hover del "
|
212 |
-
"ratón."
|
213 |
-
|
214 |
-
#: plugin-options/general-options.php:154
|
215 |
-
msgid "Slider Settings"
|
216 |
-
msgstr "Ajustes de Deslizador"
|
217 |
-
|
218 |
-
#: plugin-options/general-options.php:160
|
219 |
-
msgid "Activate Slider"
|
220 |
-
msgstr "Activar Deslizador"
|
221 |
-
|
222 |
-
#: plugin-options/general-options.php:161
|
223 |
-
msgid "Activate Thumbnail Slider."
|
224 |
-
msgstr "Activar miniatura de Deslizador."
|
225 |
-
|
226 |
-
#: plugin-options/general-options.php:168
|
227 |
-
msgid "Activate Responsive Slider"
|
228 |
-
msgstr "Activar Deslizador Responsive"
|
229 |
-
|
230 |
-
#: plugin-options/general-options.php:169
|
231 |
-
msgid ""
|
232 |
-
"This option fits the thumbnails within the available space. Disable it if "
|
233 |
-
"you want to manage freely the thumbnails (eg. add margins, paddings, etc.)"
|
234 |
-
msgstr ""
|
235 |
-
"Esta opción ajusta las miniaturas dentro del espacio disponible. "
|
236 |
-
"Deshabilítala si quieres administrar libremente las miniaturas (p.ej.: "
|
237 |
-
"añadir márgenes, rellenos, etc.)"
|
238 |
-
|
239 |
-
#: plugin-options/general-options.php:176
|
240 |
-
msgid "Items"
|
241 |
-
msgstr "Elementos"
|
242 |
-
|
243 |
-
#: plugin-options/general-options.php:177
|
244 |
-
msgid "Number of items to show"
|
245 |
-
msgstr "Número de elementos que se muestran"
|
246 |
-
|
247 |
-
#: plugin-options/general-options.php:187
|
248 |
-
msgid "Circular carousel"
|
249 |
-
msgstr "Carrusel circular"
|
250 |
-
|
251 |
-
#: plugin-options/general-options.php:188
|
252 |
-
msgid "It defines whether the carousel should be circular."
|
253 |
-
msgstr "Define si el carrusel debe ser circular"
|
254 |
-
|
255 |
-
#: plugin-options/general-options.php:195
|
256 |
-
msgid "Infinite carousel"
|
257 |
-
msgstr "Carrusel infinito"
|
258 |
-
|
259 |
-
#: plugin-options/general-options.php:196
|
260 |
-
msgid ""
|
261 |
-
"It defines whether the carousel should be infinite. Note: It is possible to "
|
262 |
-
"create a non-circular, infinite carousel, but it is not possible to create a "
|
263 |
-
"circular, non-infinite carousel."
|
264 |
-
msgstr ""
|
265 |
-
"Define si el carrusel debe ser infinito. Nota: es posible crear un carrusel "
|
266 |
-
"infinito no circular, pero no es posible crear un carrusel circular no "
|
267 |
-
"infinito."
|
268 |
-
|
269 |
-
#: plugin-options/general-options.php:214
|
270 |
-
msgid "Upgrade to the PREMIUM VERSION"
|
271 |
-
msgstr "Actualiza a la VERSIÓN PREMIUM"
|
272 |
-
|
273 |
-
#: plugin-options/general-options.php:218
|
274 |
-
msgid "Discover The Advanced Features"
|
275 |
-
msgstr "Descubre las características avanzadas"
|
276 |
-
|
277 |
-
#: plugin-options/general-options.php:219
|
278 |
-
msgid ""
|
279 |
-
"Upgrade to the PREMIUM VERSION of YITH WOOCOMMERCE ZOOM MAGNIFIER to benefit "
|
280 |
-
"from all features!"
|
281 |
-
msgstr ""
|
282 |
-
"¡Actualiza a la VERSIÓN PREMIUM de YITH WOOCOMMERCE ZOOM MAGNIFIER para "
|
283 |
-
"beneficiarte de todas las características!"
|
284 |
-
|
285 |
-
#: plugin-options/general-options.php:223
|
286 |
-
msgid ""
|
287 |
-
"See YITH WooCommerce Zoom Magnifier plugin with full premium features in "
|
288 |
-
"action"
|
289 |
-
msgstr ""
|
290 |
-
"Ver cómo es el plugin YITH WooCommerce Zoom Magnifier con todas sus "
|
291 |
-
"características premium en acción"
|
292 |
-
|
293 |
-
#: plugin-options/general-options.php:225
|
294 |
-
msgid "Get Support and Pro Features"
|
295 |
-
msgstr "Hazte con Características Pro y Soporte"
|
296 |
-
|
297 |
-
#: plugin-options/general-options.php:226
|
298 |
-
msgid ""
|
299 |
-
"Purchasing the premium version of the plugin, you will take advantage of the "
|
300 |
-
"advanced features of the product, and you will get one year of free updates "
|
301 |
-
"and support through our platform available 24h/24."
|
302 |
-
msgstr ""
|
303 |
-
"Comprando la versión premium del plugin, obtendrás las ventajas de las "
|
304 |
-
"características avanzadas del producto, y tendrás un año de actualizaciones "
|
305 |
-
"gratuitas y de soporte a través de nuestra plataforma disponible 24h/24."
|
306 |
-
|
307 |
-
#: templates/admin/premium.php:193
|
308 |
-
#, php-format
|
309 |
-
msgid ""
|
310 |
-
"Upgrade to the %1$s premium version %2$s of %1$s YITH WooCommerce Zoom "
|
311 |
-
"Magnifier %2$s to benefit from all features!"
|
312 |
-
msgstr ""
|
313 |
-
|
314 |
-
#: templates/admin/premium.php:196
|
315 |
-
#, php-format
|
316 |
-
msgid "%1$sUPGRADE%2$s%3$sto the premium version%2$s"
|
317 |
-
msgstr ""
|
318 |
-
|
319 |
-
#: templates/admin/premium.php:202
|
320 |
-
#, php-format
|
321 |
-
msgid "%1$sPremium Features%2$s"
|
322 |
-
msgstr ""
|
323 |
-
|
324 |
-
#: templates/admin/premium.php:210
|
325 |
-
msgid "ZOOM BOX POSITION"
|
326 |
-
msgstr ""
|
327 |
-
|
328 |
-
#: templates/admin/premium.php:213
|
329 |
-
#, php-format
|
330 |
-
msgid ""
|
331 |
-
"Choose where you want to show the %1$szoomed version%2$s of the image of "
|
332 |
-
"your products. Place it above or below the original image, on its left or "
|
333 |
-
"its right, or you can even place it over it.$2$s"
|
334 |
-
msgstr ""
|
335 |
-
|
336 |
-
#: templates/admin/premium.php:223
|
337 |
-
msgid "ENLARGE THE IMAGES"
|
338 |
-
msgstr ""
|
339 |
-
|
340 |
-
#: templates/admin/premium.php:225
|
341 |
-
msgid ""
|
342 |
-
"Just one click and the product image will appear in a bigger size in a modal "
|
343 |
-
"window. A further chance to let users analyze in a better way what you sell."
|
344 |
-
msgstr ""
|
345 |
-
|
346 |
-
#: templates/admin/premium.php:240
|
347 |
-
msgid "EXCLUDE PRODUCTS"
|
348 |
-
msgstr ""
|
349 |
-
|
350 |
-
#: templates/admin/premium.php:242
|
351 |
-
msgid ""
|
352 |
-
"Tailored options to limit the plugin features only to certain products. Some "
|
353 |
-
"of these could have too small images to be zoomed, or maybe being part of "
|
354 |
-
"categories that do not imply zoomed images. Select the products and the "
|
355 |
-
"categories to exclude and delete all your problems"
|
356 |
-
msgstr ""
|
357 |
-
|
358 |
-
#: templates/admin/premium.php:251
|
359 |
-
#, php-format
|
360 |
-
msgid ""
|
361 |
-
"Upgrade to the %1$spremium version%2$s of %1$sYITH WooCommerce Zoom Magnifier"
|
362 |
-
"%2$s to benefit from all features!"
|
363 |
-
msgstr ""
|
364 |
-
|
365 |
-
#: templates/admin/premium.php:254
|
366 |
-
#, php-format
|
367 |
-
msgid "%1$sUPGRADE%2$s %3$sto the premium version%2$s"
|
368 |
-
msgstr ""
|
369 |
-
|
370 |
-
#: yit-common/yith-panel.php:429
|
371 |
-
msgid "Select a date"
|
372 |
-
msgstr "Selecciona una fecha"
|
373 |
-
|
374 |
-
#: yit-common/yith-panel.php:430
|
375 |
-
msgid "Hours"
|
376 |
-
msgstr "Horas"
|
377 |
-
|
378 |
-
#: yit-common/yith-panel.php:431 yit-common/yith-panel.php:432
|
379 |
-
msgid "Minutes"
|
380 |
-
msgstr "Minutos"
|
381 |
-
|
382 |
-
#: yit-common/yith-panel.php:440
|
383 |
-
msgid "Upload"
|
384 |
-
msgstr "Actualizar"
|
385 |
-
|
386 |
-
#: yit-common/yith-panel.php:477
|
387 |
-
msgid "px"
|
388 |
-
msgstr "px"
|
389 |
-
|
390 |
-
#: yit-common/yith-panel.php:479
|
391 |
-
msgid "em"
|
392 |
-
msgstr "em"
|
393 |
-
|
394 |
-
#: yit-common/yith-panel.php:481
|
395 |
-
msgid "pt"
|
396 |
-
msgstr "pt"
|
397 |
-
|
398 |
-
#: yit-common/yith-panel.php:483
|
399 |
-
msgid "rem"
|
400 |
-
msgstr "rem"
|
401 |
-
|
402 |
-
#: yit-common/yith-panel.php:495
|
403 |
-
msgid "Select a font family"
|
404 |
-
msgstr "Selecciona un tipo de fuente"
|
405 |
-
|
406 |
-
#: yit-common/yith-panel.php:505
|
407 |
-
msgid "Regular"
|
408 |
-
msgstr "Normal"
|
409 |
-
|
410 |
-
#: yit-common/yith-panel.php:507
|
411 |
-
msgid "Bold"
|
412 |
-
msgstr "Negrita"
|
413 |
-
|
414 |
-
#: yit-common/yith-panel.php:509
|
415 |
-
msgid "Extra bold"
|
416 |
-
msgstr "Extra negrita"
|
417 |
-
|
418 |
-
#: yit-common/yith-panel.php:511
|
419 |
-
msgid "Italic"
|
420 |
-
msgstr "Cursiva"
|
421 |
-
|
422 |
-
#: yit-common/yith-panel.php:513
|
423 |
-
msgid "Italic bold"
|
424 |
-
msgstr "Negrita cursiva"
|
425 |
-
|
426 |
-
#: yit-common/yith-panel.php:529
|
427 |
-
msgid "Click to preview"
|
428 |
-
msgstr "Haz click para previsualizar"
|
429 |
-
|
430 |
-
#~ msgid "product"
|
431 |
-
#~ msgstr "praducto"
|
432 |
-
|
433 |
-
#~ msgid "products"
|
434 |
-
#~ msgstr "productos"
|
435 |
-
|
436 |
-
#~ msgid "Remove from exclusions"
|
437 |
-
#~ msgstr "Quitar de las exclusiones"
|
438 |
-
|
439 |
-
#~ msgid "Edit product"
|
440 |
-
#~ msgstr "Editar producto"
|
441 |
-
|
442 |
-
#~ msgid "Remove from list"
|
443 |
-
#~ msgstr "Eliminar de la lista"
|
444 |
-
|
445 |
-
#~ msgid "%s product removed successfully"
|
446 |
-
#~ msgid_plural "%s products removed successfully"
|
447 |
-
#~ msgstr[0] "El producto %s ha sido eliminado con éxito"
|
448 |
-
#~ msgstr[1] "Los productos %s han sido eliminados con éxito"
|
449 |
-
|
450 |
-
#~ msgid "%s product added successfully"
|
451 |
-
#~ msgid_plural "%s products added successfully"
|
452 |
-
#~ msgstr[0] "El producto %s ha sido añadido con éxito"
|
453 |
-
#~ msgstr[1] "Los productos %s han sido añadidos con éxito"
|
454 |
-
|
455 |
-
#~ msgid "Product updated successfully"
|
456 |
-
#~ msgstr "Producto actualizado con éxito"
|
457 |
-
|
458 |
-
#~ msgid "Single Product Exclusion List"
|
459 |
-
#~ msgstr "Lista de Exclusión de Productos"
|
460 |
-
|
461 |
-
#~ msgid "Add Products"
|
462 |
-
#~ msgstr "Añadir productos"
|
463 |
-
|
464 |
-
#~ msgid "Products to exclude"
|
465 |
-
#~ msgstr "Productos para excluir"
|
466 |
-
|
467 |
-
#~ msgid "Add product exclusion"
|
468 |
-
#~ msgstr "Añadir exclusión de producto"
|
469 |
-
|
470 |
-
#~ msgid "Return to exclusion list"
|
471 |
-
#~ msgstr "Devolver a la lista de exclusión"
|
472 |
-
|
473 |
-
#~ msgid "Select at least one product"
|
474 |
-
#~ msgstr "Selecciona al menos un producto"
|
475 |
-
|
476 |
-
#~ msgid "Exclude product categories"
|
477 |
-
#~ msgstr "Excluir categorías de productos"
|
478 |
-
|
479 |
-
#~ msgid "Top"
|
480 |
-
#~ msgstr "Arriba"
|
481 |
-
|
482 |
-
#~ msgid "Bottom"
|
483 |
-
#~ msgstr "Abajo"
|
484 |
-
|
485 |
-
#~ msgid "Left"
|
486 |
-
#~ msgstr "Izquierda"
|
487 |
-
|
488 |
-
#~ msgid "Product"
|
489 |
-
#~ msgstr "Producto"
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: YITH WooCommerce Order Tracking\n"
|
4 |
+
"POT-Creation-Date: 2016-06-13 16:57+0200\n"
|
5 |
+
"PO-Revision-Date: 2016-06-13 16:57+0200\n"
|
6 |
+
"Last-Translator: \n"
|
7 |
+
"Language-Team: Your Inspiration Themes <plugins@yithemes.com>\n"
|
8 |
+
"Language: es_ES\n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 1.8.4\n"
|
13 |
+
"X-Poedit-Basepath: ..\n"
|
14 |
+
"Plural-Forms: nplurals=2; plural=n!=1;\n"
|
15 |
+
"X-Poedit-KeywordsList: __ ;_e;_n:1,2;__ngettext:1,2;__ngettext_noop:1,2;"
|
16 |
+
"_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
|
17 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
18 |
+
"X-Poedit-SearchPath-0: .\n"
|
19 |
+
"X-Poedit-SearchPathExcluded-0: plugin-fw\n"
|
20 |
+
|
21 |
+
#: class.yith-wcmg-admin.php:81
|
22 |
+
msgid "Image Size"
|
23 |
+
msgstr "Tamaño de la imagen"
|
24 |
+
|
25 |
+
#: class.yith-wcmg-admin.php:82 plugin-options/general-options.php:17
|
26 |
+
msgid "The size of the images used within the magnifier box"
|
27 |
+
msgstr "El tamaño de las imágenes usadas dentro de la caja de zoom"
|
28 |
+
|
29 |
+
#: init.php:50
|
30 |
+
msgid ""
|
31 |
+
"YITH WooCommerce Zoom Magnifier is enabled but not effective. It requires "
|
32 |
+
"WooCommerce in order to work."
|
33 |
+
msgstr ""
|
34 |
+
"YITH WooCommerce Zoom Magnifier está habilitado pero no es efectivo. "
|
35 |
+
"Requiere WooCommerce para funcionar."
|
36 |
+
|
37 |
+
#: init.php:66
|
38 |
+
msgid ""
|
39 |
+
"You can't activate the free version of YITH WooCommerce Zoom Magnifier while "
|
40 |
+
"you are using the premium one."
|
41 |
+
msgstr ""
|
42 |
+
|
43 |
+
#: lib/class.yith-ywzm-custom-types.php:159
|
44 |
+
msgid "Do you want to hard crop the image?"
|
45 |
+
msgstr "¿Quieres recortar la imagen?"
|
46 |
+
|
47 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:124
|
48 |
+
msgid "General"
|
49 |
+
msgstr "General"
|
50 |
+
|
51 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:127
|
52 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:191
|
53 |
+
msgid "Premium Version"
|
54 |
+
msgstr "Versión Premium"
|
55 |
+
|
56 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:129
|
57 |
+
msgid "Product exclusion list"
|
58 |
+
msgstr ""
|
59 |
+
|
60 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:188
|
61 |
+
msgid "Settings"
|
62 |
+
msgstr "Ajustes"
|
63 |
+
|
64 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:216
|
65 |
+
msgid "Plugin Documentation"
|
66 |
+
msgstr "Documentación del Plugin"
|
67 |
+
|
68 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:229
|
69 |
+
msgid ""
|
70 |
+
"YITH WooCommerce Zoom Magnifier is available in an outstanding PREMIUM "
|
71 |
+
"version with many new options, discover it now."
|
72 |
+
msgstr ""
|
73 |
+
"YITH WooCommerce Zoom Magnifier está disponible en una espectacular versión "
|
74 |
+
"PREMIUM con muchas nuevas opciones, descúbrela ahora."
|
75 |
+
|
76 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:230
|
77 |
+
msgid "Premium version"
|
78 |
+
msgstr "Versión Pemium"
|
79 |
+
|
80 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:237
|
81 |
+
#: plugin-options/general-options.php:217
|
82 |
+
msgid "YITH WooCommerce Zoom Magnifier"
|
83 |
+
msgstr "YITH WooCommerce Zoom Magnifier"
|
84 |
+
|
85 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:238
|
86 |
+
msgid ""
|
87 |
+
"In YIT Plugins tab you can find YITH WooCommerce Zoom Magnifier options."
|
88 |
+
"<br> From this menu you can access all settings of the YITH plugins "
|
89 |
+
"activated."
|
90 |
+
msgstr ""
|
91 |
+
"En la pestaña YITH Plugins puedes encontrar opciones de YITH WooCommerce "
|
92 |
+
"Zoom Magnifier. <br> Desde este menú puedes acceder a todos los ajustes de "
|
93 |
+
"los plugin YITH activados."
|
94 |
+
|
95 |
+
#: plugin-options/general-options.php:16
|
96 |
+
msgid "Image size"
|
97 |
+
msgstr "Tamaño de imagen"
|
98 |
+
|
99 |
+
#: plugin-options/general-options.php:36
|
100 |
+
msgid "General Settings"
|
101 |
+
msgstr "Ajustes Generales"
|
102 |
+
|
103 |
+
#: plugin-options/general-options.php:42
|
104 |
+
msgid "Activate YITH WooCommerce Zoom Magnifier"
|
105 |
+
msgstr "Activar YITH WooCommerce Zoom Magnifier"
|
106 |
+
|
107 |
+
#: plugin-options/general-options.php:43
|
108 |
+
msgid "Activate the plugin or use the WooCommerce default product image."
|
109 |
+
msgstr ""
|
110 |
+
"Activar el plugin o usar la imagen de producto por defecto de WooComerce."
|
111 |
+
|
112 |
+
#: plugin-options/general-options.php:50
|
113 |
+
msgid "Activate on mobile device"
|
114 |
+
msgstr "Activar en dispositivos móviles"
|
115 |
+
|
116 |
+
#: plugin-options/general-options.php:51
|
117 |
+
msgid ""
|
118 |
+
"Set if zoom and slider functionalities should be shown also on mobile "
|
119 |
+
"devices."
|
120 |
+
msgstr ""
|
121 |
+
"Establecer si las funcionalidades del zoom y el deslizador deberían "
|
122 |
+
"mostrarse también en dispositivos móviles."
|
123 |
+
|
124 |
+
#: plugin-options/general-options.php:59
|
125 |
+
msgid "Forced Image Size"
|
126 |
+
msgstr "Tamaño de imagen obligatiorio"
|
127 |
+
|
128 |
+
#: plugin-options/general-options.php:60
|
129 |
+
msgid ""
|
130 |
+
"If disabled, you will able to customize the sizes of the zoomed images. "
|
131 |
+
"Disable it at your own risk; the magnifier could not properly work with "
|
132 |
+
"images out of proportion."
|
133 |
+
msgstr ""
|
134 |
+
"Si está deshabilitado, podrás personalizar los tamaños de las imágenes "
|
135 |
+
"aumentadas. Desactívalo bajo tu propio riesgo, la lupa no funciona "
|
136 |
+
"correctamente con imágenes desproporcionadas."
|
137 |
+
|
138 |
+
#: plugin-options/general-options.php:74
|
139 |
+
msgid "Magnifier Settings"
|
140 |
+
msgstr "Ajustes del xoom"
|
141 |
+
|
142 |
+
#: plugin-options/general-options.php:80
|
143 |
+
msgid "Zoom Box Width"
|
144 |
+
msgstr "Ancho del cuadro de zoom"
|
145 |
+
|
146 |
+
#: plugin-options/general-options.php:81
|
147 |
+
msgid "The width of the magnifier box (default: auto)"
|
148 |
+
msgstr "El ancho del cuadro de zoom (por defecto: auto)"
|
149 |
+
|
150 |
+
#: plugin-options/general-options.php:88
|
151 |
+
msgid "Zoom Box Height"
|
152 |
+
msgstr "Altura del cuadro de zoom"
|
153 |
+
|
154 |
+
#: plugin-options/general-options.php:89
|
155 |
+
msgid "The height of the magnifier box (default: auto)"
|
156 |
+
msgstr "La altura del cuadro de zoom (por defecto: auto)"
|
157 |
+
|
158 |
+
#: plugin-options/general-options.php:97
|
159 |
+
msgid "Zoom Box Position"
|
160 |
+
msgstr "Posición del cuadro de zoom"
|
161 |
+
|
162 |
+
#: plugin-options/general-options.php:98
|
163 |
+
msgid "The magnifier position"
|
164 |
+
msgstr "La posición del cuadro de zoom"
|
165 |
+
|
166 |
+
#: plugin-options/general-options.php:104
|
167 |
+
msgid "Right"
|
168 |
+
msgstr "Derecha"
|
169 |
+
|
170 |
+
#: plugin-options/general-options.php:105
|
171 |
+
#: plugin-options/general-options.php:117
|
172 |
+
msgid "Inside"
|
173 |
+
msgstr "Dentro"
|
174 |
+
|
175 |
+
#: plugin-options/general-options.php:109
|
176 |
+
msgid "Zoom Box Position for mobile devices"
|
177 |
+
msgstr "Posición del cuadro de zoom en dispositivos móviles"
|
178 |
+
|
179 |
+
#: plugin-options/general-options.php:110
|
180 |
+
msgid "The magnifier position for the mobile devices (iPhone, Android, etc.)"
|
181 |
+
msgstr "La posición del zoom en dispositivos móviles (iPhone, Android, etc.)"
|
182 |
+
|
183 |
+
#: plugin-options/general-options.php:116
|
184 |
+
msgid "Default"
|
185 |
+
msgstr "Por defecto"
|
186 |
+
|
187 |
+
#: plugin-options/general-options.php:118
|
188 |
+
msgid "Disable"
|
189 |
+
msgstr "Deshabilitar"
|
190 |
+
|
191 |
+
#: plugin-options/general-options.php:122
|
192 |
+
msgid "Loading label"
|
193 |
+
msgstr "Etiqueta de cargando"
|
194 |
+
|
195 |
+
#: plugin-options/general-options.php:125
|
196 |
+
#: plugin-options/general-options.php:126
|
197 |
+
msgid "Loading..."
|
198 |
+
msgstr "Cargando..."
|
199 |
+
|
200 |
+
#: plugin-options/general-options.php:131
|
201 |
+
msgid "Lens Opacity"
|
202 |
+
msgstr "Opacidad de la lente"
|
203 |
+
|
204 |
+
#: plugin-options/general-options.php:142
|
205 |
+
msgid "Blur"
|
206 |
+
msgstr "Difuminar"
|
207 |
+
|
208 |
+
#: plugin-options/general-options.php:143
|
209 |
+
msgid "Add a blur effect to the small image on mouse hover."
|
210 |
+
msgstr ""
|
211 |
+
"Añadir un efecto de disolverse a la imagen pequeña con el evento hover del "
|
212 |
+
"ratón."
|
213 |
+
|
214 |
+
#: plugin-options/general-options.php:154
|
215 |
+
msgid "Slider Settings"
|
216 |
+
msgstr "Ajustes de Deslizador"
|
217 |
+
|
218 |
+
#: plugin-options/general-options.php:160
|
219 |
+
msgid "Activate Slider"
|
220 |
+
msgstr "Activar Deslizador"
|
221 |
+
|
222 |
+
#: plugin-options/general-options.php:161
|
223 |
+
msgid "Activate Thumbnail Slider."
|
224 |
+
msgstr "Activar miniatura de Deslizador."
|
225 |
+
|
226 |
+
#: plugin-options/general-options.php:168
|
227 |
+
msgid "Activate Responsive Slider"
|
228 |
+
msgstr "Activar Deslizador Responsive"
|
229 |
+
|
230 |
+
#: plugin-options/general-options.php:169
|
231 |
+
msgid ""
|
232 |
+
"This option fits the thumbnails within the available space. Disable it if "
|
233 |
+
"you want to manage freely the thumbnails (eg. add margins, paddings, etc.)"
|
234 |
+
msgstr ""
|
235 |
+
"Esta opción ajusta las miniaturas dentro del espacio disponible. "
|
236 |
+
"Deshabilítala si quieres administrar libremente las miniaturas (p.ej.: "
|
237 |
+
"añadir márgenes, rellenos, etc.)"
|
238 |
+
|
239 |
+
#: plugin-options/general-options.php:176
|
240 |
+
msgid "Items"
|
241 |
+
msgstr "Elementos"
|
242 |
+
|
243 |
+
#: plugin-options/general-options.php:177
|
244 |
+
msgid "Number of items to show"
|
245 |
+
msgstr "Número de elementos que se muestran"
|
246 |
+
|
247 |
+
#: plugin-options/general-options.php:187
|
248 |
+
msgid "Circular carousel"
|
249 |
+
msgstr "Carrusel circular"
|
250 |
+
|
251 |
+
#: plugin-options/general-options.php:188
|
252 |
+
msgid "It defines whether the carousel should be circular."
|
253 |
+
msgstr "Define si el carrusel debe ser circular"
|
254 |
+
|
255 |
+
#: plugin-options/general-options.php:195
|
256 |
+
msgid "Infinite carousel"
|
257 |
+
msgstr "Carrusel infinito"
|
258 |
+
|
259 |
+
#: plugin-options/general-options.php:196
|
260 |
+
msgid ""
|
261 |
+
"It defines whether the carousel should be infinite. Note: It is possible to "
|
262 |
+
"create a non-circular, infinite carousel, but it is not possible to create a "
|
263 |
+
"circular, non-infinite carousel."
|
264 |
+
msgstr ""
|
265 |
+
"Define si el carrusel debe ser infinito. Nota: es posible crear un carrusel "
|
266 |
+
"infinito no circular, pero no es posible crear un carrusel circular no "
|
267 |
+
"infinito."
|
268 |
+
|
269 |
+
#: plugin-options/general-options.php:214
|
270 |
+
msgid "Upgrade to the PREMIUM VERSION"
|
271 |
+
msgstr "Actualiza a la VERSIÓN PREMIUM"
|
272 |
+
|
273 |
+
#: plugin-options/general-options.php:218
|
274 |
+
msgid "Discover The Advanced Features"
|
275 |
+
msgstr "Descubre las características avanzadas"
|
276 |
+
|
277 |
+
#: plugin-options/general-options.php:219
|
278 |
+
msgid ""
|
279 |
+
"Upgrade to the PREMIUM VERSION of YITH WOOCOMMERCE ZOOM MAGNIFIER to benefit "
|
280 |
+
"from all features!"
|
281 |
+
msgstr ""
|
282 |
+
"¡Actualiza a la VERSIÓN PREMIUM de YITH WOOCOMMERCE ZOOM MAGNIFIER para "
|
283 |
+
"beneficiarte de todas las características!"
|
284 |
+
|
285 |
+
#: plugin-options/general-options.php:223
|
286 |
+
msgid ""
|
287 |
+
"See YITH WooCommerce Zoom Magnifier plugin with full premium features in "
|
288 |
+
"action"
|
289 |
+
msgstr ""
|
290 |
+
"Ver cómo es el plugin YITH WooCommerce Zoom Magnifier con todas sus "
|
291 |
+
"características premium en acción"
|
292 |
+
|
293 |
+
#: plugin-options/general-options.php:225
|
294 |
+
msgid "Get Support and Pro Features"
|
295 |
+
msgstr "Hazte con Características Pro y Soporte"
|
296 |
+
|
297 |
+
#: plugin-options/general-options.php:226
|
298 |
+
msgid ""
|
299 |
+
"Purchasing the premium version of the plugin, you will take advantage of the "
|
300 |
+
"advanced features of the product, and you will get one year of free updates "
|
301 |
+
"and support through our platform available 24h/24."
|
302 |
+
msgstr ""
|
303 |
+
"Comprando la versión premium del plugin, obtendrás las ventajas de las "
|
304 |
+
"características avanzadas del producto, y tendrás un año de actualizaciones "
|
305 |
+
"gratuitas y de soporte a través de nuestra plataforma disponible 24h/24."
|
306 |
+
|
307 |
+
#: templates/admin/premium.php:193
|
308 |
+
#, php-format
|
309 |
+
msgid ""
|
310 |
+
"Upgrade to the %1$s premium version %2$s of %1$s YITH WooCommerce Zoom "
|
311 |
+
"Magnifier %2$s to benefit from all features!"
|
312 |
+
msgstr ""
|
313 |
+
|
314 |
+
#: templates/admin/premium.php:196
|
315 |
+
#, php-format
|
316 |
+
msgid "%1$sUPGRADE%2$s%3$sto the premium version%2$s"
|
317 |
+
msgstr ""
|
318 |
+
|
319 |
+
#: templates/admin/premium.php:202
|
320 |
+
#, php-format
|
321 |
+
msgid "%1$sPremium Features%2$s"
|
322 |
+
msgstr ""
|
323 |
+
|
324 |
+
#: templates/admin/premium.php:210
|
325 |
+
msgid "ZOOM BOX POSITION"
|
326 |
+
msgstr ""
|
327 |
+
|
328 |
+
#: templates/admin/premium.php:213
|
329 |
+
#, php-format
|
330 |
+
msgid ""
|
331 |
+
"Choose where you want to show the %1$szoomed version%2$s of the image of "
|
332 |
+
"your products. Place it above or below the original image, on its left or "
|
333 |
+
"its right, or you can even place it over it.$2$s"
|
334 |
+
msgstr ""
|
335 |
+
|
336 |
+
#: templates/admin/premium.php:223
|
337 |
+
msgid "ENLARGE THE IMAGES"
|
338 |
+
msgstr ""
|
339 |
+
|
340 |
+
#: templates/admin/premium.php:225
|
341 |
+
msgid ""
|
342 |
+
"Just one click and the product image will appear in a bigger size in a modal "
|
343 |
+
"window. A further chance to let users analyze in a better way what you sell."
|
344 |
+
msgstr ""
|
345 |
+
|
346 |
+
#: templates/admin/premium.php:240
|
347 |
+
msgid "EXCLUDE PRODUCTS"
|
348 |
+
msgstr ""
|
349 |
+
|
350 |
+
#: templates/admin/premium.php:242
|
351 |
+
msgid ""
|
352 |
+
"Tailored options to limit the plugin features only to certain products. Some "
|
353 |
+
"of these could have too small images to be zoomed, or maybe being part of "
|
354 |
+
"categories that do not imply zoomed images. Select the products and the "
|
355 |
+
"categories to exclude and delete all your problems"
|
356 |
+
msgstr ""
|
357 |
+
|
358 |
+
#: templates/admin/premium.php:251
|
359 |
+
#, php-format
|
360 |
+
msgid ""
|
361 |
+
"Upgrade to the %1$spremium version%2$s of %1$sYITH WooCommerce Zoom Magnifier"
|
362 |
+
"%2$s to benefit from all features!"
|
363 |
+
msgstr ""
|
364 |
+
|
365 |
+
#: templates/admin/premium.php:254
|
366 |
+
#, php-format
|
367 |
+
msgid "%1$sUPGRADE%2$s %3$sto the premium version%2$s"
|
368 |
+
msgstr ""
|
369 |
+
|
370 |
+
#: yit-common/yith-panel.php:429
|
371 |
+
msgid "Select a date"
|
372 |
+
msgstr "Selecciona una fecha"
|
373 |
+
|
374 |
+
#: yit-common/yith-panel.php:430
|
375 |
+
msgid "Hours"
|
376 |
+
msgstr "Horas"
|
377 |
+
|
378 |
+
#: yit-common/yith-panel.php:431 yit-common/yith-panel.php:432
|
379 |
+
msgid "Minutes"
|
380 |
+
msgstr "Minutos"
|
381 |
+
|
382 |
+
#: yit-common/yith-panel.php:440
|
383 |
+
msgid "Upload"
|
384 |
+
msgstr "Actualizar"
|
385 |
+
|
386 |
+
#: yit-common/yith-panel.php:477
|
387 |
+
msgid "px"
|
388 |
+
msgstr "px"
|
389 |
+
|
390 |
+
#: yit-common/yith-panel.php:479
|
391 |
+
msgid "em"
|
392 |
+
msgstr "em"
|
393 |
+
|
394 |
+
#: yit-common/yith-panel.php:481
|
395 |
+
msgid "pt"
|
396 |
+
msgstr "pt"
|
397 |
+
|
398 |
+
#: yit-common/yith-panel.php:483
|
399 |
+
msgid "rem"
|
400 |
+
msgstr "rem"
|
401 |
+
|
402 |
+
#: yit-common/yith-panel.php:495
|
403 |
+
msgid "Select a font family"
|
404 |
+
msgstr "Selecciona un tipo de fuente"
|
405 |
+
|
406 |
+
#: yit-common/yith-panel.php:505
|
407 |
+
msgid "Regular"
|
408 |
+
msgstr "Normal"
|
409 |
+
|
410 |
+
#: yit-common/yith-panel.php:507
|
411 |
+
msgid "Bold"
|
412 |
+
msgstr "Negrita"
|
413 |
+
|
414 |
+
#: yit-common/yith-panel.php:509
|
415 |
+
msgid "Extra bold"
|
416 |
+
msgstr "Extra negrita"
|
417 |
+
|
418 |
+
#: yit-common/yith-panel.php:511
|
419 |
+
msgid "Italic"
|
420 |
+
msgstr "Cursiva"
|
421 |
+
|
422 |
+
#: yit-common/yith-panel.php:513
|
423 |
+
msgid "Italic bold"
|
424 |
+
msgstr "Negrita cursiva"
|
425 |
+
|
426 |
+
#: yit-common/yith-panel.php:529
|
427 |
+
msgid "Click to preview"
|
428 |
+
msgstr "Haz click para previsualizar"
|
429 |
+
|
430 |
+
#~ msgid "product"
|
431 |
+
#~ msgstr "praducto"
|
432 |
+
|
433 |
+
#~ msgid "products"
|
434 |
+
#~ msgstr "productos"
|
435 |
+
|
436 |
+
#~ msgid "Remove from exclusions"
|
437 |
+
#~ msgstr "Quitar de las exclusiones"
|
438 |
+
|
439 |
+
#~ msgid "Edit product"
|
440 |
+
#~ msgstr "Editar producto"
|
441 |
+
|
442 |
+
#~ msgid "Remove from list"
|
443 |
+
#~ msgstr "Eliminar de la lista"
|
444 |
+
|
445 |
+
#~ msgid "%s product removed successfully"
|
446 |
+
#~ msgid_plural "%s products removed successfully"
|
447 |
+
#~ msgstr[0] "El producto %s ha sido eliminado con éxito"
|
448 |
+
#~ msgstr[1] "Los productos %s han sido eliminados con éxito"
|
449 |
+
|
450 |
+
#~ msgid "%s product added successfully"
|
451 |
+
#~ msgid_plural "%s products added successfully"
|
452 |
+
#~ msgstr[0] "El producto %s ha sido añadido con éxito"
|
453 |
+
#~ msgstr[1] "Los productos %s han sido añadidos con éxito"
|
454 |
+
|
455 |
+
#~ msgid "Product updated successfully"
|
456 |
+
#~ msgstr "Producto actualizado con éxito"
|
457 |
+
|
458 |
+
#~ msgid "Single Product Exclusion List"
|
459 |
+
#~ msgstr "Lista de Exclusión de Productos"
|
460 |
+
|
461 |
+
#~ msgid "Add Products"
|
462 |
+
#~ msgstr "Añadir productos"
|
463 |
+
|
464 |
+
#~ msgid "Products to exclude"
|
465 |
+
#~ msgstr "Productos para excluir"
|
466 |
+
|
467 |
+
#~ msgid "Add product exclusion"
|
468 |
+
#~ msgstr "Añadir exclusión de producto"
|
469 |
+
|
470 |
+
#~ msgid "Return to exclusion list"
|
471 |
+
#~ msgstr "Devolver a la lista de exclusión"
|
472 |
+
|
473 |
+
#~ msgid "Select at least one product"
|
474 |
+
#~ msgstr "Selecciona al menos un producto"
|
475 |
+
|
476 |
+
#~ msgid "Exclude product categories"
|
477 |
+
#~ msgstr "Excluir categorías de productos"
|
478 |
+
|
479 |
+
#~ msgid "Top"
|
480 |
+
#~ msgstr "Arriba"
|
481 |
+
|
482 |
+
#~ msgid "Bottom"
|
483 |
+
#~ msgstr "Abajo"
|
484 |
+
|
485 |
+
#~ msgid "Left"
|
486 |
+
#~ msgstr "Izquierda"
|
487 |
+
|
488 |
+
#~ msgid "Product"
|
489 |
+
#~ msgstr "Producto"
|
languages/yith-woocommerce-zoom-magnifier-it_IT.po
CHANGED
@@ -1,522 +1,522 @@
|
|
1 |
-
msgid ""
|
2 |
-
msgstr ""
|
3 |
-
"Project-Id-Version: YITH WooCommerce Zoom Magnifier\n"
|
4 |
-
"POT-Creation-Date: 2015-10-07 15:48+0200\n"
|
5 |
-
"PO-Revision-Date: 2015-10-07 15:48+0200\n"
|
6 |
-
"Last-Translator: \n"
|
7 |
-
"Language-Team: Your Inspiration Themes <plugins@yithemes.com>\n"
|
8 |
-
"Language: it_IT\n"
|
9 |
-
"MIME-Version: 1.0\n"
|
10 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
-
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"X-Generator: Poedit 1.8.4\n"
|
13 |
-
"X-Poedit-Basepath: ..\n"
|
14 |
-
"Plural-Forms: nplurals=2; plural=n!=1;\n"
|
15 |
-
"X-Poedit-KeywordsList: __ ;_e;_n:1,2;__ngettext:1,2;__ngettext_noop:1,2;"
|
16 |
-
"_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
|
17 |
-
"X-Poedit-SourceCharset: UTF-8\n"
|
18 |
-
"X-Poedit-SearchPath-0: .\n"
|
19 |
-
"X-Poedit-SearchPathExcluded-0: plugin-fw\n"
|
20 |
-
|
21 |
-
#: class.yith-wcmg-admin.php:90
|
22 |
-
msgid "Image Size"
|
23 |
-
msgstr "Dimensioni Immagine"
|
24 |
-
|
25 |
-
#: class.yith-wcmg-admin.php:91 plugin-options/general-options.php:17
|
26 |
-
msgid "The size of the images used within the magnifier box"
|
27 |
-
msgstr "La dimensione delle immagini utilizzata nel riquadro di zoom"
|
28 |
-
|
29 |
-
#: init.php:43
|
30 |
-
msgid ""
|
31 |
-
"YITH WooCommerce Zoom Magnifier is enabled but not effective. It requires "
|
32 |
-
"WooCommerce in order to work."
|
33 |
-
msgstr ""
|
34 |
-
"YITH WooCommerce Zoom Magnifier è attivo ma non funzionante. Il plugin "
|
35 |
-
"richiede WooCommerce per funzionare correttamente."
|
36 |
-
|
37 |
-
#: init.php:52
|
38 |
-
msgid ""
|
39 |
-
"You can't activate the free version of YITH WooCommerce Zoom Magnifier while "
|
40 |
-
"you are using the premium one."
|
41 |
-
msgstr ""
|
42 |
-
"Non è possibile attivare la versione gratuita di YITH WooCommerce Zoom "
|
43 |
-
"Magnifier mentre si utilizza quella premium."
|
44 |
-
|
45 |
-
#: lib/class.yith-ywzm-custom-types.php:159
|
46 |
-
msgid "Do you want to hard crop the image?"
|
47 |
-
msgstr "Vuoi ritagliare l'immagine?"
|
48 |
-
|
49 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:124
|
50 |
-
msgid "General"
|
51 |
-
msgstr "Generale"
|
52 |
-
|
53 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:127
|
54 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:191
|
55 |
-
msgid "Premium Version"
|
56 |
-
msgstr "Versione Premium"
|
57 |
-
|
58 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:129
|
59 |
-
msgid "Product exclusion list"
|
60 |
-
msgstr "Elenco esclusioni prodotti"
|
61 |
-
|
62 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:188
|
63 |
-
msgid "Settings"
|
64 |
-
msgstr "Impostazioni"
|
65 |
-
|
66 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:216
|
67 |
-
msgid "Plugin Documentation"
|
68 |
-
msgstr "Documentazione Plugin"
|
69 |
-
|
70 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:229
|
71 |
-
msgid ""
|
72 |
-
"YITH WooCommerce Zoom Magnifier is available in an outstanding PREMIUM "
|
73 |
-
"version with many new options, discover it now."
|
74 |
-
msgstr ""
|
75 |
-
"YITH WooCommerce Zoom Magnifier è disponibile in una straordinaria versione "
|
76 |
-
"PREMIUM con molte nuove opzioni, scoprila subito."
|
77 |
-
|
78 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:230
|
79 |
-
msgid "Premium version"
|
80 |
-
msgstr "Versione premium"
|
81 |
-
|
82 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:237
|
83 |
-
#: plugin-options/general-options.php:216
|
84 |
-
msgid "YITH WooCommerce Zoom Magnifier"
|
85 |
-
msgstr "YITH WooCommerce Zoom Magnifier"
|
86 |
-
|
87 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:238
|
88 |
-
msgid ""
|
89 |
-
"In YIT Plugins tab you can find YITH WooCommerce Zoom Magnifier options."
|
90 |
-
"<br> From this menu you can access all settings of the YITH plugins "
|
91 |
-
"activated."
|
92 |
-
msgstr ""
|
93 |
-
"Nella tab YIT Plugins puoi trovare le optioni di YITH WooCommerce Zoom "
|
94 |
-
"Magnifier.<br> Da questo menu puoi accedere a tutte le impostazioni dei "
|
95 |
-
"plugin YITH attivati."
|
96 |
-
|
97 |
-
#: plugin-options/general-options.php:16
|
98 |
-
msgid "Image size"
|
99 |
-
msgstr "Dimensione immagine"
|
100 |
-
|
101 |
-
#: plugin-options/general-options.php:36
|
102 |
-
msgid "General Settings"
|
103 |
-
msgstr "Impostazioni generali"
|
104 |
-
|
105 |
-
#: plugin-options/general-options.php:42
|
106 |
-
msgid "Activate YITH WooCommerce Zoom Magnifier"
|
107 |
-
msgstr "Attiva YITH WooCommerce Zoom Magnifier"
|
108 |
-
|
109 |
-
#: plugin-options/general-options.php:43
|
110 |
-
msgid "Activate the plugin or use the WooCommerce default product image."
|
111 |
-
msgstr "Attiva il plugin o usa le immagini prodotto di default di WooCommerce."
|
112 |
-
|
113 |
-
#: plugin-options/general-options.php:50
|
114 |
-
msgid "Activate on mobile device"
|
115 |
-
msgstr "Attiva su dispositivi mobili"
|
116 |
-
|
117 |
-
#: plugin-options/general-options.php:51
|
118 |
-
msgid ""
|
119 |
-
"Set if zoom and slider functionalities should be shown also on mobile "
|
120 |
-
"devices."
|
121 |
-
msgstr "Decidi se mostrare lo zoom e lo slider anche sui dispositivi mobili."
|
122 |
-
|
123 |
-
#: plugin-options/general-options.php:59
|
124 |
-
msgid "Forced Image Size"
|
125 |
-
msgstr "Dimensioni Immagini Forzate"
|
126 |
-
|
127 |
-
#: plugin-options/general-options.php:60
|
128 |
-
msgid ""
|
129 |
-
"If disabled, you will able to customize the sizes of the zoomed images. "
|
130 |
-
"Disable it at your own risk; the magnifier could not properly work with "
|
131 |
-
"images out of proportion."
|
132 |
-
msgstr ""
|
133 |
-
"Se disabilitata, questa opzione permette di personalizzare la dimensione "
|
134 |
-
"delle immagini zoomate. Disabilitare a proprio rischio: lo zoom potrebbe non "
|
135 |
-
"funzionare correttamente con immagini sproporzionate."
|
136 |
-
|
137 |
-
#: plugin-options/general-options.php:74
|
138 |
-
msgid "Magnifier Settings"
|
139 |
-
msgstr "Impostazioni Zoom"
|
140 |
-
|
141 |
-
#: plugin-options/general-options.php:80
|
142 |
-
msgid "Zoom Box Width"
|
143 |
-
msgstr "Larghezza Riquadro Zoom"
|
144 |
-
|
145 |
-
#: plugin-options/general-options.php:81
|
146 |
-
msgid "The width of the magnifier box (default: auto)"
|
147 |
-
msgstr "La larghezza del riquadro di zoom (default: auto)"
|
148 |
-
|
149 |
-
#: plugin-options/general-options.php:88
|
150 |
-
msgid "Zoom Box Height"
|
151 |
-
msgstr "Altezza Riquadro Zoom"
|
152 |
-
|
153 |
-
#: plugin-options/general-options.php:89
|
154 |
-
msgid "The height of the magnifier box (default: auto)"
|
155 |
-
msgstr "L'altezza del riquadro di zoom (default: auto)"
|
156 |
-
|
157 |
-
#: plugin-options/general-options.php:97
|
158 |
-
msgid "Zoom Box Position"
|
159 |
-
msgstr "Posizione Riquadro Zoom"
|
160 |
-
|
161 |
-
#: plugin-options/general-options.php:98
|
162 |
-
msgid "The magnifier position"
|
163 |
-
msgstr "Dove apparirà la finestra di zoom"
|
164 |
-
|
165 |
-
#: plugin-options/general-options.php:104
|
166 |
-
msgid "Right"
|
167 |
-
msgstr "Destra"
|
168 |
-
|
169 |
-
#: plugin-options/general-options.php:105
|
170 |
-
#: plugin-options/general-options.php:117
|
171 |
-
msgid "Inside"
|
172 |
-
msgstr "Interno"
|
173 |
-
|
174 |
-
#: plugin-options/general-options.php:109
|
175 |
-
msgid "Zoom Box Position for mobile devices"
|
176 |
-
msgstr "Posizione Riquadro Zoom su dispositivi mobili"
|
177 |
-
|
178 |
-
#: plugin-options/general-options.php:110
|
179 |
-
msgid "The magnifier position for the mobile devices (iPhone, Android, etc.)"
|
180 |
-
msgstr ""
|
181 |
-
"Dove apparirà la finestra di zoom sui dispositivi mobili (iPhone, Android, "
|
182 |
-
"etc.)"
|
183 |
-
|
184 |
-
#: plugin-options/general-options.php:116
|
185 |
-
msgid "Default"
|
186 |
-
msgstr "Default"
|
187 |
-
|
188 |
-
#: plugin-options/general-options.php:118
|
189 |
-
msgid "Disable"
|
190 |
-
msgstr "Disattiva"
|
191 |
-
|
192 |
-
#: plugin-options/general-options.php:122
|
193 |
-
msgid "Loading label"
|
194 |
-
msgstr "Etichetta di caricamento"
|
195 |
-
|
196 |
-
#: plugin-options/general-options.php:125
|
197 |
-
#: plugin-options/general-options.php:126
|
198 |
-
msgid "Loading..."
|
199 |
-
msgstr "Caricamento..."
|
200 |
-
|
201 |
-
#: plugin-options/general-options.php:130
|
202 |
-
msgid "Lens Opacity"
|
203 |
-
msgstr "Opacità Lenti"
|
204 |
-
|
205 |
-
#: plugin-options/general-options.php:141
|
206 |
-
msgid "Blur"
|
207 |
-
msgstr "Sfocatura"
|
208 |
-
|
209 |
-
#: plugin-options/general-options.php:142
|
210 |
-
msgid "Add a blur effect to the small image on mouse hover."
|
211 |
-
msgstr ""
|
212 |
-
"Aggiungi un effetto di sfocatura all'immagine piccola al passaggio del mouse."
|
213 |
-
|
214 |
-
#: plugin-options/general-options.php:153
|
215 |
-
msgid "Slider Settings"
|
216 |
-
msgstr "Impostazioni Slider"
|
217 |
-
|
218 |
-
#: plugin-options/general-options.php:159
|
219 |
-
msgid "Activate Slider"
|
220 |
-
msgstr "Attiva Slider"
|
221 |
-
|
222 |
-
#: plugin-options/general-options.php:160
|
223 |
-
msgid "Activate Thumbnail Slider."
|
224 |
-
msgstr "Attiva lo slider con anteprime."
|
225 |
-
|
226 |
-
#: plugin-options/general-options.php:167
|
227 |
-
msgid "Activate Responsive Slider"
|
228 |
-
msgstr "Attiva Slider Responsive"
|
229 |
-
|
230 |
-
#: plugin-options/general-options.php:168
|
231 |
-
msgid ""
|
232 |
-
"This option fits the thumbnails within the available space. Disable it if "
|
233 |
-
"you want to manage freely the thumbnails (eg. add margins, paddings, etc.)"
|
234 |
-
msgstr ""
|
235 |
-
"Questa opzione adatta le anteprime allo spazio disponibile. Disabilitala se "
|
236 |
-
"vuoi gestire liberamente le anteprime (per esempio aggiungere margini, "
|
237 |
-
"padding, ecc.)"
|
238 |
-
|
239 |
-
#: plugin-options/general-options.php:175
|
240 |
-
msgid "Items"
|
241 |
-
msgstr "Elementi"
|
242 |
-
|
243 |
-
#: plugin-options/general-options.php:176
|
244 |
-
msgid "Number of items to show"
|
245 |
-
msgstr "Numero di elementi da mostrare"
|
246 |
-
|
247 |
-
#: plugin-options/general-options.php:186
|
248 |
-
msgid "Circular carousel"
|
249 |
-
msgstr "Carosello circolare"
|
250 |
-
|
251 |
-
#: plugin-options/general-options.php:187
|
252 |
-
msgid "It defines whether the carousel should be circular."
|
253 |
-
msgstr "Imposta se il carosello deve essere circolare."
|
254 |
-
|
255 |
-
#: plugin-options/general-options.php:194
|
256 |
-
msgid "Infinite carousel"
|
257 |
-
msgstr "Carosello infinito"
|
258 |
-
|
259 |
-
#: plugin-options/general-options.php:195
|
260 |
-
msgid ""
|
261 |
-
"It defines whether the carousel should be infinite. Note: It is possible to "
|
262 |
-
"create a non-circular, infinite carousel, but it is not possible to create a "
|
263 |
-
"circular, non-infinite carousel."
|
264 |
-
msgstr ""
|
265 |
-
"Imposta se il carosello deve essere infinito. Attenzione: è possibile creare "
|
266 |
-
"un carosello infinito non circolare, ma non puoi creare un carosello "
|
267 |
-
"circolare non infinito."
|
268 |
-
|
269 |
-
#: plugin-options/general-options.php:213
|
270 |
-
msgid "Upgrade to the PREMIUM VERSION"
|
271 |
-
msgstr "Aggiorna alla VERSIONE PREMIUM"
|
272 |
-
|
273 |
-
#: plugin-options/general-options.php:217
|
274 |
-
msgid "Discover The Advanced Features"
|
275 |
-
msgstr "Scopri le caratteristiche avanzate"
|
276 |
-
|
277 |
-
#: plugin-options/general-options.php:218
|
278 |
-
msgid ""
|
279 |
-
"Upgrade to the PREMIUM VERSION of YITH WOOCOMMERCE ZOOM MAGNIFIER to benefit "
|
280 |
-
"from all features!"
|
281 |
-
msgstr ""
|
282 |
-
"Aggiorna alla VERSIONE PREMIUM di YITH WOOCOMMERCE ZOOM MAGNIFIER per "
|
283 |
-
"usufruire di tutte le caratteristiche!"
|
284 |
-
|
285 |
-
#: plugin-options/general-options.php:222
|
286 |
-
msgid ""
|
287 |
-
"See YITH WooCommerce Zoom Magnifier plugin with full premium features in "
|
288 |
-
"action"
|
289 |
-
msgstr ""
|
290 |
-
"Guarda il plugin YITH WooCommerce Zoom Magnifier con tutte le "
|
291 |
-
"caratteristiche premium in azione"
|
292 |
-
|
293 |
-
#: plugin-options/general-options.php:224
|
294 |
-
msgid "Get Support and Pro Features"
|
295 |
-
msgstr "Ottieni il supporto e le caratteristiche premium"
|
296 |
-
|
297 |
-
#: plugin-options/general-options.php:225
|
298 |
-
msgid ""
|
299 |
-
"Purchasing the premium version of the plugin, you will take advantage of the "
|
300 |
-
"advanced features of the product, and you will get one year of free updates "
|
301 |
-
"and support through our platform available 24h/24."
|
302 |
-
msgstr ""
|
303 |
-
"Acquistando la versione premium del plugin potrai usufruire delle "
|
304 |
-
"caratteristiche avanzate del prodotto, oltre a ottenere un anno di "
|
305 |
-
"aggiornamenti gratuiti e di supporto attraverso la nostra piattaforma "
|
306 |
-
"disponibile 24h/24."
|
307 |
-
|
308 |
-
#: templates/admin/premium.php:193
|
309 |
-
#, php-format
|
310 |
-
msgid ""
|
311 |
-
"Upgrade to the %1$s premium version %2$s of %1$s YITH WooCommerce Zoom "
|
312 |
-
"Magnifier %2$s to benefit from all features!"
|
313 |
-
msgstr ""
|
314 |
-
"Aggiorna alla %1$s versione premium %2$s di %1$s YITH WooCommerce Zoom "
|
315 |
-
"Magnifier %2$s per usufruire di tutte le funzionalità!"
|
316 |
-
|
317 |
-
#: templates/admin/premium.php:196
|
318 |
-
#, php-format
|
319 |
-
msgid "%1$sUPGRADE%2$s%3$sto the premium version%2$s"
|
320 |
-
msgstr "%1$sAGGIORNA%2$s%3$salla versione premium%2$s "
|
321 |
-
|
322 |
-
#: templates/admin/premium.php:202
|
323 |
-
#, php-format
|
324 |
-
msgid "%1$sPremium Features%2$s"
|
325 |
-
msgstr "%1$sFunzionalità premium%2$s"
|
326 |
-
|
327 |
-
#: templates/admin/premium.php:210
|
328 |
-
msgid "ZOOM BOX POSITION"
|
329 |
-
msgstr "POSIZIONE RIQUADRO ZOOM"
|
330 |
-
|
331 |
-
#: templates/admin/premium.php:213
|
332 |
-
#, php-format
|
333 |
-
msgid ""
|
334 |
-
"Choose where you want to show the %1$szoomed version%2$s of the image of "
|
335 |
-
"your products. Place it above or below the original image, on its left or "
|
336 |
-
"its right, or you can even place it over it.$2$s"
|
337 |
-
msgstr ""
|
338 |
-
"Scegli dove far apparire la %1$sversione ingrandita%2$s dell’immagine dei "
|
339 |
-
"tuoi prodotti. Posizionala in alto o in basso rispetto all’immagine "
|
340 |
-
"originale, alla sua destra o alla sua sinistra, o fa’ sì che si sovrapponga "
|
341 |
-
"ad essa.$2$s"
|
342 |
-
|
343 |
-
#: templates/admin/premium.php:223
|
344 |
-
msgid "ENLARGE THE IMAGES"
|
345 |
-
msgstr "ESPANDI L’IMMAGINE"
|
346 |
-
|
347 |
-
#: templates/admin/premium.php:225
|
348 |
-
msgid ""
|
349 |
-
"Just one click and the product image will appear in a bigger size in a modal "
|
350 |
-
"window. A further chance to let users analyze in a better way what you sell."
|
351 |
-
msgstr ""
|
352 |
-
"Un clic e l’immagine del prodotto apparirà a dimensioni maggiori e "
|
353 |
-
"all’interno di una finestra modale. Una possibilità in più per mettere "
|
354 |
-
"l’utente nelle condizioni di valutare al meglio ciò che vede."
|
355 |
-
|
356 |
-
#: templates/admin/premium.php:240
|
357 |
-
msgid "EXCLUDE PRODUCTS"
|
358 |
-
msgstr "ESCLUSIONE PRODOTTI"
|
359 |
-
|
360 |
-
#: templates/admin/premium.php:242
|
361 |
-
msgid ""
|
362 |
-
"Tailored options to limit the plugin features only to certain products. Some "
|
363 |
-
"of these could have too small images to be zoomed, or maybe being part of "
|
364 |
-
"categories that do not imply zoomed images. Select the products and the "
|
365 |
-
"categories to exclude and delete all your problems"
|
366 |
-
msgstr ""
|
367 |
-
"Opzioni su misura per limitare le funzionalità del plugin solo a determinati "
|
368 |
-
"prodotti. Alcuni di questi possono avere immagini troppo piccole per essere "
|
369 |
-
"zoomate o appartenere a categorie in cui lo zoom immagine non è necessario. "
|
370 |
-
"Seleziona i prodotti e le categorie da escludere e risolvi questo tipo di "
|
371 |
-
"problemi."
|
372 |
-
|
373 |
-
#: templates/admin/premium.php:251
|
374 |
-
#, php-format
|
375 |
-
msgid ""
|
376 |
-
"Upgrade to the %1$spremium version%2$s of %1$sYITH WooCommerce Zoom Magnifier"
|
377 |
-
"%2$s to benefit from all features!"
|
378 |
-
msgstr ""
|
379 |
-
"Aggiorna alla %1$sversione premium%2$s di %1$s YITH WooCommerce Zoom "
|
380 |
-
"Magnifier %2$s per usufruire di tutte le funzionalità!"
|
381 |
-
|
382 |
-
#: templates/admin/premium.php:254
|
383 |
-
#, php-format
|
384 |
-
msgid "%1$sUPGRADE%2$s %3$sto the premium version%2$s"
|
385 |
-
msgstr "%1$sAGGIORNA%2$s %3$salla versione premium%2$s "
|
386 |
-
|
387 |
-
#: yit-common/yith-panel.php:418
|
388 |
-
msgid "Select a date"
|
389 |
-
msgstr "Scegli una data"
|
390 |
-
|
391 |
-
#: yit-common/yith-panel.php:419
|
392 |
-
msgid "Hours"
|
393 |
-
msgstr "Ore"
|
394 |
-
|
395 |
-
#: yit-common/yith-panel.php:420 yit-common/yith-panel.php:421
|
396 |
-
msgid "Minutes"
|
397 |
-
msgstr "Minuti"
|
398 |
-
|
399 |
-
#: yit-common/yith-panel.php:429
|
400 |
-
msgid "Upload"
|
401 |
-
msgstr "Carica"
|
402 |
-
|
403 |
-
#: yit-common/yith-panel.php:466
|
404 |
-
msgid "px"
|
405 |
-
msgstr "px"
|
406 |
-
|
407 |
-
#: yit-common/yith-panel.php:468
|
408 |
-
msgid "em"
|
409 |
-
msgstr "em"
|
410 |
-
|
411 |
-
#: yit-common/yith-panel.php:470
|
412 |
-
msgid "pt"
|
413 |
-
msgstr "pt"
|
414 |
-
|
415 |
-
#: yit-common/yith-panel.php:472
|
416 |
-
msgid "rem"
|
417 |
-
msgstr "rem"
|
418 |
-
|
419 |
-
#: yit-common/yith-panel.php:484
|
420 |
-
msgid "Select a font family"
|
421 |
-
msgstr "Scegli una famiglia di caratteri"
|
422 |
-
|
423 |
-
#: yit-common/yith-panel.php:494
|
424 |
-
msgid "Regular"
|
425 |
-
msgstr "Normale"
|
426 |
-
|
427 |
-
#: yit-common/yith-panel.php:496
|
428 |
-
msgid "Bold"
|
429 |
-
msgstr "Grassetto"
|
430 |
-
|
431 |
-
#: yit-common/yith-panel.php:498
|
432 |
-
msgid "Extra bold"
|
433 |
-
msgstr "Grassetto extra"
|
434 |
-
|
435 |
-
#: yit-common/yith-panel.php:500
|
436 |
-
msgid "Italic"
|
437 |
-
msgstr "Corsivo"
|
438 |
-
|
439 |
-
#: yit-common/yith-panel.php:502
|
440 |
-
msgid "Italic bold"
|
441 |
-
msgstr "Corsivo E Grassetto"
|
442 |
-
|
443 |
-
#: yit-common/yith-panel.php:518
|
444 |
-
msgid "Click to preview"
|
445 |
-
msgstr "Premi per visualizzare l'anteprima"
|
446 |
-
|
447 |
-
#~ msgid "Activate YITH Magnifier"
|
448 |
-
#~ msgstr "Attiva YITH Magnifier"
|
449 |
-
|
450 |
-
#~ msgid "Activate the plugin on mobile device"
|
451 |
-
#~ msgstr "Attiva il plugin su dispositivi mobili"
|
452 |
-
|
453 |
-
#~ msgid ""
|
454 |
-
#~ "Purchasing the premium version of the plugin, you will take advantage of "
|
455 |
-
#~ "the advanced features of the product and you will get one year of free "
|
456 |
-
#~ "updates and support through our platform available 24h/24."
|
457 |
-
#~ msgstr ""
|
458 |
-
#~ "Acquistando la versione premium del plugin potrai usufruire delle "
|
459 |
-
#~ "caratteristiche avanzate del prodotto, oltre a ottenere un anno di "
|
460 |
-
#~ "aggiornamenti gratuiti e di supporto attraverso la nostra piattaforma "
|
461 |
-
#~ "disponibile 24h/24."
|
462 |
-
|
463 |
-
#~ msgid "product"
|
464 |
-
#~ msgstr "prodotto"
|
465 |
-
|
466 |
-
#~ msgid "products"
|
467 |
-
#~ msgstr "prodotti"
|
468 |
-
|
469 |
-
#~ msgid "Product"
|
470 |
-
#~ msgstr "Prodotto"
|
471 |
-
|
472 |
-
#~ msgid "Remove from exclusions"
|
473 |
-
#~ msgstr "Rimuovi dalle esclusioni"
|
474 |
-
|
475 |
-
#~ msgid "Edit product"
|
476 |
-
#~ msgstr "Modifica prodotto"
|
477 |
-
|
478 |
-
#~ msgid "Remove from list"
|
479 |
-
#~ msgstr "Elimina dalla lista"
|
480 |
-
|
481 |
-
#~ msgid "%s product removed successfully"
|
482 |
-
#~ msgid_plural "%s products removed successfully"
|
483 |
-
#~ msgstr[0] "%s prodotto rimosso correttamente"
|
484 |
-
#~ msgstr[1] "%s prodotti rimossi correttamente"
|
485 |
-
|
486 |
-
#~ msgid "%s product added successfully"
|
487 |
-
#~ msgid_plural "%s products added successfully"
|
488 |
-
#~ msgstr[0] "%s prodotto aggiunto correttamente"
|
489 |
-
#~ msgstr[1] "%s prodotti aggiunti correttamente"
|
490 |
-
|
491 |
-
#~ msgid "Product updated successfully"
|
492 |
-
#~ msgstr "Prodotto aggiornato correttamente"
|
493 |
-
|
494 |
-
#~ msgid "Single Product Exclusion List"
|
495 |
-
#~ msgstr "Elenco Esclusioni Prodotti"
|
496 |
-
|
497 |
-
#~ msgid "Add Products"
|
498 |
-
#~ msgstr "Aggiungi Prodotto"
|
499 |
-
|
500 |
-
#~ msgid "Products to exclude"
|
501 |
-
#~ msgstr "Prodotti da escludere"
|
502 |
-
|
503 |
-
#~ msgid "Add product exclusion"
|
504 |
-
#~ msgstr "Aggiungi esclusione prodotto"
|
505 |
-
|
506 |
-
#~ msgid "Return to exclusion list"
|
507 |
-
#~ msgstr "Torno all'elenco esclusioni"
|
508 |
-
|
509 |
-
#~ msgid "Select at least one product"
|
510 |
-
#~ msgstr "Seleziona almeno un prodotto"
|
511 |
-
|
512 |
-
#~ msgid "Exclude product categories"
|
513 |
-
#~ msgstr "Escludi categorie di prodotti"
|
514 |
-
|
515 |
-
#~ msgid "Top"
|
516 |
-
#~ msgstr "Sopra"
|
517 |
-
|
518 |
-
#~ msgid "Bottom"
|
519 |
-
#~ msgstr "Sotto"
|
520 |
-
|
521 |
-
#~ msgid "Left"
|
522 |
-
#~ msgstr "Sinistra"
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: YITH WooCommerce Zoom Magnifier\n"
|
4 |
+
"POT-Creation-Date: 2015-10-07 15:48+0200\n"
|
5 |
+
"PO-Revision-Date: 2015-10-07 15:48+0200\n"
|
6 |
+
"Last-Translator: \n"
|
7 |
+
"Language-Team: Your Inspiration Themes <plugins@yithemes.com>\n"
|
8 |
+
"Language: it_IT\n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 1.8.4\n"
|
13 |
+
"X-Poedit-Basepath: ..\n"
|
14 |
+
"Plural-Forms: nplurals=2; plural=n!=1;\n"
|
15 |
+
"X-Poedit-KeywordsList: __ ;_e;_n:1,2;__ngettext:1,2;__ngettext_noop:1,2;"
|
16 |
+
"_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
|
17 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
18 |
+
"X-Poedit-SearchPath-0: .\n"
|
19 |
+
"X-Poedit-SearchPathExcluded-0: plugin-fw\n"
|
20 |
+
|
21 |
+
#: class.yith-wcmg-admin.php:90
|
22 |
+
msgid "Image Size"
|
23 |
+
msgstr "Dimensioni Immagine"
|
24 |
+
|
25 |
+
#: class.yith-wcmg-admin.php:91 plugin-options/general-options.php:17
|
26 |
+
msgid "The size of the images used within the magnifier box"
|
27 |
+
msgstr "La dimensione delle immagini utilizzata nel riquadro di zoom"
|
28 |
+
|
29 |
+
#: init.php:43
|
30 |
+
msgid ""
|
31 |
+
"YITH WooCommerce Zoom Magnifier is enabled but not effective. It requires "
|
32 |
+
"WooCommerce in order to work."
|
33 |
+
msgstr ""
|
34 |
+
"YITH WooCommerce Zoom Magnifier è attivo ma non funzionante. Il plugin "
|
35 |
+
"richiede WooCommerce per funzionare correttamente."
|
36 |
+
|
37 |
+
#: init.php:52
|
38 |
+
msgid ""
|
39 |
+
"You can't activate the free version of YITH WooCommerce Zoom Magnifier while "
|
40 |
+
"you are using the premium one."
|
41 |
+
msgstr ""
|
42 |
+
"Non è possibile attivare la versione gratuita di YITH WooCommerce Zoom "
|
43 |
+
"Magnifier mentre si utilizza quella premium."
|
44 |
+
|
45 |
+
#: lib/class.yith-ywzm-custom-types.php:159
|
46 |
+
msgid "Do you want to hard crop the image?"
|
47 |
+
msgstr "Vuoi ritagliare l'immagine?"
|
48 |
+
|
49 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:124
|
50 |
+
msgid "General"
|
51 |
+
msgstr "Generale"
|
52 |
+
|
53 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:127
|
54 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:191
|
55 |
+
msgid "Premium Version"
|
56 |
+
msgstr "Versione Premium"
|
57 |
+
|
58 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:129
|
59 |
+
msgid "Product exclusion list"
|
60 |
+
msgstr "Elenco esclusioni prodotti"
|
61 |
+
|
62 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:188
|
63 |
+
msgid "Settings"
|
64 |
+
msgstr "Impostazioni"
|
65 |
+
|
66 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:216
|
67 |
+
msgid "Plugin Documentation"
|
68 |
+
msgstr "Documentazione Plugin"
|
69 |
+
|
70 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:229
|
71 |
+
msgid ""
|
72 |
+
"YITH WooCommerce Zoom Magnifier is available in an outstanding PREMIUM "
|
73 |
+
"version with many new options, discover it now."
|
74 |
+
msgstr ""
|
75 |
+
"YITH WooCommerce Zoom Magnifier è disponibile in una straordinaria versione "
|
76 |
+
"PREMIUM con molte nuove opzioni, scoprila subito."
|
77 |
+
|
78 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:230
|
79 |
+
msgid "Premium version"
|
80 |
+
msgstr "Versione premium"
|
81 |
+
|
82 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:237
|
83 |
+
#: plugin-options/general-options.php:216
|
84 |
+
msgid "YITH WooCommerce Zoom Magnifier"
|
85 |
+
msgstr "YITH WooCommerce Zoom Magnifier"
|
86 |
+
|
87 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:238
|
88 |
+
msgid ""
|
89 |
+
"In YIT Plugins tab you can find YITH WooCommerce Zoom Magnifier options."
|
90 |
+
"<br> From this menu you can access all settings of the YITH plugins "
|
91 |
+
"activated."
|
92 |
+
msgstr ""
|
93 |
+
"Nella tab YIT Plugins puoi trovare le optioni di YITH WooCommerce Zoom "
|
94 |
+
"Magnifier.<br> Da questo menu puoi accedere a tutte le impostazioni dei "
|
95 |
+
"plugin YITH attivati."
|
96 |
+
|
97 |
+
#: plugin-options/general-options.php:16
|
98 |
+
msgid "Image size"
|
99 |
+
msgstr "Dimensione immagine"
|
100 |
+
|
101 |
+
#: plugin-options/general-options.php:36
|
102 |
+
msgid "General Settings"
|
103 |
+
msgstr "Impostazioni generali"
|
104 |
+
|
105 |
+
#: plugin-options/general-options.php:42
|
106 |
+
msgid "Activate YITH WooCommerce Zoom Magnifier"
|
107 |
+
msgstr "Attiva YITH WooCommerce Zoom Magnifier"
|
108 |
+
|
109 |
+
#: plugin-options/general-options.php:43
|
110 |
+
msgid "Activate the plugin or use the WooCommerce default product image."
|
111 |
+
msgstr "Attiva il plugin o usa le immagini prodotto di default di WooCommerce."
|
112 |
+
|
113 |
+
#: plugin-options/general-options.php:50
|
114 |
+
msgid "Activate on mobile device"
|
115 |
+
msgstr "Attiva su dispositivi mobili"
|
116 |
+
|
117 |
+
#: plugin-options/general-options.php:51
|
118 |
+
msgid ""
|
119 |
+
"Set if zoom and slider functionalities should be shown also on mobile "
|
120 |
+
"devices."
|
121 |
+
msgstr "Decidi se mostrare lo zoom e lo slider anche sui dispositivi mobili."
|
122 |
+
|
123 |
+
#: plugin-options/general-options.php:59
|
124 |
+
msgid "Forced Image Size"
|
125 |
+
msgstr "Dimensioni Immagini Forzate"
|
126 |
+
|
127 |
+
#: plugin-options/general-options.php:60
|
128 |
+
msgid ""
|
129 |
+
"If disabled, you will able to customize the sizes of the zoomed images. "
|
130 |
+
"Disable it at your own risk; the magnifier could not properly work with "
|
131 |
+
"images out of proportion."
|
132 |
+
msgstr ""
|
133 |
+
"Se disabilitata, questa opzione permette di personalizzare la dimensione "
|
134 |
+
"delle immagini zoomate. Disabilitare a proprio rischio: lo zoom potrebbe non "
|
135 |
+
"funzionare correttamente con immagini sproporzionate."
|
136 |
+
|
137 |
+
#: plugin-options/general-options.php:74
|
138 |
+
msgid "Magnifier Settings"
|
139 |
+
msgstr "Impostazioni Zoom"
|
140 |
+
|
141 |
+
#: plugin-options/general-options.php:80
|
142 |
+
msgid "Zoom Box Width"
|
143 |
+
msgstr "Larghezza Riquadro Zoom"
|
144 |
+
|
145 |
+
#: plugin-options/general-options.php:81
|
146 |
+
msgid "The width of the magnifier box (default: auto)"
|
147 |
+
msgstr "La larghezza del riquadro di zoom (default: auto)"
|
148 |
+
|
149 |
+
#: plugin-options/general-options.php:88
|
150 |
+
msgid "Zoom Box Height"
|
151 |
+
msgstr "Altezza Riquadro Zoom"
|
152 |
+
|
153 |
+
#: plugin-options/general-options.php:89
|
154 |
+
msgid "The height of the magnifier box (default: auto)"
|
155 |
+
msgstr "L'altezza del riquadro di zoom (default: auto)"
|
156 |
+
|
157 |
+
#: plugin-options/general-options.php:97
|
158 |
+
msgid "Zoom Box Position"
|
159 |
+
msgstr "Posizione Riquadro Zoom"
|
160 |
+
|
161 |
+
#: plugin-options/general-options.php:98
|
162 |
+
msgid "The magnifier position"
|
163 |
+
msgstr "Dove apparirà la finestra di zoom"
|
164 |
+
|
165 |
+
#: plugin-options/general-options.php:104
|
166 |
+
msgid "Right"
|
167 |
+
msgstr "Destra"
|
168 |
+
|
169 |
+
#: plugin-options/general-options.php:105
|
170 |
+
#: plugin-options/general-options.php:117
|
171 |
+
msgid "Inside"
|
172 |
+
msgstr "Interno"
|
173 |
+
|
174 |
+
#: plugin-options/general-options.php:109
|
175 |
+
msgid "Zoom Box Position for mobile devices"
|
176 |
+
msgstr "Posizione Riquadro Zoom su dispositivi mobili"
|
177 |
+
|
178 |
+
#: plugin-options/general-options.php:110
|
179 |
+
msgid "The magnifier position for the mobile devices (iPhone, Android, etc.)"
|
180 |
+
msgstr ""
|
181 |
+
"Dove apparirà la finestra di zoom sui dispositivi mobili (iPhone, Android, "
|
182 |
+
"etc.)"
|
183 |
+
|
184 |
+
#: plugin-options/general-options.php:116
|
185 |
+
msgid "Default"
|
186 |
+
msgstr "Default"
|
187 |
+
|
188 |
+
#: plugin-options/general-options.php:118
|
189 |
+
msgid "Disable"
|
190 |
+
msgstr "Disattiva"
|
191 |
+
|
192 |
+
#: plugin-options/general-options.php:122
|
193 |
+
msgid "Loading label"
|
194 |
+
msgstr "Etichetta di caricamento"
|
195 |
+
|
196 |
+
#: plugin-options/general-options.php:125
|
197 |
+
#: plugin-options/general-options.php:126
|
198 |
+
msgid "Loading..."
|
199 |
+
msgstr "Caricamento..."
|
200 |
+
|
201 |
+
#: plugin-options/general-options.php:130
|
202 |
+
msgid "Lens Opacity"
|
203 |
+
msgstr "Opacità Lenti"
|
204 |
+
|
205 |
+
#: plugin-options/general-options.php:141
|
206 |
+
msgid "Blur"
|
207 |
+
msgstr "Sfocatura"
|
208 |
+
|
209 |
+
#: plugin-options/general-options.php:142
|
210 |
+
msgid "Add a blur effect to the small image on mouse hover."
|
211 |
+
msgstr ""
|
212 |
+
"Aggiungi un effetto di sfocatura all'immagine piccola al passaggio del mouse."
|
213 |
+
|
214 |
+
#: plugin-options/general-options.php:153
|
215 |
+
msgid "Slider Settings"
|
216 |
+
msgstr "Impostazioni Slider"
|
217 |
+
|
218 |
+
#: plugin-options/general-options.php:159
|
219 |
+
msgid "Activate Slider"
|
220 |
+
msgstr "Attiva Slider"
|
221 |
+
|
222 |
+
#: plugin-options/general-options.php:160
|
223 |
+
msgid "Activate Thumbnail Slider."
|
224 |
+
msgstr "Attiva lo slider con anteprime."
|
225 |
+
|
226 |
+
#: plugin-options/general-options.php:167
|
227 |
+
msgid "Activate Responsive Slider"
|
228 |
+
msgstr "Attiva Slider Responsive"
|
229 |
+
|
230 |
+
#: plugin-options/general-options.php:168
|
231 |
+
msgid ""
|
232 |
+
"This option fits the thumbnails within the available space. Disable it if "
|
233 |
+
"you want to manage freely the thumbnails (eg. add margins, paddings, etc.)"
|
234 |
+
msgstr ""
|
235 |
+
"Questa opzione adatta le anteprime allo spazio disponibile. Disabilitala se "
|
236 |
+
"vuoi gestire liberamente le anteprime (per esempio aggiungere margini, "
|
237 |
+
"padding, ecc.)"
|
238 |
+
|
239 |
+
#: plugin-options/general-options.php:175
|
240 |
+
msgid "Items"
|
241 |
+
msgstr "Elementi"
|
242 |
+
|
243 |
+
#: plugin-options/general-options.php:176
|
244 |
+
msgid "Number of items to show"
|
245 |
+
msgstr "Numero di elementi da mostrare"
|
246 |
+
|
247 |
+
#: plugin-options/general-options.php:186
|
248 |
+
msgid "Circular carousel"
|
249 |
+
msgstr "Carosello circolare"
|
250 |
+
|
251 |
+
#: plugin-options/general-options.php:187
|
252 |
+
msgid "It defines whether the carousel should be circular."
|
253 |
+
msgstr "Imposta se il carosello deve essere circolare."
|
254 |
+
|
255 |
+
#: plugin-options/general-options.php:194
|
256 |
+
msgid "Infinite carousel"
|
257 |
+
msgstr "Carosello infinito"
|
258 |
+
|
259 |
+
#: plugin-options/general-options.php:195
|
260 |
+
msgid ""
|
261 |
+
"It defines whether the carousel should be infinite. Note: It is possible to "
|
262 |
+
"create a non-circular, infinite carousel, but it is not possible to create a "
|
263 |
+
"circular, non-infinite carousel."
|
264 |
+
msgstr ""
|
265 |
+
"Imposta se il carosello deve essere infinito. Attenzione: è possibile creare "
|
266 |
+
"un carosello infinito non circolare, ma non puoi creare un carosello "
|
267 |
+
"circolare non infinito."
|
268 |
+
|
269 |
+
#: plugin-options/general-options.php:213
|
270 |
+
msgid "Upgrade to the PREMIUM VERSION"
|
271 |
+
msgstr "Aggiorna alla VERSIONE PREMIUM"
|
272 |
+
|
273 |
+
#: plugin-options/general-options.php:217
|
274 |
+
msgid "Discover The Advanced Features"
|
275 |
+
msgstr "Scopri le caratteristiche avanzate"
|
276 |
+
|
277 |
+
#: plugin-options/general-options.php:218
|
278 |
+
msgid ""
|
279 |
+
"Upgrade to the PREMIUM VERSION of YITH WOOCOMMERCE ZOOM MAGNIFIER to benefit "
|
280 |
+
"from all features!"
|
281 |
+
msgstr ""
|
282 |
+
"Aggiorna alla VERSIONE PREMIUM di YITH WOOCOMMERCE ZOOM MAGNIFIER per "
|
283 |
+
"usufruire di tutte le caratteristiche!"
|
284 |
+
|
285 |
+
#: plugin-options/general-options.php:222
|
286 |
+
msgid ""
|
287 |
+
"See YITH WooCommerce Zoom Magnifier plugin with full premium features in "
|
288 |
+
"action"
|
289 |
+
msgstr ""
|
290 |
+
"Guarda il plugin YITH WooCommerce Zoom Magnifier con tutte le "
|
291 |
+
"caratteristiche premium in azione"
|
292 |
+
|
293 |
+
#: plugin-options/general-options.php:224
|
294 |
+
msgid "Get Support and Pro Features"
|
295 |
+
msgstr "Ottieni il supporto e le caratteristiche premium"
|
296 |
+
|
297 |
+
#: plugin-options/general-options.php:225
|
298 |
+
msgid ""
|
299 |
+
"Purchasing the premium version of the plugin, you will take advantage of the "
|
300 |
+
"advanced features of the product, and you will get one year of free updates "
|
301 |
+
"and support through our platform available 24h/24."
|
302 |
+
msgstr ""
|
303 |
+
"Acquistando la versione premium del plugin potrai usufruire delle "
|
304 |
+
"caratteristiche avanzate del prodotto, oltre a ottenere un anno di "
|
305 |
+
"aggiornamenti gratuiti e di supporto attraverso la nostra piattaforma "
|
306 |
+
"disponibile 24h/24."
|
307 |
+
|
308 |
+
#: templates/admin/premium.php:193
|
309 |
+
#, php-format
|
310 |
+
msgid ""
|
311 |
+
"Upgrade to the %1$s premium version %2$s of %1$s YITH WooCommerce Zoom "
|
312 |
+
"Magnifier %2$s to benefit from all features!"
|
313 |
+
msgstr ""
|
314 |
+
"Aggiorna alla %1$s versione premium %2$s di %1$s YITH WooCommerce Zoom "
|
315 |
+
"Magnifier %2$s per usufruire di tutte le funzionalità!"
|
316 |
+
|
317 |
+
#: templates/admin/premium.php:196
|
318 |
+
#, php-format
|
319 |
+
msgid "%1$sUPGRADE%2$s%3$sto the premium version%2$s"
|
320 |
+
msgstr "%1$sAGGIORNA%2$s%3$salla versione premium%2$s "
|
321 |
+
|
322 |
+
#: templates/admin/premium.php:202
|
323 |
+
#, php-format
|
324 |
+
msgid "%1$sPremium Features%2$s"
|
325 |
+
msgstr "%1$sFunzionalità premium%2$s"
|
326 |
+
|
327 |
+
#: templates/admin/premium.php:210
|
328 |
+
msgid "ZOOM BOX POSITION"
|
329 |
+
msgstr "POSIZIONE RIQUADRO ZOOM"
|
330 |
+
|
331 |
+
#: templates/admin/premium.php:213
|
332 |
+
#, php-format
|
333 |
+
msgid ""
|
334 |
+
"Choose where you want to show the %1$szoomed version%2$s of the image of "
|
335 |
+
"your products. Place it above or below the original image, on its left or "
|
336 |
+
"its right, or you can even place it over it.$2$s"
|
337 |
+
msgstr ""
|
338 |
+
"Scegli dove far apparire la %1$sversione ingrandita%2$s dell’immagine dei "
|
339 |
+
"tuoi prodotti. Posizionala in alto o in basso rispetto all’immagine "
|
340 |
+
"originale, alla sua destra o alla sua sinistra, o fa’ sì che si sovrapponga "
|
341 |
+
"ad essa.$2$s"
|
342 |
+
|
343 |
+
#: templates/admin/premium.php:223
|
344 |
+
msgid "ENLARGE THE IMAGES"
|
345 |
+
msgstr "ESPANDI L’IMMAGINE"
|
346 |
+
|
347 |
+
#: templates/admin/premium.php:225
|
348 |
+
msgid ""
|
349 |
+
"Just one click and the product image will appear in a bigger size in a modal "
|
350 |
+
"window. A further chance to let users analyze in a better way what you sell."
|
351 |
+
msgstr ""
|
352 |
+
"Un clic e l’immagine del prodotto apparirà a dimensioni maggiori e "
|
353 |
+
"all’interno di una finestra modale. Una possibilità in più per mettere "
|
354 |
+
"l’utente nelle condizioni di valutare al meglio ciò che vede."
|
355 |
+
|
356 |
+
#: templates/admin/premium.php:240
|
357 |
+
msgid "EXCLUDE PRODUCTS"
|
358 |
+
msgstr "ESCLUSIONE PRODOTTI"
|
359 |
+
|
360 |
+
#: templates/admin/premium.php:242
|
361 |
+
msgid ""
|
362 |
+
"Tailored options to limit the plugin features only to certain products. Some "
|
363 |
+
"of these could have too small images to be zoomed, or maybe being part of "
|
364 |
+
"categories that do not imply zoomed images. Select the products and the "
|
365 |
+
"categories to exclude and delete all your problems"
|
366 |
+
msgstr ""
|
367 |
+
"Opzioni su misura per limitare le funzionalità del plugin solo a determinati "
|
368 |
+
"prodotti. Alcuni di questi possono avere immagini troppo piccole per essere "
|
369 |
+
"zoomate o appartenere a categorie in cui lo zoom immagine non è necessario. "
|
370 |
+
"Seleziona i prodotti e le categorie da escludere e risolvi questo tipo di "
|
371 |
+
"problemi."
|
372 |
+
|
373 |
+
#: templates/admin/premium.php:251
|
374 |
+
#, php-format
|
375 |
+
msgid ""
|
376 |
+
"Upgrade to the %1$spremium version%2$s of %1$sYITH WooCommerce Zoom Magnifier"
|
377 |
+
"%2$s to benefit from all features!"
|
378 |
+
msgstr ""
|
379 |
+
"Aggiorna alla %1$sversione premium%2$s di %1$s YITH WooCommerce Zoom "
|
380 |
+
"Magnifier %2$s per usufruire di tutte le funzionalità!"
|
381 |
+
|
382 |
+
#: templates/admin/premium.php:254
|
383 |
+
#, php-format
|
384 |
+
msgid "%1$sUPGRADE%2$s %3$sto the premium version%2$s"
|
385 |
+
msgstr "%1$sAGGIORNA%2$s %3$salla versione premium%2$s "
|
386 |
+
|
387 |
+
#: yit-common/yith-panel.php:418
|
388 |
+
msgid "Select a date"
|
389 |
+
msgstr "Scegli una data"
|
390 |
+
|
391 |
+
#: yit-common/yith-panel.php:419
|
392 |
+
msgid "Hours"
|
393 |
+
msgstr "Ore"
|
394 |
+
|
395 |
+
#: yit-common/yith-panel.php:420 yit-common/yith-panel.php:421
|
396 |
+
msgid "Minutes"
|
397 |
+
msgstr "Minuti"
|
398 |
+
|
399 |
+
#: yit-common/yith-panel.php:429
|
400 |
+
msgid "Upload"
|
401 |
+
msgstr "Carica"
|
402 |
+
|
403 |
+
#: yit-common/yith-panel.php:466
|
404 |
+
msgid "px"
|
405 |
+
msgstr "px"
|
406 |
+
|
407 |
+
#: yit-common/yith-panel.php:468
|
408 |
+
msgid "em"
|
409 |
+
msgstr "em"
|
410 |
+
|
411 |
+
#: yit-common/yith-panel.php:470
|
412 |
+
msgid "pt"
|
413 |
+
msgstr "pt"
|
414 |
+
|
415 |
+
#: yit-common/yith-panel.php:472
|
416 |
+
msgid "rem"
|
417 |
+
msgstr "rem"
|
418 |
+
|
419 |
+
#: yit-common/yith-panel.php:484
|
420 |
+
msgid "Select a font family"
|
421 |
+
msgstr "Scegli una famiglia di caratteri"
|
422 |
+
|
423 |
+
#: yit-common/yith-panel.php:494
|
424 |
+
msgid "Regular"
|
425 |
+
msgstr "Normale"
|
426 |
+
|
427 |
+
#: yit-common/yith-panel.php:496
|
428 |
+
msgid "Bold"
|
429 |
+
msgstr "Grassetto"
|
430 |
+
|
431 |
+
#: yit-common/yith-panel.php:498
|
432 |
+
msgid "Extra bold"
|
433 |
+
msgstr "Grassetto extra"
|
434 |
+
|
435 |
+
#: yit-common/yith-panel.php:500
|
436 |
+
msgid "Italic"
|
437 |
+
msgstr "Corsivo"
|
438 |
+
|
439 |
+
#: yit-common/yith-panel.php:502
|
440 |
+
msgid "Italic bold"
|
441 |
+
msgstr "Corsivo E Grassetto"
|
442 |
+
|
443 |
+
#: yit-common/yith-panel.php:518
|
444 |
+
msgid "Click to preview"
|
445 |
+
msgstr "Premi per visualizzare l'anteprima"
|
446 |
+
|
447 |
+
#~ msgid "Activate YITH Magnifier"
|
448 |
+
#~ msgstr "Attiva YITH Magnifier"
|
449 |
+
|
450 |
+
#~ msgid "Activate the plugin on mobile device"
|
451 |
+
#~ msgstr "Attiva il plugin su dispositivi mobili"
|
452 |
+
|
453 |
+
#~ msgid ""
|
454 |
+
#~ "Purchasing the premium version of the plugin, you will take advantage of "
|
455 |
+
#~ "the advanced features of the product and you will get one year of free "
|
456 |
+
#~ "updates and support through our platform available 24h/24."
|
457 |
+
#~ msgstr ""
|
458 |
+
#~ "Acquistando la versione premium del plugin potrai usufruire delle "
|
459 |
+
#~ "caratteristiche avanzate del prodotto, oltre a ottenere un anno di "
|
460 |
+
#~ "aggiornamenti gratuiti e di supporto attraverso la nostra piattaforma "
|
461 |
+
#~ "disponibile 24h/24."
|
462 |
+
|
463 |
+
#~ msgid "product"
|
464 |
+
#~ msgstr "prodotto"
|
465 |
+
|
466 |
+
#~ msgid "products"
|
467 |
+
#~ msgstr "prodotti"
|
468 |
+
|
469 |
+
#~ msgid "Product"
|
470 |
+
#~ msgstr "Prodotto"
|
471 |
+
|
472 |
+
#~ msgid "Remove from exclusions"
|
473 |
+
#~ msgstr "Rimuovi dalle esclusioni"
|
474 |
+
|
475 |
+
#~ msgid "Edit product"
|
476 |
+
#~ msgstr "Modifica prodotto"
|
477 |
+
|
478 |
+
#~ msgid "Remove from list"
|
479 |
+
#~ msgstr "Elimina dalla lista"
|
480 |
+
|
481 |
+
#~ msgid "%s product removed successfully"
|
482 |
+
#~ msgid_plural "%s products removed successfully"
|
483 |
+
#~ msgstr[0] "%s prodotto rimosso correttamente"
|
484 |
+
#~ msgstr[1] "%s prodotti rimossi correttamente"
|
485 |
+
|
486 |
+
#~ msgid "%s product added successfully"
|
487 |
+
#~ msgid_plural "%s products added successfully"
|
488 |
+
#~ msgstr[0] "%s prodotto aggiunto correttamente"
|
489 |
+
#~ msgstr[1] "%s prodotti aggiunti correttamente"
|
490 |
+
|
491 |
+
#~ msgid "Product updated successfully"
|
492 |
+
#~ msgstr "Prodotto aggiornato correttamente"
|
493 |
+
|
494 |
+
#~ msgid "Single Product Exclusion List"
|
495 |
+
#~ msgstr "Elenco Esclusioni Prodotti"
|
496 |
+
|
497 |
+
#~ msgid "Add Products"
|
498 |
+
#~ msgstr "Aggiungi Prodotto"
|
499 |
+
|
500 |
+
#~ msgid "Products to exclude"
|
501 |
+
#~ msgstr "Prodotti da escludere"
|
502 |
+
|
503 |
+
#~ msgid "Add product exclusion"
|
504 |
+
#~ msgstr "Aggiungi esclusione prodotto"
|
505 |
+
|
506 |
+
#~ msgid "Return to exclusion list"
|
507 |
+
#~ msgstr "Torno all'elenco esclusioni"
|
508 |
+
|
509 |
+
#~ msgid "Select at least one product"
|
510 |
+
#~ msgstr "Seleziona almeno un prodotto"
|
511 |
+
|
512 |
+
#~ msgid "Exclude product categories"
|
513 |
+
#~ msgstr "Escludi categorie di prodotti"
|
514 |
+
|
515 |
+
#~ msgid "Top"
|
516 |
+
#~ msgstr "Sopra"
|
517 |
+
|
518 |
+
#~ msgid "Bottom"
|
519 |
+
#~ msgstr "Sotto"
|
520 |
+
|
521 |
+
#~ msgid "Left"
|
522 |
+
#~ msgstr "Sinistra"
|
languages/yith-woocommerce-zoom-magnifier.pot
CHANGED
@@ -1,401 +1,401 @@
|
|
1 |
-
#, fuzzy
|
2 |
-
msgid ""
|
3 |
-
msgstr ""
|
4 |
-
"Project-Id-Version: YITH WooCommerce Order Tracking\n"
|
5 |
-
"POT-Creation-Date: 2016-06-13 16:57+0200\n"
|
6 |
-
"PO-Revision-Date: 2015-04-22 12:25+0100\n"
|
7 |
-
"Last-Translator: \n"
|
8 |
-
"Language-Team: Your Inspiration Themes <plugins@yithemes.com>\n"
|
9 |
-
"Language: en\n"
|
10 |
-
"MIME-Version: 1.0\n"
|
11 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
-
"Content-Transfer-Encoding: 8bit\n"
|
13 |
-
"X-Generator: Poedit 1.8.4\n"
|
14 |
-
"X-Poedit-Basepath: ..\n"
|
15 |
-
"Plural-Forms: nplurals=2; plural=n!=1;\n"
|
16 |
-
"X-Poedit-KeywordsList: __ ;_e;_n:1,2;__ngettext:1,2;__ngettext_noop:1,2;"
|
17 |
-
"_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
|
18 |
-
"X-Poedit-SourceCharset: UTF-8\n"
|
19 |
-
"X-Poedit-SearchPath-0: .\n"
|
20 |
-
"X-Poedit-SearchPathExcluded-0: plugin-fw\n"
|
21 |
-
|
22 |
-
#: class.yith-wcmg-admin.php:81
|
23 |
-
msgid "Image Size"
|
24 |
-
msgstr ""
|
25 |
-
|
26 |
-
#: class.yith-wcmg-admin.php:82 plugin-options/general-options.php:17
|
27 |
-
msgid "The size of the images used within the magnifier box"
|
28 |
-
msgstr ""
|
29 |
-
|
30 |
-
#: init.php:50
|
31 |
-
msgid ""
|
32 |
-
"YITH WooCommerce Zoom Magnifier is enabled but not effective. It requires "
|
33 |
-
"WooCommerce in order to work."
|
34 |
-
msgstr ""
|
35 |
-
|
36 |
-
#: init.php:66
|
37 |
-
msgid ""
|
38 |
-
"You can't activate the free version of YITH WooCommerce Zoom Magnifier while "
|
39 |
-
"you are using the premium one."
|
40 |
-
msgstr ""
|
41 |
-
|
42 |
-
#: lib/class.yith-ywzm-custom-types.php:159
|
43 |
-
msgid "Do you want to hard crop the image?"
|
44 |
-
msgstr ""
|
45 |
-
|
46 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:124
|
47 |
-
msgid "General"
|
48 |
-
msgstr ""
|
49 |
-
|
50 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:127
|
51 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:191
|
52 |
-
msgid "Premium Version"
|
53 |
-
msgstr ""
|
54 |
-
|
55 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:129
|
56 |
-
msgid "Product exclusion list"
|
57 |
-
msgstr ""
|
58 |
-
|
59 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:188
|
60 |
-
msgid "Settings"
|
61 |
-
msgstr ""
|
62 |
-
|
63 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:216
|
64 |
-
msgid "Plugin Documentation"
|
65 |
-
msgstr ""
|
66 |
-
|
67 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:229
|
68 |
-
msgid ""
|
69 |
-
"YITH WooCommerce Zoom Magnifier is available in an outstanding PREMIUM "
|
70 |
-
"version with many new options, discover it now."
|
71 |
-
msgstr ""
|
72 |
-
|
73 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:230
|
74 |
-
msgid "Premium version"
|
75 |
-
msgstr ""
|
76 |
-
|
77 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:237
|
78 |
-
#: plugin-options/general-options.php:217
|
79 |
-
msgid "YITH WooCommerce Zoom Magnifier"
|
80 |
-
msgstr ""
|
81 |
-
|
82 |
-
#: lib/class.yith-ywzm-plugin-fw-loader.php:238
|
83 |
-
msgid ""
|
84 |
-
"In YIT Plugins tab you can find YITH WooCommerce Zoom Magnifier options."
|
85 |
-
"<br> From this menu you can access all settings of the YITH plugins "
|
86 |
-
"activated."
|
87 |
-
msgstr ""
|
88 |
-
|
89 |
-
#: plugin-options/general-options.php:16
|
90 |
-
msgid "Image size"
|
91 |
-
msgstr ""
|
92 |
-
|
93 |
-
#: plugin-options/general-options.php:36
|
94 |
-
msgid "General Settings"
|
95 |
-
msgstr ""
|
96 |
-
|
97 |
-
#: plugin-options/general-options.php:42
|
98 |
-
msgid "Activate YITH WooCommerce Zoom Magnifier"
|
99 |
-
msgstr ""
|
100 |
-
|
101 |
-
#: plugin-options/general-options.php:43
|
102 |
-
msgid "Activate the plugin or use the WooCommerce default product image."
|
103 |
-
msgstr ""
|
104 |
-
|
105 |
-
#: plugin-options/general-options.php:50
|
106 |
-
msgid "Activate on mobile device"
|
107 |
-
msgstr ""
|
108 |
-
|
109 |
-
#: plugin-options/general-options.php:51
|
110 |
-
msgid ""
|
111 |
-
"Set if zoom and slider functionalities should be shown also on mobile "
|
112 |
-
"devices."
|
113 |
-
msgstr ""
|
114 |
-
|
115 |
-
#: plugin-options/general-options.php:59
|
116 |
-
msgid "Forced Image Size"
|
117 |
-
msgstr ""
|
118 |
-
|
119 |
-
#: plugin-options/general-options.php:60
|
120 |
-
msgid ""
|
121 |
-
"If disabled, you will able to customize the sizes of the zoomed images. "
|
122 |
-
"Disable it at your own risk; the magnifier could not properly work with "
|
123 |
-
"images out of proportion."
|
124 |
-
msgstr ""
|
125 |
-
|
126 |
-
#: plugin-options/general-options.php:74
|
127 |
-
msgid "Magnifier Settings"
|
128 |
-
msgstr ""
|
129 |
-
|
130 |
-
#: plugin-options/general-options.php:80
|
131 |
-
msgid "Zoom Box Width"
|
132 |
-
msgstr ""
|
133 |
-
|
134 |
-
#: plugin-options/general-options.php:81
|
135 |
-
msgid "The width of the magnifier box (default: auto)"
|
136 |
-
msgstr ""
|
137 |
-
|
138 |
-
#: plugin-options/general-options.php:88
|
139 |
-
msgid "Zoom Box Height"
|
140 |
-
msgstr ""
|
141 |
-
|
142 |
-
#: plugin-options/general-options.php:89
|
143 |
-
msgid "The height of the magnifier box (default: auto)"
|
144 |
-
msgstr ""
|
145 |
-
|
146 |
-
#: plugin-options/general-options.php:97
|
147 |
-
msgid "Zoom Box Position"
|
148 |
-
msgstr ""
|
149 |
-
|
150 |
-
#: plugin-options/general-options.php:98
|
151 |
-
msgid "The magnifier position"
|
152 |
-
msgstr ""
|
153 |
-
|
154 |
-
#: plugin-options/general-options.php:104
|
155 |
-
msgid "Right"
|
156 |
-
msgstr ""
|
157 |
-
|
158 |
-
#: plugin-options/general-options.php:105
|
159 |
-
#: plugin-options/general-options.php:117
|
160 |
-
msgid "Inside"
|
161 |
-
msgstr ""
|
162 |
-
|
163 |
-
#: plugin-options/general-options.php:109
|
164 |
-
msgid "Zoom Box Position for mobile devices"
|
165 |
-
msgstr ""
|
166 |
-
|
167 |
-
#: plugin-options/general-options.php:110
|
168 |
-
msgid "The magnifier position for the mobile devices (iPhone, Android, etc.)"
|
169 |
-
msgstr ""
|
170 |
-
|
171 |
-
#: plugin-options/general-options.php:116
|
172 |
-
msgid "Default"
|
173 |
-
msgstr ""
|
174 |
-
|
175 |
-
#: plugin-options/general-options.php:118
|
176 |
-
msgid "Disable"
|
177 |
-
msgstr ""
|
178 |
-
|
179 |
-
#: plugin-options/general-options.php:122
|
180 |
-
msgid "Loading label"
|
181 |
-
msgstr ""
|
182 |
-
|
183 |
-
#: plugin-options/general-options.php:125
|
184 |
-
#: plugin-options/general-options.php:126
|
185 |
-
msgid "Loading..."
|
186 |
-
msgstr ""
|
187 |
-
|
188 |
-
#: plugin-options/general-options.php:131
|
189 |
-
msgid "Lens Opacity"
|
190 |
-
msgstr ""
|
191 |
-
|
192 |
-
#: plugin-options/general-options.php:142
|
193 |
-
msgid "Blur"
|
194 |
-
msgstr ""
|
195 |
-
|
196 |
-
#: plugin-options/general-options.php:143
|
197 |
-
msgid "Add a blur effect to the small image on mouse hover."
|
198 |
-
msgstr ""
|
199 |
-
|
200 |
-
#: plugin-options/general-options.php:154
|
201 |
-
msgid "Slider Settings"
|
202 |
-
msgstr ""
|
203 |
-
|
204 |
-
#: plugin-options/general-options.php:160
|
205 |
-
msgid "Activate Slider"
|
206 |
-
msgstr ""
|
207 |
-
|
208 |
-
#: plugin-options/general-options.php:161
|
209 |
-
msgid "Activate Thumbnail Slider."
|
210 |
-
msgstr ""
|
211 |
-
|
212 |
-
#: plugin-options/general-options.php:168
|
213 |
-
msgid "Activate Responsive Slider"
|
214 |
-
msgstr ""
|
215 |
-
|
216 |
-
#: plugin-options/general-options.php:169
|
217 |
-
msgid ""
|
218 |
-
"This option fits the thumbnails within the available space. Disable it if "
|
219 |
-
"you want to manage freely the thumbnails (eg. add margins, paddings, etc.)"
|
220 |
-
msgstr ""
|
221 |
-
|
222 |
-
#: plugin-options/general-options.php:176
|
223 |
-
msgid "Items"
|
224 |
-
msgstr ""
|
225 |
-
|
226 |
-
#: plugin-options/general-options.php:177
|
227 |
-
msgid "Number of items to show"
|
228 |
-
msgstr ""
|
229 |
-
|
230 |
-
#: plugin-options/general-options.php:187
|
231 |
-
msgid "Circular carousel"
|
232 |
-
msgstr ""
|
233 |
-
|
234 |
-
#: plugin-options/general-options.php:188
|
235 |
-
msgid "It defines whether the carousel should be circular."
|
236 |
-
msgstr ""
|
237 |
-
|
238 |
-
#: plugin-options/general-options.php:195
|
239 |
-
msgid "Infinite carousel"
|
240 |
-
msgstr ""
|
241 |
-
|
242 |
-
#: plugin-options/general-options.php:196
|
243 |
-
msgid ""
|
244 |
-
"It defines whether the carousel should be infinite. Note: It is possible to "
|
245 |
-
"create a non-circular, infinite carousel, but it is not possible to create a "
|
246 |
-
"circular, non-infinite carousel."
|
247 |
-
msgstr ""
|
248 |
-
|
249 |
-
#: plugin-options/general-options.php:214
|
250 |
-
msgid "Upgrade to the PREMIUM VERSION"
|
251 |
-
msgstr ""
|
252 |
-
|
253 |
-
#: plugin-options/general-options.php:218
|
254 |
-
msgid "Discover The Advanced Features"
|
255 |
-
msgstr ""
|
256 |
-
|
257 |
-
#: plugin-options/general-options.php:219
|
258 |
-
msgid ""
|
259 |
-
"Upgrade to the PREMIUM VERSION of YITH WOOCOMMERCE ZOOM MAGNIFIER to benefit "
|
260 |
-
"from all features!"
|
261 |
-
msgstr ""
|
262 |
-
|
263 |
-
#: plugin-options/general-options.php:223
|
264 |
-
msgid ""
|
265 |
-
"See YITH WooCommerce Zoom Magnifier plugin with full premium features in "
|
266 |
-
"action"
|
267 |
-
msgstr ""
|
268 |
-
|
269 |
-
#: plugin-options/general-options.php:225
|
270 |
-
msgid "Get Support and Pro Features"
|
271 |
-
msgstr ""
|
272 |
-
|
273 |
-
#: plugin-options/general-options.php:226
|
274 |
-
msgid ""
|
275 |
-
"Purchasing the premium version of the plugin, you will take advantage of the "
|
276 |
-
"advanced features of the product, and you will get one year of free updates "
|
277 |
-
"and support through our platform available 24h/24."
|
278 |
-
msgstr ""
|
279 |
-
|
280 |
-
#: templates/admin/premium.php:193
|
281 |
-
#, php-format
|
282 |
-
msgid ""
|
283 |
-
"Upgrade to the %1$s premium version %2$s of %1$s YITH WooCommerce Zoom "
|
284 |
-
"Magnifier %2$s to benefit from all features!"
|
285 |
-
msgstr ""
|
286 |
-
|
287 |
-
#: templates/admin/premium.php:196
|
288 |
-
#, php-format
|
289 |
-
msgid "%1$sUPGRADE%2$s%3$sto the premium version%2$s"
|
290 |
-
msgstr ""
|
291 |
-
|
292 |
-
#: templates/admin/premium.php:202
|
293 |
-
#, php-format
|
294 |
-
msgid "%1$sPremium Features%2$s"
|
295 |
-
msgstr ""
|
296 |
-
|
297 |
-
#: templates/admin/premium.php:210
|
298 |
-
msgid "ZOOM BOX POSITION"
|
299 |
-
msgstr ""
|
300 |
-
|
301 |
-
#: templates/admin/premium.php:213
|
302 |
-
#, php-format
|
303 |
-
msgid ""
|
304 |
-
"Choose where you want to show the %1$szoomed version%2$s of the image of "
|
305 |
-
"your products. Place it above or below the original image, on its left or "
|
306 |
-
"its right, or you can even place it over it.$2$s"
|
307 |
-
msgstr ""
|
308 |
-
|
309 |
-
#: templates/admin/premium.php:223
|
310 |
-
msgid "ENLARGE THE IMAGES"
|
311 |
-
msgstr ""
|
312 |
-
|
313 |
-
#: templates/admin/premium.php:225
|
314 |
-
msgid ""
|
315 |
-
"Just one click and the product image will appear in a bigger size in a modal "
|
316 |
-
"window. A further chance to let users analyze in a better way what you sell."
|
317 |
-
msgstr ""
|
318 |
-
|
319 |
-
#: templates/admin/premium.php:240
|
320 |
-
msgid "EXCLUDE PRODUCTS"
|
321 |
-
msgstr ""
|
322 |
-
|
323 |
-
#: templates/admin/premium.php:242
|
324 |
-
msgid ""
|
325 |
-
"Tailored options to limit the plugin features only to certain products. Some "
|
326 |
-
"of these could have too small images to be zoomed, or maybe being part of "
|
327 |
-
"categories that do not imply zoomed images. Select the products and the "
|
328 |
-
"categories to exclude and delete all your problems"
|
329 |
-
msgstr ""
|
330 |
-
|
331 |
-
#: templates/admin/premium.php:251
|
332 |
-
#, php-format
|
333 |
-
msgid ""
|
334 |
-
"Upgrade to the %1$spremium version%2$s of %1$sYITH WooCommerce Zoom Magnifier"
|
335 |
-
"%2$s to benefit from all features!"
|
336 |
-
msgstr ""
|
337 |
-
|
338 |
-
#: templates/admin/premium.php:254
|
339 |
-
#, php-format
|
340 |
-
msgid "%1$sUPGRADE%2$s %3$sto the premium version%2$s"
|
341 |
-
msgstr ""
|
342 |
-
|
343 |
-
#: yit-common/yith-panel.php:429
|
344 |
-
msgid "Select a date"
|
345 |
-
msgstr ""
|
346 |
-
|
347 |
-
#: yit-common/yith-panel.php:430
|
348 |
-
msgid "Hours"
|
349 |
-
msgstr ""
|
350 |
-
|
351 |
-
#: yit-common/yith-panel.php:431 yit-common/yith-panel.php:432
|
352 |
-
msgid "Minutes"
|
353 |
-
msgstr ""
|
354 |
-
|
355 |
-
#: yit-common/yith-panel.php:440
|
356 |
-
msgid "Upload"
|
357 |
-
msgstr ""
|
358 |
-
|
359 |
-
#: yit-common/yith-panel.php:477
|
360 |
-
msgid "px"
|
361 |
-
msgstr ""
|
362 |
-
|
363 |
-
#: yit-common/yith-panel.php:479
|
364 |
-
msgid "em"
|
365 |
-
msgstr ""
|
366 |
-
|
367 |
-
#: yit-common/yith-panel.php:481
|
368 |
-
msgid "pt"
|
369 |
-
msgstr ""
|
370 |
-
|
371 |
-
#: yit-common/yith-panel.php:483
|
372 |
-
msgid "rem"
|
373 |
-
msgstr ""
|
374 |
-
|
375 |
-
#: yit-common/yith-panel.php:495
|
376 |
-
msgid "Select a font family"
|
377 |
-
msgstr ""
|
378 |
-
|
379 |
-
#: yit-common/yith-panel.php:505
|
380 |
-
msgid "Regular"
|
381 |
-
msgstr ""
|
382 |
-
|
383 |
-
#: yit-common/yith-panel.php:507
|
384 |
-
msgid "Bold"
|
385 |
-
msgstr ""
|
386 |
-
|
387 |
-
#: yit-common/yith-panel.php:509
|
388 |
-
msgid "Extra bold"
|
389 |
-
msgstr ""
|
390 |
-
|
391 |
-
#: yit-common/yith-panel.php:511
|
392 |
-
msgid "Italic"
|
393 |
-
msgstr ""
|
394 |
-
|
395 |
-
#: yit-common/yith-panel.php:513
|
396 |
-
msgid "Italic bold"
|
397 |
-
msgstr ""
|
398 |
-
|
399 |
-
#: yit-common/yith-panel.php:529
|
400 |
-
msgid "Click to preview"
|
401 |
-
msgstr ""
|
1 |
+
#, fuzzy
|
2 |
+
msgid ""
|
3 |
+
msgstr ""
|
4 |
+
"Project-Id-Version: YITH WooCommerce Order Tracking\n"
|
5 |
+
"POT-Creation-Date: 2016-06-13 16:57+0200\n"
|
6 |
+
"PO-Revision-Date: 2015-04-22 12:25+0100\n"
|
7 |
+
"Last-Translator: \n"
|
8 |
+
"Language-Team: Your Inspiration Themes <plugins@yithemes.com>\n"
|
9 |
+
"Language: en\n"
|
10 |
+
"MIME-Version: 1.0\n"
|
11 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
+
"Content-Transfer-Encoding: 8bit\n"
|
13 |
+
"X-Generator: Poedit 1.8.4\n"
|
14 |
+
"X-Poedit-Basepath: ..\n"
|
15 |
+
"Plural-Forms: nplurals=2; plural=n!=1;\n"
|
16 |
+
"X-Poedit-KeywordsList: __ ;_e;_n:1,2;__ngettext:1,2;__ngettext_noop:1,2;"
|
17 |
+
"_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
|
18 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
19 |
+
"X-Poedit-SearchPath-0: .\n"
|
20 |
+
"X-Poedit-SearchPathExcluded-0: plugin-fw\n"
|
21 |
+
|
22 |
+
#: class.yith-wcmg-admin.php:81
|
23 |
+
msgid "Image Size"
|
24 |
+
msgstr ""
|
25 |
+
|
26 |
+
#: class.yith-wcmg-admin.php:82 plugin-options/general-options.php:17
|
27 |
+
msgid "The size of the images used within the magnifier box"
|
28 |
+
msgstr ""
|
29 |
+
|
30 |
+
#: init.php:50
|
31 |
+
msgid ""
|
32 |
+
"YITH WooCommerce Zoom Magnifier is enabled but not effective. It requires "
|
33 |
+
"WooCommerce in order to work."
|
34 |
+
msgstr ""
|
35 |
+
|
36 |
+
#: init.php:66
|
37 |
+
msgid ""
|
38 |
+
"You can't activate the free version of YITH WooCommerce Zoom Magnifier while "
|
39 |
+
"you are using the premium one."
|
40 |
+
msgstr ""
|
41 |
+
|
42 |
+
#: lib/class.yith-ywzm-custom-types.php:159
|
43 |
+
msgid "Do you want to hard crop the image?"
|
44 |
+
msgstr ""
|
45 |
+
|
46 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:124
|
47 |
+
msgid "General"
|
48 |
+
msgstr ""
|
49 |
+
|
50 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:127
|
51 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:191
|
52 |
+
msgid "Premium Version"
|
53 |
+
msgstr ""
|
54 |
+
|
55 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:129
|
56 |
+
msgid "Product exclusion list"
|
57 |
+
msgstr ""
|
58 |
+
|
59 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:188
|
60 |
+
msgid "Settings"
|
61 |
+
msgstr ""
|
62 |
+
|
63 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:216
|
64 |
+
msgid "Plugin Documentation"
|
65 |
+
msgstr ""
|
66 |
+
|
67 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:229
|
68 |
+
msgid ""
|
69 |
+
"YITH WooCommerce Zoom Magnifier is available in an outstanding PREMIUM "
|
70 |
+
"version with many new options, discover it now."
|
71 |
+
msgstr ""
|
72 |
+
|
73 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:230
|
74 |
+
msgid "Premium version"
|
75 |
+
msgstr ""
|
76 |
+
|
77 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:237
|
78 |
+
#: plugin-options/general-options.php:217
|
79 |
+
msgid "YITH WooCommerce Zoom Magnifier"
|
80 |
+
msgstr ""
|
81 |
+
|
82 |
+
#: lib/class.yith-ywzm-plugin-fw-loader.php:238
|
83 |
+
msgid ""
|
84 |
+
"In YIT Plugins tab you can find YITH WooCommerce Zoom Magnifier options."
|
85 |
+
"<br> From this menu you can access all settings of the YITH plugins "
|
86 |
+
"activated."
|
87 |
+
msgstr ""
|
88 |
+
|
89 |
+
#: plugin-options/general-options.php:16
|
90 |
+
msgid "Image size"
|
91 |
+
msgstr ""
|
92 |
+
|
93 |
+
#: plugin-options/general-options.php:36
|
94 |
+
msgid "General Settings"
|
95 |
+
msgstr ""
|
96 |
+
|
97 |
+
#: plugin-options/general-options.php:42
|
98 |
+
msgid "Activate YITH WooCommerce Zoom Magnifier"
|
99 |
+
msgstr ""
|
100 |
+
|
101 |
+
#: plugin-options/general-options.php:43
|
102 |
+
msgid "Activate the plugin or use the WooCommerce default product image."
|
103 |
+
msgstr ""
|
104 |
+
|
105 |
+
#: plugin-options/general-options.php:50
|
106 |
+
msgid "Activate on mobile device"
|
107 |
+
msgstr ""
|
108 |
+
|
109 |
+
#: plugin-options/general-options.php:51
|
110 |
+
msgid ""
|
111 |
+
"Set if zoom and slider functionalities should be shown also on mobile "
|
112 |
+
"devices."
|
113 |
+
msgstr ""
|
114 |
+
|
115 |
+
#: plugin-options/general-options.php:59
|
116 |
+
msgid "Forced Image Size"
|
117 |
+
msgstr ""
|
118 |
+
|
119 |
+
#: plugin-options/general-options.php:60
|
120 |
+
msgid ""
|
121 |
+
"If disabled, you will able to customize the sizes of the zoomed images. "
|
122 |
+
"Disable it at your own risk; the magnifier could not properly work with "
|
123 |
+
"images out of proportion."
|
124 |
+
msgstr ""
|
125 |
+
|
126 |
+
#: plugin-options/general-options.php:74
|
127 |
+
msgid "Magnifier Settings"
|
128 |
+
msgstr ""
|
129 |
+
|
130 |
+
#: plugin-options/general-options.php:80
|
131 |
+
msgid "Zoom Box Width"
|
132 |
+
msgstr ""
|
133 |
+
|
134 |
+
#: plugin-options/general-options.php:81
|
135 |
+
msgid "The width of the magnifier box (default: auto)"
|
136 |
+
msgstr ""
|
137 |
+
|
138 |
+
#: plugin-options/general-options.php:88
|
139 |
+
msgid "Zoom Box Height"
|
140 |
+
msgstr ""
|
141 |
+
|
142 |
+
#: plugin-options/general-options.php:89
|
143 |
+
msgid "The height of the magnifier box (default: auto)"
|
144 |
+
msgstr ""
|
145 |
+
|
146 |
+
#: plugin-options/general-options.php:97
|
147 |
+
msgid "Zoom Box Position"
|
148 |
+
msgstr ""
|
149 |
+
|
150 |
+
#: plugin-options/general-options.php:98
|
151 |
+
msgid "The magnifier position"
|
152 |
+
msgstr ""
|
153 |
+
|
154 |
+
#: plugin-options/general-options.php:104
|
155 |
+
msgid "Right"
|
156 |
+
msgstr ""
|
157 |
+
|
158 |
+
#: plugin-options/general-options.php:105
|
159 |
+
#: plugin-options/general-options.php:117
|
160 |
+
msgid "Inside"
|
161 |
+
msgstr ""
|
162 |
+
|
163 |
+
#: plugin-options/general-options.php:109
|
164 |
+
msgid "Zoom Box Position for mobile devices"
|
165 |
+
msgstr ""
|
166 |
+
|
167 |
+
#: plugin-options/general-options.php:110
|
168 |
+
msgid "The magnifier position for the mobile devices (iPhone, Android, etc.)"
|
169 |
+
msgstr ""
|
170 |
+
|
171 |
+
#: plugin-options/general-options.php:116
|
172 |
+
msgid "Default"
|
173 |
+
msgstr ""
|
174 |
+
|
175 |
+
#: plugin-options/general-options.php:118
|
176 |
+
msgid "Disable"
|
177 |
+
msgstr ""
|
178 |
+
|
179 |
+
#: plugin-options/general-options.php:122
|
180 |
+
msgid "Loading label"
|
181 |
+
msgstr ""
|
182 |
+
|
183 |
+
#: plugin-options/general-options.php:125
|
184 |
+
#: plugin-options/general-options.php:126
|
185 |
+
msgid "Loading..."
|
186 |
+
msgstr ""
|
187 |
+
|
188 |
+
#: plugin-options/general-options.php:131
|
189 |
+
msgid "Lens Opacity"
|
190 |
+
msgstr ""
|
191 |
+
|
192 |
+
#: plugin-options/general-options.php:142
|
193 |
+
msgid "Blur"
|
194 |
+
msgstr ""
|
195 |
+
|
196 |
+
#: plugin-options/general-options.php:143
|
197 |
+
msgid "Add a blur effect to the small image on mouse hover."
|
198 |
+
msgstr ""
|
199 |
+
|
200 |
+
#: plugin-options/general-options.php:154
|
201 |
+
msgid "Slider Settings"
|
202 |
+
msgstr ""
|
203 |
+
|
204 |
+
#: plugin-options/general-options.php:160
|
205 |
+
msgid "Activate Slider"
|
206 |
+
msgstr ""
|
207 |
+
|
208 |
+
#: plugin-options/general-options.php:161
|
209 |
+
msgid "Activate Thumbnail Slider."
|
210 |
+
msgstr ""
|
211 |
+
|
212 |
+
#: plugin-options/general-options.php:168
|
213 |
+
msgid "Activate Responsive Slider"
|
214 |
+
msgstr ""
|
215 |
+
|
216 |
+
#: plugin-options/general-options.php:169
|
217 |
+
msgid ""
|
218 |
+
"This option fits the thumbnails within the available space. Disable it if "
|
219 |
+
"you want to manage freely the thumbnails (eg. add margins, paddings, etc.)"
|
220 |
+
msgstr ""
|
221 |
+
|
222 |
+
#: plugin-options/general-options.php:176
|
223 |
+
msgid "Items"
|
224 |
+
msgstr ""
|
225 |
+
|
226 |
+
#: plugin-options/general-options.php:177
|
227 |
+
msgid "Number of items to show"
|
228 |
+
msgstr ""
|
229 |
+
|
230 |
+
#: plugin-options/general-options.php:187
|
231 |
+
msgid "Circular carousel"
|
232 |
+
msgstr ""
|
233 |
+
|
234 |
+
#: plugin-options/general-options.php:188
|
235 |
+
msgid "It defines whether the carousel should be circular."
|
236 |
+
msgstr ""
|
237 |
+
|
238 |
+
#: plugin-options/general-options.php:195
|
239 |
+
msgid "Infinite carousel"
|
240 |
+
msgstr ""
|
241 |
+
|
242 |
+
#: plugin-options/general-options.php:196
|
243 |
+
msgid ""
|
244 |
+
"It defines whether the carousel should be infinite. Note: It is possible to "
|
245 |
+
"create a non-circular, infinite carousel, but it is not possible to create a "
|
246 |
+
"circular, non-infinite carousel."
|
247 |
+
msgstr ""
|
248 |
+
|
249 |
+
#: plugin-options/general-options.php:214
|
250 |
+
msgid "Upgrade to the PREMIUM VERSION"
|
251 |
+
msgstr ""
|
252 |
+
|
253 |
+
#: plugin-options/general-options.php:218
|
254 |
+
msgid "Discover The Advanced Features"
|
255 |
+
msgstr ""
|
256 |
+
|
257 |
+
#: plugin-options/general-options.php:219
|
258 |
+
msgid ""
|
259 |
+
"Upgrade to the PREMIUM VERSION of YITH WOOCOMMERCE ZOOM MAGNIFIER to benefit "
|
260 |
+
"from all features!"
|
261 |
+
msgstr ""
|
262 |
+
|
263 |
+
#: plugin-options/general-options.php:223
|
264 |
+
msgid ""
|
265 |
+
"See YITH WooCommerce Zoom Magnifier plugin with full premium features in "
|
266 |
+
"action"
|
267 |
+
msgstr ""
|
268 |
+
|
269 |
+
#: plugin-options/general-options.php:225
|
270 |
+
msgid "Get Support and Pro Features"
|
271 |
+
msgstr ""
|
272 |
+
|
273 |
+
#: plugin-options/general-options.php:226
|
274 |
+
msgid ""
|
275 |
+
"Purchasing the premium version of the plugin, you will take advantage of the "
|
276 |
+
"advanced features of the product, and you will get one year of free updates "
|
277 |
+
"and support through our platform available 24h/24."
|
278 |
+
msgstr ""
|
279 |
+
|
280 |
+
#: templates/admin/premium.php:193
|
281 |
+
#, php-format
|
282 |
+
msgid ""
|
283 |
+
"Upgrade to the %1$s premium version %2$s of %1$s YITH WooCommerce Zoom "
|
284 |
+
"Magnifier %2$s to benefit from all features!"
|
285 |
+
msgstr ""
|
286 |
+
|
287 |
+
#: templates/admin/premium.php:196
|
288 |
+
#, php-format
|
289 |
+
msgid "%1$sUPGRADE%2$s%3$sto the premium version%2$s"
|
290 |
+
msgstr ""
|
291 |
+
|
292 |
+
#: templates/admin/premium.php:202
|
293 |
+
#, php-format
|
294 |
+
msgid "%1$sPremium Features%2$s"
|
295 |
+
msgstr ""
|
296 |
+
|
297 |
+
#: templates/admin/premium.php:210
|
298 |
+
msgid "ZOOM BOX POSITION"
|
299 |
+
msgstr ""
|
300 |
+
|
301 |
+
#: templates/admin/premium.php:213
|
302 |
+
#, php-format
|
303 |
+
msgid ""
|
304 |
+
"Choose where you want to show the %1$szoomed version%2$s of the image of "
|
305 |
+
"your products. Place it above or below the original image, on its left or "
|
306 |
+
"its right, or you can even place it over it.$2$s"
|
307 |
+
msgstr ""
|
308 |
+
|
309 |
+
#: templates/admin/premium.php:223
|
310 |
+
msgid "ENLARGE THE IMAGES"
|
311 |
+
msgstr ""
|
312 |
+
|
313 |
+
#: templates/admin/premium.php:225
|
314 |
+
msgid ""
|
315 |
+
"Just one click and the product image will appear in a bigger size in a modal "
|
316 |
+
"window. A further chance to let users analyze in a better way what you sell."
|
317 |
+
msgstr ""
|
318 |
+
|
319 |
+
#: templates/admin/premium.php:240
|
320 |
+
msgid "EXCLUDE PRODUCTS"
|
321 |
+
msgstr ""
|
322 |
+
|
323 |
+
#: templates/admin/premium.php:242
|
324 |
+
msgid ""
|
325 |
+
"Tailored options to limit the plugin features only to certain products. Some "
|
326 |
+
"of these could have too small images to be zoomed, or maybe being part of "
|
327 |
+
"categories that do not imply zoomed images. Select the products and the "
|
328 |
+
"categories to exclude and delete all your problems"
|
329 |
+
msgstr ""
|
330 |
+
|
331 |
+
#: templates/admin/premium.php:251
|
332 |
+
#, php-format
|
333 |
+
msgid ""
|
334 |
+
"Upgrade to the %1$spremium version%2$s of %1$sYITH WooCommerce Zoom Magnifier"
|
335 |
+
"%2$s to benefit from all features!"
|
336 |
+
msgstr ""
|
337 |
+
|
338 |
+
#: templates/admin/premium.php:254
|
339 |
+
#, php-format
|
340 |
+
msgid "%1$sUPGRADE%2$s %3$sto the premium version%2$s"
|
341 |
+
msgstr ""
|
342 |
+
|
343 |
+
#: yit-common/yith-panel.php:429
|
344 |
+
msgid "Select a date"
|
345 |
+
msgstr ""
|
346 |
+
|
347 |
+
#: yit-common/yith-panel.php:430
|
348 |
+
msgid "Hours"
|
349 |
+
msgstr ""
|
350 |
+
|
351 |
+
#: yit-common/yith-panel.php:431 yit-common/yith-panel.php:432
|
352 |
+
msgid "Minutes"
|
353 |
+
msgstr ""
|
354 |
+
|
355 |
+
#: yit-common/yith-panel.php:440
|
356 |
+
msgid "Upload"
|
357 |
+
msgstr ""
|
358 |
+
|
359 |
+
#: yit-common/yith-panel.php:477
|
360 |
+
msgid "px"
|
361 |
+
msgstr ""
|
362 |
+
|
363 |
+
#: yit-common/yith-panel.php:479
|
364 |
+
msgid "em"
|
365 |
+
msgstr ""
|
366 |
+
|
367 |
+
#: yit-common/yith-panel.php:481
|
368 |
+
msgid "pt"
|
369 |
+
msgstr ""
|
370 |
+
|
371 |
+
#: yit-common/yith-panel.php:483
|
372 |
+
msgid "rem"
|
373 |
+
msgstr ""
|
374 |
+
|
375 |
+
#: yit-common/yith-panel.php:495
|
376 |
+
msgid "Select a font family"
|
377 |
+
msgstr ""
|
378 |
+
|
379 |
+
#: yit-common/yith-panel.php:505
|
380 |
+
msgid "Regular"
|
381 |
+
msgstr ""
|
382 |
+
|
383 |
+
#: yit-common/yith-panel.php:507
|
384 |
+
msgid "Bold"
|
385 |
+
msgstr ""
|
386 |
+
|
387 |
+
#: yit-common/yith-panel.php:509
|
388 |
+
msgid "Extra bold"
|
389 |
+
msgstr ""
|
390 |
+
|
391 |
+
#: yit-common/yith-panel.php:511
|
392 |
+
msgid "Italic"
|
393 |
+
msgstr ""
|
394 |
+
|
395 |
+
#: yit-common/yith-panel.php:513
|
396 |
+
msgid "Italic bold"
|
397 |
+
msgstr ""
|
398 |
+
|
399 |
+
#: yit-common/yith-panel.php:529
|
400 |
+
msgid "Click to preview"
|
401 |
+
msgstr ""
|
lib/class.yith-woocommerce-zoom-magnifier.php
CHANGED
@@ -1,167 +1,167 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Main class
|
4 |
-
*
|
5 |
-
* @author Your Inspiration Themes
|
6 |
-
* @package YITH WooCommerce Zoom Magnifier
|
7 |
-
* @version 1.1.2
|
8 |
-
*/
|
9 |
-
|
10 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
-
exit;
|
12 |
-
} // Exit if accessed directly
|
13 |
-
|
14 |
-
|
15 |
-
if ( ! class_exists( 'YITH_WooCommerce_Zoom_Magnifier' ) ) {
|
16 |
-
/**
|
17 |
-
* YITH WooCommerce Zoom Magnifier
|
18 |
-
*
|
19 |
-
* @since 1.0.0
|
20 |
-
*/
|
21 |
-
class YITH_WooCommerce_Zoom_Magnifier {
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Plugin object
|
25 |
-
*
|
26 |
-
* @var string
|
27 |
-
* @since 1.0.0
|
28 |
-
*/
|
29 |
-
public $obj = null;
|
30 |
-
|
31 |
-
/**
|
32 |
-
* @var string Premium version landing link
|
33 |
-
*/
|
34 |
-
protected $_premium_landing = 'http://yithemes.com/themes/plugins/yith-woocommerce-zoom-magnifier/';
|
35 |
-
|
36 |
-
/**
|
37 |
-
* @var string Plugin official documentation
|
38 |
-
*/
|
39 |
-
protected $_official_documentation = 'https://docs.yithemes.com/yith-woocommerce-zoom-magnifier/';
|
40 |
-
|
41 |
-
/**
|
42 |
-
* @var string Plugin panel page
|
43 |
-
*/
|
44 |
-
protected $_panel_page = 'yith_woocommerce_zoom-magnifier_panel';
|
45 |
-
|
46 |
-
/**
|
47 |
-
* Constructor
|
48 |
-
*
|
49 |
-
* @return mixed|YITH_WCMG_Admin|YITH_WCMG_Frontend
|
50 |
-
* @since 1.0.0
|
51 |
-
*/
|
52 |
-
public function __construct() {
|
53 |
-
/** Stop the plugin on mobile devices */
|
54 |
-
if ( ( 'yes' != get_option( 'yith_wcmg_enable_mobile' ) ) && wp_is_mobile() ) {
|
55 |
-
return;
|
56 |
-
}
|
57 |
-
|
58 |
-
add_action( 'wp_ajax_nopriv_yith_wc_zoom_magnifier_get_main_image', array(
|
59 |
-
$this,
|
60 |
-
'yith_wc_zoom_magnifier_get_main_image_call_back'
|
61 |
-
), 10 );
|
62 |
-
|
63 |
-
add_action( 'wp_ajax_yith_wc_zoom_magnifier_get_main_image', array(
|
64 |
-
$this,
|
65 |
-
'yith_wc_zoom_magnifier_get_main_image_call_back'
|
66 |
-
), 10 );
|
67 |
-
|
68 |
-
// actions
|
69 |
-
add_action( 'init', array( $this, 'init' ) );
|
70 |
-
|
71 |
-
if ( is_admin() && ( ! isset( $_REQUEST['action'] ) || ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] != 'yith_load_product_quick_view' ) ) ) {
|
72 |
-
$this->obj = new YITH_WCMG_Admin( );
|
73 |
-
} else {
|
74 |
-
$this->obj = new YITH_WCMG_Frontend( );
|
75 |
-
}
|
76 |
-
|
77 |
-
return $this->obj;
|
78 |
-
}
|
79 |
-
|
80 |
-
/**
|
81 |
-
* Ajax method to retrieve the product main imavge
|
82 |
-
*
|
83 |
-
* @access public
|
84 |
-
* @author Daniel Sanchez Saez
|
85 |
-
* @since 1.3.3
|
86 |
-
*/
|
87 |
-
public function yith_wc_zoom_magnifier_get_main_image_call_back(){
|
88 |
-
|
89 |
-
$product_id = ( isset( $_POST[ 'product_id' ] ) ? $_POST[ 'product_id' ] : 0 );
|
90 |
-
|
91 |
-
$url = wp_get_attachment_image_src ( get_post_thumbnail_id ( $product_id ), "full" );
|
92 |
-
|
93 |
-
$response = array(
|
94 |
-
"url" => $url[ 0 ],
|
95 |
-
);
|
96 |
-
wp_send_json( $response );
|
97 |
-
|
98 |
-
}
|
99 |
-
|
100 |
-
/**
|
101 |
-
* Init method:
|
102 |
-
* - default options
|
103 |
-
*
|
104 |
-
* @access public
|
105 |
-
* @since 1.0.0
|
106 |
-
*/
|
107 |
-
public function init() {
|
108 |
-
|
109 |
-
$this->_image_sizes();
|
110 |
-
|
111 |
-
/* === Show Plugin Information === */
|
112 |
-
|
113 |
-
add_filter( 'plugin_action_links_' . plugin_basename( YITH_YWZM_DIR . '/' . basename( YITH_YWZM_FILE ) ), array( $this, 'action_links' ) );
|
114 |
-
|
115 |
-
add_filter( 'yith_show_plugin_row_meta', array( $this, 'plugin_row_meta' ), 10, 5 );
|
116 |
-
|
117 |
-
}
|
118 |
-
|
119 |
-
|
120 |
-
/**
|
121 |
-
* Add image sizes
|
122 |
-
*
|
123 |
-
* Init images
|
124 |
-
*
|
125 |
-
* @access protected
|
126 |
-
* @return void
|
127 |
-
* @since 1.0.0
|
128 |
-
*/
|
129 |
-
protected function _image_sizes() {
|
130 |
-
$size = get_option( 'woocommerce_magnifier_image' );
|
131 |
-
$width = $size['width'];
|
132 |
-
$height = $size['height'];
|
133 |
-
$crop = isset( $size['crop'] ) ? true : false;
|
134 |
-
|
135 |
-
add_image_size( 'shop_magnifier', $width, $height, $crop );
|
136 |
-
}
|
137 |
-
|
138 |
-
/**
|
139 |
-
* Action links
|
140 |
-
*
|
141 |
-
*
|
142 |
-
* @return void
|
143 |
-
* @since 1.3.5
|
144 |
-
* @author Daniel Sanchez <daniel.sanchez@yithemes.com>
|
145 |
-
*/
|
146 |
-
public function action_links( $links ) {
|
147 |
-
$links = yith_add_action_links( $links, $this->_panel_page, false );
|
148 |
-
return $links;
|
149 |
-
}
|
150 |
-
/**
|
151 |
-
* Plugin Row Meta
|
152 |
-
*
|
153 |
-
*
|
154 |
-
* @return void
|
155 |
-
* @since 1.3.5
|
156 |
-
* @author Daniel Sanchez <daniel.sanchez@yithemes.com>
|
157 |
-
*/
|
158 |
-
public function plugin_row_meta( $new_row_meta_args, $plugin_meta, $plugin_file, $plugin_data, $status, $init_file = 'YITH_YWZM_FREE_INIT' ) {
|
159 |
-
if ( defined( $init_file ) && constant( $init_file ) == $plugin_file ) {
|
160 |
-
$new_row_meta_args['slug'] = YITH_YWZM_SLUG;
|
161 |
-
}
|
162 |
-
|
163 |
-
return $new_row_meta_args;
|
164 |
-
}
|
165 |
-
|
166 |
-
}
|
167 |
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Main class
|
4 |
+
*
|
5 |
+
* @author Your Inspiration Themes
|
6 |
+
* @package YITH WooCommerce Zoom Magnifier
|
7 |
+
* @version 1.1.2
|
8 |
+
*/
|
9 |
+
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
+
exit;
|
12 |
+
} // Exit if accessed directly
|
13 |
+
|
14 |
+
|
15 |
+
if ( ! class_exists( 'YITH_WooCommerce_Zoom_Magnifier' ) ) {
|
16 |
+
/**
|
17 |
+
* YITH WooCommerce Zoom Magnifier
|
18 |
+
*
|
19 |
+
* @since 1.0.0
|
20 |
+
*/
|
21 |
+
class YITH_WooCommerce_Zoom_Magnifier {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Plugin object
|
25 |
+
*
|
26 |
+
* @var string
|
27 |
+
* @since 1.0.0
|
28 |
+
*/
|
29 |
+
public $obj = null;
|
30 |
+
|
31 |
+
/**
|
32 |
+
* @var string Premium version landing link
|
33 |
+
*/
|
34 |
+
protected $_premium_landing = 'http://yithemes.com/themes/plugins/yith-woocommerce-zoom-magnifier/';
|
35 |
+
|
36 |
+
/**
|
37 |
+
* @var string Plugin official documentation
|
38 |
+
*/
|
39 |
+
protected $_official_documentation = 'https://docs.yithemes.com/yith-woocommerce-zoom-magnifier/';
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @var string Plugin panel page
|
43 |
+
*/
|
44 |
+
protected $_panel_page = 'yith_woocommerce_zoom-magnifier_panel';
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Constructor
|
48 |
+
*
|
49 |
+
* @return mixed|YITH_WCMG_Admin|YITH_WCMG_Frontend
|
50 |
+
* @since 1.0.0
|
51 |
+
*/
|
52 |
+
public function __construct() {
|
53 |
+
/** Stop the plugin on mobile devices */
|
54 |
+
if ( ( 'yes' != get_option( 'yith_wcmg_enable_mobile' ) ) && wp_is_mobile() ) {
|
55 |
+
return;
|
56 |
+
}
|
57 |
+
|
58 |
+
add_action( 'wp_ajax_nopriv_yith_wc_zoom_magnifier_get_main_image', array(
|
59 |
+
$this,
|
60 |
+
'yith_wc_zoom_magnifier_get_main_image_call_back'
|
61 |
+
), 10 );
|
62 |
+
|
63 |
+
add_action( 'wp_ajax_yith_wc_zoom_magnifier_get_main_image', array(
|
64 |
+
$this,
|
65 |
+
'yith_wc_zoom_magnifier_get_main_image_call_back'
|
66 |
+
), 10 );
|
67 |
+
|
68 |
+
// actions
|
69 |
+
add_action( 'init', array( $this, 'init' ) );
|
70 |
+
|
71 |
+
if ( is_admin() && ( ! isset( $_REQUEST['action'] ) || ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] != 'yith_load_product_quick_view' ) ) ) {
|
72 |
+
$this->obj = new YITH_WCMG_Admin( );
|
73 |
+
} else {
|
74 |
+
$this->obj = new YITH_WCMG_Frontend( );
|
75 |
+
}
|
76 |
+
|
77 |
+
return $this->obj;
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Ajax method to retrieve the product main imavge
|
82 |
+
*
|
83 |
+
* @access public
|
84 |
+
* @author Daniel Sanchez Saez
|
85 |
+
* @since 1.3.3
|
86 |
+
*/
|
87 |
+
public function yith_wc_zoom_magnifier_get_main_image_call_back(){
|
88 |
+
|
89 |
+
$product_id = ( isset( $_POST[ 'product_id' ] ) ? $_POST[ 'product_id' ] : 0 );
|
90 |
+
|
91 |
+
$url = wp_get_attachment_image_src ( get_post_thumbnail_id ( $product_id ), "full" );
|
92 |
+
|
93 |
+
$response = array(
|
94 |
+
"url" => $url[ 0 ],
|
95 |
+
);
|
96 |
+
wp_send_json( $response );
|
97 |
+
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Init method:
|
102 |
+
* - default options
|
103 |
+
*
|
104 |
+
* @access public
|
105 |
+
* @since 1.0.0
|
106 |
+
*/
|
107 |
+
public function init() {
|
108 |
+
|
109 |
+
$this->_image_sizes();
|
110 |
+
|
111 |
+
/* === Show Plugin Information === */
|
112 |
+
|
113 |
+
add_filter( 'plugin_action_links_' . plugin_basename( YITH_YWZM_DIR . '/' . basename( YITH_YWZM_FILE ) ), array( $this, 'action_links' ) );
|
114 |
+
|
115 |
+
add_filter( 'yith_show_plugin_row_meta', array( $this, 'plugin_row_meta' ), 10, 5 );
|
116 |
+
|
117 |
+
}
|
118 |
+
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Add image sizes
|
122 |
+
*
|
123 |
+
* Init images
|
124 |
+
*
|
125 |
+
* @access protected
|
126 |
+
* @return void
|
127 |
+
* @since 1.0.0
|
128 |
+
*/
|
129 |
+
protected function _image_sizes() {
|
130 |
+
$size = get_option( 'woocommerce_magnifier_image' );
|
131 |
+
$width = $size['width'];
|
132 |
+
$height = $size['height'];
|
133 |
+
$crop = isset( $size['crop'] ) ? true : false;
|
134 |
+
|
135 |
+
add_image_size( 'shop_magnifier', $width, $height, $crop );
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Action links
|
140 |
+
*
|
141 |
+
*
|
142 |
+
* @return void
|
143 |
+
* @since 1.3.5
|
144 |
+
* @author Daniel Sanchez <daniel.sanchez@yithemes.com>
|
145 |
+
*/
|
146 |
+
public function action_links( $links ) {
|
147 |
+
$links = yith_add_action_links( $links, $this->_panel_page, false );
|
148 |
+
return $links;
|
149 |
+
}
|
150 |
+
/**
|
151 |
+
* Plugin Row Meta
|
152 |
+
*
|
153 |
+
*
|
154 |
+
* @return void
|
155 |
+
* @since 1.3.5
|
156 |
+
* @author Daniel Sanchez <daniel.sanchez@yithemes.com>
|
157 |
+
*/
|
158 |
+
public function plugin_row_meta( $new_row_meta_args, $plugin_meta, $plugin_file, $plugin_data, $status, $init_file = 'YITH_YWZM_FREE_INIT' ) {
|
159 |
+
if ( defined( $init_file ) && constant( $init_file ) == $plugin_file ) {
|
160 |
+
$new_row_meta_args['slug'] = YITH_YWZM_SLUG;
|
161 |
+
}
|
162 |
+
|
163 |
+
return $new_row_meta_args;
|
164 |
+
}
|
165 |
+
|
166 |
+
}
|
167 |
}
|
lib/class.yith-ywzm-custom-types.php
CHANGED
@@ -1,181 +1,181 @@
|
|
1 |
-
<?php
|
2 |
-
if (!defined('ABSPATH')) {
|
3 |
-
exit; // Exit if accessed directly
|
4 |
-
}
|
5 |
-
|
6 |
-
if (!class_exists('YITH_YWZM_Custom_Types')) {
|
7 |
-
|
8 |
-
/**
|
9 |
-
* custom types fields
|
10 |
-
*
|
11 |
-
* @class YITH_YWZM_Custom_Types
|
12 |
-
* @package Yithemes
|
13 |
-
* @since 1.0.0
|
14 |
-
* @author Your Inspiration Themes
|
15 |
-
*/
|
16 |
-
class YITH_YWZM_Custom_Types
|
17 |
-
{
|
18 |
-
|
19 |
-
/**
|
20 |
-
* Single instance of the class
|
21 |
-
*
|
22 |
-
* @since 1.0.0
|
23 |
-
*/
|
24 |
-
protected static $instance;
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Returns single instance of the class
|
28 |
-
*
|
29 |
-
* @since 1.0.0
|
30 |
-
*/
|
31 |
-
public static function get_instance()
|
32 |
-
{
|
33 |
-
if (is_null(self::$instance)) {
|
34 |
-
self::$instance = new self();
|
35 |
-
}
|
36 |
-
|
37 |
-
return self::$instance;
|
38 |
-
}
|
39 |
-
|
40 |
-
public function __construct()
|
41 |
-
{
|
42 |
-
/**
|
43 |
-
* Register actions and filters for custom types used on the current plugin
|
44 |
-
*/
|
45 |
-
|
46 |
-
/** Custom types : slider */
|
47 |
-
add_action('woocommerce_admin_field_slider', array($this, 'admin_fields_slider'));
|
48 |
-
|
49 |
-
add_action('woocommerce_admin_field_yith_ywzm_image_width', array(
|
50 |
-
$this,
|
51 |
-
'admin_fields_yith_ywzm_image_width'
|
52 |
-
));
|
53 |
-
}
|
54 |
-
|
55 |
-
/**
|
56 |
-
* Create new Woocommerce admin field: slider
|
57 |
-
*
|
58 |
-
* @access public
|
59 |
-
*
|
60 |
-
* @param array $value
|
61 |
-
*
|
62 |
-
* @return void
|
63 |
-
* @since 1.0.0
|
64 |
-
*/
|
65 |
-
public function admin_fields_slider($value)
|
66 |
-
{
|
67 |
-
$slider_value = (get_option($value['id']) !== false && get_option($value['id']) !== null) ?
|
68 |
-
esc_attr(stripslashes(get_option($value['id']))) :
|
69 |
-
esc_attr($value['std']);
|
70 |
-
|
71 |
-
?>
|
72 |
-
<tr valign="top">
|
73 |
-
<th scope="row" class="titledesc">
|
74 |
-
<label for="<?php echo esc_attr($value['id']); ?>"><?php echo $value['name']; ?></label>
|
75 |
-
</th>
|
76 |
-
<td class="forminp">
|
77 |
-
<div id="<?php echo esc_attr($value['id']); ?>_slider" class="yith_woocommerce_slider"
|
78 |
-
style="width: 300px; float: left;"></div>
|
79 |
-
<div id="<?php echo esc_attr($value['id']); ?>_value"
|
80 |
-
class="yith_woocommerce_slider_value ui-state-default ui-corner-all"><?php echo $slider_value ?></div>
|
81 |
-
<input name="<?php echo esc_attr($value['id']); ?>" id="<?php echo esc_attr($value['id']); ?>"
|
82 |
-
type="hidden" value="<?php echo $slider_value ?>"/> <?php echo $value['desc']; ?>
|
83 |
-
</td>
|
84 |
-
</tr>
|
85 |
-
|
86 |
-
|
87 |
-
<script>
|
88 |
-
jQuery(document).ready(function ($) {
|
89 |
-
$('#<?php echo esc_attr( $value['id'] ); ?>_slider').slider({
|
90 |
-
min: <?php echo $value['min'] ?>,
|
91 |
-
max: <?php echo $value['max'] ?>,
|
92 |
-
step: <?php echo $value['step'] ?>,
|
93 |
-
value: <?php echo $slider_value ?>,
|
94 |
-
slide: function (event, ui) {
|
95 |
-
$("#<?php echo esc_attr( $value['id'] ); ?>").val(ui.value);
|
96 |
-
$("#<?php echo esc_attr( $value['id'] ); ?>_value").text(ui.value);
|
97 |
-
}
|
98 |
-
});
|
99 |
-
});
|
100 |
-
</script>
|
101 |
-
|
102 |
-
<?php
|
103 |
-
}
|
104 |
-
|
105 |
-
/**
|
106 |
-
* Save the admin field: slider
|
107 |
-
*
|
108 |
-
* @access public
|
109 |
-
*
|
110 |
-
* @param mixed $value
|
111 |
-
*
|
112 |
-
* @return void
|
113 |
-
* @since 1.0.0
|
114 |
-
*/
|
115 |
-
public function admin_update_option($value)
|
116 |
-
{
|
117 |
-
global $woocommerce;
|
118 |
-
|
119 |
-
if (version_compare(preg_replace('/-beta-([0-9]+)/', '', $woocommerce->version), '2.1', '<')) {
|
120 |
-
$wc_clean = 'woocommerce_clean';
|
121 |
-
} else {
|
122 |
-
$wc_clean = 'wc_clean';
|
123 |
-
}
|
124 |
-
|
125 |
-
update_option($value['id'], $wc_clean($_POST[$value['id']]));
|
126 |
-
}
|
127 |
-
|
128 |
-
|
129 |
-
/**
|
130 |
-
* Create new Woocommerce admin field: yith_ywzm_image_width
|
131 |
-
*
|
132 |
-
* @access public
|
133 |
-
* @param array $value
|
134 |
-
* @return void
|
135 |
-
* @since 1.1.3
|
136 |
-
*/
|
137 |
-
public function admin_fields_yith_ywzm_image_width($value)
|
138 |
-
{
|
139 |
-
|
140 |
-
$width = WC_Admin_Settings::get_option($value['id'] . '[width]', $value['default']['width']);
|
141 |
-
$height = WC_Admin_Settings::get_option($value['id'] . '[height]', $value['default']['height']);
|
142 |
-
$crop = WC_Admin_Settings::get_option($value['id'] . '[crop]');
|
143 |
-
$crop = ($crop == 'on' || $crop == '1') ? 1 : 0;
|
144 |
-
$crop = checked(1, $crop, false);
|
145 |
-
|
146 |
-
?>
|
147 |
-
<tr valign="top">
|
148 |
-
<th scope="row" class="titledesc"><?php echo esc_html($value['title']) ?></th>
|
149 |
-
<td class="forminp image_width_settings">
|
150 |
-
<input name="<?php echo esc_attr($value['id']); ?>[width]"
|
151 |
-
id="<?php echo esc_attr($value['id']); ?>-width" type="text" size="3"
|
152 |
-
value="<?php echo $width; ?>"/> × <input
|
153 |
-
name="<?php echo esc_attr($value['id']); ?>[height]"
|
154 |
-
id="<?php echo esc_attr($value['id']); ?>-height" type="text" size="3"
|
155 |
-
value="<?php echo $height; ?>"/>px <span class="description"><?php echo $value['desc'] ?></span>
|
156 |
-
<br>
|
157 |
-
<label><input name="<?php echo esc_attr($value['id']); ?>[crop]"
|
158 |
-
id="<?php echo esc_attr($value['id']); ?>-crop"
|
159 |
-
type="checkbox" <?php echo $crop; ?> /> <?php _e('Do you want to hard crop the image?', 'woocommerce'); ?>
|
160 |
-
</label>
|
161 |
-
|
162 |
-
</td>
|
163 |
-
</tr><?php
|
164 |
-
|
165 |
-
}
|
166 |
-
|
167 |
-
/**
|
168 |
-
* Update plugin options.
|
169 |
-
*
|
170 |
-
* @return void
|
171 |
-
* @since 1.0.0
|
172 |
-
*/
|
173 |
-
public function update_options()
|
174 |
-
{
|
175 |
-
foreach ($this->options as $option) {
|
176 |
-
woocommerce_update_options($option);
|
177 |
-
}
|
178 |
-
}
|
179 |
-
|
180 |
-
}
|
181 |
}
|
1 |
+
<?php
|
2 |
+
if (!defined('ABSPATH')) {
|
3 |
+
exit; // Exit if accessed directly
|
4 |
+
}
|
5 |
+
|
6 |
+
if (!class_exists('YITH_YWZM_Custom_Types')) {
|
7 |
+
|
8 |
+
/**
|
9 |
+
* custom types fields
|
10 |
+
*
|
11 |
+
* @class YITH_YWZM_Custom_Types
|
12 |
+
* @package Yithemes
|
13 |
+
* @since 1.0.0
|
14 |
+
* @author Your Inspiration Themes
|
15 |
+
*/
|
16 |
+
class YITH_YWZM_Custom_Types
|
17 |
+
{
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Single instance of the class
|
21 |
+
*
|
22 |
+
* @since 1.0.0
|
23 |
+
*/
|
24 |
+
protected static $instance;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Returns single instance of the class
|
28 |
+
*
|
29 |
+
* @since 1.0.0
|
30 |
+
*/
|
31 |
+
public static function get_instance()
|
32 |
+
{
|
33 |
+
if (is_null(self::$instance)) {
|
34 |
+
self::$instance = new self();
|
35 |
+
}
|
36 |
+
|
37 |
+
return self::$instance;
|
38 |
+
}
|
39 |
+
|
40 |
+
public function __construct()
|
41 |
+
{
|
42 |
+
/**
|
43 |
+
* Register actions and filters for custom types used on the current plugin
|
44 |
+
*/
|
45 |
+
|
46 |
+
/** Custom types : slider */
|
47 |
+
add_action('woocommerce_admin_field_slider', array($this, 'admin_fields_slider'));
|
48 |
+
|
49 |
+
add_action('woocommerce_admin_field_yith_ywzm_image_width', array(
|
50 |
+
$this,
|
51 |
+
'admin_fields_yith_ywzm_image_width'
|
52 |
+
));
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Create new Woocommerce admin field: slider
|
57 |
+
*
|
58 |
+
* @access public
|
59 |
+
*
|
60 |
+
* @param array $value
|
61 |
+
*
|
62 |
+
* @return void
|
63 |
+
* @since 1.0.0
|
64 |
+
*/
|
65 |
+
public function admin_fields_slider($value)
|
66 |
+
{
|
67 |
+
$slider_value = (get_option($value['id']) !== false && get_option($value['id']) !== null) ?
|
68 |
+
esc_attr(stripslashes(get_option($value['id']))) :
|
69 |
+
esc_attr($value['std']);
|
70 |
+
|
71 |
+
?>
|
72 |
+
<tr valign="top">
|
73 |
+
<th scope="row" class="titledesc">
|
74 |
+
<label for="<?php echo esc_attr($value['id']); ?>"><?php echo $value['name']; ?></label>
|
75 |
+
</th>
|
76 |
+
<td class="forminp">
|
77 |
+
<div id="<?php echo esc_attr($value['id']); ?>_slider" class="yith_woocommerce_slider"
|
78 |
+
style="width: 300px; float: left;"></div>
|
79 |
+
<div id="<?php echo esc_attr($value['id']); ?>_value"
|
80 |
+
class="yith_woocommerce_slider_value ui-state-default ui-corner-all"><?php echo $slider_value ?></div>
|
81 |
+
<input name="<?php echo esc_attr($value['id']); ?>" id="<?php echo esc_attr($value['id']); ?>"
|
82 |
+
type="hidden" value="<?php echo $slider_value ?>"/> <?php echo $value['desc']; ?>
|
83 |
+
</td>
|
84 |
+
</tr>
|
85 |
+
|
86 |
+
|
87 |
+
<script>
|
88 |
+
jQuery(document).ready(function ($) {
|
89 |
+
$('#<?php echo esc_attr( $value['id'] ); ?>_slider').slider({
|
90 |
+
min: <?php echo $value['min'] ?>,
|
91 |
+
max: <?php echo $value['max'] ?>,
|
92 |
+
step: <?php echo $value['step'] ?>,
|
93 |
+
value: <?php echo $slider_value ?>,
|
94 |
+
slide: function (event, ui) {
|
95 |
+
$("#<?php echo esc_attr( $value['id'] ); ?>").val(ui.value);
|
96 |
+
$("#<?php echo esc_attr( $value['id'] ); ?>_value").text(ui.value);
|
97 |
+
}
|
98 |
+
});
|
99 |
+
});
|
100 |
+
</script>
|
101 |
+
|
102 |
+
<?php
|
103 |
+
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Save the admin field: slider
|
107 |
+
*
|
108 |
+
* @access public
|
109 |
+
*
|
110 |
+
* @param mixed $value
|
111 |
+
*
|
112 |
+
* @return void
|
113 |
+
* @since 1.0.0
|
114 |
+
*/
|
115 |
+
public function admin_update_option($value)
|
116 |
+
{
|
117 |
+
global $woocommerce;
|
118 |
+
|
119 |
+
if (version_compare(preg_replace('/-beta-([0-9]+)/', '', $woocommerce->version), '2.1', '<')) {
|
120 |
+
$wc_clean = 'woocommerce_clean';
|
121 |
+
} else {
|
122 |
+
$wc_clean = 'wc_clean';
|
123 |
+
}
|
124 |
+
|
125 |
+
update_option($value['id'], $wc_clean($_POST[$value['id']]));
|
126 |
+
}
|
127 |
+
|
128 |
+
|
129 |
+
/**
|
130 |
+
* Create new Woocommerce admin field: yith_ywzm_image_width
|
131 |
+
*
|
132 |
+
* @access public
|
133 |
+
* @param array $value
|
134 |
+
* @return void
|
135 |
+
* @since 1.1.3
|
136 |
+
*/
|
137 |
+
public function admin_fields_yith_ywzm_image_width($value)
|
138 |
+
{
|
139 |
+
|
140 |
+
$width = WC_Admin_Settings::get_option($value['id'] . '[width]', $value['default']['width']);
|
141 |
+
$height = WC_Admin_Settings::get_option($value['id'] . '[height]', $value['default']['height']);
|
142 |
+
$crop = WC_Admin_Settings::get_option($value['id'] . '[crop]');
|
143 |
+
$crop = ($crop == 'on' || $crop == '1') ? 1 : 0;
|
144 |
+
$crop = checked(1, $crop, false);
|
145 |
+
|
146 |
+
?>
|
147 |
+
<tr valign="top">
|
148 |
+
<th scope="row" class="titledesc"><?php echo esc_html($value['title']) ?></th>
|
149 |
+
<td class="forminp image_width_settings">
|
150 |
+
<input name="<?php echo esc_attr($value['id']); ?>[width]"
|
151 |
+
id="<?php echo esc_attr($value['id']); ?>-width" type="text" size="3"
|
152 |
+
value="<?php echo $width; ?>"/> × <input
|
153 |
+
name="<?php echo esc_attr($value['id']); ?>[height]"
|
154 |
+
id="<?php echo esc_attr($value['id']); ?>-height" type="text" size="3"
|
155 |
+
value="<?php echo $height; ?>"/>px <span class="description"><?php echo $value['desc'] ?></span>
|
156 |
+
<br>
|
157 |
+
<label><input name="<?php echo esc_attr($value['id']); ?>[crop]"
|
158 |
+
id="<?php echo esc_attr($value['id']); ?>-crop"
|
159 |
+
type="checkbox" <?php echo $crop; ?> /> <?php _e('Do you want to hard crop the image?', 'woocommerce'); ?>
|
160 |
+
</label>
|
161 |
+
|
162 |
+
</td>
|
163 |
+
</tr><?php
|
164 |
+
|
165 |
+
}
|
166 |
+
|
167 |
+
/**
|
168 |
+
* Update plugin options.
|
169 |
+
*
|
170 |
+
* @return void
|
171 |
+
* @since 1.0.0
|
172 |
+
*/
|
173 |
+
public function update_options()
|
174 |
+
{
|
175 |
+
foreach ($this->options as $option) {
|
176 |
+
woocommerce_update_options($option);
|
177 |
+
}
|
178 |
+
}
|
179 |
+
|
180 |
+
}
|
181 |
}
|
lib/class.yith-ywzm-plugin-fw-loader.php
CHANGED
@@ -1,250 +1,250 @@
|
|
1 |
-
<?php
|
2 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
-
exit; // Exit if accessed directly
|
4 |
-
}
|
5 |
-
|
6 |
-
if ( ! class_exists( 'YITH_YWZM_Plugin_FW_Loader' ) ) {
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Implements features related to an invoice document
|
10 |
-
*
|
11 |
-
* @class YITH_YWZM_Plugin_FW_Loader
|
12 |
-
* @package Yithemes
|
13 |
-
* @since 1.0.0
|
14 |
-
* @author Lorenzo Giuffrida
|
15 |
-
*/
|
16 |
-
class YITH_YWZM_Plugin_FW_Loader {
|
17 |
-
|
18 |
-
/**
|
19 |
-
* @var $_panel Panel Object
|
20 |
-
*/
|
21 |
-
protected $_panel;
|
22 |
-
|
23 |
-
/**
|
24 |
-
* @var $_premium string Premium tab template file name
|
25 |
-
*/
|
26 |
-
protected $_premium = 'premium.php';
|
27 |
-
|
28 |
-
/**
|
29 |
-
* @var string Premium version landing link
|
30 |
-
*/
|
31 |
-
protected $_premium_landing = 'http://yithemes.com/themes/plugins/yith-woocommerce-zoom-magnifier/';
|
32 |
-
|
33 |
-
/**
|
34 |
-
* @var string Plugin official documentation
|
35 |
-
*/
|
36 |
-
protected $_official_documentation = 'https://docs.yithemes.com/yith-woocommerce-zoom-magnifier/';
|
37 |
-
|
38 |
-
/**
|
39 |
-
* @var string Plugin panel page
|
40 |
-
*/
|
41 |
-
protected $_panel_page = 'yith_woocommerce_zoom-magnifier_panel';
|
42 |
-
|
43 |
-
/**
|
44 |
-
* Single instance of the class
|
45 |
-
*
|
46 |
-
* @since 1.0.0
|
47 |
-
*/
|
48 |
-
protected static $instance;
|
49 |
-
|
50 |
-
/**
|
51 |
-
* Returns single instance of the class
|
52 |
-
*
|
53 |
-
* @since 1.0.0
|
54 |
-
*/
|
55 |
-
public static function get_instance() {
|
56 |
-
if ( is_null( self::$instance ) ) {
|
57 |
-
self::$instance = new self();
|
58 |
-
}
|
59 |
-
|
60 |
-
return self::$instance;
|
61 |
-
}
|
62 |
-
|
63 |
-
public function __construct() {
|
64 |
-
/**
|
65 |
-
* Register actions and filters to be used for creating an entry on YIT Plugin menu
|
66 |
-
*/
|
67 |
-
add_action( 'admin_init', array( $this, 'register_pointer' ) );
|
68 |
-
|
69 |
-
add_action( 'plugins_loaded', array( $this, 'plugin_fw_loader' ), 15 );
|
70 |
-
|
71 |
-
// Add stylesheets and scripts files
|
72 |
-
add_action( 'admin_menu', array( $this, 'register_panel' ), 5 );
|
73 |
-
|
74 |
-
if ( ! defined( 'YITH_YWZM_PREMIUM' ) ) {
|
75 |
-
// Show plugin premium tab
|
76 |
-
add_action( 'yith_zoom_magnifier_premium', array( $this, 'premium_tab' ) );
|
77 |
-
} else {
|
78 |
-
|
79 |
-
/**
|
80 |
-
* register plugin to licence/update system
|
81 |
-
*/
|
82 |
-
$this->licence_activation();
|
83 |
-
}
|
84 |
-
}
|
85 |
-
|
86 |
-
|
87 |
-
/**
|
88 |
-
* Load YIT core plugin
|
89 |
-
*
|
90 |
-
* @since 1.0
|
91 |
-
* @access public
|
92 |
-
* @return void
|
93 |
-
* @author Andrea Grillo <andrea.grillo@yithemes.com>
|
94 |
-
*/
|
95 |
-
public function plugin_fw_loader() {
|
96 |
-
if ( !defined( 'YIT_CORE_PLUGIN' ) ) {
|
97 |
-
global $plugin_fw_data;
|
98 |
-
if ( !empty( $plugin_fw_data ) ) {
|
99 |
-
$plugin_fw_file = array_shift( $plugin_fw_data );
|
100 |
-
require_once( $plugin_fw_file );
|
101 |
-
}
|
102 |
-
}
|
103 |
-
}
|
104 |
-
|
105 |
-
/**
|
106 |
-
* Add a panel under YITH Plugins tab
|
107 |
-
*
|
108 |
-
* @return void
|
109 |
-
* @since 1.0
|
110 |
-
* @author Andrea Grillo <andrea.grillo@yithemes.com>
|
111 |
-
* @use /Yit_Plugin_Panel class
|
112 |
-
* @see plugin-fw/lib/yit-plugin-panel.php
|
113 |
-
*/
|
114 |
-
public function register_panel() {
|
115 |
-
|
116 |
-
if ( ! empty( $this->_panel ) ) {
|
117 |
-
return;
|
118 |
-
}
|
119 |
-
|
120 |
-
$admin_tabs['general'] = __( 'General', 'yith-woocommerce-zoom-magnifier' );
|
121 |
-
|
122 |
-
if ( ! defined( 'YITH_YWZM_PREMIUM' ) ) {
|
123 |
-
$admin_tabs['premium-landing'] = __( 'Premium Version', 'yith-woocommerce-zoom-magnifier' );
|
124 |
-
} else {
|
125 |
-
$admin_tabs['exclusions'] = __( 'Product exclusion list', 'yith-woocommerce-zoom-magnifier' );
|
126 |
-
}
|
127 |
-
|
128 |
-
$args = array(
|
129 |
-
'create_menu_page' => true,
|
130 |
-
'parent_slug' => '',
|
131 |
-
'page_title' => 'Zoom magnifier',
|
132 |
-
'menu_title' => 'Zoom magnifier',
|
133 |
-
'capability' => 'manage_options',
|
134 |
-
'parent' => '',
|
135 |
-
'parent_page' => 'yit_plugin_panel',
|
136 |
-
'page' => $this->_panel_page,
|
137 |
-
'admin-tabs' => $admin_tabs,
|
138 |
-
'options-path' => YITH_YWZM_DIR . '/plugin-options'
|
139 |
-
);
|
140 |
-
|
141 |
-
/* === Fixed: not updated theme === */
|
142 |
-
if ( ! class_exists( 'YIT_Plugin_Panel_WooCommerce' ) ) {
|
143 |
-
|
144 |
-
require_once( 'plugin-fw/lib/yit-plugin-panel-wc.php' );
|
145 |
-
}
|
146 |
-
|
147 |
-
$this->_panel = new YIT_Plugin_Panel_WooCommerce( $args );
|
148 |
-
|
149 |
-
/** Add custom types actions and filters */
|
150 |
-
YITH_YWZM_Custom_Types::get_instance();
|
151 |
-
}
|
152 |
-
|
153 |
-
/**
|
154 |
-
* Premium Tab Template
|
155 |
-
*
|
156 |
-
* Load the premium tab template on admin page
|
157 |
-
*
|
158 |
-
* @return void
|
159 |
-
* @since 1.0
|
160 |
-
* @author Andrea Grillo <andrea.grillo@yithemes.com>
|
161 |
-
* @return void
|
162 |
-
*/
|
163 |
-
public function premium_tab() {
|
164 |
-
$premium_tab_template = YITH_YWZM_TEMPLATE_DIR . '/admin/' . $this->_premium;
|
165 |
-
if ( file_exists( $premium_tab_template ) ) {
|
166 |
-
include_once( $premium_tab_template );
|
167 |
-
}
|
168 |
-
}
|
169 |
-
|
170 |
-
public function register_pointer() {
|
171 |
-
if ( ! class_exists( 'YIT_Pointers' ) ) {
|
172 |
-
include_once( 'plugin-fw/lib/yit-pointers.php' );
|
173 |
-
}
|
174 |
-
|
175 |
-
$premium_message = defined( 'YITH_YWZM_PREMIUM' )
|
176 |
-
? ''
|
177 |
-
: __( 'YITH WooCommerce Zoom Magnifier is available in an outstanding PREMIUM version with many new options, discover it now.', 'yith-woocommerce-zoom-magnifier' ) .
|
178 |
-
' <a href="' . $this->_premium_landing . '">' . __( 'Premium version', 'yith-woocommerce-zoom-magnifier' ) . '</a>';
|
179 |
-
|
180 |
-
$args[] = array(
|
181 |
-
'screen_id' => 'plugins',
|
182 |
-
'pointer_id' => 'yith_woocommerce_zoom-magnifier',
|
183 |
-
'target' => '#toplevel_page_yit_plugin_panel',
|
184 |
-
'content' => sprintf( '<h3> %s </h3> <p> %s </p>',
|
185 |
-
__( 'YITH WooCommerce Zoom Magnifier', 'yith-woocommerce-zoom-magnifier' ),
|
186 |
-
__( 'In YIT Plugins tab you can find YITH WooCommerce Zoom Magnifier options.<br> From this menu you can access all settings of the YITH plugins activated.', 'yith-woocommerce-zoom-magnifier' ) . '<br>' . $premium_message
|
187 |
-
),
|
188 |
-
'position' => array( 'edge' => 'left', 'align' => 'center' ),
|
189 |
-
'init' => defined( 'YITH_YWZM_PREMIUM' ) ? YITH_YWZM_INIT : YITH_YWZM_FREE_INIT
|
190 |
-
);
|
191 |
-
|
192 |
-
YIT_Pointers()->register( $args );
|
193 |
-
}
|
194 |
-
|
195 |
-
/**
|
196 |
-
* Get the premium landing uri
|
197 |
-
*
|
198 |
-
* @since 1.0.0
|
199 |
-
* @author Andrea Grillo <andrea.grillo@yithemes.com>
|
200 |
-
* @return string The premium landing link
|
201 |
-
*/
|
202 |
-
public function get_premium_landing_uri() {
|
203 |
-
return defined( 'YITH_REFER_ID' ) ? $this->_premium_landing . '?refer_id=' . YITH_REFER_ID : $this->_premium_landing . '?refer_id=1030585';
|
204 |
-
}
|
205 |
-
|
206 |
-
//region **** licence related methods ****
|
207 |
-
|
208 |
-
/**
|
209 |
-
* Add actions to manage licence activation and updates
|
210 |
-
*/
|
211 |
-
public function licence_activation() {
|
212 |
-
if ( ! defined( 'YITH_YWZM_PREMIUM' ) ) {
|
213 |
-
return;
|
214 |
-
}
|
215 |
-
|
216 |
-
add_action( 'wp_loaded', array( $this, 'register_plugin_for_activation' ), 99 );
|
217 |
-
add_action( 'admin_init', array( $this, 'register_plugin_for_updates' ) );
|
218 |
-
}
|
219 |
-
|
220 |
-
/**
|
221 |
-
* Register plugins for activation tab
|
222 |
-
*
|
223 |
-
* @return void
|
224 |
-
* @since 2.0.0
|
225 |
-
* @author Andrea Grillo <andrea.grillo@yithemes.com>
|
226 |
-
*/
|
227 |
-
public function register_plugin_for_activation() {
|
228 |
-
if ( ! class_exists( 'YIT_Plugin_Licence' ) ) {
|
229 |
-
require_once YITH_YWZM_DIR . '/plugin-fw/licence/lib/yit-licence.php';
|
230 |
-
require_once YITH_YWZM_DIR . '/plugin-fw/licence/lib/yit-plugin-licence.php';
|
231 |
-
}
|
232 |
-
YIT_Plugin_Licence()->register( YITH_YWZM_INIT, YITH_YWZM_SECRET_KEY, YITH_YWZM_SLUG );
|
233 |
-
}
|
234 |
-
|
235 |
-
/**
|
236 |
-
* Register plugins for update tab
|
237 |
-
*
|
238 |
-
* @return void
|
239 |
-
* @since 2.0.0
|
240 |
-
* @author Andrea Grillo <andrea.grillo@yithemes.com>
|
241 |
-
*/
|
242 |
-
public function register_plugin_for_updates() {
|
243 |
-
if ( ! class_exists( 'YIT_Upgrade' ) ) {
|
244 |
-
require_once 'plugin-fw/lib/yit-upgrade.php';
|
245 |
-
}
|
246 |
-
YIT_Upgrade()->register( YITH_YWZM_SLUG, YITH_YWZM_INIT );
|
247 |
-
}
|
248 |
-
//endregion
|
249 |
-
}
|
250 |
}
|
1 |
+
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit; // Exit if accessed directly
|
4 |
+
}
|
5 |
+
|
6 |
+
if ( ! class_exists( 'YITH_YWZM_Plugin_FW_Loader' ) ) {
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Implements features related to an invoice document
|
10 |
+
*
|
11 |
+
* @class YITH_YWZM_Plugin_FW_Loader
|
12 |
+
* @package Yithemes
|
13 |
+
* @since 1.0.0
|
14 |
+
* @author Lorenzo Giuffrida
|
15 |
+
*/
|
16 |
+
class YITH_YWZM_Plugin_FW_Loader {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* @var $_panel Panel Object
|
20 |
+
*/
|
21 |
+
protected $_panel;
|
22 |
+
|
23 |
+
/**
|
24 |
+
* @var $_premium string Premium tab template file name
|
25 |
+
*/
|
26 |
+
protected $_premium = 'premium.php';
|
27 |
+
|
28 |
+
/**
|
29 |
+
* @var string Premium version landing link
|
30 |
+
*/
|
31 |
+
protected $_premium_landing = 'http://yithemes.com/themes/plugins/yith-woocommerce-zoom-magnifier/';
|
32 |
+
|
33 |
+
/**
|
34 |
+
* @var string Plugin official documentation
|
35 |
+
*/
|
36 |
+
protected $_official_documentation = 'https://docs.yithemes.com/yith-woocommerce-zoom-magnifier/';
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @var string Plugin panel page
|
40 |
+
*/
|
41 |
+
protected $_panel_page = 'yith_woocommerce_zoom-magnifier_panel';
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Single instance of the class
|
45 |
+
*
|
46 |
+
* @since 1.0.0
|
47 |
+
*/
|
48 |
+
protected static $instance;
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Returns single instance of the class
|
52 |
+
*
|
53 |
+
* @since 1.0.0
|
54 |
+
*/
|
55 |
+
public static function get_instance() {
|
56 |
+
if ( is_null( self::$instance ) ) {
|
57 |
+
self::$instance = new self();
|
58 |
+
}
|
59 |
+
|
60 |
+
return self::$instance;
|
61 |
+
}
|
62 |
+
|
63 |
+
public function __construct() {
|
64 |
+
/**
|
65 |
+
* Register actions and filters to be used for creating an entry on YIT Plugin menu
|
66 |
+
*/
|
67 |
+
add_action( 'admin_init', array( $this, 'register_pointer' ) );
|
68 |
+
|
69 |
+
add_action( 'plugins_loaded', array( $this, 'plugin_fw_loader' ), 15 );
|
70 |
+
|
71 |
+
// Add stylesheets and scripts files
|
72 |
+
add_action( 'admin_menu', array( $this, 'register_panel' ), 5 );
|
73 |
+
|
74 |
+
if ( ! defined( 'YITH_YWZM_PREMIUM' ) ) {
|
75 |
+
// Show plugin premium tab
|
76 |
+
add_action( 'yith_zoom_magnifier_premium', array( $this, 'premium_tab' ) );
|
77 |
+
} else {
|
78 |
+
|
79 |
+
/**
|
80 |
+
* register plugin to licence/update system
|
81 |
+
*/
|
82 |
+
$this->licence_activation();
|
83 |
+
}
|
84 |
+
}
|
85 |
+
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Load YIT core plugin
|
89 |
+
*
|
90 |
+
* @since 1.0
|
91 |
+
* @access public
|
92 |
+
* @return void
|
93 |
+
* @author Andrea Grillo <andrea.grillo@yithemes.com>
|
94 |
+
*/
|
95 |
+
public function plugin_fw_loader() {
|
96 |
+
if ( !defined( 'YIT_CORE_PLUGIN' ) ) {
|
97 |
+
global $plugin_fw_data;
|
98 |
+
if ( !empty( $plugin_fw_data ) ) {
|
99 |
+
$plugin_fw_file = array_shift( $plugin_fw_data );
|
100 |
+
require_once( $plugin_fw_file );
|
101 |
+
}
|
102 |
+
}
|
103 |
+
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Add a panel under YITH Plugins tab
|
107 |
+
*
|
108 |
+
* @return void
|
109 |
+
* @since 1.0
|
110 |
+
* @author Andrea Grillo <andrea.grillo@yithemes.com>
|
111 |
+
* @use /Yit_Plugin_Panel class
|
112 |
+
* @see plugin-fw/lib/yit-plugin-panel.php
|
113 |
+
*/
|
114 |
+
public function register_panel() {
|
115 |
+
|
116 |
+
if ( ! empty( $this->_panel ) ) {
|
117 |
+
return;
|
118 |
+
}
|
119 |
+
|
120 |
+
$admin_tabs['general'] = __( 'General', 'yith-woocommerce-zoom-magnifier' );
|
121 |
+
|
122 |
+
if ( ! defined( 'YITH_YWZM_PREMIUM' ) ) {
|
123 |
+
$admin_tabs['premium-landing'] = __( 'Premium Version', 'yith-woocommerce-zoom-magnifier' );
|
124 |
+
} else {
|
125 |
+
$admin_tabs['exclusions'] = __( 'Product exclusion list', 'yith-woocommerce-zoom-magnifier' );
|
126 |
+
}
|
127 |
+
|
128 |
+
$args = array(
|
129 |
+
'create_menu_page' => true,
|
130 |
+
'parent_slug' => '',
|
131 |
+
'page_title' => 'Zoom magnifier',
|
132 |
+
'menu_title' => 'Zoom magnifier',
|
133 |
+
'capability' => 'manage_options',
|
134 |
+
'parent' => '',
|
135 |
+
'parent_page' => 'yit_plugin_panel',
|
136 |
+
'page' => $this->_panel_page,
|
137 |
+
'admin-tabs' => $admin_tabs,
|
138 |
+
'options-path' => YITH_YWZM_DIR . '/plugin-options'
|
139 |
+
);
|
140 |
+
|
141 |
+
/* === Fixed: not updated theme === */
|
142 |
+
if ( ! class_exists( 'YIT_Plugin_Panel_WooCommerce' ) ) {
|
143 |
+
|
144 |
+
require_once( 'plugin-fw/lib/yit-plugin-panel-wc.php' );
|
145 |
+
}
|
146 |
+
|
147 |
+
$this->_panel = new YIT_Plugin_Panel_WooCommerce( $args );
|
148 |
+
|
149 |
+
/** Add custom types actions and filters */
|
150 |
+
YITH_YWZM_Custom_Types::get_instance();
|
151 |
+
}
|
152 |
+
|
153 |
+
/**
|
154 |
+
* Premium Tab Template
|
155 |
+
*
|
156 |
+
* Load the premium tab template on admin page
|
157 |
+
*
|
158 |
+
* @return void
|
159 |
+
* @since 1.0
|
160 |
+
* @author Andrea Grillo <andrea.grillo@yithemes.com>
|
161 |
+
* @return void
|
162 |
+
*/
|
163 |
+
public function premium_tab() {
|
164 |
+
$premium_tab_template = YITH_YWZM_TEMPLATE_DIR . '/admin/' . $this->_premium;
|
165 |
+
if ( file_exists( $premium_tab_template ) ) {
|
166 |
+
include_once( $premium_tab_template );
|
167 |
+
}
|
168 |
+
}
|
169 |
+
|
170 |
+
public function register_pointer() {
|
171 |
+
if ( ! class_exists( 'YIT_Pointers' ) ) {
|
172 |
+
include_once( 'plugin-fw/lib/yit-pointers.php' );
|
173 |
+
}
|
174 |
+
|
175 |
+
$premium_message = defined( 'YITH_YWZM_PREMIUM' )
|
176 |
+
? ''
|
177 |
+
: __( 'YITH WooCommerce Zoom Magnifier is available in an outstanding PREMIUM version with many new options, discover it now.', 'yith-woocommerce-zoom-magnifier' ) .
|
178 |
+
' <a href="' . $this->_premium_landing . '">' . __( 'Premium version', 'yith-woocommerce-zoom-magnifier' ) . '</a>';
|
179 |
+
|
180 |
+
$args[] = array(
|
181 |
+
'screen_id' => 'plugins',
|
182 |
+
'pointer_id' => 'yith_woocommerce_zoom-magnifier',
|
183 |
+
'target' => '#toplevel_page_yit_plugin_panel',
|
184 |
+
'content' => sprintf( '<h3> %s </h3> <p> %s </p>',
|
185 |
+
__( 'YITH WooCommerce Zoom Magnifier', 'yith-woocommerce-zoom-magnifier' ),
|
186 |
+
__( 'In YIT Plugins tab you can find YITH WooCommerce Zoom Magnifier options.<br> From this menu you can access all settings of the YITH plugins activated.', 'yith-woocommerce-zoom-magnifier' ) . '<br>' . $premium_message
|
187 |
+
),
|
188 |
+
'position' => array( 'edge' => 'left', 'align' => 'center' ),
|
189 |
+
'init' => defined( 'YITH_YWZM_PREMIUM' ) ? YITH_YWZM_INIT : YITH_YWZM_FREE_INIT
|
190 |
+
);
|
191 |
+
|
192 |
+
YIT_Pointers()->register( $args );
|
193 |
+
}
|
194 |
+
|
195 |
+
/**
|
196 |
+
* Get the premium landing uri
|
197 |
+
*
|
198 |
+
* @since 1.0.0
|
199 |
+
* @author Andrea Grillo <andrea.grillo@yithemes.com>
|
200 |
+
* @return string The premium landing link
|
201 |
+
*/
|
202 |
+
public function get_premium_landing_uri() {
|
203 |
+
return defined( 'YITH_REFER_ID' ) ? $this->_premium_landing . '?refer_id=' . YITH_REFER_ID : $this->_premium_landing . '?refer_id=1030585';
|
204 |
+
}
|
205 |
+
|
206 |
+
//region **** licence related methods ****
|
207 |
+
|
208 |
+
/**
|
209 |
+
* Add actions to manage licence activation and updates
|
210 |
+
*/
|
211 |
+
public function licence_activation() {
|
212 |
+
if ( ! defined( 'YITH_YWZM_PREMIUM' ) ) {
|
213 |
+
return;
|
214 |
+
}
|
215 |
+
|
216 |
+
add_action( 'wp_loaded', array( $this, 'register_plugin_for_activation' ), 99 );
|
217 |
+
add_action( 'admin_init', array( $this, 'register_plugin_for_updates' ) );
|
218 |
+
}
|
219 |
+
|
220 |
+
/**
|
221 |
+
* Register plugins for activation tab
|
222 |
+
*
|
223 |
+
* @return void
|
224 |
+
* @since 2.0.0
|
225 |
+
* @author Andrea Grillo <andrea.grillo@yithemes.com>
|
226 |
+
*/
|
227 |
+
public function register_plugin_for_activation() {
|
228 |
+
if ( ! class_exists( 'YIT_Plugin_Licence' ) ) {
|
229 |
+
require_once YITH_YWZM_DIR . '/plugin-fw/licence/lib/yit-licence.php';
|
230 |
+
require_once YITH_YWZM_DIR . '/plugin-fw/licence/lib/yit-plugin-licence.php';
|
231 |
+
}
|
232 |
+
YIT_Plugin_Licence()->register( YITH_YWZM_INIT, YITH_YWZM_SECRET_KEY, YITH_YWZM_SLUG );
|
233 |
+
}
|
234 |
+
|
235 |
+
/**
|
236 |
+
* Register plugins for update tab
|
237 |
+
*
|
238 |
+
* @return void
|
239 |
+
* @since 2.0.0
|
240 |
+
* @author Andrea Grillo <andrea.grillo@yithemes.com>
|
241 |
+
*/
|
242 |
+
public function register_plugin_for_updates() {
|
243 |
+
if ( ! class_exists( 'YIT_Upgrade' ) ) {
|
244 |
+
require_once 'plugin-fw/lib/yit-upgrade.php';
|
245 |
+
}
|
246 |
+
YIT_Upgrade()->register( YITH_YWZM_SLUG, YITH_YWZM_INIT );
|
247 |
+
}
|
248 |
+
//endregion
|
249 |
+
}
|
250 |
}
|
plugin-fw/assets/css/admin.css
CHANGED
@@ -1,96 +1,96 @@
|
|
1 |
-
/*-----------------------
|
2 |
-
YITH Debug
|
3 |
-
------------------------*/
|
4 |
-
#wpadminbar .yith-debug-admin-bar div,
|
5 |
-
#wpadminbar .yith-debug-admin-bar:hover div {
|
6 |
-
background : #05789c !important;
|
7 |
-
color : #fff !important;
|
8 |
-
}
|
9 |
-
|
10 |
-
#wpadminbar .yith-debug-admin-bar a,
|
11 |
-
#wpadminbar .yith-debug-admin-bar strong {
|
12 |
-
color : #fff !important;
|
13 |
-
}
|
14 |
-
|
15 |
-
#wpadminbar .yith-debug-admin-bar strong {
|
16 |
-
font-weight : 600;
|
17 |
-
}
|
18 |
-
|
19 |
-
#wpadminbar .yith-debug-admin-bar-post-meta .ab-empty-item,
|
20 |
-
#wpadminbar .yith-debug-admin-bar-option .ab-empty-item {
|
21 |
-
display : none;
|
22 |
-
}
|
23 |
-
|
24 |
-
#wpadminbar #wp-admin-bar-yith-debug-admin-bar-post-meta-default,
|
25 |
-
#wpadminbar #wp-admin-bar-yith-debug-admin-bar-option-default {
|
26 |
-
padding : 0;
|
27 |
-
max-height : 500px;
|
28 |
-
overflow-y : auto;
|
29 |
-
}
|
30 |
-
|
31 |
-
#wpadminbar .yith-debug-admin-bar pre {
|
32 |
-
padding : 10px;
|
33 |
-
line-height : 1.5em;
|
34 |
-
}
|
35 |
-
|
36 |
-
.notice-yith{
|
37 |
-
margin-left: 0;
|
38 |
-
border-left-color: #acc327;
|
39 |
-
}
|
40 |
-
|
41 |
-
.notice-yith.notice-alt{
|
42 |
-
background-color: #ecf7ed;
|
43 |
-
}
|
44 |
-
|
45 |
-
.yith-promo-banner-image-link{
|
46 |
-
display: block;
|
47 |
-
margin-bottom: 15px;
|
48 |
-
}
|
49 |
-
|
50 |
-
.yith-promo-banner-image{
|
51 |
-
max-width: 100%;
|
52 |
-
margin: 0 auto;
|
53 |
-
display: block;
|
54 |
-
}
|
55 |
-
|
56 |
-
/*-----------------------
|
57 |
-
YITH Plugins Columns
|
58 |
-
------------------------*/
|
59 |
-
@media screen and (min-width : 783px) {
|
60 |
-
|
61 |
-
.auto-fold #adminmenu .yith-plugin-fw-menu-2-columns.wp-not-current-submenu .wp-submenu-head {
|
62 |
-
width : 100%;
|
63 |
-
}
|
64 |
-
|
65 |
-
#adminmenu .yith-plugin-fw-menu-2-columns.wp-not-current-submenu .wp-submenu {
|
66 |
-
min-width : 320px;
|
67 |
-
display : flex;
|
68 |
-
flex-flow : row wrap;
|
69 |
-
}
|
70 |
-
|
71 |
-
#adminmenu .yith-plugin-fw-menu-2-columns.wp-not-current-submenu .wp-submenu li:not(.wp-submenu-head) {
|
72 |
-
width : 50%;
|
73 |
-
border-left : 1px solid #555;
|
74 |
-
box-sizing : border-box;
|
75 |
-
}
|
76 |
-
|
77 |
-
#adminmenu .yith-plugin-fw-menu-2-columns.wp-not-current-submenu .wp-submenu li:not(.wp-submenu-head):nth-child(2n) {
|
78 |
-
border-left : none;
|
79 |
-
}
|
80 |
-
|
81 |
-
#adminmenu .yith-plugin-fw-menu-3-columns.wp-not-current-submenu .wp-submenu {
|
82 |
-
min-width : 480px;
|
83 |
-
display : flex;
|
84 |
-
flex-flow : row wrap;
|
85 |
-
}
|
86 |
-
|
87 |
-
#adminmenu .yith-plugin-fw-menu-3-columns.wp-not-current-submenu .wp-submenu li:not(.wp-submenu-head) {
|
88 |
-
width : calc(100% / 3);
|
89 |
-
border-left : 1px solid #555;
|
90 |
-
box-sizing : border-box;
|
91 |
-
}
|
92 |
-
|
93 |
-
#adminmenu .yith-plugin-fw-menu-3-columns.wp-not-current-submenu .wp-submenu li:not(.wp-submenu-head):nth-child(3n + 2) {
|
94 |
-
border-left : none;
|
95 |
-
}
|
96 |
}
|
1 |
+
/*-----------------------
|
2 |
+
YITH Debug
|
3 |
+
------------------------*/
|
4 |
+
#wpadminbar .yith-debug-admin-bar div,
|
5 |
+
#wpadminbar .yith-debug-admin-bar:hover div {
|
6 |
+
background : #05789c !important;
|
7 |
+
color : #fff !important;
|
8 |
+
}
|
9 |
+
|
10 |
+
#wpadminbar .yith-debug-admin-bar a,
|
11 |
+
#wpadminbar .yith-debug-admin-bar strong {
|
12 |
+
color : #fff !important;
|
13 |
+
}
|
14 |
+
|
15 |
+
#wpadminbar .yith-debug-admin-bar strong {
|
16 |
+
font-weight : 600;
|
17 |
+
}
|
18 |
+
|
19 |
+
#wpadminbar .yith-debug-admin-bar-post-meta .ab-empty-item,
|
20 |
+
#wpadminbar .yith-debug-admin-bar-option .ab-empty-item {
|
21 |
+
display : none;
|
22 |
+
}
|
23 |
+
|
24 |
+
#wpadminbar #wp-admin-bar-yith-debug-admin-bar-post-meta-default,
|
25 |
+
#wpadminbar #wp-admin-bar-yith-debug-admin-bar-option-default {
|
26 |
+
padding : 0;
|
27 |
+
max-height : 500px;
|
28 |
+
overflow-y : auto;
|
29 |
+
}
|
30 |
+
|
31 |
+
#wpadminbar .yith-debug-admin-bar pre {
|
32 |
+
padding : 10px;
|
33 |
+
line-height : 1.5em;
|
34 |
+
}
|
35 |
+
|
36 |
+
.notice-yith{
|
37 |
+
margin-left: 0;
|
38 |
+
border-left-color: #acc327;
|
39 |
+
}
|
40 |
+
|
41 |
+
.notice-yith.notice-alt{
|
42 |
+
background-color: #ecf7ed;
|
43 |
+
}
|
44 |
+
|
45 |
+
.yith-promo-banner-image-link{
|
46 |
+
display: block;
|
47 |
+
margin-bottom: 15px;
|
48 |
+
}
|
49 |
+
|
50 |
+
.yith-promo-banner-image{
|
51 |
+
max-width: 100%;
|
52 |
+
margin: 0 auto;
|
53 |
+
display: block;
|
54 |
+
}
|
55 |
+
|
56 |
+
/*-----------------------
|
57 |
+
YITH Plugins Columns
|
58 |
+
------------------------*/
|
59 |
+
@media screen and (min-width : 783px) {
|
60 |
+
|
61 |
+
.auto-fold #adminmenu .yith-plugin-fw-menu-2-columns.wp-not-current-submenu .wp-submenu-head {
|
62 |
+
width : 100%;
|
63 |
+
}
|
64 |
+
|
65 |
+
#adminmenu .yith-plugin-fw-menu-2-columns.wp-not-current-submenu .wp-submenu {
|
66 |
+
min-width : 320px;
|
67 |
+
display : flex;
|
68 |
+
flex-flow : row wrap;
|
69 |
+
}
|
70 |
+
|
71 |
+
#adminmenu .yith-plugin-fw-menu-2-columns.wp-not-current-submenu .wp-submenu li:not(.wp-submenu-head) {
|
72 |
+
width : 50%;
|
73 |
+
border-left : 1px solid #555;
|
74 |
+
box-sizing : border-box;
|
75 |
+
}
|
76 |
+
|
77 |
+
#adminmenu .yith-plugin-fw-menu-2-columns.wp-not-current-submenu .wp-submenu li:not(.wp-submenu-head):nth-child(2n) {
|
78 |
+
border-left : none;
|
79 |
+
}
|
80 |
+
|
81 |
+
#adminmenu .yith-plugin-fw-menu-3-columns.wp-not-current-submenu .wp-submenu {
|
82 |
+
min-width : 480px;
|
83 |
+
display : flex;
|
84 |
+
flex-flow : row wrap;
|
85 |
+
}
|
86 |
+
|
87 |
+
#adminmenu .yith-plugin-fw-menu-3-columns.wp-not-current-submenu .wp-submenu li:not(.wp-submenu-head) {
|
88 |
+
width : calc(100% / 3);
|
89 |
+
border-left : 1px solid #555;
|
90 |
+
box-sizing : border-box;
|
91 |
+
}
|
92 |
+
|
93 |
+
#adminmenu .yith-plugin-fw-menu-3-columns.wp-not-current-submenu .wp-submenu li:not(.wp-submenu-head):nth-child(3n + 2) {
|
94 |
+
border-left : none;
|
95 |
+
}
|
96 |
}
|
plugin-fw/assets/css/codemirror/codemirror.css
CHANGED
@@ -1,260 +1,260 @@
|
|
1 |
-
/* BASICS */
|
2 |
-
|
3 |
-
.CodeMirror {
|
4 |
-
/* Set height, width, borders, and global font properties here */
|
5 |
-
font-family: monospace;
|
6 |
-
height: 400px;
|
7 |
-
clear: both;
|
8 |
-
padding: 0;
|
9 |
-
}
|
10 |
-
.CodeMirror-scroll {
|
11 |
-
/* Set scrolling behaviour here */
|
12 |
-
overflow: auto;
|
13 |
-
}
|
14 |
-
|
15 |
-
/* PADDING */
|
16 |
-
|
17 |
-
.CodeMirror-lines {
|
18 |
-
padding: 4px 0; /* Vertical padding around content */
|
19 |
-
}
|
20 |
-
.CodeMirror pre {
|
21 |
-
padding: 0 4px; /* Horizontal padding of content */
|
22 |
-
}
|
23 |
-
|
24 |
-
.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
|
25 |
-
background-color: white; /* The little square between H and V scrollbars */
|
26 |
-
}
|
27 |
-
|
28 |
-
/* GUTTER */
|
29 |
-
|
30 |
-
.CodeMirror-gutters {
|
31 |
-
border-right: 1px solid #ddd;
|
32 |
-
background-color: #f7f7f7;
|
33 |
-
white-space: nowrap;
|
34 |
-
}
|
35 |
-
.CodeMirror-linenumbers {}
|
36 |
-
.CodeMirror-linenumber {
|
37 |
-
padding: 0 3px 0 5px;
|
38 |
-
min-width: 20px;
|
39 |
-
text-align: right;
|
40 |
-
color: #999;
|
41 |
-
}
|
42 |
-
|
43 |
-
/* CURSOR */
|
44 |
-
|
45 |
-
.CodeMirror div.CodeMirror-cursor {
|
46 |
-
border-left: 1px solid black;
|
47 |
-
z-index: 3;
|
48 |
-
}
|
49 |
-
/* Shown when moving in bi-directional text */
|
50 |
-
.CodeMirror div.CodeMirror-secondarycursor {
|
51 |
-
border-left: 1px solid silver;
|
52 |
-
}
|
53 |
-
.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor {
|
54 |
-
width: auto;
|
55 |
-
border: 0;
|
56 |
-
background: #7e7;
|
57 |
-
z-index: 1;
|
58 |
-
}
|
59 |
-
/* Can style cursor different in overwrite (non-insert) mode */
|
60 |
-
.CodeMirror div.CodeMirror-cursor.CodeMirror-overwrite {}
|
61 |
-
|
62 |
-
.cm-tab { display: inline-block; }
|
63 |
-
|
64 |
-
/* DEFAULT THEME */
|
65 |
-
|
66 |
-
.cm-s-default .cm-keyword {color: #708;}
|
67 |
-
.cm-s-default .cm-atom {color: #219;}
|
68 |
-
.cm-s-default .cm-number {color: #164;}
|
69 |
-
.cm-s-default .cm-def {color: #00f;}
|
70 |
-
.cm-s-default .cm-variable {color: black;}
|
71 |
-
.cm-s-default .cm-variable-2 {color: #05a;}
|
72 |
-
.cm-s-default .cm-variable-3 {color: #085;}
|
73 |
-
.cm-s-default .cm-property {color: black;}
|
74 |
-
.cm-s-default .cm-operator {color: black;}
|
75 |
-
.cm-s-default .cm-comment {color: #a50;}
|
76 |
-
.cm-s-default .cm-string {color: #a11;}
|
77 |
-
.cm-s-default .cm-string-2 {color: #f50;}
|
78 |
-
.cm-s-default .cm-meta {color: #555;}
|
79 |
-
.cm-s-default .cm-error {color: #f00;}
|
80 |
-
.cm-s-default .cm-qualifier {color: #555;}
|
81 |
-
.cm-s-default .cm-builtin {color: #30a;}
|
82 |
-
.cm-s-default .cm-bracket {color: #997;}
|
83 |
-
.cm-s-default .cm-tag {color: #170;}
|
84 |
-
.cm-s-default .cm-attribute {color: #00c;}
|
85 |
-
.cm-s-default .cm-header {color: blue;}
|
86 |
-
.cm-s-default .cm-quote {color: #090;}
|
87 |
-
.cm-s-default .cm-hr {color: #999;}
|
88 |
-
.cm-s-default .cm-link {color: #00c;}
|
89 |
-
|
90 |
-
.cm-negative {color: #d44;}
|
91 |
-
.cm-positive {color: #292;}
|
92 |
-
.cm-header, .cm-strong {font-weight: bold;}
|
93 |
-
.cm-em {font-style: italic;}
|
94 |
-
.cm-link {text-decoration: underline;}
|
95 |
-
|
96 |
-
.cm-invalidchar {color: #f00;}
|
97 |
-
|
98 |
-
div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
|
99 |
-
div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
|
100 |
-
|
101 |
-
/* STOP */
|
102 |
-
|
103 |
-
/* The rest of this file contains styles related to the mechanics of
|
104 |
-
the editor. You probably shouldn't touch them. */
|
105 |
-
|
106 |
-
.CodeMirror {
|
107 |
-
line-height: 1;
|
108 |
-
position: relative;
|
109 |
-
overflow: hidden;
|
110 |
-
background: #fafafa;
|
111 |
-
color: black;
|
112 |
-
}
|
113 |
-
|
114 |
-
.CodeMirror-scroll {
|
115 |
-
/* 30px is the magic margin used to hide the element's real scrollbars */
|
116 |
-
/* See overflow: hidden in .CodeMirror */
|
117 |
-
margin-bottom: -30px; margin-right: -30px;
|
118 |
-
padding-bottom: 30px; padding-right: 30px;
|
119 |
-
height: 100%;
|
120 |
-
outline: none; /* Prevent dragging from highlighting the element */
|
121 |
-
position: relative;
|
122 |
-
}
|
123 |
-
.CodeMirror-sizer {
|
124 |
-
position: relative;
|
125 |
-
}
|
126 |
-
|
127 |
-
/* The fake, visible scrollbars. Used to force redraw during scrolling
|
128 |
-
before actuall scrolling happens, thus preventing shaking and
|
129 |
-
flickering artifacts. */
|
130 |
-
.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
|
131 |
-
position: absolute;
|
132 |
-
z-index: 6;
|
133 |
-
display: none;
|
134 |
-
}
|
135 |
-
.CodeMirror-vscrollbar {
|
136 |
-
right: 0; top: 0;
|
137 |
-
overflow-x: hidden;
|
138 |
-
overflow-y: scroll;
|
139 |
-
}
|
140 |
-
.CodeMirror-hscrollbar {
|
141 |
-
bottom: 0; left: 0;
|
142 |
-
overflow-y: hidden;
|
143 |
-
overflow-x: scroll;
|
144 |
-
}
|
145 |
-
.CodeMirror-scrollbar-filler {
|
146 |
-
right: 0; bottom: 0;
|
147 |
-
}
|
148 |
-
.CodeMirror-gutter-filler {
|
149 |
-
left: 0; bottom: 0;
|
150 |
-
}
|
151 |
-
|
152 |
-
.CodeMirror-gutters {
|
153 |
-
position: absolute; left: 0; top: 0;
|
154 |
-
padding-bottom: 30px;
|
155 |
-
z-index: 3;
|
156 |
-
}
|
157 |
-
.CodeMirror-gutter {
|
158 |
-
white-space: normal;
|
159 |
-
height: 100%;
|
160 |
-
padding-bottom: 30px;
|
161 |
-
margin-bottom: -32px;
|
162 |
-
display: inline-block;
|
163 |
-
/* Hack to make IE7 behave */
|
164 |
-
*zoom:1;
|
165 |
-
*display:inline;
|
166 |
-
}
|
167 |
-
.CodeMirror-gutter-elt {
|
168 |
-
position: absolute;
|
169 |
-
cursor: default;
|
170 |
-
z-index: 4;
|
171 |
-
}
|
172 |
-
|
173 |
-
.CodeMirror-lines {
|
174 |
-
cursor: text;
|
175 |
-
}
|
176 |
-
.CodeMirror pre {
|
177 |
-
/* Reset some styles that the rest of the page might have set */
|
178 |
-
-moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
|
179 |
-
border-width: 0;
|
180 |
-
background: transparent;
|
181 |
-
font-family: inherit;
|
182 |
-
font-size: inherit;
|
183 |
-
margin: 0;
|
184 |
-
white-space: pre;
|
185 |
-
word-wrap: normal;
|
186 |
-
line-height: inherit;
|
187 |
-
color: inherit;
|
188 |
-
z-index: 2;
|
189 |
-
position: relative;
|
190 |
-
overflow: visible;
|
191 |
-
}
|
192 |
-
.CodeMirror-wrap pre {
|
193 |
-
word-wrap: break-word;
|
194 |
-
white-space: pre-wrap;
|
195 |
-
word-break: normal;
|
196 |
-
}
|
197 |
-
.CodeMirror-code pre {
|
198 |
-
border-right: 30px solid transparent;
|
199 |
-
width: -webkit-fit-content;
|
200 |
-
width: -moz-fit-content;
|
201 |
-
width: fit-content;
|
202 |
-
}
|
203 |
-
.CodeMirror-wrap .CodeMirror-code pre {
|
204 |
-
border-right: none;
|
205 |
-
width: auto;
|
206 |
-
}
|
207 |
-
.CodeMirror-linebackground {
|
208 |
-
position: absolute;
|
209 |
-
left: 0; right: 0; top: 0; bottom: 0;
|
210 |
-
z-index: 0;
|
211 |
-
}
|
212 |
-
|
213 |
-
.CodeMirror-linewidget {
|
214 |
-
position: relative;
|
215 |
-
z-index: 2;
|
216 |
-
overflow: auto;
|
217 |
-
}
|
218 |
-
|
219 |
-
.CodeMirror-widget {
|
220 |
-
}
|
221 |
-
|
222 |
-
.CodeMirror-wrap .CodeMirror-scroll {
|
223 |
-
overflow-x: hidden;
|
224 |
-
}
|
225 |
-
|
226 |
-
.CodeMirror-measure {
|
227 |
-
position: absolute;
|
228 |
-
width: 100%; height: 0px;
|
229 |
-
overflow: hidden;
|
230 |
-
visibility: hidden;
|
231 |
-
}
|
232 |
-
.CodeMirror-measure pre { position: static; }
|
233 |
-
|
234 |
-
.CodeMirror div.CodeMirror-cursor {
|
235 |
-
position: absolute;
|
236 |
-
visibility: hidden;
|
237 |
-
border-right: none;
|
238 |
-
width: 0;
|
239 |
-
}
|
240 |
-
.CodeMirror-focused div.CodeMirror-cursor {
|
241 |
-
visibility: visible;
|
242 |
-
}
|
243 |
-
|
244 |
-
.CodeMirror-selected { background: #d9d9d9; }
|
245 |
-
.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
|
246 |
-
|
247 |
-
.cm-searching {
|
248 |
-
background: #ffa;
|
249 |
-
background: rgba(255, 255, 0, .4);
|
250 |
-
}
|
251 |
-
|
252 |
-
/* IE7 hack to prevent it from returning funny offsetTops on the spans */
|
253 |
-
.CodeMirror span { *vertical-align: text-bottom; }
|
254 |
-
|
255 |
-
@media print {
|
256 |
-
/* Hide the cursor when printing */
|
257 |
-
.CodeMirror div.CodeMirror-cursor {
|
258 |
-
visibility: hidden;
|
259 |
-
}
|
260 |
-
}
|
1 |
+
/* BASICS */
|
2 |
+
|
3 |
+
.CodeMirror {
|
4 |
+
/* Set height, width, borders, and global font properties here */
|
5 |
+
font-family: monospace;
|
6 |
+
height: 400px;
|
7 |
+
clear: both;
|
8 |
+
padding: 0;
|
9 |
+
}
|
10 |
+
.CodeMirror-scroll {
|
11 |
+
/* Set scrolling behaviour here */
|
12 |
+
overflow: auto;
|
13 |
+
}
|
14 |
+
|
15 |
+
/* PADDING */
|
16 |
+
|
17 |
+
.CodeMirror-lines {
|
18 |
+
padding: 4px 0; /* Vertical padding around content */
|
19 |
+
}
|
20 |
+
.CodeMirror pre {
|
21 |
+
padding: 0 4px; /* Horizontal padding of content */
|
22 |
+
}
|
23 |
+
|
24 |
+
.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
|
25 |
+
background-color: white; /* The little square between H and V scrollbars */
|
26 |
+
}
|
27 |
+
|
28 |
+
/* GUTTER */
|
29 |
+
|
30 |
+
.CodeMirror-gutters {
|
31 |
+
border-right: 1px solid #ddd;
|
32 |
+
background-color: #f7f7f7;
|
33 |
+
white-space: nowrap;
|
34 |
+
}
|
35 |
+
.CodeMirror-linenumbers {}
|
36 |
+
.CodeMirror-linenumber {
|
37 |
+
padding: 0 3px 0 5px;
|
38 |
+
min-width: 20px;
|
39 |
+
text-align: right;
|
40 |
+
color: #999;
|
41 |
+
}
|
42 |
+
|
43 |
+
/* CURSOR */
|
44 |
+
|
45 |
+
.CodeMirror div.CodeMirror-cursor {
|
46 |
+
border-left: 1px solid black;
|
47 |
+
z-index: 3;
|
48 |
+
}
|
49 |
+
/* Shown when moving in bi-directional text */
|
50 |
+
.CodeMirror div.CodeMirror-secondarycursor {
|
51 |
+
border-left: 1px solid silver;
|
52 |
+
}
|
53 |
+
.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor {
|
54 |
+
width: auto;
|
55 |
+
border: 0;
|
56 |
+
background: #7e7;
|
57 |
+
z-index: 1;
|
58 |
+
}
|
59 |
+
/* Can style cursor different in overwrite (non-insert) mode */
|
60 |
+
.CodeMirror div.CodeMirror-cursor.CodeMirror-overwrite {}
|
61 |
+
|
62 |
+
.cm-tab { display: inline-block; }
|
63 |
+
|
64 |
+
/* DEFAULT THEME */
|
65 |
+
|
66 |
+
.cm-s-default .cm-keyword {color: #708;}
|
67 |
+
.cm-s-default .cm-atom {color: #219;}
|
68 |
+
.cm-s-default .cm-number {color: #164;}
|
69 |
+
.cm-s-default .cm-def {color: #00f;}
|
70 |
+
.cm-s-default .cm-variable {color: black;}
|
71 |
+
.cm-s-default .cm-variable-2 {color: #05a;}
|
72 |
+
.cm-s-default .cm-variable-3 {color: #085;}
|
73 |
+
.cm-s-default .cm-property {color: black;}
|
74 |
+
.cm-s-default .cm-operator {color: black;}
|
75 |
+
.cm-s-default .cm-comment {color: #a50;}
|
76 |
+
.cm-s-default .cm-string {color: #a11;}
|
77 |
+
.cm-s-default .cm-string-2 {color: #f50;}
|
78 |
+
.cm-s-default .cm-meta {color: #555;}
|
79 |
+
.cm-s-default .cm-error {color: #f00;}
|
80 |
+
.cm-s-default .cm-qualifier {color: #555;}
|
81 |
+
.cm-s-default .cm-builtin {color: #30a;}
|
82 |
+
.cm-s-default .cm-bracket {color: #997;}
|
83 |
+
.cm-s-default .cm-tag {color: #170;}
|
84 |
+
.cm-s-default .cm-attribute {color: #00c;}
|
85 |
+
.cm-s-default .cm-header {color: blue;}
|
86 |
+
.cm-s-default .cm-quote {color: #090;}
|
87 |
+
.cm-s-default .cm-hr {color: #999;}
|
88 |
+
.cm-s-default .cm-link {color: #00c;}
|
89 |
+
|
90 |
+
.cm-negative {color: #d44;}
|
91 |
+
.cm-positive {color: #292;}
|
92 |
+
.cm-header, .cm-strong {font-weight: bold;}
|
93 |
+
.cm-em {font-style: italic;}
|
94 |
+
.cm-link {text-decoration: underline;}
|
95 |
+
|
96 |
+
.cm-invalidchar {color: #f00;}
|
97 |
+
|
98 |
+
div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
|
99 |
+
div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
|
100 |
+
|
101 |
+
/* STOP */
|
102 |
+
|
103 |
+
/* The rest of this file contains styles related to the mechanics of
|
104 |
+
the editor. You probably shouldn't touch them. */
|
105 |
+
|
106 |
+
.CodeMirror {
|
107 |
+
line-height: 1;
|
108 |
+
position: relative;
|
109 |
+
overflow: hidden;
|
110 |
+
background: #fafafa;
|
111 |
+
color: black;
|
112 |
+
}
|
113 |
+
|
114 |
+
.CodeMirror-scroll {
|
115 |
+
/* 30px is the magic margin used to hide the element's real scrollbars */
|
116 |
+
/* See overflow: hidden in .CodeMirror */
|
117 |
+
margin-bottom: -30px; margin-right: -30px;
|
118 |
+
padding-bottom: 30px; padding-right: 30px;
|
119 |
+
height: 100%;
|
120 |
+
outline: none; /* Prevent dragging from highlighting the element */
|
121 |
+
position: relative;
|
122 |
+
}
|
123 |
+
.CodeMirror-sizer {
|
124 |
+
position: relative;
|
125 |
+
}
|
126 |
+
|
127 |
+
/* The fake, visible scrollbars. Used to force redraw during scrolling
|
128 |
+
before actuall scrolling happens, thus preventing shaking and
|
129 |
+
flickering artifacts. */
|
130 |
+
.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
|
131 |
+
position: absolute;
|
132 |
+
z-index: 6;
|
133 |
+
display: none;
|
134 |
+
}
|
135 |
+
.CodeMirror-vscrollbar {
|
136 |
+
right: 0; top: 0;
|
137 |
+
overflow-x: hidden;
|
138 |
+
overflow-y: scroll;
|
139 |
+
}
|
140 |
+
.CodeMirror-hscrollbar {
|
141 |
+
bottom: 0; left: 0;
|
142 |
+
overflow-y: hidden;
|
143 |
+
overflow-x: scroll;
|
144 |
+
}
|
145 |
+
.CodeMirror-scrollbar-filler {
|
146 |
+
right: 0; bottom: 0;
|
147 |
+
}
|
148 |
+
.CodeMirror-gutter-filler {
|
149 |
+
left: 0; bottom: 0;
|
150 |
+
}
|
151 |
+
|
152 |
+
.CodeMirror-gutters {
|
153 |
+
position: absolute; left: 0; top: 0;
|
154 |
+
padding-bottom: 30px;
|
155 |
+
z-index: 3;
|
156 |
+
}
|
157 |
+
.CodeMirror-gutter {
|
158 |
+
white-space: normal;
|
159 |
+
height: 100%;
|
160 |
+
padding-bottom: 30px;
|
161 |
+
margin-bottom: -32px;
|
162 |
+
display: inline-block;
|
163 |
+
/* Hack to make IE7 behave */
|
164 |
+
*zoom:1;
|
165 |
+
*display:inline;
|
166 |
+
}
|
167 |
+
.CodeMirror-gutter-elt {
|
168 |
+
position: absolute;
|
169 |
+
cursor: default;
|
170 |
+
z-index: 4;
|
171 |
+
}
|
172 |
+
|
173 |
+
.CodeMirror-lines {
|
174 |
+
cursor: text;
|
175 |
+
}
|
176 |
+
.CodeMirror pre {
|
177 |
+
/* Reset some styles that the rest of the page might have set */
|
178 |
+
-moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
|
179 |
+
border-width: 0;
|
180 |
+
background: transparent;
|
181 |
+
font-family: inherit;
|
182 |
+
font-size: inherit;
|
183 |
+
margin: 0;
|
184 |
+
white-space: pre;
|
185 |
+
word-wrap: normal;
|
186 |
+
line-height: inherit;
|
187 |
+
color: inherit;
|
188 |
+
z-index: 2;
|
189 |
+
position: relative;
|
190 |
+
overflow: visible;
|
191 |
+
}
|
192 |
+
.CodeMirror-wrap pre {
|
193 |
+
word-wrap: break-word;
|
194 |
+
white-space: pre-wrap;
|
195 |
+
word-break: normal;
|
196 |
+
}
|
197 |
+
.CodeMirror-code pre {
|
198 |
+
border-right: 30px solid transparent;
|
199 |
+
width: -webkit-fit-content;
|
200 |
+
width: -moz-fit-content;
|
201 |
+
width: fit-content;
|
202 |
+
}
|
203 |
+
.CodeMirror-wrap .CodeMirror-code pre {
|
204 |
+
border-right: none;
|
205 |
+
width: auto;
|
206 |
+
}
|
207 |
+
.CodeMirror-linebackground {
|
208 |
+
position: absolute;
|
209 |
+
left: 0; right: 0; top: 0; bottom: 0;
|
210 |
+
z-index: 0;
|
211 |
+
}
|
212 |
+
|
213 |
+
.CodeMirror-linewidget {
|
214 |
+
position: relative;
|
215 |
+
z-index: 2;
|
216 |
+
overflow: auto;
|
217 |
+
}
|
218 |
+
|
219 |
+
.CodeMirror-widget {
|
220 |
+
}
|
221 |
+
|
222 |
+
.CodeMirror-wrap .CodeMirror-scroll {
|
223 |
+
overflow-x: hidden;
|
224 |
+
}
|
225 |
+
|
226 |
+
.CodeMirror-measure {
|
227 |
+
position: absolute;
|
228 |
+
width: 100%; height: 0px;
|
229 |
+
overflow: hidden;
|
230 |
+
visibility: hidden;
|
231 |
+
}
|
232 |
+
.CodeMirror-measure pre { position: static; }
|
233 |
+
|
234 |
+
.CodeMirror div.CodeMirror-cursor {
|
235 |
+
position: absolute;
|
236 |
+
visibility: hidden;
|
237 |
+
border-right: none;
|
238 |
+
width: 0;
|
239 |
+
}
|
240 |
+
.CodeMirror-focused div.CodeMirror-cursor {
|
241 |
+
visibility: visible;
|
242 |
+
}
|
243 |
+
|
244 |
+
.CodeMirror-selected { background: #d9d9d9; }
|
245 |
+
.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
|
246 |
+
|
247 |
+
.cm-searching {
|
248 |
+
background: #ffa;
|
249 |
+
background: rgba(255, 255, 0, .4);
|
250 |
+
}
|
251 |
+
|
252 |
+
/* IE7 hack to prevent it from returning funny offsetTops on the spans */
|
253 |
+
.CodeMirror span { *vertical-align: text-bottom; }
|
254 |
+
|
255 |
+
@media print {
|
256 |
+
/* Hide the cursor when printing */
|
257 |
+
.CodeMirror div.CodeMirror-cursor {
|
258 |
+
visibility: hidden;
|
259 |
+
}
|
260 |
+
}
|
plugin-fw/assets/css/colorbox.css
CHANGED
@@ -1,66 +1,66 @@
|
|
1 |
-
/*
|
2 |
-
Colorbox Core Style:
|
3 |
-
The following CSS is consistent between example themes and should not be altered.
|
4 |
-
*/
|
5 |
-
#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden; -webkit-transform: translate3d(0,0,0);}
|
6 |
-
#cboxWrapper {max-width:none;}
|
7 |
-
#cboxOverlay{position:fixed; width:100%; height:100%;}
|
8 |
-
#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
|
9 |
-
#cboxContent{position:relative;}
|
10 |
-
#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
|
11 |
-
#cboxTitle{margin:0;}
|
12 |
-
#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
|
13 |
-
#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
|
14 |
-
.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
|
15 |
-
.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;}
|
16 |
-
#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
|
17 |
-
|
18 |
-
/*
|
19 |
-
User Style:
|
20 |
-
Change the following styles to modify the appearance of Colorbox. They are
|
21 |
-
ordered & tabbed in a way that represents the nesting of the generated HTML.
|
22 |
-
*/
|
23 |
-
#cboxOverlay{background:#fff; opacity: 0.9; filter: alpha(opacity = 90);}
|
24 |
-
#colorbox{outline:0;}
|
25 |
-
#cboxTopLeft{width:25px; height:25px; background:url(../images/colorbox/border1.png) no-repeat 0 0;}
|
26 |
-
#cboxTopCenter{height:25px; background:url(../images/colorbox/border1.png) repeat-x 0 -50px;}
|
27 |
-
#cboxTopRight{width:25px; height:25px; background:url(../images/colorbox/border1.png) no-repeat -25px 0;}
|
28 |
-
#cboxBottomLeft{width:25px; height:25px; background:url(../images/colorbox/border1.png) no-repeat 0 -25px;}
|
29 |
-
#cboxBottomCenter{height:25px; background:url(../images/colorbox/border1.png) repeat-x 0 -75px;}
|
30 |
-
#cboxBottomRight{width:25px; height:25px; background:url(../images/colorbox/border1.png) no-repeat -25px -25px;}
|
31 |
-
#cboxMiddleLeft{width:25px; background:url(../images/colorbox/border2.png) repeat-y 0 0;}
|
32 |
-
#cboxMiddleRight{width:25px; background:url(../images/colorbox/border2.png) repeat-y -25px 0;}
|
33 |
-
#cboxContent{background:#fff; overflow:hidden;}
|
34 |
-
.cboxIframe{background:#fff;}
|
35 |
-
#cboxError{padding:50px; border:1px solid #ccc;}
|
36 |
-
#cboxLoadedContent{margin-bottom:20px;}
|
37 |
-
#cboxTitle{position:absolute; bottom:0px; left:0; text-align:center; width:100%; color:#999;}
|
38 |
-
#cboxCurrent{position:absolute; bottom:0px; left:100px; color:#999;}
|
39 |
-
#cboxLoadingOverlay{background:#fff url(../images/colorbox/loading.gif) no-repeat 5px 5px;}
|
40 |
-
|
41 |
-
/* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
|
42 |
-
#cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; }
|
43 |
-
|
44 |
-
/* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
|
45 |
-
#cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}
|
46 |
-
|
47 |
-
#cboxSlideshow{position:absolute; bottom:0px; right:42px; color:#444;}
|
48 |
-
#cboxPrevious{position:absolute; bottom:0px; left:0; color:#444;}
|
49 |
-
#cboxNext{position:absolute; bottom:0px; left:63px; color:#444;}
|
50 |
-
#cboxClose{position:absolute; bottom:0; right:0; display:block; color:#444;}
|
51 |
-
|
52 |
-
/*
|
53 |
-
The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill
|
54 |
-
when an alpha filter (opacity change) is set on the element or ancestor element. This style is not applied to or needed in IE9.
|
55 |
-
See: http://jacklmoore.com/notes/ie-transparency-problems/
|
56 |
-
*/
|
57 |
-
.cboxIE #cboxTopLeft,
|
58 |
-
.cboxIE #cboxTopCenter,
|
59 |
-
.cboxIE #cboxTopRight,
|
60 |
-
.cboxIE #cboxBottomLeft,
|
61 |
-
.cboxIE #cboxBottomCenter,
|
62 |
-
.cboxIE #cboxBottomRight,
|
63 |
-
.cboxIE #cboxMiddleLeft,
|
64 |
-
.cboxIE #cboxMiddleRight {
|
65 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
|
66 |
}
|
1 |
+
/*
|
2 |
+
Colorbox Core Style:
|
3 |
+
The following CSS is consistent between example themes and should not be altered.
|
4 |
+
*/
|
5 |
+
#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden; -webkit-transform: translate3d(0,0,0);}
|
6 |
+
#cboxWrapper {max-width:none;}
|
7 |
+
#cboxOverlay{position:fixed; width:100%; height:100%;}
|
8 |
+
#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
|
9 |
+
#cboxContent{position:relative;}
|
10 |
+
#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
|
11 |
+
#cboxTitle{margin:0;}
|
12 |
+
#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
|
13 |
+
#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
|
14 |
+
.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
|
15 |
+
.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;}
|
16 |
+
#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
|
17 |
+
|
18 |
+
/*
|
19 |
+
User Style:
|
20 |
+
Change the following styles to modify the appearance of Colorbox. They are
|
21 |
+
ordered & tabbed in a way that represents the nesting of the generated HTML.
|
22 |
+
*/
|
23 |
+
#cboxOverlay{background:#fff; opacity: 0.9; filter: alpha(opacity = 90);}
|
24 |
+
#colorbox{outline:0;}
|
25 |
+
#cboxTopLeft{width:25px; height:25px; background:url(../images/colorbox/border1.png) no-repeat 0 0;}
|
26 |
+
#cboxTopCenter{height:25px; background:url(../images/colorbox/border1.png) repeat-x 0 -50px;}
|
27 |
+
#cboxTopRight{width:25px; height:25px; background:url(../images/colorbox/border1.png) no-repeat -25px 0;}
|
28 |
+
#cboxBottomLeft{width:25px; height:25px; background:url(../images/colorbox/border1.png) no-repeat 0 -25px;}
|
29 |
+
#cboxBottomCenter{height:25px; background:url(../images/colorbox/border1.png) repeat-x 0 -75px;}
|
30 |
+
#cboxBottomRight{width:25px; height:25px; background:url(../images/colorbox/border1.png) no-repeat -25px -25px;}
|
31 |
+
#cboxMiddleLeft{width:25px; background:url(../images/colorbox/border2.png) repeat-y 0 0;}
|
32 |
+
#cboxMiddleRight{width:25px; background:url(../images/colorbox/border2.png) repeat-y -25px 0;}
|
33 |
+
#cboxContent{background:#fff; overflow:hidden;}
|
34 |
+
.cboxIframe{background:#fff;}
|
35 |
+
#cboxError{padding:50px; border:1px solid #ccc;}
|
36 |
+
#cboxLoadedContent{margin-bottom:20px;}
|
37 |
+
#cboxTitle{position:absolute; bottom:0px; left:0; text-align:center; width:100%; color:#999;}
|
38 |
+
#cboxCurrent{position:absolute; bottom:0px; left:100px; color:#999;}
|
39 |
+
#cboxLoadingOverlay{background:#fff url(../images/colorbox/loading.gif) no-repeat 5px 5px;}
|
40 |
+
|
41 |
+
/* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
|
42 |
+
#cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; }
|
43 |
+
|
44 |
+
/* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
|
45 |
+
#cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}
|
46 |
+
|
47 |
+
#cboxSlideshow{position:absolute; bottom:0px; right:42px; color:#444;}
|
48 |
+
#cboxPrevious{position:absolute; bottom:0px; left:0; color:#444;}
|
49 |
+
#cboxNext{position:absolute; bottom:0px; left:63px; color:#444;}
|
50 |
+
#cboxClose{position:absolute; bottom:0; right:0; display:block; color:#444;}
|
51 |
+
|
52 |
+
/*
|
53 |
+
The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill
|
54 |
+
when an alpha filter (opacity change) is set on the element or ancestor element. This style is not applied to or needed in IE9.
|
55 |
+
See: http://jacklmoore.com/notes/ie-transparency-problems/
|
56 |
+
*/
|
57 |
+
.cboxIE #cboxTopLeft,
|
58 |
+
.cboxIE #cboxTopCenter,
|
59 |
+
.cboxIE #cboxTopRight,
|
60 |
+
.cboxIE #cboxBottomLeft,
|
61 |
+
.cboxIE #cboxBottomCenter,
|
62 |
+
.cboxIE #cboxBottomRight,
|
63 |
+
.cboxIE #cboxMiddleLeft,
|
64 |
+
.cboxIE #cboxMiddleRight {
|
65 |
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
|
66 |
}
|
plugin-fw/assets/css/metaboxes.css
CHANGED
@@ -1,653 +1,653 @@
|
|
1 |
-
/* self-clear floats */
|
2 |
-
.clearfix:after {
|
3 |
-
content : ".";
|
4 |
-
display : block;
|
5 |
-
height : 0;
|
6 |
-
clear : both;
|
7 |
-
visibility : hidden;
|
8 |
-
overflow : hidden;
|
9 |
-
}
|
10 |
-
|
11 |
-
/* ie.css */
|
12 |
-
* html .clearfix { /* IE6 */
|
13 |
-
height : 1%;
|
14 |
-
}
|
15 |
-
|
16 |
-
*:first-child + html .clearfix { /* IE7 */
|
17 |
-
min-height : 1%;
|
18 |
-
}
|
19 |
-
|
20 |
-
.clearboth {
|
21 |
-
clear : both
|
22 |
-
}
|
23 |
-
|
24 |
-
/* === TAB STYLE */
|
25 |
-
.metaboxes-tab {
|
26 |
-
margin : -6px -12px -8px;
|
27 |
-
}
|
28 |
-
|
29 |
-
.metaboxes-tab div.tabs-panel {
|
30 |
-
height : auto;
|
31 |
-
overflow : visible;
|
32 |
-
margin-top : 0px;
|
33 |
-
padding : 0 10px;
|
34 |
-
background : none;
|
35 |
-
border : 0;
|
36 |
-
}
|
37 |
-
|
38 |
-
.metaboxes-tab ul.metaboxes-tabs {
|
39 |
-
background : #f1f1f1;
|
40 |
-
margin : 0;
|
41 |
-
padding : 10px 0 0 5px;
|
42 |
-
}
|
43 |
-
|
44 |
-
.metaboxes-tab ul.metaboxes-tabs li {
|
45 |
-
float : left;
|
46 |
-
background : #dedede;
|
47 |
-
margin : 0 0 0 5px;
|
48 |
-
}
|
49 |
-
|
50 |
-
.metaboxes-tab ul.metaboxes-tabs li a {
|
51 |
-
color : #555;
|
52 |
-
text-decoration : none;
|
53 |
-
padding : 8px 15px;
|
54 |
-
display : block;
|
55 |
-
box-shadow : none !important;
|
56 |
-
}
|
57 |
-
|
58 |
-
.metaboxes-tab ul.metaboxes-tabs li.tabs {
|
59 |
-
background : #fff;
|
60 |
-
}
|
61 |
-
|
62 |
-
.metaboxes-tab p.field-row {
|
63 |
-
margin : 20px 0;
|
64 |
-
}
|
65 |
-
|
66 |
-
.metaboxes-tab div.sep {
|
67 |
-
height : 1px;
|
68 |
-
background : #dfdfdf;
|
69 |
-
clear : both;
|
70 |
-
margin-left : -10px;
|
71 |
-
margin-right : -10px;
|
72 |
-
}
|
73 |
-
|
74 |
-
.metaboxes-tab label {
|
75 |
-
font-weight : bold;
|
76 |
-
width : 160px;
|
77 |
-
float : left;
|
78 |
-
line-height : 23px;
|
79 |
-
margin-left : -184px;
|
80 |
-
}
|
81 |
-
|
82 |
-
.metaboxes-tab label small {
|
83 |
-
font-weight : normal;
|
84 |
-
line-height : 15px;
|
85 |
-
font-style : italic;
|
86 |
-
color : #999;
|
87 |
-
display : block;
|
88 |
-
}
|
89 |
-
|
90 |
-
.metaboxes-tab .wp-picker-container label {
|
91 |
-
font-weight : inherit;
|
92 |
-
width : auto;
|
93 |
-
float : none;
|
94 |
-
line-height : inherit;
|
95 |
-
margin-left : 0;
|
96 |
-
}
|
97 |
-
|
98 |
-
.metaboxes-tab input[type="checkbox"] {
|
99 |
-
vertical-align : middle
|
100 |
-
}
|
101 |
-
|
102 |
-
.metaboxes-tab input.button-secondary, .metaboxes-tab input.checkbox {
|
103 |
-
width : auto;
|
104 |
-
}
|
105 |
-
|
106 |
-
.metaboxes-tab p.field-row.textarea .description {
|
107 |
-
vertical-align : top;
|
108 |
-
}
|
109 |
-
|
110 |
-
.metaboxes-tab p.field-row.checkbox {
|
111 |
-
background : none;
|
112 |
-
}
|
113 |
-
|
114 |
-
.metaboxes-tab .the-metabox {
|
115 |
-
margin : 20px 0;
|
116 |
-
margin-left : 184px;
|
117 |
-
}
|
118 |
-
|
119 |
-
.metaboxes-tab .the-metabox.no-label {
|
120 |
-
margin : 20px 0;
|
121 |
-
margin-left : 0;
|
122 |
-
}
|
123 |
-
|
124 |
-
.metaboxes-tab hr {
|
125 |
-
height : 0px;
|
126 |
-
border-top : 1px solid #dadada;
|
127 |
-
width : auto;
|
128 |
-
margin-left : -10px;
|
129 |
-
margin-right : -10px;
|
130 |
-
}
|
131 |
-
|
132 |
-
.metaboxes-tab .the-metabox p {
|
133 |
-
margin : 0;
|
134 |
-
}
|
135 |
-
|
136 |
-
.metaboxes-tab .the-metabox:last-child {
|
137 |
-
border-bottom : 0px;
|
138 |
-
}
|
139 |
-
|
140 |
-
.metaboxes-tab .the-metabox.checkbox {
|
141 |
-
background : none;
|
142 |
-
}
|
143 |
-
|
144 |
-
.metaboxes-tab span.description.inline {
|
145 |
-
display : inline-block;
|
146 |
-
line-height : 23px;
|
147 |
-
width : auto;
|
148 |
-
vertical-align : middle;
|
149 |
-
margin : 0;
|
150 |
-
}
|
151 |
-
|
152 |
-
.metaboxes-tab .slider label {
|
153 |
-
padding : 15px 0;
|
154 |
-
}
|
155 |
-
|
156 |
-
/* sortable table posts */
|
157 |
-
|
158 |
-
#the-list.ui-sortable tr:hover {
|
159 |
-
cursor : move;
|
160 |
-
}
|
161 |
-
|
162 |
-
.the-metabox.preview {
|
163 |
-
float : none;
|
164 |
-
}
|
165 |
-
|
166 |
-
.metaboxes-tab .the-metabox.no-label.preview {
|
167 |
-
margin-left : 184px;
|
168 |
-
}
|
169 |
-
|
170 |
-
.metaboxes-tab .the-metabox.no-label.preview img {
|
171 |
-
box-shadow : 0 1px 8px rgba(0, 0, 0, 0.2);
|
172 |
-
}
|
173 |
-
|
174 |
-
/**************************************
|
175 |
-
FIELDS
|
176 |
-
***************************************/
|
177 |
-
|
178 |
-
.metaboxes-tab select,
|
179 |
-
.metaboxes-tab input[type=text],
|
180 |
-
.metaboxes-tab input[type=number],
|
181 |
-
.metaboxes-tab textarea,
|
182 |
-
.metaboxes-tab .yith-plugin-fw-select,
|
183 |
-
.metaboxes-tab .yith-plugin-fw-slider-container,
|
184 |
-
.metaboxes-tab .yith-plugin-fw-text-input,
|
185 |
-
.metaboxes-tab .yith-plugin-fw-text-array-table,
|
186 |
-
.metaboxes-tab .yith-plugin-fw-textarea {
|
187 |
-
width : 400px;
|
188 |
-
max-width : 100%;
|
189 |
-
}
|
190 |
-
|
191 |
-
.metaboxes-tab .yith-plugin-fw-text-array-table input[type=text] {
|
192 |
-
width : 100%;
|
193 |
-
}
|
194 |
-
|
195 |
-
/* wp editor */
|
196 |
-
.the-metabox.textarea-editor .mceIframeContainer {
|
197 |
-
background : #fff;
|
198 |
-
}
|
199 |
-
|
200 |
-
.the-metabox.textarea-editor label {
|
201 |
-
margin-top : 24px;
|
202 |
-
}
|
203 |
-
|
204 |
-
/* categories */
|
205 |
-
.categories-panel {
|
206 |
-
width : 30%;
|
207 |
-
float : left;
|
208 |
-
margin-right : 4px;
|
209 |
-
}
|
210 |
-
|
211 |
-
.categories-panel .box {
|
212 |
-
height : 200px;
|
213 |
-
border : 1px solid #dfdfdf;
|
214 |
-
background : #fff;
|
215 |
-
padding : 6px 10px;
|
216 |
-
overflow : auto;
|
217 |
-
}
|
218 |
-
|
219 |
-
.categories-panel ul {
|
220 |
-
list-style : none;
|
221 |
-
margin : 0;
|
222 |
-
}
|
223 |
-
|
224 |
-
.categories-panel ul li {
|
225 |
-
line-height : 19px;
|
226 |
-
margin : 0;
|
227 |
-
padding : 0;
|
228 |
-
word-wrap : break-word;
|
229 |
-
}
|
230 |
-
|
231 |
-
.categories-panel ul li label {
|
232 |
-
font-weight : normal !important;
|
233 |
-
margin-left : 0 !important;
|
234 |
-
}
|
235 |
-
|
236 |
-
.categories-panel input.newcategory {
|
237 |
-
width : 100%;
|
238 |
-
margin-bottom : 3px;
|
239 |
-
}
|
240 |
-
|
241 |
-
/* contact form */
|
242 |
-
.contactform_item {
|
243 |
-
border-style : solid;
|
244 |
-
border-width : 1px;
|
245 |
-
line-height : 1;
|
246 |
-
margin-bottom : 20px;
|
247 |
-
padding : 0;
|
248 |
-
background-color : #f5f5f5;
|
249 |
-
background-image : -moz-linear-gradient(center top, #f9f9f9, #f5f5f5);
|
250 |
-
border-color : #dfdfdf;
|
251 |
-
border-radius : 3px 3px 3px 3px;
|
252 |
-
box-shadow : 0 1px 0 #fff inset;
|
253 |
-
min-width : 255px;
|
254 |
-
position : relative;
|
255 |
-
}
|
256 |
-
|
257 |
-
.contactform_item .handlediv {
|
258 |
-
position : relative;
|
259 |
-
top : -4px;
|
260 |
-
}
|
261 |
-
|
262 |
-
.contactform_item h3 {
|
263 |
-
min-height : 21px;
|
264 |
-
margin : 13px;
|
265 |
-
}
|
266 |
-
|
267 |
-
.contactform_item .inside {
|
268 |
-
padding : 10px !important;
|
269 |
-
}
|
270 |
-
|
271 |
-
.contactform_item .deps {
|
272 |
-
display : none;
|
273 |
-
}
|
274 |
-
|
275 |
-
.contactform_item .addoptions p.option {
|
276 |
-
margin : 5px 0 5px 200px
|
277 |
-
}
|
278 |
-
|
279 |
-
.contactform_item .addoptions p label {
|
280 |
-
width : 80px !important;
|
281 |
-
}
|
282 |
-
|
283 |
-
.contactform_item .add-field-option {
|
284 |
-
margin-bottom : 10px !important;
|
285 |
-
}
|
286 |
-
|
287 |
-
.remove_item {
|
288 |
-
float : right;
|
289 |
-
}
|
290 |
-
|
291 |
-
.metabox-sortable-placeholder {
|
292 |
-
border : 1px dotted #dedede;
|
293 |
-
margin : 10px 0
|
294 |
-
}
|
295 |
-
|
296 |
-
/* features tab */
|
297 |
-
.featurestab_item {
|
298 |
-
border-style : solid;
|
299 |
-
border-width : 1px;
|
300 |
-
line-height : 1;
|
301 |
-
margin-bottom : 20px;
|
302 |
-
padding : 0;
|
303 |
-
background-color : #f5f5f5;
|
304 |
-
background-image : -moz-linear-gradient(center top, #f9f9f9, #f5f5f5);
|
305 |
-
border-color : #dfdfdf;
|
306 |
-
border-radius : 3px 3px 3px 3px;
|
307 |
-
box-shadow : 0 1px 0 #fff inset;
|
308 |
-
min-width : 255px;
|
309 |
-
position : relative;
|
310 |
-
}
|
311 |
-
|
312 |
-
.featurestab_item .handlediv {
|
313 |
-
position : relative;
|
314 |
-
top : -4px;
|
315 |
-
}
|
316 |
-
|
317 |
-
.featurestab_item h3 {
|
318 |
-
min-height : 21px
|
319 |
-
}
|
320 |
-
|
321 |
-
.featurestab_item .inside {
|
322 |
-
padding : 10px !important;
|
323 |
-
}
|
324 |
-
|
325 |
-
.featurestab_item .deps {
|
326 |
-
display : none;
|
327 |
-
}
|
328 |
-
|
329 |
-
.featurestab_item .addoptions p.option {
|
330 |
-
margin : 5px 0 5px 200px
|
331 |
-
}
|
332 |
-
|
333 |
-
.featurestab_item .addoptions p label {
|
334 |
-
width : 80px !important;
|
335 |
-
}
|
336 |
-
|
337 |
-
.featurestab_item .add-field-option {
|
338 |
-
margin-bottom : 10px !important;
|
339 |
-
}
|
340 |
-
|
341 |
-
.messages-panel.updated {
|
342 |
-
margin : 10px 0px 10px !important;
|
343 |
-
max-width : 1200px;
|
344 |
-
border-radius : 5px;
|
345 |
-
-webkit-box-sizing : border-box;
|
346 |
-
box-sizing : border-box;
|
347 |
-
}
|
348 |
-
|
349 |
-
.ui-widget-overlay {
|
350 |
-
background-image : none !important;
|
351 |
-
}
|
352 |
-
|
353 |
-
.the-metabox .icon_type {
|
354 |
-
width : 30%;
|
355 |
-
float : left;
|
356 |
-
margin-right : 40px
|
357 |
-
}
|
358 |
-
|
359 |
-
#post-type-settings .category-list label {
|
360 |
-
width : 187px;
|
361 |
-
}
|
362 |
-
|
363 |
-
.remove_cat {
|
364 |
-
float : right;
|
365 |
-
text-align : center;
|
366 |
-
display : block;
|
367 |
-
width : 20px;
|
368 |
-
height : 20px;
|
369 |
-
border-radius : 20px;
|
370 |
-
font-weight : bold;
|
371 |
-
font-size : 10px;
|
372 |
-
background : #efefef;
|
373 |
-
text-decoration : none;
|
374 |
-
}
|
375 |
-
|
376 |
-
/* typography */
|
377 |
-
.the-metabox.typography .select_wrapper.font-family {
|
378 |
-
width : 200px;
|
379 |
-
}
|
380 |
-
|
381 |
-
.the-metabox.typography .spinner_container {
|
382 |
-
float : left;
|
383 |
-
margin-right : 10px;
|
384 |
-
}
|
385 |
-
|
386 |
-
.the-metabox.typography .spinner_container input.number {
|
387 |
-
width : 50px !important;
|
388 |
-
-webkit-border-top-right-radius : 0px;
|
389 |
-
-webkit-border-bottom-right-radius : 0px;
|
390 |
-
-moz-border-radius-topright : 0px;
|
391 |
-
-moz-border-radius-bottomright : 0px;
|
392 |
-
border-top-right-radius : 0px;
|
393 |
-
border-bottom-right-radius : 0px;
|
394 |
-
}
|
395 |
-
|
396 |
-
/* number */
|
397 |
-
.the-metabox.number input.number {
|
398 |
-
width : 50px !important;
|
399 |
-
}
|
400 |
-
|
401 |
-
/* number */
|
402 |
-
.rm_number .number {
|
403 |
-
width : 70px;
|
404 |
-
text-align : right;
|
405 |
-
-webkit-border-top-right-radius : 0px;
|
406 |
-
-webkit-border-bottom-right-radius : 0px;
|
407 |
-
-moz-border-radius-topright : 0px;
|
408 |
-
-moz-border-radius-bottomright : 0px;
|
409 |
-
border-top-right-radius : 0px;
|
410 |
-
border-bottom-right-radius : 0px;
|
411 |
-
}
|
412 |
-
|
413 |
-
.spinner-wrapper {
|
414 |
-
position : relative;
|
415 |
-
height : 23px;
|
416 |
-
overflow : hidden;
|
417 |
-
}
|
418 |
-
|
419 |
-
.spinner-wrapper input.number {
|
420 |
-
float : left;
|
421 |
-
}
|
422 |
-
|
423 |
-
.spinner-wrapper .spinner-button {
|
424 |
-
cursor : pointer;
|
425 |
-
float : left;
|
426 |
-
position : absolute;
|
427 |
-
left : 69px;
|
428 |
-
width : 15px;
|
429 |
-
height : 12px;
|
430 |
-
border : 1px solid #dfdfdf;
|
431 |
-
background : #fff;
|
432 |
-
margin : 0;
|
433 |
-
padding : 0;
|
434 |
-
line-height : 9999px;
|
435 |
-
overflow : hidden;
|
436 |
-
background : url('../images/spinner.png') no-repeat center -11px
|
437 |
-
}
|
438 |
-
|
439 |
-
.spinner-wrapper .spinner-button.button-plus {
|
440 |
-
top : 0;
|
441 |
-
-webkit-border-top-right-radius : 3px !important;
|
442 |
-
-moz-border-radius-topright : 3px !important;
|
443 |
-
border-top-right-radius : 3px !important;
|
444 |
-
}
|
445 |
-
|
446 |
-
.spinner-wrapper .spinner-button.button-minus {
|
447 |
-
bottom : 0;
|
448 |
-
background-position : center -30px;
|
449 |
-
-webkit-border-bottom-right-radius : 3px !important;
|
450 |
-
-moz-border-radius-bottomright : 3px !important;
|
451 |
-
border-bottom-right-radius : 3px !important;
|
452 |
-
}
|
453 |
-
|
454 |
-
.spinner-wrapper .spinner-button.button-plus:active {
|
455 |
-
background-position : center 0px;
|
456 |
-
}
|
457 |
-
|
458 |
-
.spinner-wrapper .spinner-button.button-minus:active {
|
459 |
-
background-position : center -20px;
|
460 |
-
}
|
461 |
-
|
462 |
-
.rm_typography .spinner_container {
|
463 |
-
float : left;
|
464 |
-
margin-right : 10px;
|
465 |
-
}
|
466 |
-
|
467 |
-
.rm_typography .spinner-wrapper {
|
468 |
-
height : 28px;
|
469 |
-
}
|
470 |
-
|
471 |
-
.rm_typography .spinner-wrapper input.number {
|
472 |
-
height : 28px;
|
473 |
-
}
|
474 |
-
|
475 |
-
.rm_typography .spinner-wrapper .spinner-button.button-plus {
|
476 |
-
height : 15px;
|
477 |
-
background-position : center -10px;
|
478 |
-
}
|
479 |
-
|
480 |
-
.rm_typography .spinner-wrapper .spinner-button.button-minus {
|
481 |
-
height : 14px;
|
482 |
-
}
|
483 |
-
|
484 |
-
.the-metabox .spinner-wrapper .spinner-button {
|
485 |
-
left : 49px;
|
486 |
-
}
|
487 |
-
|
488 |
-
.the-metabox.typography .spinner-wrapper .spinner-button {
|
489 |
-
left : 35px;
|
490 |
-
}
|
491 |
-
|
492 |
-
/* images */
|
493 |
-
.the-metabox.images, .the-metabox.images label {
|
494 |
-
margin-left : 0;
|
495 |
-
display : block;
|
496 |
-
}
|
497 |
-
|
498 |
-
.the-metabox.images .slides-wrapper {
|
499 |
-
clear : both;
|
500 |
-
}
|
501 |
-
|
502 |
-
.the-metabox.images .slides-wrapper li {
|
503 |
-
position : relative;
|
504 |
-
}
|
505 |
-
|
506 |
-
.the-metabox.images a.delete {
|
507 |
-
display : block;
|
508 |
-
margin-left : 4px;
|
509 |
-
text-decoration : none;
|
510 |
-
font-weight : bold;
|
511 |
-
color : red;
|
512 |
-
position : absolute;
|
513 |
-
top : 0;
|
514 |
-
right : 0;
|
515 |
-
width : 10px;
|
516 |
-
height : 18px;
|
517 |
-
z-index : 10;
|
518 |
-
cursor : pointer !important;
|
519 |
-
}
|
520 |
-
|
521 |
-
/* wp editor */
|
522 |
-
.wp_themeSkin iframe {
|
523 |
-
background : #fff !important;
|
524 |
-
}
|
525 |
-
|
526 |
-
/* custom tabs */
|
527 |
-
.customtab_item {
|
528 |
-
border-style : solid;
|
529 |
-
border-width : 1px;
|
530 |
-
line-height : 1;
|
531 |
-
margin-bottom : 20px;
|
532 |
-
padding : 0;
|
533 |
-
background-color : #f5f5f5;
|
534 |
-
background-image : -moz-linear-gradient(center top, #f9f9f9, #f5f5f5);
|
535 |
-
border-color : #dfdfdf;
|
536 |
-
border-radius : 3px 3px 3px 3px;
|
537 |
-
box-shadow : 0 1px 0 #fff inset;
|
538 |
-
min-width : 255px;
|
539 |
-
position : relative;
|
540 |
-
}
|
541 |
-
|
542 |
-
.customtab_item .handlediv {
|
543 |
-
position : relative;
|
544 |
-
top : -4px;
|
545 |
-
}
|
546 |
-
|
547 |
-
.customtab_item h3 {
|
548 |
-
min-height : 21px
|
549 |
-
}
|
550 |
-
|
551 |
-
.customtab_item .inside {
|
552 |
-
padding : 10px !important;
|
553 |
-
}
|
554 |
-
|
555 |
-
.customtab_item .deps {
|
556 |
-
display : none;
|
557 |
-
}
|
558 |
-
|
559 |
-
.customtab_item .addoptions p.option {
|
560 |
-
margin : 5px 0 5px 200px
|
561 |
-
}
|
562 |
-
|
563 |
-
.customtab_item .addoptions p label {
|
564 |
-
width : 80px !important;
|
565 |
-
}
|
566 |
-
|
567 |
-
.customtab_item .add-field-option {
|
568 |
-
margin-bottom : 10px !important;
|
569 |
-
}
|
570 |
-
|
571 |
-
.customtab_item .remove_item {
|
572 |
-
float : right;
|
573 |
-
}
|
574 |
-
|
575 |
-
.metabox-sortable-placeholder {
|
576 |
-
border : 1px dotted #dedede;
|
577 |
-
margin : 10px 0
|
578 |
-
}
|
579 |
-
|
580 |
-
.the-metabox.customtabs {
|
581 |
-
margin-left : 0;
|
582 |
-
}
|
583 |
-
|
584 |
-
#customtab_item_sample {
|
585 |
-
display : none;
|
586 |
-
}
|
587 |
-
|
588 |
-
.the-metabox.customtabs .field-row {
|
589 |
-
margin-bottom : 10px;
|
590 |
-
}
|
591 |
-
|
592 |
-
#yit_custom_tabs label {
|
593 |
-
font-weight : normal;
|
594 |
-
width : auto;
|
595 |
-
float : none;
|
596 |
-
line-height : auto;
|
597 |
-
margin-left : 0;
|
598 |
-
}
|
599 |
-
|
600 |
-
.wp-admin p label input[type=radio] {
|
601 |
-
width : 16px;
|
602 |
-
margin-right : 10px;
|
603 |
-
margin-top : 3px;
|
604 |
-
}
|
605 |
-
|
606 |
-
.wp-admin .form-field._preset_onsale_icon_field label input[type=radio] {
|
607 |
-
margin-top : 0;
|
608 |
-
}
|
609 |
-
|
610 |
-
.the-metabox .spinner {
|
611 |
-
margin-top : 5px;
|
612 |
-
float : none;
|
613 |
-
}
|
614 |
-
|
615 |
-
/*sidebars*/
|
616 |
-
#choose-sidebars.choose {
|
617 |
-
margin-left : 0px;
|
618 |
-
}
|
619 |
-
|
620 |
-
#_active_page_options-container label, #_active_page_options-container p {
|
621 |
-
display : inline-block;
|
622 |
-
margin : 0px;
|
623 |
-
}
|
624 |
-
|
625 |
-
#_active_page_options-container label {
|
626 |
-
margin-right : 10px;
|
627 |
-
margin-top : 3px;
|
628 |
-
}
|
629 |
-
|
630 |
-
#_active_page_options-container {
|
631 |
-
float : right;
|
632 |
-
margin-right : 20px;
|
633 |
-
margin-top : 5px;
|
634 |
-
z-index : 9999 !important;
|
635 |
-
position : absolute;
|
636 |
-
right : 0;
|
637 |
-
}
|
638 |
-
|
639 |
-
/*-----------------------
|
640 |
-
* Colorpicker - fix issues in combination with third-party themes or plugin (Basel, VC Addons, ...)
|
641 |
-
*/
|
642 |
-
.metaboxes-tab .the-metabox.colorpicker {
|
643 |
-
display : block;
|
644 |
-
width : auto;
|
645 |
-
height : auto;
|
646 |
-
overflow : visible;
|
647 |
-
top : auto;
|
648 |
-
left : auto;
|
649 |
-
background : transparent;
|
650 |
-
position : static;
|
651 |
-
z-index : 1;
|
652 |
-
font-family : inherit;
|
653 |
}
|
1 |
+
/* self-clear floats */
|
2 |
+
.clearfix:after {
|
3 |
+
content : ".";
|
4 |
+
display : block;
|
5 |
+
height : 0;
|
6 |
+
clear : both;
|
7 |
+
visibility : hidden;
|
8 |
+
overflow : hidden;
|
9 |
+
}
|
10 |
+
|
11 |
+
/* ie.css */
|
12 |
+
* html .clearfix { /* IE6 */
|
13 |
+
height : 1%;
|
14 |
+
}
|
15 |
+
|
16 |
+
*:first-child + html .clearfix { /* IE7 */
|
17 |
+
min-height : 1%;
|
18 |
+
}
|
19 |
+
|
20 |
+
.clearboth {
|
21 |
+
clear : both
|
22 |
+
}
|
23 |
+
|
24 |
+
/* === TAB STYLE */
|
25 |
+
.metaboxes-tab {
|
26 |
+
margin : -6px -12px -8px;
|
27 |
+
}
|
28 |
+
|
29 |
+
.metaboxes-tab div.tabs-panel {
|
30 |
+
height : auto;
|
31 |
+
overflow : visible;
|
32 |
+
margin-top : 0px;
|
33 |
+
padding : 0 10px;
|
34 |
+
background : none;
|
35 |
+
border : 0;
|
36 |
+
}
|
37 |
+
|
38 |
+
.metaboxes-tab ul.metaboxes-tabs {
|
39 |
+
background : #f1f1f1;
|
40 |
+
margin : 0;
|
41 |
+
padding : 10px 0 0 5px;
|
42 |
+
}
|
43 |
+
|
44 |
+
.metaboxes-tab ul.metaboxes-tabs li {
|
45 |
+
float : left;
|
46 |
+
background : #dedede;
|
47 |
+
margin : 0 0 0 5px;
|
48 |
+
}
|
49 |
+
|
50 |
+
.metaboxes-tab ul.metaboxes-tabs li a {
|
51 |
+
color : #555;
|
52 |
+
text-decoration : none;
|
53 |
+
padding : 8px 15px;
|
54 |
+
display : block;
|
55 |
+
box-shadow : none !important;
|
56 |
+
}
|
57 |
+
|
58 |
+
.metaboxes-tab ul.metaboxes-tabs li.tabs {
|
59 |
+
background : #fff;
|
60 |
+
}
|
61 |
+
|
62 |
+
.metaboxes-tab p.field-row {
|
63 |
+
margin : 20px 0;
|
64 |
+
}
|
65 |
+
|
66 |
+
.metaboxes-tab div.sep {
|
67 |
+
height : 1px;
|
68 |
+
background : #dfdfdf;
|
69 |
+
clear : both;
|
70 |
+
margin-left : -10px;
|
71 |
+
margin-right : -10px;
|
72 |
+
}
|
73 |
+
|
74 |
+
.metaboxes-tab label {
|
75 |
+
font-weight : bold;
|
76 |
+
width : 160px;
|
77 |
+
float : left;
|
78 |
+
line-height : 23px;
|
79 |
+
margin-left : -184px;
|
80 |
+
}
|
81 |
+
|
82 |
+
.metaboxes-tab label small {
|
83 |
+
font-weight : normal;
|
84 |
+
line-height : 15px;
|
85 |
+
font-style : italic;
|
86 |
+
color : #999;
|
87 |
+
display : block;
|
88 |
+
}
|
89 |
+
|
90 |
+
.metaboxes-tab .wp-picker-container label {
|
91 |
+
font-weight : inherit;
|
92 |
+
width : auto;
|
93 |
+
float : none;
|
94 |
+
line-height : inherit;
|
95 |
+
margin-left : 0;
|
96 |
+
}
|
97 |
+
|
98 |
+
.metaboxes-tab input[type="checkbox"] {
|
99 |
+
vertical-align : middle
|
100 |
+
}
|
101 |
+
|
102 |
+
.metaboxes-tab input.button-secondary, .metaboxes-tab input.checkbox {
|
103 |
+
width : auto;
|
104 |
+
}
|
105 |
+
|
106 |
+
.metaboxes-tab p.field-row.textarea .description {
|
107 |
+
vertical-align : top;
|
108 |
+
}
|
109 |
+
|
110 |
+
.metaboxes-tab p.field-row.checkbox {
|
111 |
+
background : none;
|
112 |
+
}
|
113 |
+
|
114 |
+
.metaboxes-tab .the-metabox {
|
115 |
+
margin : 20px 0;
|
116 |
+
margin-left : 184px;
|
117 |
+
}
|
118 |
+
|
119 |
+
.metaboxes-tab .the-metabox.no-label {
|
120 |
+
margin : 20px 0;
|
121 |
+
margin-left : 0;
|
122 |
+
}
|
123 |
+
|
124 |
+
.metaboxes-tab hr {
|
125 |
+
height : 0px;
|
126 |
+
border-top : 1px solid #dadada;
|
127 |
+
width : auto;
|
128 |
+
margin-left : -10px;
|
129 |
+
margin-right : -10px;
|
130 |
+
}
|
131 |
+
|
132 |
+
.metaboxes-tab .the-metabox p {
|
133 |
+
margin : 0;
|
134 |
+
}
|
135 |
+
|
136 |
+
.metaboxes-tab .the-metabox:last-child {
|
137 |
+
border-bottom : 0px;
|
138 |
+
}
|
139 |
+
|
140 |
+
.metaboxes-tab .the-metabox.checkbox {
|
141 |
+
background : none;
|
142 |
+
}
|
143 |
+
|
144 |
+
.metaboxes-tab span.description.inline {
|
145 |
+
display : inline-block;
|
146 |
+
line-height : 23px;
|
147 |
+
width : auto;
|
148 |
+
vertical-align : middle;
|
149 |
+
margin : 0;
|
150 |
+
}
|
151 |
+
|
152 |
+
.metaboxes-tab .slider label {
|
153 |
+
padding : 15px 0;
|
154 |
+
}
|
155 |
+
|
156 |
+
/* sortable table posts */
|
157 |
+
|
158 |
+
#the-list.ui-sortable tr:hover {
|
159 |
+
cursor : move;
|
160 |
+
}
|
161 |
+
|
162 |
+
.the-metabox.preview {
|
163 |
+
float : none;
|
164 |
+
}
|
165 |
+
|
166 |
+
.metaboxes-tab .the-metabox.no-label.preview {
|
167 |
+
margin-left : 184px;
|
168 |
+
}
|
169 |
+
|
170 |
+
.metaboxes-tab .the-metabox.no-label.preview img {
|
171 |
+
box-shadow : 0 1px 8px rgba(0, 0, 0, 0.2);
|
172 |
+
}
|
173 |
+
|
174 |
+
/**************************************
|
175 |
+
FIELDS
|
176 |
+
***************************************/
|
177 |
+
|
178 |
+
.metaboxes-tab select,
|
179 |
+
.metaboxes-tab input[type=text],
|
180 |
+
.metaboxes-tab input[type=number],
|
181 |
+
.metaboxes-tab textarea,
|
182 |
+
.metaboxes-tab .yith-plugin-fw-select,
|
183 |
+
.metaboxes-tab .yith-plugin-fw-slider-container,
|
184 |
+
.metaboxes-tab .yith-plugin-fw-text-input,
|
185 |
+
.metaboxes-tab .yith-plugin-fw-text-array-table,
|
186 |
+
.metaboxes-tab .yith-plugin-fw-textarea {
|
187 |
+
width : 400px;
|
188 |
+
max-width : 100%;
|
189 |
+
}
|
190 |
+
|
191 |
+
.metaboxes-tab .yith-plugin-fw-text-array-table input[type=text] {
|
192 |
+
width : 100%;
|
193 |
+
}
|
194 |
+
|
195 |
+
/* wp editor */
|
196 |
+
.the-metabox.textarea-editor .mceIframeContainer {
|
197 |
+
background : #fff;
|
198 |
+
}
|
199 |
+
|
200 |
+
.the-metabox.textarea-editor label {
|
201 |
+
margin-top : 24px;
|
202 |
+
}
|
203 |
+
|
204 |
+
/* categories */
|
205 |
+
.categories-panel {
|
206 |
+
width : 30%;
|
207 |
+
float : left;
|
208 |
+
margin-right : 4px;
|
209 |
+
}
|
210 |
+
|
211 |
+
.categories-panel .box {
|
212 |
+
height : 200px;
|
213 |
+
border : 1px solid #dfdfdf;
|
214 |
+
background : #fff;
|
215 |
+
padding : 6px 10px;
|
216 |
+
overflow : auto;
|
217 |
+
}
|
218 |
+
|
219 |
+
.categories-panel ul {
|
220 |
+
list-style : none;
|
221 |
+
margin : 0;
|
222 |
+
}
|
223 |
+
|
224 |
+
.categories-panel ul li {
|
225 |
+
line-height : 19px;
|
226 |
+
margin : 0;
|
227 |
+
padding : 0;
|
228 |
+
word-wrap : break-word;
|
229 |
+
}
|
230 |
+
|
231 |
+
.categories-panel ul li label {
|
232 |
+
font-weight : normal !important;
|
233 |
+
margin-left : 0 !important;
|
234 |
+
}
|
235 |
+
|
236 |
+
.categories-panel input.newcategory {
|
237 |
+
width : 100%;
|
238 |
+
margin-bottom : 3px;
|
239 |
+
}
|
240 |
+
|
241 |
+
/* contact form */
|
242 |
+
.contactform_item {
|
243 |
+
border-style : solid;
|
244 |
+
border-width : 1px;
|
245 |
+
line-height : 1;
|
246 |
+
margin-bottom : 20px;
|
247 |
+
padding : 0;
|
248 |
+
background-color : #f5f5f5;
|
249 |
+
background-image : -moz-linear-gradient(center top, #f9f9f9, #f5f5f5);
|
250 |
+
border-color : #dfdfdf;
|
251 |
+
border-radius : 3px 3px 3px 3px;
|
252 |
+
box-shadow : 0 1px 0 #fff inset;
|
253 |
+
min-width : 255px;
|
254 |
+
position : relative;
|
255 |
+
}
|
256 |
+
|
257 |
+
.contactform_item .handlediv {
|
258 |
+
position : relative;
|
259 |
+
top : -4px;
|
260 |
+
}
|
261 |
+
|
262 |
+
.contactform_item h3 {
|
263 |
+
min-height : 21px;
|
264 |
+
margin : 13px;
|
265 |
+
}
|
266 |
+
|
267 |
+
.contactform_item .inside {
|
268 |
+
padding : 10px !important;
|
269 |
+
}
|
270 |
+
|
271 |
+
.contactform_item .deps {
|
272 |
+
display : none;
|
273 |
+
}
|
274 |
+
|
275 |
+
.contactform_item .addoptions p.option {
|
276 |
+
margin : 5px 0 5px 200px
|
277 |
+
}
|
278 |
+
|
279 |
+
.contactform_item .addoptions p label {
|
280 |
+
width : 80px !important;
|
281 |
+
}
|
282 |
+
|
283 |
+
.contactform_item .add-field-option {
|
284 |
+
margin-bottom : 10px !important;
|
285 |
+
}
|
286 |
+
|
287 |
+
.remove_item {
|
288 |
+
float : right;
|
289 |
+
}
|
290 |
+
|
291 |
+
.metabox-sortable-placeholder {
|
292 |
+
border : 1px dotted #dedede;
|
293 |
+
margin : 10px 0
|
294 |
+
}
|
295 |
+
|
296 |
+
/* features tab */
|
297 |
+
.featurestab_item {
|
298 |
+
border-style : solid;
|
299 |
+
border-width : 1px;
|
300 |
+
line-height : 1;
|
301 |
+
margin-bottom : 20px;
|
302 |
+
padding : 0;
|
303 |
+
background-color : #f5f5f5;
|
304 |
+
background-image : -moz-linear-gradient(center top, #f9f9f9, #f5f5f5);
|
305 |
+
border-color : #dfdfdf;
|
306 |
+
border-radius : 3px 3px 3px 3px;
|
307 |
+
box-shadow : 0 1px 0 #fff inset;
|
308 |
+
min-width : 255px;
|
309 |
+
position : relative;
|
310 |
+
}
|
311 |
+
|
312 |
+
.featurestab_item .handlediv {
|
313 |
+
position : relative;
|
314 |
+
top : -4px;
|
315 |
+
}
|
316 |
+
|
317 |
+
.featurestab_item h3 {
|
318 |
+
min-height : 21px
|
319 |
+
}
|
320 |
+
|
321 |
+
.featurestab_item .inside {
|
322 |
+
padding : 10px !important;
|
323 |
+
}
|
324 |
+
|
325 |
+
.featurestab_item .deps {
|
326 |
+
display : none;
|
327 |
+
}
|
328 |
+
|
329 |
+
.featurestab_item .addoptions p.option {
|
330 |
+
margin : 5px 0 5px 200px
|
331 |
+
}
|
332 |
+
|
333 |
+
.featurestab_item .addoptions p label {
|
334 |
+
width : 80px !important;
|
335 |
+
}
|
336 |
+
|
337 |
+
.featurestab_item .add-field-option {
|
338 |
+
margin-bottom : 10px !important;
|
339 |
+
}
|
340 |
+
|
341 |
+
.messages-panel.updated {
|
342 |
+
margin : 10px 0px 10px !important;
|
343 |
+
max-width : 1200px;
|
344 |
+
border-radius : 5px;
|
345 |
+
-webkit-box-sizing : border-box;
|
346 |
+
box-sizing : border-box;
|
347 |
+
}
|
348 |
+
|
349 |
+
.ui-widget-overlay {
|
350 |
+
background-image : none !important;
|
351 |
+
}
|
352 |
+
|
353 |
+
.the-metabox .icon_type {
|
354 |
+
width : 30%;
|
355 |
+
float : left;
|
356 |
+
margin-right : 40px
|
357 |
+
}
|
358 |
+
|
359 |
+
#post-type-settings .category-list label {
|
360 |
+
width : 187px;
|
361 |
+
}
|
362 |
+
|
363 |
+
.remove_cat {
|
364 |
+
float : right;
|
365 |
+
text-align : center;
|
366 |
+
display : block;
|
367 |
+
width : 20px;
|
368 |
+
height : 20px;
|
369 |
+
border-radius : 20px;
|
370 |
+
font-weight : bold;
|
371 |
+
font-size : 10px;
|
372 |
+
background : #efefef;
|
373 |
+
text-decoration : none;
|
374 |
+
}
|
375 |
+
|
376 |
+
/* typography */
|
377 |
+
.the-metabox.typography .select_wrapper.font-family {
|
378 |
+
width : 200px;
|
379 |
+
}
|
380 |
+
|
381 |
+
.the-metabox.typography .spinner_container {
|
382 |
+
float : left;
|
383 |
+
margin-right : 10px;
|
384 |
+
}
|
385 |
+
|
386 |
+
.the-metabox.typography .spinner_container input.number {
|
387 |
+
width : 50px !important;
|
388 |
+
-webkit-border-top-right-radius : 0px;
|
389 |
+
-webkit-border-bottom-right-radius : 0px;
|
390 |
+
-moz-border-radius-topright : 0px;
|
391 |
+
-moz-border-radius-bottomright : 0px;
|
392 |
+
border-top-right-radius : 0px;
|
393 |
+
border-bottom-right-radius : 0px;
|
394 |
+
}
|
395 |
+
|
396 |
+
/* number */
|
397 |
+
.the-metabox.number input.number {
|
398 |
+
width : 50px !important;
|
399 |
+
}
|
400 |
+
|
401 |
+
/* number */
|
402 |
+
.rm_number .number {
|
403 |
+
width : 70px;
|
404 |
+
text-align : right;
|
405 |
+
-webkit-border-top-right-radius : 0px;
|
406 |
+
-webkit-border-bottom-right-radius : 0px;
|
407 |
+
-moz-border-radius-topright : 0px;
|
408 |
+
-moz-border-radius-bottomright : 0px;
|
409 |
+
border-top-right-radius : 0px;
|
410 |
+
border-bottom-right-radius : 0px;
|
411 |
+
}
|
412 |
+
|
413 |
+
.spinner-wrapper {
|
414 |
+
position : relative;
|
415 |
+
height : 23px;
|
416 |
+
overflow : hidden;
|
417 |
+
}
|
418 |
+
|
419 |
+
.spinner-wrapper input.number {
|
420 |
+
float : left;
|
421 |
+
}
|
422 |
+
|
423 |
+
.spinner-wrapper .spinner-button {
|
424 |
+
cursor : pointer;
|
425 |
+
float : left;
|
426 |
+
position : absolute;
|
427 |
+
left : 69px;
|
428 |
+
width : 15px;
|
429 |
+
height : 12px;
|
430 |
+
border : 1px solid #dfdfdf;
|
431 |
+
background : #fff;
|
432 |
+
margin : 0;
|
433 |
+
padding : 0;
|
434 |
+
line-height : 9999px;
|
435 |
+
overflow : hidden;
|
436 |
+
background : url('../images/spinner.png') no-repeat center -11px
|
437 |
+
}
|
438 |
+
|
439 |
+
.spinner-wrapper .spinner-button.button-plus {
|
440 |
+
top : 0;
|
441 |
+
-webkit-border-top-right-radius : 3px !important;
|
442 |
+
-moz-border-radius-topright : 3px !important;
|
443 |
+
border-top-right-radius : 3px !important;
|
444 |
+
}
|
445 |
+
|
446 |
+
.spinner-wrapper .spinner-button.button-minus {
|
447 |
+
bottom : 0;
|
448 |
+
background-position : center -30px;
|
449 |
+
-webkit-border-bottom-right-radius : 3px !important;
|
450 |
+
-moz-border-radius-bottomright : 3px !important;
|
451 |
+
border-bottom-right-radius : 3px !important;
|
452 |
+
}
|
453 |
+
|
454 |
+
.spinner-wrapper .spinner-button.button-plus:active {
|
455 |
+
background-position : center 0px;
|
456 |
+
}
|
457 |
+
|
458 |
+
.spinner-wrapper .spinner-button.button-minus:active {
|
459 |
+
background-position : center -20px;
|
460 |
+
}
|
461 |
+
|
462 |
+
.rm_typography .spinner_container {
|
463 |
+
float : left;
|
464 |
+
margin-right : 10px;
|
465 |
+
}
|
466 |
+
|
467 |
+
.rm_typography .spinner-wrapper {
|
468 |
+
height : 28px;
|
469 |
+
}
|
470 |
+
|
471 |
+
.rm_typography .spinner-wrapper input.number {
|
472 |
+
height : 28px;
|
473 |
+
}
|
474 |
+
|
475 |
+
.rm_typography .spinner-wrapper .spinner-button.button-plus {
|
476 |
+
height : 15px;
|
477 |
+
background-position : center -10px;
|
478 |
+
}
|
479 |
+
|
480 |
+
.rm_typography .spinner-wrapper .spinner-button.button-minus {
|
481 |
+
height : 14px;
|
482 |
+
}
|
483 |
+
|
484 |
+
.the-metabox .spinner-wrapper .spinner-button {
|
485 |
+
left : 49px;
|
486 |
+
}
|
487 |
+
|
488 |
+
.the-metabox.typography .spinner-wrapper .spinner-button {
|
489 |
+
left : 35px;
|
490 |
+
}
|
491 |
+
|
492 |
+
/* images */
|
493 |
+
.the-metabox.images, .the-metabox.images label {
|
494 |
+
margin-left : 0;
|
495 |
+
display : block;
|
496 |
+
}
|
497 |
+
|
498 |
+
.the-metabox.images .slides-wrapper {
|
499 |
+
clear : both;
|
500 |
+
}
|
501 |
+
|
502 |
+
.the-metabox.images .slides-wrapper li {
|
503 |
+
position : relative;
|
504 |
+
}
|
505 |
+
|
506 |
+
.the-metabox.images a.delete {
|
507 |
+
display : block;
|
508 |
+
margin-left : 4px;
|
509 |
+
text-decoration : none;
|
510 |
+
font-weight : bold;
|
511 |
+
color : red;
|
512 |
+
position : absolute;
|
513 |
+
top : 0;
|
514 |
+
right : 0;
|
515 |
+
width : 10px;
|
516 |
+
height : 18px;
|
517 |
+
z-index : 10;
|
518 |
+
cursor : pointer !important;
|
519 |
+
}
|
520 |
+
|
521 |
+
/* wp editor */
|
522 |
+
.wp_themeSkin iframe {
|
523 |
+
background : #fff !important;
|
524 |
+
}
|
525 |
+
|
526 |
+
/* custom tabs */
|
527 |
+
.customtab_item {
|
528 |
+
border-style : solid;
|
529 |
+
border-width : 1px;
|
530 |
+
line-height : 1;
|
531 |
+
margin-bottom : 20px;
|
532 |
+
padding : 0;
|
533 |
+
background-color : #f5f5f5;
|
534 |
+
background-image : -moz-linear-gradient(center top, #f9f9f9, #f5f5f5);
|
535 |
+
border-color : #dfdfdf;
|
536 |
+
border-radius : 3px 3px 3px 3px;
|
537 |
+
box-shadow : 0 1px 0 #fff inset;
|
538 |
+
min-width : 255px;
|
539 |
+
position : relative;
|
540 |
+
}
|
541 |
+
|
542 |
+
.customtab_item .handlediv {
|
543 |
+
position : relative;
|
544 |
+
top : -4px;
|
545 |
+
}
|
546 |
+
|
547 |
+
.customtab_item h3 {
|
548 |
+
min-height : 21px
|
549 |
+
}
|
550 |
+
|
551 |
+
.customtab_item .inside {
|
552 |
+
padding : 10px !important;
|
553 |
+
}
|
554 |
+
|
555 |
+
.customtab_item .deps {
|
556 |
+
display : none;
|
557 |
+
}
|
558 |
+
|
559 |
+
.customtab_item .addoptions p.option {
|
560 |
+
margin : 5px 0 5px 200px
|
561 |
+
}
|
562 |
+
|
563 |
+
.customtab_item .addoptions p label {
|
564 |
+
width : 80px !important;
|
565 |
+
}
|
566 |
+
|
567 |
+
.customtab_item .add-field-option {
|
568 |
+
margin-bottom : 10px !important;
|
569 |
+
}
|
570 |
+
|
571 |
+
.customtab_item .remove_item {
|
572 |
+
float : right;
|
573 |
+
}
|
574 |
+
|
575 |
+
.metabox-sortable-placeholder {
|
576 |
+
border : 1px dotted #dedede;
|
577 |
+
margin : 10px 0
|
578 |
+
}
|
579 |
+
|
580 |
+
.the-metabox.customtabs {
|
581 |
+
margin-left : 0;
|
582 |
+
}
|
583 |
+
|
584 |
+
#customtab_item_sample {
|
585 |
+
display : none;
|
586 |
+
}
|
587 |
+
|
588 |
+
.the-metabox.customtabs .field-row {
|
589 |
+
margin-bottom : 10px;
|
590 |
+
}
|
591 |
+
|
592 |
+
#yit_custom_tabs label {
|
593 |
+
font-weight : normal;
|
594 |
+
width : auto;
|
595 |
+
float : none;
|
596 |
+
line-height : auto;
|
597 |
+
margin-left : 0;
|
598 |
+
}
|
599 |
+
|
600 |
+
.wp-admin p label input[type=radio] {
|
601 |
+
width : 16px;
|
602 |
+
margin-right : 10px;
|
603 |
+
margin-top : 3px;
|
604 |
+
}
|
605 |
+
|
606 |
+
.wp-admin .form-field._preset_onsale_icon_field label input[type=radio] {
|
607 |
+
margin-top : 0;
|
608 |
+
}
|
609 |
+
|
610 |
+
.the-metabox .spinner {
|
611 |
+
margin-top : 5px;
|
612 |
+
float : none;
|
613 |
+
}
|
614 |
+
|
615 |
+
/*sidebars*/
|
616 |
+
#choose-sidebars.choose {
|
617 |
+
margin-left : 0px;
|
618 |
+
}
|
619 |
+
|
620 |
+
#_active_page_options-container label, #_active_page_options-container p {
|
621 |
+
display : inline-block;
|
622 |
+
margin : 0px;
|
623 |
+
}
|
624 |
+
|
625 |
+
#_active_page_options-container label {
|
626 |
+
margin-right : 10px;
|
627 |
+
margin-top : 3px;
|
628 |
+
}
|
629 |
+
|
630 |
+
#_active_page_options-container {
|
631 |
+
float : right;
|
632 |
+
margin-right : 20px;
|
633 |
+
margin-top : 5px;
|
634 |
+
z-index : 9999 !important;
|
635 |
+
position : absolute;
|
636 |
+
right : 0;
|
637 |
+
}
|
638 |
+
|
639 |
+
/*-----------------------
|
640 |
+
* Colorpicker - fix issues in combination with third-party themes or plugin (Basel, VC Addons, ...)
|
641 |
+
*/
|
642 |
+
.metaboxes-tab .the-metabox.colorpicker {
|
643 |
+
display : block;
|
644 |
+
width : auto;
|
645 |
+
height : auto;
|
646 |
+
overflow : visible;
|
647 |
+
top : auto;
|
648 |
+
left : auto;
|
649 |
+
background : transparent;
|
650 |
+
position : static;
|
651 |
+
z-index : 1;
|
652 |
+
font-family : inherit;
|
653 |
}
|
plugin-fw/assets/css/yit-plugin-panel.css
CHANGED
@@ -1,481 +1,482 @@
|
|
1 |
-
/*
|
2 |
-
* This file belongs to the YIT Plugin Framework.
|
3 |
-
*
|
4 |
-
* This source file is subject to the GNU GENERAL PUBLIC LICENSE (GPL 3.0)
|
5 |
-
* that is bundled with this package in the file LICENSE.txt.
|
6 |
-
* It is also available through the world-wide-web at this URL:
|
7 |
-
* http://www.gnu.org/licenses/gpl-3.0.txt
|
8 |
-
*/
|
9 |
-
.plugin-option tr {
|
10 |
-
border-bottom : 1px solid #
|
11 |
-
}
|
12 |
-
|
13 |
-
.plugin-option .yit_options,
|
14 |
-
.plugin-option .yit-options {
|
15 |
-
border-bottom : 0px;
|
16 |
-
}
|
17 |
-
|
18 |
-
.plugin-option .yit-options .option,
|
19 |
-
.plugin-option .yit_options .option {
|
20 |
-
width : 600px;
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
.ie8 .
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
overflow-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
border-
|
85 |
-
border-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
border-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
padding-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
.yit-container.plugin-licence-activation .arrow-left:
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
border-
|
141 |
-
border-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
border-
|
149 |
-
border-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
.yit-container.plugin-licence-activation
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
-
|
214 |
-
-
|
215 |
-
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
border
|
247 |
-
border-
|
248 |
-
border-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
.yit-container.plugin-licence-activation table:not(.to-active-table)
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
.yit-container.plugin-licence-activation table
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
.yit-container.plugin-licence-activation table
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
-
|
304 |
-
-
|
305 |
-
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
.yit-container.plugin-licence-activation input[type=
|
335 |
-
|
336 |
-
-
|
337 |
-
-
|
338 |
-
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
.yit-container.plugin-licence-activation input[type=
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
.yit-container.plugin-licence-activation input[type=
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
text-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
#adminmenu li.menu-top.yit-pointer-selected-row,
|
387 |
-
#adminmenu li.
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
#adminmenu
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
}
|
414 |
-
|
415 |
-
/* === YIT FRAMEWORK === */
|
416 |
-
.plugin-card .plugin-icon img {
|
417 |
-
max-width : 100%;
|
418 |
-
width : auto;
|
419 |
-
height : auto;
|
420 |
-
}
|
421 |
-
|
422 |
-
/* === Panel Content and Container === */
|
423 |
-
.yit-admin-panel-container {
|
424 |
-
position : relative;
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
.yith-plugin-fw-
|
439 |
-
.yith-plugin-fw-
|
440 |
-
.yith-plugin-fw-text-
|
441 |
-
.yith-plugin-fw-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
}
|
479 |
-
|
480 |
-
|
481 |
-
|
|
1 |
+
/*
|
2 |
+
* This file belongs to the YIT Plugin Framework.
|
3 |
+
*
|
4 |
+
* This source file is subject to the GNU GENERAL PUBLIC LICENSE (GPL 3.0)
|
5 |
+
* that is bundled with this package in the file LICENSE.txt.
|
6 |
+
* It is also available through the world-wide-web at this URL:
|
7 |
+
* http://www.gnu.org/licenses/gpl-3.0.txt
|
8 |
+
*/
|
9 |
+
.plugin-option tr {
|
10 |
+
border-bottom : 1px solid #ebebeb;
|
11 |
+
}
|
12 |
+
|
13 |
+
.plugin-option .yit_options,
|
14 |
+
.plugin-option .yit-options {
|
15 |
+
border-bottom : 0px;
|
16 |
+
}
|
17 |
+
|
18 |
+
.plugin-option .yit-options .option,
|
19 |
+
.plugin-option .yit_options .option {
|
20 |
+
width : 600px;
|
21 |
+
}
|
22 |
+
|
23 |
+
.plugin-option .form-table > tbody > tr > td {
|
24 |
+
padding : 25px 15px;
|
25 |
+
}
|
26 |
+
|
27 |
+
.ie8 .yit_options select,
|
28 |
+
.ie8 .yit-options select {
|
29 |
+
height : 26px;
|
30 |
+
}
|
31 |
+
|
32 |
+
/* Style to woocommerce panel*/
|
33 |
+
|
34 |
+
#plugin-fw-wc, #yith-plugin-fw-panel {
|
35 |
+
padding-top : 20px;
|
36 |
+
}
|
37 |
+
|
38 |
+
#plugin-fw-wc table.form-table, #yith-plugin-fw-panel table.form-table {
|
39 |
+
background-color : #fff;
|
40 |
+
margin-bottom : 20px;
|
41 |
+
}
|
42 |
+
|
43 |
+
#plugin-fw-wc table.form-table th, #yith-plugin-fw-panel table.form-table th {
|
44 |
+
padding : 20px;
|
45 |
+
}
|
46 |
+
|
47 |
+
#plugin-fw-wc h3, #yith-plugin-fw-panel h3 {
|
48 |
+
padding : 0 0 0 10px;
|
49 |
+
margin : 0;
|
50 |
+
}
|
51 |
+
|
52 |
+
/* === Plugins Upgrader === */
|
53 |
+
|
54 |
+
.yit-plugin-changelog-wrapper {
|
55 |
+
display : none;
|
56 |
+
}
|
57 |
+
|
58 |
+
.yit-plugin-changelog-title {
|
59 |
+
text-transform : uppercase;
|
60 |
+
}
|
61 |
+
|
62 |
+
.yit-plugin-changelog {
|
63 |
+
height : calc(100% - 15px);
|
64 |
+
width : calc(100% - 15px);
|
65 |
+
overflow-x : hidden;
|
66 |
+
overflow-y : auto;
|
67 |
+
z-index : 999;
|
68 |
+
background : #fcfcfc;
|
69 |
+
}
|
70 |
+
|
71 |
+
/* === Plugins Licence Activation === */
|
72 |
+
|
73 |
+
.yit-container.plugin-licence-activation {
|
74 |
+
font-family : 'Raleway', sans-serif;
|
75 |
+
}
|
76 |
+
|
77 |
+
.yit-container.plugin-licence-activation .to-active-wrapper {
|
78 |
+
margin-bottom : 60px;
|
79 |
+
}
|
80 |
+
|
81 |
+
.yit-container.plugin-licence-activation .to-active-wrapper form.to-active-form {
|
82 |
+
position : relative;
|
83 |
+
border-color : #e1e1e1;
|
84 |
+
border-style : solid;
|
85 |
+
border-width : 0;
|
86 |
+
}
|
87 |
+
|
88 |
+
.yit-container.plugin-licence-activation .to-active-wrapper form.to-active-form:first-child {
|
89 |
+
border-top-width : 1px;
|
90 |
+
}
|
91 |
+
|
92 |
+
.yit-container.plugin-licence-activation .to-active-wrapper form.to-active-form:last-child {
|
93 |
+
border-bottom-width : 1px;
|
94 |
+
}
|
95 |
+
|
96 |
+
.yit-container.plugin-licence-activation .to-active-wrapper table.to-active-table {
|
97 |
+
border-width : 0;
|
98 |
+
border-spacing : 0;
|
99 |
+
width : 100%;
|
100 |
+
}
|
101 |
+
|
102 |
+
.yit-container.plugin-licence-activation .message {
|
103 |
+
display : none;
|
104 |
+
line-height : normal;
|
105 |
+
background : #fff url(../images/licence-error.png) 15px center no-repeat;
|
106 |
+
padding-left : 65px;
|
107 |
+
padding-right : 15px;
|
108 |
+
width : 150px;
|
109 |
+
}
|
110 |
+
|
111 |
+
.yit-container.plugin-licence-activation .message-wrapper {
|
112 |
+
height : 75px;
|
113 |
+
display : none;
|
114 |
+
position : absolute;
|
115 |
+
top : 0;
|
116 |
+
right : -250px;
|
117 |
+
border : 1px solid #ff3838;
|
118 |
+
}
|
119 |
+
|
120 |
+
.yit-container.plugin-licence-activation .message-wrapper.visible {
|
121 |
+
display : table;
|
122 |
+
}
|
123 |
+
|
124 |
+
.yit-container.plugin-licence-activation .message {
|
125 |
+
display : table-cell;
|
126 |
+
vertical-align : middle;
|
127 |
+
}
|
128 |
+
|
129 |
+
.yit-container.plugin-licence-activation .arrow-left:after,
|
130 |
+
.yit-container.plugin-licence-activation .arrow-left:before {
|
131 |
+
content : "";
|
132 |
+
display : block;
|
133 |
+
width : 0;
|
134 |
+
height : 0;
|
135 |
+
position : absolute;
|
136 |
+
}
|
137 |
+
|
138 |
+
.yit-container.plugin-licence-activation .arrow-left:before {
|
139 |
+
border-top : 9px solid transparent;
|
140 |
+
border-bottom : 9px solid transparent;
|
141 |
+
border-right : 9px solid #ff3838;
|
142 |
+
top : 26px;
|
143 |
+
left : -9px;
|
144 |
+
}
|
145 |
+
|
146 |
+
.yit-container.plugin-licence-activation .arrow-left:after {
|
147 |
+
border-top : 8px solid transparent;
|
148 |
+
border-bottom : 8px solid transparent;
|
149 |
+
border-right : 8px solid #fff;
|
150 |
+
left : -8px;
|
151 |
+
top : 27px;
|
152 |
+
}
|
153 |
+
|
154 |
+
.yit-container.plugin-licence-activation h2,
|
155 |
+
.yit-container.plugin-licence-activation h3 {
|
156 |
+
text-transform : uppercase;
|
157 |
+
font-weight : 800;
|
158 |
+
margin-bottom : 30px;
|
159 |
+
}
|
160 |
+
|
161 |
+
.yit-container.plugin-licence-activation h2 {
|
162 |
+
color : #808a97;
|
163 |
+
font-size : 25px;
|
164 |
+
}
|
165 |
+
|
166 |
+
.yit-container.plugin-licence-activation h3 {
|
167 |
+
color : #313131;
|
168 |
+
font-size : 15px;
|
169 |
+
height : 20px;
|
170 |
+
}
|
171 |
+
|
172 |
+
.yit-container.plugin-licence-activation h3.to-active {
|
173 |
+
height : 20px;
|
174 |
+
position : relative;
|
175 |
+
vertical-align : top;
|
176 |
+
}
|
177 |
+
|
178 |
+
.yit-container.plugin-licence-activation .spinner.show {
|
179 |
+
display : inline-block;
|
180 |
+
vertical-align : middle;
|
181 |
+
float : none;
|
182 |
+
}
|
183 |
+
|
184 |
+
.yit-container.plugin-licence-activation h3.to-active > .spinner.show {
|
185 |
+
display : inline-block;
|
186 |
+
float : none;
|
187 |
+
top : -3px;
|
188 |
+
position : relative;
|
189 |
+
}
|
190 |
+
|
191 |
+
.yit-container.plugin-licence-activation .licence-check-section {
|
192 |
+
margin-bottom : 60px;
|
193 |
+
}
|
194 |
+
|
195 |
+
.yit-container.plugin-licence-activation span.licence-label {
|
196 |
+
font-weight : 500;
|
197 |
+
color : #606060;
|
198 |
+
margin-bottom : 30px;
|
199 |
+
}
|
200 |
+
|
201 |
+
.yit-container.plugin-licence-activation .button-licence {
|
202 |
+
border : 0;
|
203 |
+
font-size : 13px;
|
204 |
+
text-transform : uppercase;
|
205 |
+
background-color : #808a97;
|
206 |
+
color : #fff;
|
207 |
+
font-weight : 700;
|
208 |
+
border-radius : 3px;
|
209 |
+
cursor : pointer;
|
210 |
+
text-decoration : none;
|
211 |
+
padding : 5px 7px;
|
212 |
+
-webkit-transition : background-color 0.3s ease;
|
213 |
+
-moz-transition : background-color 0.3s ease;
|
214 |
+
-ms-transition : background-color 0.3s ease;
|
215 |
+
-o-transition : background-color 0.3s ease;
|
216 |
+
transition : background-color 0.3s ease;
|
217 |
+
}
|
218 |
+
|
219 |
+
.yit-container.plugin-licence-activation .button-licence:hover {
|
220 |
+
background-color : #4d5c6f;
|
221 |
+
}
|
222 |
+
|
223 |
+
.yit-container.plugin-licence-activation .button-licence.clicked {
|
224 |
+
cursor : not-allowed;
|
225 |
+
background-color : #e2e2e2 !important;
|
226 |
+
}
|
227 |
+
|
228 |
+
.yit-container.plugin-licence-activation .button-licence.licence-check {
|
229 |
+
font-weight : 400;
|
230 |
+
padding : 12px 19px;
|
231 |
+
}
|
232 |
+
|
233 |
+
.yit-container.plugin-licence-activation .button-licence.licence-renew {
|
234 |
+
text-decoration : none;
|
235 |
+
padding : 7px 12px;
|
236 |
+
font-size : 9px;
|
237 |
+
}
|
238 |
+
|
239 |
+
.yit-container.plugin-licence-activation .button-licence.licence-renew:focus {
|
240 |
+
box-shadow : none;
|
241 |
+
}
|
242 |
+
|
243 |
+
.yit-container.plugin-licence-activation table:not(.to-active-table) {
|
244 |
+
width : 100%;
|
245 |
+
border : 1px solid #dcdcdc;
|
246 |
+
border-spacing : 0;
|
247 |
+
border-radius : 5px;
|
248 |
+
border-collapse : separate;
|
249 |
+
overflow : hidden;
|
250 |
+
}
|
251 |
+
|
252 |
+
.yit-container.plugin-licence-activation table:not(.to-active-table) th {
|
253 |
+
border-bottom : 1px solid #dcdcdc;
|
254 |
+
}
|
255 |
+
|
256 |
+
.yit-container.plugin-licence-activation table:not(.to-active-table) td,
|
257 |
+
.yit-container.plugin-licence-activation table:not(.to-active-table) th {
|
258 |
+
border-right : 1px solid #dcdcdc;
|
259 |
+
}
|
260 |
+
|
261 |
+
.yit-container.plugin-licence-activation table td:last-child,
|
262 |
+
.yit-container.plugin-licence-activation table th:last-child {
|
263 |
+
border-right : 0;
|
264 |
+
}
|
265 |
+
|
266 |
+
.yit-container.plugin-licence-activation table thead tr {
|
267 |
+
background-color : #f6f4f4;
|
268 |
+
}
|
269 |
+
|
270 |
+
.yit-container.plugin-licence-activation table tbody tr {
|
271 |
+
background-color : #fff;
|
272 |
+
}
|
273 |
+
|
274 |
+
.yit-container.plugin-licence-activation table thead tr th {
|
275 |
+
font-size : 13px;
|
276 |
+
color : #313131;
|
277 |
+
text-transform : uppercase;
|
278 |
+
font-weight : bold;
|
279 |
+
}
|
280 |
+
|
281 |
+
.yit-container.plugin-licence-activation table thead tr,
|
282 |
+
.yit-container.plugin-licence-activation table tbody tr {
|
283 |
+
line-height : 60px;
|
284 |
+
}
|
285 |
+
|
286 |
+
.yit-container.plugin-licence-activation table tbody tr td {
|
287 |
+
text-align : center;
|
288 |
+
line-height : 20px;
|
289 |
+
padding : 10px 5px;
|
290 |
+
}
|
291 |
+
|
292 |
+
.yit-container.plugin-licence-activation .button-licence.licence-activation {
|
293 |
+
padding : 12px 18px;
|
294 |
+
}
|
295 |
+
|
296 |
+
.yit-container.plugin-licence-activation .to-active-table tr {
|
297 |
+
line-height : 75px;
|
298 |
+
}
|
299 |
+
|
300 |
+
.yit-container.plugin-licence-activation .to-active-table tr.plugin-row {
|
301 |
+
background-color : transparent;
|
302 |
+
-webkit-transition : all 0.3s ease;
|
303 |
+
-moz-transition : all 0.3s ease;
|
304 |
+
-ms-transition : all 0.3s ease;
|
305 |
+
-o-transition : all 0.3s ease;
|
306 |
+
transition : all 0.3s ease;
|
307 |
+
}
|
308 |
+
|
309 |
+
.yit-container.plugin-licence-activation .to-active-table tr.plugin-row.error {
|
310 |
+
background-color : #ffdcdc;
|
311 |
+
}
|
312 |
+
|
313 |
+
.yit-container.plugin-licence-activation .to-active-table td {
|
314 |
+
padding-right : 12px;
|
315 |
+
width : 33%;
|
316 |
+
}
|
317 |
+
|
318 |
+
.yit-container.plugin-licence-activation .to-active-table td.plugin-name {
|
319 |
+
color : #808a97;
|
320 |
+
font-size : 12px;
|
321 |
+
text-transform : uppercase;
|
322 |
+
font-weight : bold;
|
323 |
+
line-height : 20px;
|
324 |
+
width : 20%;
|
325 |
+
padding-left : 20px;
|
326 |
+
}
|
327 |
+
|
328 |
+
.yit-container.plugin-licence-activation .to-active-table td.activate-button {
|
329 |
+
width : 15%;
|
330 |
+
position : relative;
|
331 |
+
}
|
332 |
+
|
333 |
+
.yit-container.plugin-licence-activation input[type=text],
|
334 |
+
.yit-container.plugin-licence-activation input[type=email] {
|
335 |
+
-webkit-transition : all 0.3s ease;
|
336 |
+
-moz-transition : all 0.3s ease;
|
337 |
+
-ms-transition : all 0.3s ease;
|
338 |
+
-o-transition : all 0.3s ease;
|
339 |
+
transition : all 0.3s ease;
|
340 |
+
|
341 |
+
border : 1px solid #dcdcdc;
|
342 |
+
padding : 0 15px;
|
343 |
+
border-radius : 3px;
|
344 |
+
height : 41px;
|
345 |
+
width : 100%;
|
346 |
+
}
|
347 |
+
|
348 |
+
.yit-container.plugin-licence-activation input[type=text].require,
|
349 |
+
.yit-container.plugin-licence-activation input[type=email].require {
|
350 |
+
border : 1px solid #ff3838;
|
351 |
+
}
|
352 |
+
|
353 |
+
.yit-container.plugin-licence-activation input[type=text]:focus,
|
354 |
+
.yit-container.plugin-licence-activation input[type=email]:focus {
|
355 |
+
webkit-box-shadow : 0 0 1px rgba(30, 140, 190, .8);
|
356 |
+
box-shadow : 0 0 1px rgba(30, 140, 190, .8);
|
357 |
+
}
|
358 |
+
|
359 |
+
.yit-container.plugin-licence-activation input[type=text] {
|
360 |
+
text-transform : uppercase;
|
361 |
+
text-align : center;
|
362 |
+
}
|
363 |
+
|
364 |
+
.yit-container.plugin-licence-activation input[type=email] {
|
365 |
+
text-align : left;
|
366 |
+
}
|
367 |
+
|
368 |
+
.yit-container.plugin-licence-activation input[type=submit]:focus {
|
369 |
+
outline : 0;
|
370 |
+
}
|
371 |
+
|
372 |
+
/* === Woocommerce panel === */
|
373 |
+
#plugin-fw-wc .yit_options {
|
374 |
+
padding : 0;
|
375 |
+
border : 0;
|
376 |
+
}
|
377 |
+
|
378 |
+
#plugin-fw-wc .yit_options input.upload_button, .yit_options input.button {
|
379 |
+
background : none;
|
380 |
+
border : 1px solid #ccc;
|
381 |
+
}
|
382 |
+
|
383 |
+
/* === WP Pointers === */
|
384 |
+
|
385 |
+
#adminmenu li.menu-top.yit-pointer-selected-row,
|
386 |
+
#adminmenu li.menu-top.yit-pointer-selected-row:hover,
|
387 |
+
#adminmenu li.yit-pointer-selected-row a.menu-top {
|
388 |
+
background-color : #acc327;
|
389 |
+
color : #000;
|
390 |
+
}
|
391 |
+
|
392 |
+
#adminmenu a.menu-top.toplevel_page_yit_plugin_panel.yit-pointer {
|
393 |
+
color : #000;
|
394 |
+
}
|
395 |
+
|
396 |
+
#adminmenu a.menu-top.toplevel_page_yit_plugin_panel.yit-pointer:hover,
|
397 |
+
#adminmenu .wp-submenu a.yit-pointer-selected-row {
|
398 |
+
color : #fff;
|
399 |
+
}
|
400 |
+
|
401 |
+
#adminmenu .wp-submenu a.yit-pointer-selected-row:hover {
|
402 |
+
color : #45bbe6;
|
403 |
+
}
|
404 |
+
|
405 |
+
/* WooCommerce 2.4 Support */
|
406 |
+
.woocommerce table.form-table .colorpick {
|
407 |
+
width : 6em;
|
408 |
+
}
|
409 |
+
|
410 |
+
#wpwrap h2.nav-tab-wrapper, #wpbody-content h2.nav-tab-wrapper {
|
411 |
+
border-bottom : 1px solid #ccc;
|
412 |
+
margin-right: 15px;
|
413 |
+
}
|
414 |
+
|
415 |
+
/* === YIT FRAMEWORK === */
|
416 |
+
.plugin-card .plugin-icon img {
|
417 |
+
max-width : 100%;
|
418 |
+
width : auto;
|
419 |
+
height : auto;
|
420 |
+
}
|
421 |
+
|
422 |
+
/* === Panel Content and Container === */
|
423 |
+
.yit-admin-panel-container {
|
424 |
+
position : relative;
|
425 |
+
margin-right: 15px;
|
426 |
+
}
|
427 |
+
|
428 |
+
.yit-admin-panel-content-wrap {
|
429 |
+
width : 100%;
|
430 |
+
display : block;
|
431 |
+
}
|
432 |
+
|
433 |
+
.yith-disabled {
|
434 |
+
opacity : 0.3;
|
435 |
+
pointer-events : none;
|
436 |
+
}
|
437 |
+
|
438 |
+
.yith-plugin-fw-select,
|
439 |
+
.yith-plugin-fw-slider-container,
|
440 |
+
.yith-plugin-fw-text-input,
|
441 |
+
.yith-plugin-fw-text-array-table,
|
442 |
+
.yith-plugin-fw-textarea {
|
443 |
+
width : 400px;
|
444 |
+
max-width : 100%;
|
445 |
+
}
|
446 |
+
|
447 |
+
.yith-plugin-fw-text-array-table input {
|
448 |
+
width : 100%;
|
449 |
+
}
|
450 |
+
|
451 |
+
.yith-plugin-fw-panel-wc-row.preview {
|
452 |
+
float : none;
|
453 |
+
}
|
454 |
+
|
455 |
+
.yith-plugin-fw-panel .subsubsub {
|
456 |
+
margin : 0;
|
457 |
+
}
|
458 |
+
|
459 |
+
/* === Responsive === */
|
460 |
+
|
461 |
+
@media (max-width : 767px) {
|
462 |
+
|
463 |
+
}
|
464 |
+
|
465 |
+
@media (max-width : 480px) {
|
466 |
+
|
467 |
+
}
|
468 |
+
|
469 |
+
@media (min-width : 768px) and (max-width : 992px) {
|
470 |
+
}
|
471 |
+
|
472 |
+
@media (min-width : 980px) and (max-width : 1199px) {
|
473 |
+
}
|
474 |
+
|
475 |
+
@media (min-width : 1200px) {
|
476 |
+
.yit-container.plugin-licence-activation {
|
477 |
+
width : 900px;
|
478 |
+
}
|
479 |
+
}
|
480 |
+
|
481 |
+
@media only screen and (-webkit-min-device-pixel-ratio : 1.5), only screen and (-o-min-device-pixel-ratio : 3/2), only screen and (min--moz-device-pixel-ratio : 1.5), only screen and (min-device-pixel-ratio : 1.5) {
|
482 |
+
}
|
plugin-fw/assets/css/yit-upgrade-to-pro.css
CHANGED
@@ -1,77 +1,77 @@
|
|
1 |
-
/* === Upgrade to Premium Landing page === */
|
2 |
-
|
3 |
-
#upgrade-to-premium{
|
4 |
-
width: 900px;
|
5 |
-
}
|
6 |
-
#upgrade-to-premium h1{
|
7 |
-
font-family: 'Raleway',san-serif;
|
8 |
-
text-transform: uppercase;
|
9 |
-
font-size: 30px;
|
10 |
-
font-weight: 700;
|
11 |
-
color: #808a97;
|
12 |
-
}
|
13 |
-
|
14 |
-
#upgrade-to-premium h3{
|
15 |
-
font-family: 'Raleway',san-serif;
|
16 |
-
font-size: 20px;
|
17 |
-
line-height: 29px;
|
18 |
-
font-weight: 700;
|
19 |
-
color: #808a97;
|
20 |
-
}
|
21 |
-
|
22 |
-
#upgrade-to-premium p{
|
23 |
-
font-family: 'Open Sans',san-serif;
|
24 |
-
font-size: 15px;
|
25 |
-
line-height: 29px;
|
26 |
-
font-weight: 400;
|
27 |
-
color: #6a6a6b;
|
28 |
-
}
|
29 |
-
#upgrade-to-premium p.highlighted{
|
30 |
-
font-family: 'Raleway',san-serif;
|
31 |
-
font-size: 20px;
|
32 |
-
line-height: 27px;
|
33 |
-
color: #808a97;
|
34 |
-
font-weight: 400;
|
35 |
-
}
|
36 |
-
#upgrade-to-premium ol{
|
37 |
-
counter-reset: item;
|
38 |
-
list-style-type: none;
|
39 |
-
margin-left: 0;
|
40 |
-
}
|
41 |
-
#upgrade-to-premium li.step{
|
42 |
-
font-family: 'open sans',san-serif;
|
43 |
-
font-size: 15px;
|
44 |
-
color: #6a6a6b;
|
45 |
-
font-weight: 400;
|
46 |
-
position: relative;
|
47 |
-
padding-left: 50px;
|
48 |
-
line-height: 25px;
|
49 |
-
margin-bottom: 25px;
|
50 |
-
}
|
51 |
-
#upgrade-to-premium li.step:before{
|
52 |
-
content: counters(item, ".") " ";
|
53 |
-
counter-increment: item;
|
54 |
-
position: absolute;
|
55 |
-
left: 0;
|
56 |
-
top: 0;
|
57 |
-
border: 1px solid #808a97;
|
58 |
-
width: 30px;
|
59 |
-
height: 30px;
|
60 |
-
border-radius: 16px;
|
61 |
-
background-color: #808a97;
|
62 |
-
color: #ffffff;
|
63 |
-
font-weight: 700;
|
64 |
-
font-size: 18px;
|
65 |
-
text-align: center;
|
66 |
-
line-height: 27px;
|
67 |
-
}
|
68 |
-
#upgrade-to-premium li.step img{
|
69 |
-
border: 1px solid #b8b8b8;
|
70 |
-
width: 600px;
|
71 |
-
display: block;
|
72 |
-
margin: 15px 0 25px 0;
|
73 |
-
}
|
74 |
-
|
75 |
-
#cboxLoadedContent {
|
76 |
-
margin-bottom: 60px!important;
|
77 |
}
|
1 |
+
/* === Upgrade to Premium Landing page === */
|
2 |
+
|
3 |
+
#upgrade-to-premium{
|
4 |
+
width: 900px;
|
5 |
+
}
|
6 |
+
#upgrade-to-premium h1{
|
7 |
+
font-family: 'Raleway',san-serif;
|
8 |
+
text-transform: uppercase;
|
9 |
+
font-size: 30px;
|
10 |
+
font-weight: 700;
|
11 |
+
color: #808a97;
|
12 |
+
}
|
13 |
+
|
14 |
+
#upgrade-to-premium h3{
|
15 |
+
font-family: 'Raleway',san-serif;
|
16 |
+
font-size: 20px;
|
17 |
+
line-height: 29px;
|
18 |
+
font-weight: 700;
|
19 |
+
color: #808a97;
|
20 |
+
}
|
21 |
+
|
22 |
+
#upgrade-to-premium p{
|
23 |
+
font-family: 'Open Sans',san-serif;
|
24 |
+
font-size: 15px;
|
25 |
+
line-height: 29px;
|
26 |
+
font-weight: 400;
|
27 |
+
color: #6a6a6b;
|
28 |
+
}
|
29 |
+
#upgrade-to-premium p.highlighted{
|
30 |
+
font-family: 'Raleway',san-serif;
|
31 |
+
font-size: 20px;
|
32 |
+
line-height: 27px;
|
33 |
+
color: #808a97;
|
34 |
+
font-weight: 400;
|
35 |
+
}
|
36 |
+
#upgrade-to-premium ol{
|
37 |
+
counter-reset: item;
|
38 |
+
list-style-type: none;
|
39 |
+
margin-left: 0;
|
40 |
+
}
|
41 |
+
#upgrade-to-premium li.step{
|
42 |
+
font-family: 'open sans',san-serif;
|
43 |
+
font-size: 15px;
|
44 |
+
color: #6a6a6b;
|
45 |
+
font-weight: 400;
|
46 |
+
position: relative;
|
47 |
+
padding-left: 50px;
|
48 |
+
line-height: 25px;
|
49 |
+
margin-bottom: 25px;
|
50 |
+
}
|
51 |
+
#upgrade-to-premium li.step:before{
|
52 |
+
content: counters(item, ".") " ";
|
53 |
+
counter-increment: item;
|
54 |
+
position: absolute;
|
55 |
+
left: 0;
|
56 |
+
top: 0;
|
57 |
+
border: 1px solid #808a97;
|
58 |
+
width: 30px;
|
59 |
+
height: 30px;
|
60 |
+
border-radius: 16px;
|
61 |
+
background-color: #808a97;
|
62 |
+
color: #ffffff;
|
63 |
+
font-weight: 700;
|
64 |
+
font-size: 18px;
|
65 |
+
text-align: center;
|
66 |
+
line-height: 27px;
|
67 |
+
}
|
68 |
+
#upgrade-to-premium li.step img{
|
69 |
+
border: 1px solid #b8b8b8;
|
70 |
+
width: 600px;
|
71 |
+
display: block;
|
72 |
+
margin: 15px 0 25px 0;
|
73 |
+
}
|
74 |
+
|
75 |
+
#cboxLoadedContent {
|
76 |
+
margin-bottom: 60px!important;
|
77 |
}
|
plugin-fw/assets/css/yit-upgrader.css
CHANGED
@@ -1,18 +1,22 @@
|
|
1 |
-
/* === Plugins Upgrader === */
|
2 |
-
|
3 |
-
.yit-plugin-changelog-wrapper {
|
4 |
-
display: none;
|
5 |
-
}
|
6 |
-
|
7 |
-
.yit-plugin-changelog-title {
|
8 |
-
text-transform: uppercase;
|
9 |
-
}
|
10 |
-
|
11 |
-
.yit-plugin-changelog {
|
12 |
-
height : calc(100% - 15px);
|
13 |
-
width : calc(100% - 15px);
|
14 |
-
overflow-x : hidden;
|
15 |
-
overflow-y : auto;
|
16 |
-
z-index : 999;
|
17 |
-
background: #fcfcfc;
|
|
|
|
|
|
|
|
|
18 |
}
|
1 |
+
/* === Plugins Upgrader === */
|
2 |
+
|
3 |
+
.yit-plugin-changelog-wrapper {
|
4 |
+
display: none;
|
5 |
+
}
|
6 |
+
|
7 |
+
.yit-plugin-changelog-title {
|
8 |
+
text-transform: uppercase;
|
9 |
+
}
|
10 |
+
|
11 |
+
.yit-plugin-changelog {
|
12 |
+
height : calc(100% - 15px);
|
13 |
+
width : calc(100% - 15px);
|
14 |
+
overflow-x : hidden;
|
15 |
+
overflow-y : auto;
|
16 |
+
z-index : 999;
|
17 |
+
background: #fcfcfc;
|
18 |
+
}
|
19 |
+
|
20 |
+
.yith-updating:before{
|
21 |
+
animation: rotation 2s infinite linear;
|
22 |
}
|
plugin-fw/assets/css/yith-fields.css
CHANGED
@@ -1,402 +1,402 @@
|
|
1 |
-
.yith-plugin-fw span.description {
|
2 |
-
display : block;
|
3 |
-
margin-top : 5px;
|
4 |
-
font-size : 12px;
|
5 |
-
color : #777;
|
6 |
-
font-style : italic;
|
7 |
-
clear : both;
|
8 |
-
}
|
9 |
-
|
10 |
-
.yith-plugin-fw span.description.inline {
|
11 |
-
display : inline-block;
|
12 |
-
margin : 0 0 0 5px;
|
13 |
-
}
|
14 |
-
|
15 |
-
.yith-disabled {
|
16 |
-
opacity : 0.3;
|
17 |
-
pointer-events : none;
|
18 |
-
}
|
19 |
-
|
20 |
-
.yith-plugin-fw-field-wrapper:not(.yith-plugin-fw-title-field-wrapper) {
|
21 |
-
display : block;
|
22 |
-
width : 100%;
|
23 |
-
}
|
24 |
-
|
25 |
-
.yith-plugin-fw-field-wrapper span.desc {
|
26 |
-
display : block;
|
27 |
-
width : 100%;
|
28 |
-
}
|
29 |
-
|
30 |
-
.yith-plugin-fw-title-field-wrapper h3.title {
|
31 |
-
width : 100%;
|
32 |
-
}
|
33 |
-
|
34 |
-
.the-metabox .yith-plugin-fw-title-field-wrapper h3.title {
|
35 |
-
float : left;
|
36 |
-
}
|
37 |
-
|
38 |
-
.yith-plugin-fw input[type=email],
|
39 |
-
.yith-plugin-fw input[type=number],
|
40 |
-
.yith-plugin-fw input[type=text]:not(.select2-search__field),
|
41 |
-
.yith-plugin-fw select,
|
42 |
-
.woocommerce .yith-plugin-fw table.form-table input[type=email],
|
43 |
-
.woocommerce .yith-plugin-fw table.form-table input[type=number],
|
44 |
-
.woocommerce .yith-plugin-fw table.form-table input[type=text]:not(.select2-search__field),
|
45 |
-
.woocommerce .yith-plugin-fw table.form-table select {
|
46 |
-
width : 400px;
|
47 |
-
max-width : 100%;
|
48 |
-
height : 30px;
|
49 |
-
padding : 5px;
|
50 |
-
}
|
51 |
-
|
52 |
-
.woocommerce .yith-plugin-fw table.form-table input[type=text].wp-color-picker,
|
53 |
-
.woocommerce .yith-plugin-fw table.form-table input[type=text].yith-plugin-fw-colorpicker,
|
54 |
-
.yith-plugin-fw input[type=text].wp-color-picker,
|
55 |
-
.yith-plugin-fw input[type=text].yith-plugin-fw-colorpicker {
|
56 |
-
width : 6em;
|
57 |
-
max-width : none;
|
58 |
-
height : auto;
|
59 |
-
padding : 3px 5px;
|
60 |
-
}
|
61 |
-
|
62 |
-
.woocommerce .yith-plugin-fw table.form-table input[type=text].colorpick,
|
63 |
-
.yith-plugin-fw input[type=text].colorpick {
|
64 |
-
width : 6em;
|
65 |
-
max-width : none;
|
66 |
-
height : auto;
|
67 |
-
padding : 6px;
|
68 |
-
}
|
69 |
-
|
70 |
-
.yith-plugin-fw input.select2-search__field,
|
71 |
-
.yith-plugin-fw .select2-container .select2-search--inline .select2-search__field,
|
72 |
-
.woocommerce .yith-plugin-fw input.select2-search__field,
|
73 |
-
.woocommerce .yith-plugin-fw table.form-table input.select2-search__field {
|
74 |
-
padding : 3px;
|
75 |
-
}
|
76 |
-
|
77 |
-
.yith-plugin-fw textarea {
|
78 |
-
width : 400px;
|
79 |
-
max-width : 100%;
|
80 |
-
padding : 5px;
|
81 |
-
}
|
82 |
-
|
83 |
-
/* ------------- ICONS ------------- */
|
84 |
-
.yit-icons-manager-wrapper {
|
85 |
-
width : 100%;
|
86 |
-
max-width : 400px;
|
87 |
-
}
|
88 |
-
|
89 |
-
.yit-icons-manager-text {
|
90 |
-
width : 100%;
|
91 |
-
}
|
92 |
-
|
93 |
-
.yit-icons-manager-icon-text {
|
94 |
-
width : calc(100% - 35px) !important;
|
95 |
-
height : 30px;
|
96 |
-
float : left;
|
97 |
-
margin : 0;
|
98 |
-
}
|
99 |
-
|
100 |
-
.yit-icons-manager-icon-preview {
|
101 |
-
width : 30px;
|
102 |
-
height : 30px;
|
103 |
-
margin-right : 5px;
|
104 |
-
float : left;
|
105 |
-
padding-top : 6px;
|
106 |
-
box-sizing : border-box;
|
107 |
-
text-align : center;
|
108 |
-
background : #f1f1f1;
|
109 |
-
}
|
110 |
-
|
111 |
-
.yit-icons-manager-list-wrapper {
|
112 |
-
margin : 10px 0;
|
113 |
-
box-shadow : 0 0 0 1px #ddd;
|
114 |
-
}
|
115 |
-
|
116 |
-
ul.yit-icons-manager-list {
|
117 |
-
width : 100%;
|
118 |
-
height : 300px;
|
119 |
-
overflow-y : scroll;
|
120 |
-
margin : 0;
|
121 |
-
}
|
122 |
-
|
123 |
-
ul.yit-icons-manager-list li {
|
124 |
-
float : left;
|
125 |
-
width : 30px;
|
126 |
-
height : 30px;
|
127 |
-
padding-top : 6px;
|
128 |
-
box-sizing : border-box;
|
129 |
-
text-align : center;
|
130 |
-
background : #f1f1f1;
|
131 |
-
margin : 1px;
|
132 |
-
cursor : pointer;
|
133 |
-
}
|
134 |
-
|
135 |
-
ul.yit-icons-manager-list li:hover {
|
136 |
-
background : #c5dcf6;
|
137 |
-
}
|
138 |
-
|
139 |
-
ul.yit-icons-manager-list li.active {
|
140 |
-
background : #d4f0ff;
|
141 |
-
}
|
142 |
-
|
143 |
-
.yit-icons-manager-action-set-default {
|
144 |
-
margin-bottom : 0;
|
145 |
-
}
|
146 |
-
|
147 |
-
.yit-icons-manager-default-icon-preview {
|
148 |
-
height : 100%;
|
149 |
-
display : inline-block;
|
150 |
-
padding-left : 10px;
|
151 |
-
border-left : 1px solid #ccc;
|
152 |
-
margin-left : 10px;
|
153 |
-
}
|
154 |
-
|
155 |
-
/* ------- Text Array ------- */
|
156 |
-
.yith-plugin-fw-text-array-table td {
|
157 |
-
padding : 1px;
|
158 |
-
}
|
159 |
-
|
160 |
-
.yith-plugin-fw-text-array-table input[type=text],
|
161 |
-
.woocommerce table.form-table table.yith-plugin-fw-text-array-table input[type=text] {
|
162 |
-
width : 100%;
|
163 |
-
}
|
164 |
-
|
165 |
-
/* ------- Image Gallery ------- */
|
166 |
-
.yith-plugin-fw .image-gallery ul li {
|
167 |
-
display : inline-block;
|
168 |
-
width : 80px;
|
169 |
-
margin-left : 10px;
|
170 |
-
position : relative;
|
171 |
-
}
|
172 |
-
|
173 |
-
.yith-plugin-fw .image-gallery ul li img {
|
174 |
-
width : 80px;
|
175 |
-
border : 1px solid #ccc;
|
176 |
-
}
|
177 |
-
|
178 |
-
.yith-plugin-fw .image-gallery ul li ul {
|
179 |
-
position : absolute;
|
180 |
-
top : -6px;
|
181 |
-
right : -1px;
|
182 |
-
width : 20px;
|
183 |
-
height : 20px;
|
184 |
-
}
|
185 |
-
|
186 |
-
.yith-plugin-fw .image-gallery ul a.delete {
|
187 |
-
background : url(../images/x.png) no-repeat;
|
188 |
-
width : 20px;
|
189 |
-
height : 20px;
|
190 |
-
display : block;
|
191 |
-
text-indent : -99999px;
|
192 |
-
}
|
193 |
-
|
194 |
-
/* ------- OnOff ------- */
|
195 |
-
.yith-plugin-fw-onoff-container {
|
196 |
-
display : inline-block;
|
197 |
-
}
|
198 |
-
|
199 |
-
.yith-plugin-fw-onoff-container input {
|
200 |
-
display : none;
|
201 |
-
}
|
202 |
-
|
203 |
-
.yith-plugin-fw-onoff-container input + span {
|
204 |
-
cursor : pointer;
|
205 |
-
text-indent : -9999px;
|
206 |
-
display : block;
|
207 |
-
width : 36px;
|
208 |
-
height : 20px;
|
209 |
-
background : #a4a4a4;
|
210 |
-
border-radius : 24px;
|
211 |
-
position : relative;
|
212 |
-
transition : all 0.3s;
|
213 |
-
}
|
214 |
-
|
215 |
-
.yith-plugin-fw-onoff-container input + span:before {
|
216 |
-
content : '';
|
217 |
-
background : #fff;
|
218 |
-
width : 16px;
|
219 |
-
height : 16px;
|
220 |
-
border-radius : 50%;
|
221 |
-
position : absolute;
|
222 |
-
top : 2px;
|
223 |
-
left : 2px;
|
224 |
-
transition : all 0.3s;
|
225 |
-
}
|
226 |
-
|
227 |
-
.yith-plugin-fw-onoff-container input:checked + span,
|
228 |
-
.yith-plugin-fw-onoff-container input.onoffchecked + span {
|
229 |
-
background : #0073aa;
|
230 |
-
}
|
231 |
-
|
232 |
-
.yith-plugin-fw-onoff-container input:checked + span:before,
|
233 |
-
.yith-plugin-fw-onoff-container input.onoffchecked + span:before {
|
234 |
-
left : 18px;
|
235 |
-
}
|
236 |
-
|
237 |
-
/* ------- Preview ------- */
|
238 |
-
.yith-plugin-fw-preview-field {
|
239 |
-
max-height : 200px;
|
240 |
-
}
|
241 |
-
|
242 |
-
/* ------- Radio ------- */
|
243 |
-
.yith-plugin-fw-radio input[type=radio] {
|
244 |
-
margin : 0 3px 0 0;
|
245 |
-
}
|
246 |
-
|
247 |
-
.yith-plugin-fw-radio__row {
|
248 |
-
margin-bottom : 8px;
|
249 |
-
}
|
250 |
-
|
251 |
-
/* ------- Sidebar Layout ------- */
|
252 |
-
.yith-plugin-fw-sidebar-layout input[type="radio"] {
|
253 |
-
display : none;
|
254 |
-
width : 0px;
|
255 |
-
}
|
256 |
-
|
257 |
-
.yith-plugin-fw-sidebar-layout input[type="radio"]:first-child {
|
258 |
-
margin-right : -2px;
|
259 |
-
}
|
260 |
-
|
261 |
-
.yith-plugin-fw-sidebar-layout input[type="radio"] + img {
|
262 |
-
border : 2px solid #fff;
|
263 |
-
padding : 1px;
|
264 |
-
}
|
265 |
-
|
266 |
-
.yith-plugin-fw-sidebar-layout input[type="radio"] + img:hover {
|
267 |
-
cursor : pointer;
|
268 |
-
}
|
269 |
-
|
270 |
-
.yith-plugin-fw-sidebar-layout input[checked] + img {
|
271 |
-
border : 2px solid #f2ad35;
|
272 |
-
padding : 1px;
|
273 |
-
}
|
274 |
-
|
275 |
-
.yith-plugin-fw-sidebar-layout select {
|
276 |
-
vertical-align : 12px;
|
277 |
-
}
|
278 |
-
|
279 |
-
.yit-admin-panel-content-wrap .yith-plugin-fw-sidebar-layout label {
|
280 |
-
font-weight : bold;
|
281 |
-
width : 200px;
|
282 |
-
float : left;
|
283 |
-
line-height : 23px;
|
284 |
-
margin-left : -230px;
|
285 |
-
}
|
286 |
-
|
287 |
-
/* ------- Slider ------- */
|
288 |
-
.yith-plugin-fw .slider {
|
289 |
-
padding-top : 20px;
|
290 |
-
}
|
291 |
-
|
292 |
-
.ui-slider .minCaption {
|
293 |
-
position : absolute;
|
294 |
-
right : 95%;
|
295 |
-
top : -6px;
|
296 |
-
margin-right : 11px;
|
297 |
-
}
|
298 |
-
|
299 |
-
.ui-slider .maxCaption {
|
300 |
-
position : absolute;
|
301 |
-
left : 95%;
|
302 |
-
top : -6px;
|
303 |
-
margin-left : 20px;
|
304 |
-
}
|
305 |
-
|
306 |
-
.ui-slider-horizontal .ui-slider-handle {
|
307 |
-
background : #fff;
|
308 |
-
border : 0px !important;
|
309 |
-
top : -12px !important;
|
310 |
-
border-radius : 50%;
|
311 |
-
width : 27px !important;
|
312 |
-
height : 27px !important;
|
313 |
-
box-sizing : border-box;
|
314 |
-
box-shadow : 0 1px 7px -1px rgba(0, 0, 0, 0.5);
|
315 |
-
font-size : 13px;
|
316 |
-
padding : 6px 0;
|
317 |
-
font-weight : 600;
|
318 |
-
color : #555;
|
319 |
-
text-align : center;
|
320 |
-
}
|
321 |
-
|
322 |
-
.ui-slider.ui-widget-content {
|
323 |
-
background : #ccc;
|
324 |
-
border : none !important;
|
325 |
-
height : 3px !important;
|
326 |
-
border-radius : 3px !important;
|
327 |
-
width : 90%;
|
328 |
-
margin : 15px 5% 20px 5%;
|
329 |
-
}
|
330 |
-
|
331 |
-
.iris-slider-offset.ui-slider.ui-widget-content {
|
332 |
-
background : transparent !important;
|
333 |
-
height : auto !important;
|
334 |
-
}
|
335 |
-
|
336 |
-
.ui-slider.ui-widget-content .ui-widget-header {
|
337 |
-
background : #4b93ff;
|
338 |
-
left : 0px !important;
|
339 |
-
-webkit-border-radius : 3px;
|
340 |
-
-moz-border-radius : 3px;
|
341 |
-
-khtml-border-radius : 3px;
|
342 |
-
border-radius : 3px;
|
343 |
-
}
|
344 |
-
|
345 |
-
/* ------- Select2 ------- */
|
346 |
-
.yith-plugin-fw-select2-wrapper {
|
347 |
-
width : 400px;
|
348 |
-
}
|
349 |
-
|
350 |
-
/* ------- Textarea ------- */
|
351 |
-
.yith-plugin-fw-textarea-editor-field-wrapper {
|
352 |
-
max-width : 1000px;
|
353 |
-
clear : both;
|
354 |
-
}
|
355 |
-
|
356 |
-
.yith-plugin-fw-textarea-editor-field-wrapper textarea.wp-editor-area,
|
357 |
-
.woocommerce table.form-table .yith-plugin-fw-textarea-editor-field-wrapper textarea.wp-editor-area {
|
358 |
-
width : 100%;
|
359 |
-
}
|
360 |
-
|
361 |
-
/* ------- Buttons ------- */
|
362 |
-
.yith-plugin-fw-buttons-field-wrapper {
|
363 |
-
margin-top : 7px;
|
364 |
-
}
|
365 |
-
|
366 |
-
/* ------- Select Images ------- */
|
367 |
-
.yith-plugin-fw-select-images__list {
|
368 |
-
margin : 0;
|
369 |
-
display : flex;
|
370 |
-
flex-wrap : wrap;
|
371 |
-
}
|
372 |
-
|
373 |
-
.yith-plugin-fw-select-images__item {
|
374 |
-
width : calc(20% - 10px);
|
375 |
-
min-width : 150px;
|
376 |
-
margin : 0 10px 10px 0;
|
377 |
-
padding : 10px;
|
378 |
-
box-sizing : border-box;
|
379 |
-
cursor : pointer;
|
380 |
-
transition : all .3s;
|
381 |
-
border : 2px solid #eee;
|
382 |
-
display : flex;
|
383 |
-
flex-direction : column;
|
384 |
-
justify-content : space-between;
|
385 |
-
}
|
386 |
-
|
387 |
-
.yith-plugin-fw-select-images__item:hover,
|
388 |
-
.yith-plugin-fw-select-images__item.yith-plugin-fw-select-images__item--selected {
|
389 |
-
border-color : #07bcce;
|
390 |
-
}
|
391 |
-
|
392 |
-
.yith-plugin-fw-select-images__item__label {
|
393 |
-
text-align : center;
|
394 |
-
font-weight : 600;
|
395 |
-
margin-bottom : 10px;
|
396 |
-
}
|
397 |
-
|
398 |
-
.yith-plugin-fw-select-images__item img {
|
399 |
-
display : block;
|
400 |
-
max-width : 100%;
|
401 |
-
margin : 0 auto;
|
402 |
}
|
1 |
+
.yith-plugin-fw span.description {
|
2 |
+
display : block;
|
3 |
+
margin-top : 5px;
|
4 |
+
font-size : 12px;
|
5 |
+
color : #777;
|
6 |
+
font-style : italic;
|
7 |
+
clear : both;
|
8 |
+
}
|
9 |
+
|
10 |
+
.yith-plugin-fw span.description.inline {
|
11 |
+
display : inline-block;
|
12 |
+
margin : 0 0 0 5px;
|
13 |
+
}
|
14 |
+
|
15 |
+
.yith-disabled {
|
16 |
+
opacity : 0.3;
|
17 |
+
pointer-events : none;
|
18 |
+
}
|
19 |
+
|
20 |
+
.yith-plugin-fw-field-wrapper:not(.yith-plugin-fw-title-field-wrapper) {
|
21 |
+
display : block;
|
22 |
+
width : 100%;
|
23 |
+
}
|
24 |
+
|
25 |
+
.yith-plugin-fw-field-wrapper span.desc {
|
26 |
+
display : block;
|
27 |
+
width : 100%;
|
28 |
+
}
|
29 |
+
|
30 |
+
.yith-plugin-fw-title-field-wrapper h3.title {
|
31 |
+
width : 100%;
|
32 |
+
}
|
33 |
+
|
34 |
+
.the-metabox .yith-plugin-fw-title-field-wrapper h3.title {
|
35 |
+
float : left;
|
36 |
+
}
|
37 |
+
|
38 |
+
.yith-plugin-fw input[type=email],
|
39 |
+
.yith-plugin-fw input[type=number],
|
40 |
+
.yith-plugin-fw input[type=text]:not(.select2-search__field),
|
41 |
+
.yith-plugin-fw select,
|
42 |
+
.woocommerce .yith-plugin-fw table.form-table input[type=email],
|
43 |
+
.woocommerce .yith-plugin-fw table.form-table input[type=number],
|
44 |
+
.woocommerce .yith-plugin-fw table.form-table input[type=text]:not(.select2-search__field),
|
45 |
+
.woocommerce .yith-plugin-fw table.form-table select {
|
46 |
+
width : 400px;
|
47 |
+
max-width : 100%;
|
48 |
+
height : 30px;
|
49 |
+
padding : 5px;
|
50 |
+
}
|
51 |
+
|
52 |
+
.woocommerce .yith-plugin-fw table.form-table input[type=text].wp-color-picker,
|
53 |
+
.woocommerce .yith-plugin-fw table.form-table input[type=text].yith-plugin-fw-colorpicker,
|
54 |
+
.yith-plugin-fw input[type=text].wp-color-picker,
|
55 |
+
.yith-plugin-fw input[type=text].yith-plugin-fw-colorpicker {
|
56 |
+
width : 6em;
|
57 |
+
max-width : none;
|
58 |
+
height : auto;
|
59 |
+
padding : 3px 5px;
|
60 |
+
}
|
61 |
+
|
62 |
+
.woocommerce .yith-plugin-fw table.form-table input[type=text].colorpick,
|
63 |
+
.yith-plugin-fw input[type=text].colorpick {
|
64 |
+
width : 6em;
|
65 |
+
max-width : none;
|
66 |
+
height : auto;
|
67 |
+
padding : 6px;
|
68 |
+
}
|
69 |
+
|
70 |
+
.yith-plugin-fw input.select2-search__field,
|
71 |
+
.yith-plugin-fw .select2-container .select2-search--inline .select2-search__field,
|
72 |
+
.woocommerce .yith-plugin-fw input.select2-search__field,
|
73 |
+
.woocommerce .yith-plugin-fw table.form-table input.select2-search__field {
|
74 |
+
padding : 3px;
|
75 |
+
}
|
76 |
+
|
77 |
+
.yith-plugin-fw textarea {
|
78 |
+
width : 400px;
|
79 |
+
max-width : 100%;
|
80 |
+
padding : 5px;
|
81 |
+
}
|
82 |
+
|
83 |
+
/* ------------- ICONS ------------- */
|
84 |
+
.yit-icons-manager-wrapper {
|
85 |
+
width : 100%;
|
86 |
+
max-width : 400px;
|
87 |
+
}
|
88 |
+
|
89 |
+
.yit-icons-manager-text {
|
90 |
+
width : 100%;
|
91 |
+
}
|
92 |
+
|
93 |
+
.yit-icons-manager-icon-text {
|
94 |
+
width : calc(100% - 35px) !important;
|
95 |
+
height : 30px;
|
96 |
+
float : left;
|
97 |
+
margin : 0;
|
98 |
+
}
|
99 |
+
|
100 |
+
.yit-icons-manager-icon-preview {
|
101 |
+
width : 30px;
|
102 |
+
height : 30px;
|
103 |
+
margin-right : 5px;
|
104 |
+
float : left;
|
105 |
+
padding-top : 6px;
|
106 |
+
box-sizing : border-box;
|
107 |
+
text-align : center;
|
108 |
+
background : #f1f1f1;
|
109 |
+
}
|
110 |
+
|
111 |
+
.yit-icons-manager-list-wrapper {
|
112 |
+
margin : 10px 0;
|
113 |
+
box-shadow : 0 0 0 1px #ddd;
|
114 |
+
}
|
115 |
+
|
116 |
+
ul.yit-icons-manager-list {
|
117 |
+
width : 100%;
|
118 |
+
height : 300px;
|
119 |
+
overflow-y : scroll;
|
120 |
+
margin : 0;
|
121 |
+
}
|
122 |
+
|
123 |
+
ul.yit-icons-manager-list li {
|
124 |
+
float : left;
|
125 |
+
width : 30px;
|
126 |
+
height : 30px;
|
127 |
+
padding-top : 6px;
|
128 |
+
box-sizing : border-box;
|
129 |
+
text-align : center;
|
130 |
+
background : #f1f1f1;
|
131 |
+
margin : 1px;
|
132 |
+
cursor : pointer;
|
133 |
+
}
|
134 |
+
|
135 |
+
ul.yit-icons-manager-list li:hover {
|
136 |
+
background : #c5dcf6;
|
137 |
+
}
|
138 |
+
|
139 |
+
ul.yit-icons-manager-list li.active {
|
140 |
+
background : #d4f0ff;
|
141 |
+
}
|
142 |
+
|
143 |
+
.yit-icons-manager-action-set-default {
|
144 |
+
margin-bottom : 0;
|
145 |
+
}
|
146 |
+
|
147 |
+
.yit-icons-manager-default-icon-preview {
|
148 |
+
height : 100%;
|
149 |
+
display : inline-block;
|
150 |
+
padding-left : 10px;
|
151 |
+
border-left : 1px solid #ccc;
|
152 |
+
margin-left : 10px;
|
153 |
+
}
|
154 |
+
|
155 |
+
/* ------- Text Array ------- */
|
156 |
+
.yith-plugin-fw-text-array-table td {
|
157 |
+
padding : 1px;
|
158 |
+
}
|
159 |
+
|
160 |
+
.yith-plugin-fw-text-array-table input[type=text],
|
161 |
+
.woocommerce table.form-table table.yith-plugin-fw-text-array-table input[type=text] {
|
162 |
+
width : 100%;
|
163 |
+
}
|
164 |
+
|
165 |
+
/* ------- Image Gallery ------- */
|
166 |
+
.yith-plugin-fw .image-gallery ul li {
|
167 |
+
display : inline-block;
|
168 |
+
width : 80px;
|
169 |
+
margin-left : 10px;
|
170 |
+
position : relative;
|
171 |
+
}
|
172 |
+
|
173 |
+
.yith-plugin-fw .image-gallery ul li img {
|
174 |
+
width : 80px;
|
175 |
+
border : 1px solid #ccc;
|
176 |
+
}
|
177 |
+
|
178 |
+
.yith-plugin-fw .image-gallery ul li ul {
|
179 |
+
position : absolute;
|
180 |
+
top : -6px;
|
181 |
+
right : -1px;
|
182 |
+
width : 20px;
|
183 |
+
height : 20px;
|
184 |
+
}
|
185 |
+
|
186 |
+
.yith-plugin-fw .image-gallery ul a.delete {
|
187 |
+
background : url(../images/x.png) no-repeat;
|
188 |
+
width : 20px;
|
189 |
+
height : 20px;
|
190 |
+
display : block;
|
191 |
+
text-indent : -99999px;
|
192 |
+
}
|
193 |
+
|
194 |
+
/* ------- OnOff ------- */
|
195 |
+
.yith-plugin-fw-onoff-container {
|
196 |
+
display : inline-block;
|
197 |
+
}
|
198 |
+
|
199 |
+
.yith-plugin-fw-onoff-container input {
|
200 |
+
display : none;
|
201 |
+
}
|
202 |
+
|
203 |
+
.yith-plugin-fw-onoff-container input + span {
|
204 |
+
cursor : pointer;
|
205 |
+
text-indent : -9999px;
|
206 |
+
display : block;
|
207 |
+
width : 36px;
|
208 |
+
height : 20px;
|
209 |
+
background : #a4a4a4;
|
210 |
+
border-radius : 24px;
|
211 |
+
position : relative;
|
212 |
+
transition : all 0.3s;
|
213 |
+
}
|
214 |
+
|
215 |
+
.yith-plugin-fw-onoff-container input + span:before {
|
216 |
+
content : '';
|
217 |
+
background : #fff;
|
218 |
+
width : 16px;
|
219 |
+
height : 16px;
|
220 |
+
border-radius : 50%;
|
221 |
+
position : absolute;
|
222 |
+
top : 2px;
|
223 |
+
left : 2px;
|
224 |
+
transition : all 0.3s;
|
225 |
+
}
|
226 |
+
|
227 |
+
.yith-plugin-fw-onoff-container input:checked + span,
|
228 |
+
.yith-plugin-fw-onoff-container input.onoffchecked + span {
|
229 |
+
background : #0073aa;
|
230 |
+
}
|
231 |
+
|
232 |
+
.yith-plugin-fw-onoff-container input:checked + span:before,
|
233 |
+
.yith-plugin-fw-onoff-container input.onoffchecked + span:before {
|
234 |
+
left : 18px;
|
235 |
+
}
|
236 |
+
|
237 |
+
/* ------- Preview ------- */
|
238 |
+
.yith-plugin-fw-preview-field {
|
239 |
+
max-height : 200px;
|
240 |
+
}
|
241 |
+
|
242 |
+
/* ------- Radio ------- */
|
243 |
+
.yith-plugin-fw-radio input[type=radio] {
|
244 |
+
margin : 0 3px 0 0;
|
245 |
+
}
|
246 |
+
|
247 |
+
.yith-plugin-fw-radio__row {
|
248 |
+
margin-bottom : 8px;
|
249 |
+
}
|
250 |
+
|
251 |
+
/* ------- Sidebar Layout ------- */
|
252 |
+
.yith-plugin-fw-sidebar-layout input[type="radio"] {
|
253 |
+
display : none;
|
254 |
+
width : 0px;
|
255 |
+
}
|
256 |
+
|
257 |
+
.yith-plugin-fw-sidebar-layout input[type="radio"]:first-child {
|
258 |
+
margin-right : -2px;
|
259 |
+
}
|
260 |
+
|
261 |
+
.yith-plugin-fw-sidebar-layout input[type="radio"] + img {
|
262 |
+
border : 2px solid #fff;
|
263 |
+
padding : 1px;
|
264 |
+
}
|
265 |
+
|
266 |
+
.yith-plugin-fw-sidebar-layout input[type="radio"] + img:hover {
|
267 |
+
cursor : pointer;
|
268 |
+
}
|
269 |
+
|
270 |
+
.yith-plugin-fw-sidebar-layout input[checked] + img {
|
271 |
+
border : 2px solid #f2ad35;
|
272 |
+
padding : 1px;
|
273 |
+
}
|
274 |
+
|
275 |
+
.yith-plugin-fw-sidebar-layout select {
|
276 |
+
vertical-align : 12px;
|
277 |
+
}
|
278 |
+
|
279 |
+
.yit-admin-panel-content-wrap .yith-plugin-fw-sidebar-layout label {
|
280 |
+
font-weight : bold;
|
281 |
+
width : 200px;
|
282 |
+
float : left;
|
283 |
+
line-height : 23px;
|
284 |
+
margin-left : -230px;
|
285 |
+
}
|
286 |
+
|
287 |
+
/* ------- Slider ------- */
|
288 |
+
.yith-plugin-fw .slider {
|
289 |
+
padding-top : 20px;
|
290 |
+
}
|
291 |
+
|
292 |
+
.ui-slider .minCaption {
|
293 |
+
position : absolute;
|
294 |
+
right : 95%;
|
295 |
+
top : -6px;
|
296 |
+
margin-right : 11px;
|
297 |
+
}
|
298 |
+
|
299 |
+
.ui-slider .maxCaption {
|
300 |
+
position : absolute;
|
301 |
+
left : 95%;
|
302 |
+
top : -6px;
|
303 |
+
margin-left : 20px;
|
304 |
+
}
|
305 |
+
|
306 |
+
.ui-slider-horizontal .ui-slider-handle {
|
307 |
+
background : #fff;
|
308 |
+
border : 0px !important;
|
309 |
+
top : -12px !important;
|
310 |
+
border-radius : 50%;
|
311 |
+
width : 27px !important;
|
312 |
+
height : 27px !important;
|
313 |
+
box-sizing : border-box;
|
314 |
+
box-shadow : 0 1px 7px -1px rgba(0, 0, 0, 0.5);
|
315 |
+
font-size : 13px;
|
316 |
+
padding : 6px 0;
|
317 |
+
font-weight : 600;
|
318 |
+
color : #555;
|
319 |
+
text-align : center;
|
320 |
+
}
|
321 |
+
|
322 |
+
.ui-slider.ui-widget-content {
|
323 |
+
background : #ccc;
|
324 |
+
border : none !important;
|
325 |
+
height : 3px !important;
|
326 |
+
border-radius : 3px !important;
|
327 |
+
width : 90%;
|
328 |
+
margin : 15px 5% 20px 5%;
|
329 |
+
}
|
330 |
+
|
331 |
+
.iris-slider-offset.ui-slider.ui-widget-content {
|
332 |
+
background : transparent !important;
|
333 |
+
height : auto !important;
|
334 |
+
}
|
335 |
+
|
336 |
+
.ui-slider.ui-widget-content .ui-widget-header {
|
337 |
+
background : #4b93ff;
|
338 |
+
left : 0px !important;
|
339 |
+
-webkit-border-radius : 3px;
|
340 |
+
-moz-border-radius : 3px;
|
341 |
+
-khtml-border-radius : 3px;
|
342 |
+
border-radius : 3px;
|
343 |
+
}
|
344 |
+
|
345 |
+
/* ------- Select2 ------- */
|
346 |
+
.yith-plugin-fw-select2-wrapper {
|
347 |
+
width : 400px;
|
348 |
+
}
|
349 |
+
|
350 |
+
/* ------- Textarea ------- */
|
351 |
+
.yith-plugin-fw-textarea-editor-field-wrapper {
|
352 |
+
max-width : 1000px;
|
353 |
+
clear : both;
|
354 |
+
}
|
355 |
+
|
356 |
+
.yith-plugin-fw-textarea-editor-field-wrapper textarea.wp-editor-area,
|
357 |
+
.woocommerce table.form-table .yith-plugin-fw-textarea-editor-field-wrapper textarea.wp-editor-area {
|
358 |
+
width : 100%;
|
359 |
+
}
|
360 |
+
|
361 |
+
/* ------- Buttons ------- */
|
362 |
+
.yith-plugin-fw-buttons-field-wrapper {
|
363 |
+
margin-top : 7px;
|
364 |
+
}
|
365 |
+
|
366 |
+
/* ------- Select Images ------- */
|
367 |
+
.yith-plugin-fw-select-images__list {
|
368 |
+
margin : 0;
|
369 |
+
display : flex;
|
370 |
+
flex-wrap : wrap;
|
371 |
+
}
|
372 |
+
|
373 |
+
.yith-plugin-fw-select-images__item {
|
374 |
+
width : calc(20% - 10px);
|
375 |
+
min-width : 150px;
|
376 |
+
margin : 0 10px 10px 0;
|
377 |
+
padding : 10px;
|
378 |
+
box-sizing : border-box;
|
379 |
+
cursor : pointer;
|
380 |
+
transition : all .3s;
|
381 |
+
border : 2px solid #eee;
|
382 |
+
display : flex;
|
383 |
+
flex-direction : column;
|
384 |
+
justify-content : space-between;
|
385 |
+
}
|
386 |
+
|
387 |
+
.yith-plugin-fw-select-images__item:hover,
|
388 |
+
.yith-plugin-fw-select-images__item.yith-plugin-fw-select-images__item--selected {
|
389 |
+
border-color : #07bcce;
|
390 |
+
}
|
391 |
+
|
392 |
+
.yith-plugin-fw-select-images__item__label {
|
393 |
+
text-align : center;
|
394 |
+
font-weight : 600;
|
395 |
+
margin-bottom : 10px;
|
396 |
+
}
|
397 |
+
|
398 |
+
.yith-plugin-fw-select-images__item img {
|
399 |
+
display : block;
|
400 |
+
max-width : 100%;
|
401 |
+
margin : 0 auto;
|
402 |
}
|
plugin-fw/assets/css/yith-select2-no-wc.css
CHANGED
@@ -1,741 +1,741 @@
|
|
1 |
-
.select2-container {
|
2 |
-
-webkit-box-sizing : border-box;
|
3 |
-
box-sizing : border-box;
|
4 |
-
display : inline-block;
|
5 |
-
margin : 0;
|
6 |
-
position : relative;
|
7 |
-
vertical-align : middle
|
8 |
-
}
|
9 |
-
|
10 |
-
.select2-container .select2-selection--single {
|
11 |
-
-webkit-box-sizing : border-box;
|
12 |
-
box-sizing : border-box;
|
13 |
-
cursor : pointer;
|
14 |
-
display : block;
|
15 |
-
height : 28px;
|
16 |
-
margin : 0 0 -4px;
|
17 |
-
-moz-user-select : none;
|
18 |
-
-ms-user-select : none;
|
19 |
-
user-select : none;
|
20 |
-
-webkit-user-select : none
|
21 |
-
}
|
22 |
-
|
23 |
-
.select2-container .select2-selection--single .select2-selection__rendered {
|
24 |
-
display : block;
|
25 |
-
padding-left : 8px;
|
26 |
-
padding-right : 20px;
|
27 |
-
overflow : hidden;
|
28 |
-
text-overflow : ellipsis;
|
29 |
-
white-space : nowrap
|
30 |
-
}
|
31 |
-
|
32 |
-
.select2-container .select2-selection--single .select2-selection__clear {
|
33 |
-
position : relative
|
34 |
-
}
|
35 |
-
|
36 |
-
.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered {
|
37 |
-
padding-right : 8px;
|
38 |
-
padding-left : 20px
|
39 |
-
}
|
40 |
-
|
41 |
-
.select2-container .select2-selection--multiple {
|
42 |
-
-webkit-box-sizing : border-box;
|
43 |
-
box-sizing : border-box;
|
44 |
-
cursor : pointer;
|
45 |
-
display : block;
|
46 |
-
min-height : 32px;
|
47 |
-
-moz-user-select : none;
|
48 |
-
-ms-user-select : none;
|
49 |
-
user-select : none;
|
50 |
-
-webkit-user-select : none
|
51 |
-
}
|
52 |
-
|
53 |
-
.select2-container .select2-selection--multiple .select2-selection__rendered {
|
54 |
-
display : inline-block;
|
55 |
-
overflow : hidden;
|
56 |
-
padding-left : 8px;
|
57 |
-
text-overflow : ellipsis;
|
58 |
-
white-space : nowrap
|
59 |
-
}
|
60 |
-
|
61 |
-
.select2-container .select2-search--inline {
|
62 |
-
float : left;
|
63 |
-
padding : 0
|
64 |
-
}
|
65 |
-
|
66 |
-
.select2-container .select2-search--inline .select2-search__field {
|
67 |
-
-webkit-box-sizing : border-box;
|
68 |
-
box-sizing : border-box;
|
69 |
-
border : none;
|
70 |
-
font-size : 100%;
|
71 |
-
margin : 0;
|
72 |
-
padding : 0
|
73 |
-
}
|
74 |
-
|
75 |
-
.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {
|
76 |
-
-webkit-appearance : none
|
77 |
-
}
|
78 |
-
|
79 |
-
.select2-dropdown {
|
80 |
-
background-color : #fff;
|
81 |
-
border : 1px solid #aaa;
|
82 |
-
border-radius : 4px;
|
83 |
-
-webkit-box-sizing : border-box;
|
84 |
-
box-sizing : border-box;
|
85 |
-
display : block;
|
86 |
-
position : absolute;
|
87 |
-
left : -100000px;
|
88 |
-
width : 100%;
|
89 |
-
z-index : 1051
|
90 |
-
}
|
91 |
-
|
92 |
-
.select2-results {
|
93 |
-
display : block
|
94 |
-
}
|
95 |
-
|
96 |
-
.select2-results__options {
|
97 |
-
list-style : none;
|
98 |
-
margin : 0;
|
99 |
-
padding : 0
|
100 |
-
}
|
101 |
-
|
102 |
-
.select2-results__option {
|
103 |
-
padding : 6px;
|
104 |
-
-moz-user-select : none;
|
105 |
-
-ms-user-select : none;
|
106 |
-
user-select : none;
|
107 |
-
-webkit-user-select : none
|
108 |
-
}
|
109 |
-
|
110 |
-
.select2-results__option[aria-selected], .select2-results__option[data-selected] {
|
111 |
-
cursor : pointer
|
112 |
-
}
|
113 |
-
|
114 |
-
.select2-container--open .select2-dropdown {
|
115 |
-
left : 0
|
116 |
-
}
|
117 |
-
|
118 |
-
.select2-container--open .select2-dropdown--above {
|
119 |
-
border-bottom : none;
|
120 |
-
border-bottom-left-radius : 0;
|
121 |
-
border-bottom-right-radius : 0
|
122 |
-
}
|
123 |
-
|
124 |
-
.select2-container--open .select2-dropdown--below {
|
125 |
-
border-top : none;
|
126 |
-
border-top-left-radius : 0;
|
127 |
-
border-top-right-radius : 0
|
128 |
-
}
|
129 |
-
|
130 |
-
.select2-search--dropdown {
|
131 |
-
display : block;
|
132 |
-
padding : 4px
|
133 |
-
}
|
134 |
-
|
135 |
-
.select2-search--dropdown .select2-search__field {
|
136 |
-
padding : 4px;
|
137 |
-
width : 100%;
|
138 |
-
-webkit-box-sizing : border-box;
|
139 |
-
box-sizing : border-box
|
140 |
-
}
|
141 |
-
|
142 |
-
.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {
|
143 |
-
-webkit-appearance : none
|
144 |
-
}
|
145 |
-
|
146 |
-
.select2-search--dropdown.select2-search--hide {
|
147 |
-
display : none
|
148 |
-
}
|
149 |
-
|
150 |
-
.select2-close-mask {
|
151 |
-
border : 0;
|
152 |
-
margin : 0;
|
153 |
-
padding : 0;
|
154 |
-
display : block;
|
155 |
-
position : fixed;
|
156 |
-
left : 0;
|
157 |
-
top : 0;
|
158 |
-
min-height : 100%;
|
159 |
-
min-width : 100%;
|
160 |
-
height : auto;
|
161 |
-
width : auto;
|
162 |
-
opacity : 0;
|
163 |
-
z-index : 99;
|
164 |
-
background-color : #fff
|
165 |
-
}
|
166 |
-
|
167 |
-
.select2-hidden-accessible {
|
168 |
-
border : 0 !important;
|
169 |
-
clip : rect(0 0 0 0) !important;
|
170 |
-
height : 1px !important;
|
171 |
-
margin : -1px !important;
|
172 |
-
overflow : hidden !important;
|
173 |
-
padding : 0 !important;
|
174 |
-
position : absolute !important;
|
175 |
-
width : 1px !important
|
176 |
-
}
|
177 |
-
|
178 |
-
.select2-container--default .select2-selection--single {
|
179 |
-
background-color : #fff;
|
180 |
-
border : 1px solid #aaa;
|
181 |
-
border-radius : 4px
|
182 |
-
}
|
183 |
-
|
184 |
-
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
185 |
-
color : #444;
|
186 |
-
line-height : 28px
|
187 |
-
}
|
188 |
-
|
189 |
-
.select2-container--default .select2-selection--single .select2-selection__clear {
|
190 |
-
cursor : pointer;
|
191 |
-
float : right;
|
192 |
-
font-weight : 700
|
193 |
-
}
|
194 |
-
|
195 |
-
.select2-container--default .select2-selection--single .select2-selection__placeholder {
|
196 |
-
color : #999
|
197 |
-
}
|
198 |
-
|
199 |
-
.select2-container--default .select2-selection--single .select2-selection__arrow {
|
200 |
-
height : 26px;
|
201 |
-
position : absolute;
|
202 |
-
top : 1px;
|
203 |
-
right : 1px;
|
204 |
-
width : 20px
|
205 |
-
}
|
206 |
-
|
207 |
-
.select2-container--default .select2-selection--single .select2-selection__arrow b {
|
208 |
-
border-color : #888 transparent transparent transparent;
|
209 |
-
border-style : solid;
|
210 |
-
border-width : 5px 4px 0 4px;
|
211 |
-
height : 0;
|
212 |
-
left : 50%;
|
213 |
-
margin-left : -4px;
|
214 |
-
margin-top : -2px;
|
215 |
-
position : absolute;
|
216 |
-
top : 50%;
|
217 |
-
width : 0
|
218 |
-
}
|
219 |
-
|
220 |
-
.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear {
|
221 |
-
float : left
|
222 |
-
}
|
223 |
-
|
224 |
-
.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow {
|
225 |
-
left : 1px;
|
226 |
-
right : auto
|
227 |
-
}
|
228 |
-
|
229 |
-
.select2-container--default.select2-container--disabled .select2-selection--single {
|
230 |
-
background-color : #eee;
|
231 |
-
cursor : default
|
232 |
-
}
|
233 |
-
|
234 |
-
.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {
|
235 |
-
display : none
|
236 |
-
}
|
237 |
-
|
238 |
-
.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
|
239 |
-
border-color : transparent transparent #888 transparent;
|
240 |
-
border-width : 0 4px 5px 4px
|
241 |
-
}
|
242 |
-
|
243 |
-
.select2-container--default .select2-selection--multiple {
|
244 |
-
background-color : #fff;
|
245 |
-
border : 1px solid #aaa;
|
246 |
-
cursor : text;
|
247 |
-
}
|
248 |
-
|
249 |
-
.select2-container--default .select2-selection--multiple .select2-selection__rendered {
|
250 |
-
-webkit-box-sizing : border-box;
|
251 |
-
box-sizing : border-box;
|
252 |
-
list-style : none;
|
253 |
-
margin : 0;
|
254 |
-
padding : 0 5px;
|
255 |
-
width : 100%
|
256 |
-
}
|
257 |
-
|
258 |
-
.select2-container--default .select2-selection--multiple .select2-selection__rendered li {
|
259 |
-
list-style : none;
|
260 |
-
margin : 5px 5px 0 0
|
261 |
-
}
|
262 |
-
|
263 |
-
.select2-container--default .select2-selection--multiple .select2-selection__rendered li:before {
|
264 |
-
content : '';
|
265 |
-
display : none
|
266 |
-
}
|
267 |
-
|
268 |
-
.select2-container--default .select2-selection--multiple .select2-selection__placeholder {
|
269 |
-
color : #999;
|
270 |
-
margin-top : 5px;
|
271 |
-
float : left
|
272 |
-
}
|
273 |
-
|
274 |
-
.select2-container--default .select2-selection--multiple .select2-selection__clear {
|
275 |
-
cursor : pointer;
|
276 |
-
float : right;
|
277 |
-
font-weight : 700;
|
278 |
-
margin-top : 5px;
|
279 |
-
margin-right : 10px
|
280 |
-
}
|
281 |
-
|
282 |
-
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
283 |
-
background-color : #e4e4e4;
|
284 |
-
border : 1px solid #aaa;
|
285 |
-
border-radius : 4px;
|
286 |
-
cursor : default;
|
287 |
-
float : left;
|
288 |
-
margin-right : 5px;
|
289 |
-
margin-top : 5px;
|
290 |
-
padding : 0 5px
|
291 |
-
}
|
292 |
-
|
293 |
-
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
|
294 |
-
color : #999;
|
295 |
-
cursor : pointer;
|
296 |
-
display : inline-block;
|
297 |
-
font-weight : 700;
|
298 |
-
margin-right : 2px
|
299 |
-
}
|
300 |
-
|
301 |
-
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
|
302 |
-
color : #333
|
303 |
-
}
|
304 |
-
|
305 |
-
.select2-container--default[dir=rtl] .select2-selection--multiple .select2-search--inline, .select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__placeholder {
|
306 |
-
float : right
|
307 |
-
}
|
308 |
-
|
309 |
-
.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice {
|
310 |
-
margin-left : 5px;
|
311 |
-
margin-right : auto
|
312 |
-
}
|
313 |
-
|
314 |
-
.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove {
|
315 |
-
margin-left : 2px;
|
316 |
-
margin-right : auto
|
317 |
-
}
|
318 |
-
|
319 |
-
.select2-container--default.select2-container--focus .select2-selection--multiple {
|
320 |
-
border : solid #000 1px;
|
321 |
-
outline : 0
|
322 |
-
}
|
323 |
-
|
324 |
-
.select2-container--default.select2-container--disabled .select2-selection--multiple {
|
325 |
-
background-color : #eee;
|
326 |
-
cursor : default
|
327 |
-
}
|
328 |
-
|
329 |
-
.select2-container--default.select2-container--disabled .select2-selection__choice__remove {
|
330 |
-
display : none
|
331 |
-
}
|
332 |
-
|
333 |
-
.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple, .select2-container--default.select2-container--open.select2-container--above .select2-selection--single {
|
334 |
-
border-top-left-radius : 0;
|
335 |
-
border-top-right-radius : 0
|
336 |
-
}
|
337 |
-
|
338 |
-
.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple, .select2-container--default.select2-container--open.select2-container--below .select2-selection--single {
|
339 |
-
border-bottom-left-radius : 0;
|
340 |
-
border-bottom-right-radius : 0
|
341 |
-
}
|
342 |
-
|
343 |
-
.select2-container--default .select2-search--dropdown .select2-search__field {
|
344 |
-
border : 1px solid #aaa
|
345 |
-
}
|
346 |
-
|
347 |
-
.select2-container--default .select2-search--inline .select2-search__field {
|
348 |
-
background : 0 0;
|
349 |
-
border : none;
|
350 |
-
outline : 0;
|
351 |
-
-webkit-box-shadow : none;
|
352 |
-
box-shadow : none;
|
353 |
-
-webkit-appearance : textfield
|
354 |
-
}
|
355 |
-
|
356 |
-
.select2-container--default .select2-results > .select2-results__options {
|
357 |
-
max-height : 200px;
|
358 |
-
overflow-y : auto
|
359 |
-
}
|
360 |
-
|
361 |
-
.select2-container--default .select2-results__option[role=group] {
|
362 |
-
padding : 0
|
363 |
-
}
|
364 |
-
|
365 |
-
.select2-container--default .select2-results__option[aria-disabled=true] {
|
366 |
-
color : #999
|
367 |
-
}
|
368 |
-
|
369 |
-
.select2-container--default .select2-results__option[aria-selected=true], .select2-container--default .select2-results__option[data-selected=true] {
|
370 |
-
background-color : #ddd
|
371 |
-
}
|
372 |
-
|
373 |
-
.select2-container--default .select2-results__option .select2-results__option {
|
374 |
-
padding-left : 1em
|
375 |
-
}
|
376 |
-
|
377 |
-
.select2-container--default .select2-results__option .select2-results__option .select2-results__group {
|
378 |
-
padding-left : 0
|
379 |
-
}
|
380 |
-
|
381 |
-
.select2-container--default .select2-results__option .select2-results__option .select2-results__option {
|
382 |
-
margin-left : -1em;
|
383 |
-
padding-left : 2em
|
384 |
-
}
|
385 |
-
|
386 |
-
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
387 |
-
margin-left : -2em;
|
388 |
-
padding-left : 3em
|
389 |
-
}
|
390 |
-
|
391 |
-
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
392 |
-
margin-left : -3em;
|
393 |
-
padding-left : 4em
|
394 |
-
}
|
395 |
-
|
396 |
-
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
397 |
-
margin-left : -4em;
|
398 |
-
padding-left : 5em
|
399 |
-
}
|
400 |
-
|
401 |
-
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
402 |
-
margin-left : -5em;
|
403 |
-
padding-left : 6em
|
404 |
-
}
|
405 |
-
|
406 |
-
.select2-container--default .select2-results__option--highlighted[aria-selected], .select2-container--default .select2-results__option--highlighted[data-selected] {
|
407 |
-
background-color : #0073aa;
|
408 |
-
color : #fff
|
409 |
-
}
|
410 |
-
|
411 |
-
.select2-container--default .select2-results__group {
|
412 |
-
cursor : default;
|
413 |
-
display : block;
|
414 |
-
padding : 6px
|
415 |
-
}
|
416 |
-
|
417 |
-
.select2-container--classic .select2-selection--single {
|
418 |
-
background-color : #f7f7f7;
|
419 |
-
border : 1px solid #aaa;
|
420 |
-
border-radius : 4px;
|
421 |
-
outline : 0;
|
422 |
-
background-image : -webkit-gradient(linear, left top, left bottom, color-stop(50%, #fff), to(#eee));
|
423 |
-
background-image : -webkit-linear-gradient(top, #fff 50%, #eee 100%);
|
424 |
-
background-image : linear-gradient(to bottom, #fff 50%, #eee 100%);
|
425 |
-
background-repeat : repeat-x
|
426 |
-
}
|
427 |
-
|
428 |
-
.select2-container--classic .select2-selection--single:focus {
|
429 |
-
border : 1px solid #0073aa
|
430 |
-
}
|
431 |
-
|
432 |
-
.select2-container--classic .select2-selection--single .select2-selection__rendered {
|
433 |
-
color : #444;
|
434 |
-
line-height : 28px
|
435 |
-
}
|
436 |
-
|
437 |
-
.select2-container--classic .select2-selection--single .select2-selection__clear {
|
438 |
-
cursor : pointer;
|
439 |
-
float : right;
|
440 |
-
font-weight : 700;
|
441 |
-
margin-right : 10px
|
442 |
-
}
|
443 |
-
|
444 |
-
.select2-container--classic .select2-selection--single .select2-selection__placeholder {
|
445 |
-
color : #999
|
446 |
-
}
|
447 |
-
|
448 |
-
.select2-container--classic .select2-selection--single .select2-selection__arrow {
|
449 |
-
background-color : #ddd;
|
450 |
-
border : none;
|
451 |
-
border-left : 1px solid #aaa;
|
452 |
-
border-top-right-radius : 4px;
|
453 |
-
border-bottom-right-radius : 4px;
|
454 |
-
height : 26px;
|
455 |
-
position : absolute;
|
456 |
-
top : 1px;
|
457 |
-
right : 1px;
|
458 |
-
width : 20px;
|
459 |
-
background-image : -webkit-gradient(linear, left top, left bottom, color-stop(50%, #eee), to(#ccc));
|
460 |
-
background-image : -webkit-linear-gradient(top, #eee 50%, #ccc 100%);
|
461 |
-
background-image : linear-gradient(to bottom, #eee 50%, #ccc 100%);
|
462 |
-
background-repeat : repeat-x
|
463 |
-
}
|
464 |
-
|
465 |
-
.select2-container--classic .select2-selection--single .select2-selection__arrow b {
|
466 |
-
border-color : #888 transparent transparent transparent;
|
467 |
-
border-style : solid;
|
468 |
-
border-width : 5px 4px 0 4px;
|
469 |
-
height : 0;
|
470 |
-
left : 50%;
|
471 |
-
margin-left : -4px;
|
472 |
-
margin-top : -2px;
|
473 |
-
position : absolute;
|
474 |
-
top : 50%;
|
475 |
-
width : 0
|
476 |
-
}
|
477 |
-
|
478 |
-
.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__clear {
|
479 |
-
float : left
|
480 |
-
}
|
481 |
-
|
482 |
-
.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__arrow {
|
483 |
-
border : none;
|
484 |
-
border-right : 1px solid #aaa;
|
485 |
-
border-radius : 0;
|
486 |
-
border-top-left-radius : 4px;
|
487 |
-
border-bottom-left-radius : 4px;
|
488 |
-
left : 1px;
|
489 |
-
right : auto
|
490 |
-
}
|
491 |
-
|
492 |
-
.select2-container--classic.select2-container--open .select2-selection--single {
|
493 |
-
border : 1px solid #0073aa
|
494 |
-
}
|
495 |
-
|
496 |
-
.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {
|
497 |
-
background : 0 0;
|
498 |
-
border : none
|
499 |
-
}
|
500 |
-
|
501 |
-
.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {
|
502 |
-
border-color : transparent transparent #888 transparent;
|
503 |
-
border-width : 0 4px 5px 4px
|
504 |
-
}
|
505 |
-
|
506 |
-
.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {
|
507 |
-
border-top : none;
|
508 |
-
border-top-left-radius : 0;
|
509 |
-
border-top-right-radius : 0;
|
510 |
-
background-image : -webkit-gradient(linear, left top, left bottom, from(white), color-stop(50%, #eee));
|
511 |
-
background-image : -webkit-linear-gradient(top, #fff 0, #eee 50%);
|
512 |
-
background-image : linear-gradient(to bottom, #fff 0, #eee 50%);
|
513 |
-
background-repeat : repeat-x
|
514 |
-
}
|
515 |
-
|
516 |
-
.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {
|
517 |
-
border-bottom : none;
|
518 |
-
border-bottom-left-radius : 0;
|
519 |
-
border-bottom-right-radius : 0;
|
520 |
-
background-image : -webkit-gradient(linear, left top, left bottom, color-stop(50%, #eee), to(white));
|
521 |
-
background-image : -webkit-linear-gradient(top, #eee 50%, #fff 100%);
|
522 |
-
background-image : linear-gradient(to bottom, #eee 50%, #fff 100%);
|
523 |
-
background-repeat : repeat-x
|
524 |
-
}
|
525 |
-
|
526 |
-
.select2-container--classic .select2-selection--multiple {
|
527 |
-
background-color : #fff;
|
528 |
-
border : 1px solid #aaa;
|
529 |
-
border-radius : 4px;
|
530 |
-
cursor : text;
|
531 |
-
outline : 0
|
532 |
-
}
|
533 |
-
|
534 |
-
.select2-container--classic .select2-selection--multiple:focus {
|
535 |
-
border : 1px solid #0073aa
|
536 |
-
}
|
537 |
-
|
538 |
-
.select2-container--classic .select2-selection--multiple .select2-selection__rendered {
|
539 |
-
list-style : none;
|
540 |
-
margin : 0;
|
541 |
-
padding : 0 5px
|
542 |
-
}
|
543 |
-
|
544 |
-
.select2-container--classic .select2-selection--multiple .select2-selection__clear {
|
545 |
-
display : none
|
546 |
-
}
|
547 |
-
|
548 |
-
.select2-container--classic .select2-selection--multiple .select2-selection__choice {
|
549 |
-
background-color : #e4e4e4;
|
550 |
-
border : 1px solid #aaa;
|
551 |
-
border-radius : 4px;
|
552 |
-
cursor : default;
|
553 |
-
float : left;
|
554 |
-
margin-right : 5px;
|
555 |
-
margin-top : 5px;
|
556 |
-
padding : 0 5px
|
557 |
-
}
|
558 |
-
|
559 |
-
.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {
|
560 |
-
color : #888;
|
561 |
-
cursor : pointer;
|
562 |
-
display : inline-block;
|
563 |
-
font-weight : 700;
|
564 |
-
margin-right : 2px
|
565 |
-
}
|
566 |
-
|
567 |
-
.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {
|
568 |
-
color : #555
|
569 |
-
}
|
570 |
-
|
571 |
-
.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice {
|
572 |
-
float : right
|
573 |
-
}
|
574 |
-
|
575 |
-
.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice {
|
576 |
-
margin-left : 5px;
|
577 |
-
margin-right : auto
|
578 |
-
}
|
579 |
-
|
580 |
-
.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove {
|
581 |
-
margin-left : 2px;
|
582 |
-
margin-right : auto
|
583 |
-
}
|
584 |
-
|
585 |
-
.select2-container--classic.select2-container--open .select2-selection--multiple {
|
586 |
-
border : 1px solid #0073aa
|
587 |
-
}
|
588 |
-
|
589 |
-
.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {
|
590 |
-
border-top : none;
|
591 |
-
border-top-left-radius : 0;
|
592 |
-
border-top-right-radius : 0
|
593 |
-
}
|
594 |
-
|
595 |
-
.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {
|
596 |
-
border-bottom : none;
|
597 |
-
border-bottom-left-radius : 0;
|
598 |
-
border-bottom-right-radius : 0
|
599 |
-
}
|
600 |
-
|
601 |
-
.select2-container--classic .select2-search--dropdown .select2-search__field {
|
602 |
-
border : 1px solid #aaa;
|
603 |
-
outline : 0
|
604 |
-
}
|
605 |
-
|
606 |
-
.select2-container--classic .select2-search--inline .select2-search__field {
|
607 |
-
outline : 0;
|
608 |
-
-webkit-box-shadow : none;
|
609 |
-
box-shadow : none
|
610 |
-
}
|
611 |
-
|
612 |
-
.select2-container--classic .select2-dropdown {
|
613 |
-
background-color : #fff;
|
614 |
-
border : 1px solid transparent
|
615 |
-
}
|
616 |
-
|
617 |
-
.select2-container--classic .select2-dropdown--above {
|
618 |
-
border-bottom : none
|
619 |
-
}
|
620 |
-
|
621 |
-
.select2-container--classic .select2-dropdown--below {
|
622 |
-
border-top : none
|
623 |
-
}
|
624 |
-
|
625 |
-
.select2-container--classic .select2-results > .select2-results__options {
|
626 |
-
max-height : 200px;
|
627 |
-
overflow-y : auto
|
628 |
-
}
|
629 |
-
|
630 |
-
.select2-container--classic .select2-results__option[role=group] {
|
631 |
-
padding : 0
|
632 |
-
}
|
633 |
-
|
634 |
-
.select2-container--classic .select2-results__option[aria-disabled=true] {
|
635 |
-
color : grey
|
636 |
-
}
|
637 |
-
|
638 |
-
.select2-container--classic .select2-results__option--highlighted[aria-selected], .select2-container--classic .select2-results__option--highlighted[data-selected] {
|
639 |
-
background-color : #3875d7;
|
640 |
-
color : #fff
|
641 |
-
}
|
642 |
-
|
643 |
-
.select2-container--classic .select2-results__group {
|
644 |
-
cursor : default;
|
645 |
-
display : block;
|
646 |
-
padding : 6px
|
647 |
-
}
|
648 |
-
|
649 |
-
.select2-container--classic.select2-container--open .select2-dropdown {
|
650 |
-
border-color : #0073aa
|
651 |
-
}
|
652 |
-
|
653 |
-
|
654 |
-
.select2-drop, .select2-dropdown {
|
655 |
-
z-index : 999999 !important
|
656 |
-
}
|
657 |
-
|
658 |
-
.select2-results {
|
659 |
-
line-height : 1.5em
|
660 |
-
}
|
661 |
-
|
662 |
-
.select2-results .select2-results__group, .select2-results .select2-results__option {
|
663 |
-
margin : 0;
|
664 |
-
padding : 8px
|
665 |
-
}
|
666 |
-
|
667 |
-
.select2-results .description {
|
668 |
-
display : block;
|
669 |
-
color : #999;
|
670 |
-
padding-top : 4px
|
671 |
-
}
|
672 |
-
|
673 |
-
.select2-dropdown {
|
674 |
-
border-color : #ddd
|
675 |
-
}
|
676 |
-
|
677 |
-
.select2-dropdown--below {
|
678 |
-
-webkit-box-shadow : 0 1px 1px rgba(0, 0, 0, .1);
|
679 |
-
box-shadow : 0 1px 1px rgba(0, 0, 0, .1)
|
680 |
-
}
|
681 |
-
|
682 |
-
.select2-dropdown--above {
|
683 |
-
-webkit-box-shadow : 0 -1px 1px rgba(0, 0, 0, .1);
|
684 |
-
box-shadow : 0 -1px 1px rgba(0, 0, 0, .1)
|
685 |
-
}
|
686 |
-
|
687 |
-
.select2-container .select2-selection__rendered.ui-sortable li {
|
688 |
-
cursor : move
|
689 |
-
}
|
690 |
-
|
691 |
-
.select2-container .select2-selection {
|
692 |
-
border-color : #ddd
|
693 |
-
}
|
694 |
-
|
695 |
-
.select2-container .select2-search__field {
|
696 |
-
min-width : 150px
|
697 |
-
}
|
698 |
-
|
699 |
-
.select2-container .select2-selection--single {
|
700 |
-
height : 32px
|
701 |
-
}
|
702 |
-
|
703 |
-
.select2-container .select2-selection--single .select2-selection__rendered {
|
704 |
-
line-height : 32px;
|
705 |
-
padding-right : 24px
|
706 |
-
}
|
707 |
-
|
708 |
-
.select2-container .select2-selection--single .select2-selection__arrow {
|
709 |
-
right : 3px;
|
710 |
-
height : 30px
|
711 |
-
}
|
712 |
-
|
713 |
-
.select2-container .select2-selection--multiple {
|
714 |
-
min-height : 28px;
|
715 |
-
border-radius : 0;
|
716 |
-
line-height : 1.5
|
717 |
-
}
|
718 |
-
|
719 |
-
.select2-container .select2-selection--multiple li {
|
720 |
-
margin : 0
|
721 |
-
}
|
722 |
-
|
723 |
-
.select2-container .select2-selection--multiple .select2-selection__choice {
|
724 |
-
padding : 2px 6px
|
725 |
-
}
|
726 |
-
|
727 |
-
.select2-container .select2-selection--multiple .select2-selection__choice .description {
|
728 |
-
display : none
|
729 |
-
}
|
730 |
-
|
731 |
-
.select2-container .select2-selection__clear {
|
732 |
-
color : #999;
|
733 |
-
margin-top : -1px
|
734 |
-
}
|
735 |
-
|
736 |
-
.select2-container .select2-search--inline .select2-search__field {
|
737 |
-
font-family : inherit;
|
738 |
-
font-size : inherit;
|
739 |
-
font-weight : inherit;
|
740 |
-
padding : 3px 0
|
741 |
}
|
1 |
+
.select2-container {
|
2 |
+
-webkit-box-sizing : border-box;
|
3 |
+
box-sizing : border-box;
|
4 |
+
display : inline-block;
|
5 |
+
margin : 0;
|
6 |
+
position : relative;
|
7 |
+
vertical-align : middle
|
8 |
+
}
|
9 |
+
|
10 |
+
.select2-container .select2-selection--single {
|
11 |
+
-webkit-box-sizing : border-box;
|
12 |
+
box-sizing : border-box;
|
13 |
+
cursor : pointer;
|
14 |
+
display : block;
|
15 |
+
height : 28px;
|
16 |
+
margin : 0 0 -4px;
|
17 |
+
-moz-user-select : none;
|
18 |
+
-ms-user-select : none;
|
19 |
+
user-select : none;
|
20 |
+
-webkit-user-select : none
|
21 |
+
}
|
22 |
+
|
23 |
+
.select2-container .select2-selection--single .select2-selection__rendered {
|
24 |
+
display : block;
|
25 |
+
padding-left : 8px;
|
26 |
+
padding-right : 20px;
|
27 |
+
overflow : hidden;
|
28 |
+
text-overflow : ellipsis;
|
29 |
+
white-space : nowrap
|
30 |
+
}
|
31 |
+
|
32 |
+
.select2-container .select2-selection--single .select2-selection__clear {
|
33 |
+
position : relative
|
34 |
+
}
|
35 |
+
|
36 |
+
.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered {
|
37 |
+
padding-right : 8px;
|
38 |
+
padding-left : 20px
|
39 |
+
}
|
40 |
+
|
41 |
+
.select2-container .select2-selection--multiple {
|
42 |
+
-webkit-box-sizing : border-box;
|
43 |
+
box-sizing : border-box;
|
44 |
+
cursor : pointer;
|
45 |
+
display : block;
|
46 |
+
min-height : 32px;
|
47 |
+
-moz-user-select : none;
|
48 |
+
-ms-user-select : none;
|
49 |
+
user-select : none;
|
50 |
+
-webkit-user-select : none
|
51 |
+
}
|
52 |
+
|
53 |
+
.select2-container .select2-selection--multiple .select2-selection__rendered {
|
54 |
+
display : inline-block;
|
55 |
+
overflow : hidden;
|
56 |
+
padding-left : 8px;
|
57 |
+
text-overflow : ellipsis;
|
58 |
+
white-space : nowrap
|
59 |
+
}
|
60 |
+
|
61 |
+
.select2-container .select2-search--inline {
|
62 |
+
float : left;
|
63 |
+
padding : 0
|
64 |
+
}
|
65 |
+
|
66 |
+
.select2-container .select2-search--inline .select2-search__field {
|
67 |
+
-webkit-box-sizing : border-box;
|
68 |
+
box-sizing : border-box;
|
69 |
+
border : none;
|
70 |
+
font-size : 100%;
|
71 |
+
margin : 0;
|
72 |
+
padding : 0
|
73 |
+
}
|
74 |
+
|
75 |
+
.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {
|
76 |
+
-webkit-appearance : none
|
77 |
+
}
|
78 |
+
|
79 |
+
.select2-dropdown {
|
80 |
+
background-color : #fff;
|
81 |
+
border : 1px solid #aaa;
|
82 |
+
border-radius : 4px;
|
83 |
+
-webkit-box-sizing : border-box;
|
84 |
+
box-sizing : border-box;
|
85 |
+
display : block;
|
86 |
+
position : absolute;
|
87 |
+
left : -100000px;
|
88 |
+
width : 100%;
|
89 |
+
z-index : 1051
|
90 |
+
}
|
91 |
+
|
92 |
+
.select2-results {
|
93 |
+
display : block
|
94 |
+
}
|
95 |
+
|
96 |
+
.select2-results__options {
|
97 |
+
list-style : none;
|
98 |
+
margin : 0;
|
99 |
+
padding : 0
|
100 |
+
}
|
101 |
+
|
102 |
+
.select2-results__option {
|
103 |
+
padding : 6px;
|
104 |
+
-moz-user-select : none;
|
105 |
+
-ms-user-select : none;
|
106 |
+
user-select : none;
|
107 |
+
-webkit-user-select : none
|
108 |
+
}
|
109 |
+
|
110 |
+
.select2-results__option[aria-selected], .select2-results__option[data-selected] {
|
111 |
+
cursor : pointer
|
112 |
+
}
|
113 |
+
|
114 |
+
.select2-container--open .select2-dropdown {
|
115 |
+
left : 0
|
116 |
+
}
|
117 |
+
|
118 |
+
.select2-container--open .select2-dropdown--above {
|
119 |
+
border-bottom : none;
|
120 |
+
border-bottom-left-radius : 0;
|
121 |
+
border-bottom-right-radius : 0
|
122 |
+
}
|
123 |
+
|
124 |
+
.select2-container--open .select2-dropdown--below {
|
125 |
+
border-top : none;
|
126 |
+
border-top-left-radius : 0;
|
127 |
+
border-top-right-radius : 0
|
128 |
+
}
|
129 |
+
|
130 |
+
.select2-search--dropdown {
|
131 |
+
display : block;
|
132 |
+
padding : 4px
|
133 |
+
}
|
134 |
+
|
135 |
+
.select2-search--dropdown .select2-search__field {
|
136 |
+
padding : 4px;
|
137 |
+
width : 100%;
|
138 |
+
-webkit-box-sizing : border-box;
|
139 |
+
box-sizing : border-box
|
140 |
+
}
|
141 |
+
|
142 |
+
.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {
|
143 |
+
-webkit-appearance : none
|
144 |
+
}
|
145 |
+
|
146 |
+
.select2-search--dropdown.select2-search--hide {
|
147 |
+
display : none
|
148 |
+
}
|
149 |
+
|
150 |
+
.select2-close-mask {
|
151 |
+
border : 0;
|
152 |
+
margin : 0;
|
153 |
+
padding : 0;
|
154 |
+
display : block;
|
155 |
+
position : fixed;
|
156 |
+
left : 0;
|
157 |
+
top : 0;
|
158 |
+
min-height : 100%;
|
159 |
+
min-width : 100%;
|
160 |
+
height : auto;
|
161 |
+
width : auto;
|
162 |
+
opacity : 0;
|
163 |
+
z-index : 99;
|
164 |
+
background-color : #fff
|
165 |
+
}
|
166 |
+
|
167 |
+
.select2-hidden-accessible {
|
168 |
+
border : 0 !important;
|
169 |
+
clip : rect(0 0 0 0) !important;
|
170 |
+
height : 1px !important;
|
171 |
+
margin : -1px !important;
|
172 |
+
overflow : hidden !important;
|
173 |
+
padding : 0 !important;
|
174 |
+
position : absolute !important;
|
175 |
+
width : 1px !important
|
176 |
+
}
|
177 |
+
|
178 |
+
.select2-container--default .select2-selection--single {
|
179 |
+
background-color : #fff;
|
180 |
+
border : 1px solid #aaa;
|
181 |
+
border-radius : 4px
|
182 |
+
}
|
183 |
+
|
184 |
+
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
185 |
+
color : #444;
|
186 |
+
line-height : 28px
|
187 |
+
}
|
188 |
+
|
189 |
+
.select2-container--default .select2-selection--single .select2-selection__clear {
|
190 |
+
cursor : pointer;
|
191 |
+
float : right;
|
192 |
+
font-weight : 700
|
193 |
+
}
|
194 |
+
|
195 |
+
.select2-container--default .select2-selection--single .select2-selection__placeholder {
|
196 |
+
color : #999
|
197 |
+
}
|
198 |
+
|
199 |
+
.select2-container--default .select2-selection--single .select2-selection__arrow {
|
200 |
+
height : 26px;
|
201 |
+
position : absolute;
|
202 |
+
top : 1px;
|
203 |
+
right : 1px;
|
204 |
+
width : 20px
|
205 |
+
}
|
206 |
+
|
207 |
+
.select2-container--default .select2-selection--single .select2-selection__arrow b {
|
208 |
+
border-color : #888 transparent transparent transparent;
|
209 |
+
border-style : solid;
|
210 |
+
border-width : 5px 4px 0 4px;
|
211 |
+
height : 0;
|
212 |
+
left : 50%;
|
213 |
+
margin-left : -4px;
|
214 |
+
margin-top : -2px;
|
215 |
+
position : absolute;
|
216 |
+
top : 50%;
|
217 |
+
width : 0
|
218 |
+
}
|
219 |
+
|
220 |
+
.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear {
|
221 |
+
float : left
|
222 |
+
}
|
223 |
+
|
224 |
+
.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow {
|
225 |
+
left : 1px;
|
226 |
+
right : auto
|
227 |
+
}
|
228 |
+
|
229 |
+
.select2-container--default.select2-container--disabled .select2-selection--single {
|
230 |
+
background-color : #eee;
|
231 |
+
cursor : default
|
232 |
+
}
|
233 |
+
|
234 |
+
.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {
|
235 |
+
display : none
|
236 |
+
}
|
237 |
+
|
238 |
+
.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
|
239 |
+
border-color : transparent transparent #888 transparent;
|
240 |
+
border-width : 0 4px 5px 4px
|
241 |
+
}
|
242 |
+
|
243 |
+
.select2-container--default .select2-selection--multiple {
|
244 |
+
background-color : #fff;
|
245 |
+
border : 1px solid #aaa;
|
246 |
+
cursor : text;
|
247 |
+
}
|
248 |
+
|
249 |
+
.select2-container--default .select2-selection--multiple .select2-selection__rendered {
|
250 |
+
-webkit-box-sizing : border-box;
|
251 |
+
box-sizing : border-box;
|
252 |
+
list-style : none;
|
253 |
+
margin : 0;
|
254 |
+
padding : 0 5px;
|
255 |
+
width : 100%
|
256 |
+
}
|
257 |
+
|
258 |
+
.select2-container--default .select2-selection--multiple .select2-selection__rendered li {
|
259 |
+
list-style : none;
|
260 |
+
margin : 5px 5px 0 0
|
261 |
+
}
|
262 |
+
|
263 |
+
.select2-container--default .select2-selection--multiple .select2-selection__rendered li:before {
|
264 |
+
content : '';
|
265 |
+
display : none
|
266 |
+
}
|
267 |
+
|
268 |
+
.select2-container--default .select2-selection--multiple .select2-selection__placeholder {
|
269 |
+
color : #999;
|
270 |
+
margin-top : 5px;
|
271 |
+
float : left
|
272 |
+
}
|
273 |
+
|
274 |
+
.select2-container--default .select2-selection--multiple .select2-selection__clear {
|
275 |
+
cursor : pointer;
|
276 |
+
float : right;
|
277 |
+
font-weight : 700;
|
278 |
+
margin-top : 5px;
|
279 |
+
margin-right : 10px
|
280 |
+
}
|
281 |
+
|
282 |
+
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
283 |
+
background-color : #e4e4e4;
|
284 |
+
border : 1px solid #aaa;
|
285 |
+
border-radius : 4px;
|
286 |
+
cursor : default;
|
287 |
+
float : left;
|
288 |
+
margin-right : 5px;
|
289 |
+
margin-top : 5px;
|
290 |
+
padding : 0 5px
|
291 |
+
}
|
292 |
+
|
293 |
+
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
|
294 |
+
color : #999;
|
295 |
+
cursor : pointer;
|
296 |
+
display : inline-block;
|
297 |
+
font-weight : 700;
|
298 |
+
margin-right : 2px
|
299 |
+
}
|
300 |
+
|
301 |
+
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
|
302 |
+
color : #333
|
303 |
+
}
|
304 |
+
|
305 |
+
.select2-container--default[dir=rtl] .select2-selection--multiple .select2-search--inline, .select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__placeholder {
|
306 |
+
float : right
|
307 |
+
}
|
308 |
+
|
309 |
+
.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice {
|
310 |
+
margin-left : 5px;
|
311 |
+
margin-right : auto
|
312 |
+
}
|
313 |
+
|
314 |
+
.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove {
|
315 |
+
margin-left : 2px;
|
316 |
+
margin-right : auto
|
317 |
+
}
|
318 |
+
|
319 |
+
.select2-container--default.select2-container--focus .select2-selection--multiple {
|
320 |
+
border : solid #000 1px;
|
321 |
+
outline : 0
|
322 |
+
}
|
323 |
+
|
324 |
+
.select2-container--default.select2-container--disabled .select2-selection--multiple {
|
325 |
+
background-color : #eee;
|
326 |
+
cursor : default
|
327 |
+
}
|
328 |
+
|
329 |
+
.select2-container--default.select2-container--disabled .select2-selection__choice__remove {
|
330 |
+
display : none
|
331 |
+
}
|
332 |
+
|
333 |
+
.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple, .select2-container--default.select2-container--open.select2-container--above .select2-selection--single {
|
334 |
+
border-top-left-radius : 0;
|
335 |
+
border-top-right-radius : 0
|
336 |
+
}
|
337 |
+
|
338 |
+
.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple, .select2-container--default.select2-container--open.select2-container--below .select2-selection--single {
|
339 |
+
border-bottom-left-radius : 0;
|
340 |
+
border-bottom-right-radius : 0
|
341 |
+
}
|
342 |
+
|
343 |
+
.select2-container--default .select2-search--dropdown .select2-search__field {
|
344 |
+
border : 1px solid #aaa
|
345 |
+
}
|
346 |
+
|
347 |
+
.select2-container--default .select2-search--inline .select2-search__field {
|
348 |
+
background : 0 0;
|
349 |
+
border : none;
|
350 |
+
outline : 0;
|
351 |
+
-webkit-box-shadow : none;
|
352 |
+
box-shadow : none;
|
353 |
+
-webkit-appearance : textfield
|
354 |
+
}
|
355 |
+
|
356 |
+
.select2-container--default .select2-results > .select2-results__options {
|
357 |
+
max-height : 200px;
|
358 |
+
overflow-y : auto
|
359 |
+
}
|
360 |
+
|
361 |
+
.select2-container--default .select2-results__option[role=group] {
|
362 |
+
padding : 0
|
363 |
+
}
|
364 |
+
|
365 |
+
.select2-container--default .select2-results__option[aria-disabled=true] {
|
366 |
+
color : #999
|
367 |
+
}
|
368 |
+
|
369 |
+
.select2-container--default .select2-results__option[aria-selected=true], .select2-container--default .select2-results__option[data-selected=true] {
|
370 |
+
background-color : #ddd
|
371 |
+
}
|
372 |
+
|
373 |
+
.select2-container--default .select2-results__option .select2-results__option {
|
374 |
+
padding-left : 1em
|
375 |
+
}
|
376 |
+
|
377 |
+
.select2-container--default .select2-results__option .select2-results__option .select2-results__group {
|
378 |
+
padding-left : 0
|
379 |
+
}
|
380 |
+
|
381 |
+
.select2-container--default .select2-results__option .select2-results__option .select2-results__option {
|
382 |
+
margin-left : -1em;
|
383 |
+
padding-left : 2em
|
384 |
+
}
|
385 |
+
|
386 |
+
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
387 |
+
margin-left : -2em;
|
388 |
+
padding-left : 3em
|
389 |
+
}
|
390 |
+
|
391 |
+
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
392 |
+
margin-left : -3em;
|
393 |
+
padding-left : 4em
|
394 |
+
}
|
395 |
+
|
396 |
+
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
397 |
+
margin-left : -4em;
|
398 |
+
padding-left : 5em
|
399 |
+
}
|
400 |
+
|
401 |
+
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
402 |
+
margin-left : -5em;
|
403 |
+
padding-left : 6em
|
404 |
+
}
|
405 |
+
|
406 |
+
.select2-container--default .select2-results__option--highlighted[aria-selected], .select2-container--default .select2-results__option--highlighted[data-selected] {
|
407 |
+
background-color : #0073aa;
|
408 |
+
color : #fff
|
409 |
+
}
|
410 |
+
|
411 |
+
.select2-container--default .select2-results__group {
|
412 |
+
cursor : default;
|
413 |
+
display : block;
|
414 |
+
padding : 6px
|
415 |
+
}
|
416 |
+
|
417 |
+
.select2-container--classic .select2-selection--single {
|
418 |
+
background-color : #f7f7f7;
|
419 |
+
border : 1px solid #aaa;
|
420 |
+
border-radius : 4px;
|
421 |
+
outline : 0;
|
422 |
+
background-image : -webkit-gradient(linear, left top, left bottom, color-stop(50%, #fff), to(#eee));
|
423 |
+
background-image : -webkit-linear-gradient(top, #fff 50%, #eee 100%);
|
424 |
+
background-image : linear-gradient(to bottom, #fff 50%, #eee 100%);
|
425 |
+
background-repeat : repeat-x
|
426 |
+
}
|
427 |
+
|
428 |
+
.select2-container--classic .select2-selection--single:focus {
|
429 |
+
border : 1px solid #0073aa
|
430 |
+
}
|
431 |
+
|
432 |
+
.select2-container--classic .select2-selection--single .select2-selection__rendered {
|
433 |
+
color : #444;
|
434 |
+
line-height : 28px
|
435 |
+
}
|
436 |
+
|
437 |
+
.select2-container--classic .select2-selection--single .select2-selection__clear {
|
438 |
+
cursor : pointer;
|
439 |
+
float : right;
|
440 |
+
font-weight : 700;
|
441 |
+
margin-right : 10px
|
442 |
+
}
|
443 |
+
|
444 |
+
.select2-container--classic .select2-selection--single .select2-selection__placeholder {
|
445 |
+
color : #999
|
446 |
+
}
|
447 |
+
|
448 |
+
.select2-container--classic .select2-selection--single .select2-selection__arrow {
|
449 |
+
background-color : #ddd;
|
450 |
+
border : none;
|
451 |
+
border-left : 1px solid #aaa;
|
452 |
+
border-top-right-radius : 4px;
|
453 |
+
border-bottom-right-radius : 4px;
|
454 |
+
height : 26px;
|
455 |
+
position : absolute;
|
456 |
+
top : 1px;
|
457 |
+
right : 1px;
|
458 |
+
width : 20px;
|
459 |
+
background-image : -webkit-gradient(linear, left top, left bottom, color-stop(50%, #eee), to(#ccc));
|
460 |
+
background-image : -webkit-linear-gradient(top, #eee 50%, #ccc 100%);
|
461 |
+
background-image : linear-gradient(to bottom, #eee 50%, #ccc 100%);
|
462 |
+
background-repeat : repeat-x
|
463 |
+
}
|
464 |
+
|
465 |
+
.select2-container--classic .select2-selection--single .select2-selection__arrow b {
|
466 |
+
border-color : #888 transparent transparent transparent;
|
467 |
+
border-style : solid;
|
468 |
+
border-width : 5px 4px 0 4px;
|
469 |
+
height : 0;
|
470 |
+
left : 50%;
|
471 |
+
margin-left : -4px;
|
472 |
+
margin-top : -2px;
|
473 |
+
position : absolute;
|
474 |
+
top : 50%;
|
475 |
+
width : 0
|
476 |
+
}
|
477 |
+
|
478 |
+
.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__clear {
|
479 |
+
float : left
|
480 |
+
}
|
481 |
+
|
482 |
+
.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__arrow {
|
483 |
+
border : none;
|
484 |
+
border-right : 1px solid #aaa;
|
485 |
+
border-radius : 0;
|
486 |
+
border-top-left-radius : 4px;
|
487 |
+
border-bottom-left-radius : 4px;
|
488 |
+
left : 1px;
|
489 |
+
right : auto
|
490 |
+
}
|
491 |
+
|
492 |
+
.select2-container--classic.select2-container--open .select2-selection--single {
|
493 |
+
border : 1px solid #0073aa
|
494 |
+
}
|
495 |
+
|
496 |
+
.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {
|
497 |
+
background : 0 0;
|
498 |
+
border : none
|
499 |
+
}
|
500 |
+
|
501 |
+
.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {
|
502 |
+
border-color : transparent transparent #888 transparent;
|
503 |
+
border-width : 0 4px 5px 4px
|
504 |
+
}
|
505 |
+
|
506 |
+
.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {
|
507 |
+
border-top : none;
|
508 |
+
border-top-left-radius : 0;
|
509 |
+
border-top-right-radius : 0;
|
510 |
+
background-image : -webkit-gradient(linear, left top, left bottom, from(white), color-stop(50%, #eee));
|
511 |
+
background-image : -webkit-linear-gradient(top, #fff 0, #eee 50%);
|
512 |
+
background-image : linear-gradient(to bottom, #fff 0, #eee 50%);
|
513 |
+
background-repeat : repeat-x
|
514 |
+
}
|
515 |
+
|
516 |
+
.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {
|
517 |
+
border-bottom : none;
|
518 |
+
border-bottom-left-radius : 0;
|
519 |
+
border-bottom-right-radius : 0;
|
520 |
+
background-image : -webkit-gradient(linear, left top, left bottom, color-stop(50%, #eee), to(white));
|
521 |
+
background-image : -webkit-linear-gradient(top, #eee 50%, #fff 100%);
|
522 |
+
background-image : linear-gradient(to bottom, #eee 50%, #fff 100%);
|
523 |
+
background-repeat : repeat-x
|
524 |
+
}
|
525 |
+
|
526 |
+
.select2-container--classic .select2-selection--multiple {
|
527 |
+
background-color : #fff;
|
528 |
+
border : 1px solid #aaa;
|
529 |
+
border-radius : 4px;
|
530 |
+
cursor : text;
|
531 |
+
outline : 0
|
532 |
+
}
|
533 |
+
|
534 |
+
.select2-container--classic .select2-selection--multiple:focus {
|
535 |
+
border : 1px solid #0073aa
|
536 |
+
}
|
537 |
+
|
538 |
+
.select2-container--classic .select2-selection--multiple .select2-selection__rendered {
|
539 |
+
list-style : none;
|
540 |
+
margin : 0;
|
541 |
+
padding : 0 5px
|
542 |
+
}
|
543 |
+
|
544 |
+
.select2-container--classic .select2-selection--multiple .select2-selection__clear {
|
545 |
+
display : none
|
546 |
+
}
|
547 |
+
|
548 |
+
.select2-container--classic .select2-selection--multiple .select2-selection__choice {
|
549 |
+
background-color : #e4e4e4;
|
550 |
+
border : 1px solid #aaa;
|
551 |
+
border-radius : 4px;
|
552 |
+
cursor : default;
|
553 |
+
float : left;
|
554 |
+
margin-right : 5px;
|
555 |
+
margin-top : 5px;
|
556 |
+
padding : 0 5px
|
557 |
+
}
|
558 |
+
|
559 |
+
.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {
|
560 |
+
color : #888;
|
561 |
+
cursor : pointer;
|
562 |
+
display : inline-block;
|
563 |
+
font-weight : 700;
|
564 |
+
margin-right : 2px
|
565 |
+
}
|
566 |
+
|
567 |
+
.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {
|
568 |
+
color : #555
|
569 |
+
}
|
570 |
+
|
571 |
+
.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice {
|
572 |
+
float : right
|
573 |
+
}
|
574 |
+
|
575 |
+
.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice {
|
576 |
+
margin-left : 5px;
|
577 |
+
margin-right : auto
|
578 |
+
}
|
579 |
+
|
580 |
+
.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove {
|
581 |
+
margin-left : 2px;
|
582 |
+
margin-right : auto
|
583 |
+
}
|
584 |
+
|
585 |
+
.select2-container--classic.select2-container--open .select2-selection--multiple {
|
586 |
+
border : 1px solid #0073aa
|
587 |
+
}
|
588 |
+
|
589 |
+
.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {
|
590 |
+
border-top : none;
|
591 |
+
border-top-left-radius : 0;
|
592 |
+
border-top-right-radius : 0
|
593 |
+
}
|
594 |
+
|
595 |
+
.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {
|
596 |
+
border-bottom : none;
|
597 |
+
border-bottom-left-radius : 0;
|
598 |
+
border-bottom-right-radius : 0
|
599 |
+
}
|
600 |
+
|
601 |
+
.select2-container--classic .select2-search--dropdown .select2-search__field {
|
602 |
+
border : 1px solid #aaa;
|
603 |
+
outline : 0
|
604 |
+
}
|
605 |
+
|
606 |
+
.select2-container--classic .select2-search--inline .select2-search__field {
|
607 |
+
outline : 0;
|
608 |
+
-webkit-box-shadow : none;
|
609 |
+
box-shadow : none
|
610 |
+
}
|
611 |
+
|
612 |
+
.select2-container--classic .select2-dropdown {
|
613 |
+
background-color : #fff;
|
614 |
+
border : 1px solid transparent
|
615 |
+
}
|
616 |
+
|
617 |
+
.select2-container--classic .select2-dropdown--above {
|
618 |
+
border-bottom : none
|
619 |
+
}
|
620 |
+
|
621 |
+
.select2-container--classic .select2-dropdown--below {
|
622 |
+
border-top : none
|
623 |
+
}
|
624 |
+
|
625 |
+
.select2-container--classic .select2-results > .select2-results__options {
|
626 |
+
max-height : 200px;
|
627 |
+
overflow-y : auto
|
628 |
+
}
|
629 |
+
|
630 |
+
.select2-container--classic .select2-results__option[role=group] {
|
631 |
+
padding : 0
|
632 |
+
}
|
633 |
+
|
634 |
+
.select2-container--classic .select2-results__option[aria-disabled=true] {
|
635 |
+
color : grey
|
636 |
+
}
|
637 |
+
|
638 |
+
.select2-container--classic .select2-results__option--highlighted[aria-selected], .select2-container--classic .select2-results__option--highlighted[data-selected] {
|
639 |
+
background-color : #3875d7;
|
640 |
+
color : #fff
|
641 |
+
}
|
642 |
+
|
643 |
+
.select2-container--classic .select2-results__group {
|
644 |
+
cursor : default;
|
645 |
+
display : block;
|
646 |
+
padding : 6px
|
647 |
+
}
|
648 |
+
|
649 |
+
.select2-container--classic.select2-container--open .select2-dropdown {
|
650 |
+
border-color : #0073aa
|
651 |
+
}
|
652 |
+
|
653 |
+
|
654 |
+
.select2-drop, .select2-dropdown {
|
655 |
+
z-index : 999999 !important
|
656 |
+
}
|
657 |
+
|
658 |
+
.select2-results {
|
659 |
+
line-height : 1.5em
|
660 |
+
}
|
661 |
+
|
662 |
+
.select2-results .select2-results__group, .select2-results .select2-results__option {
|
663 |
+
margin : 0;
|
664 |
+
padding : 8px
|
665 |
+
}
|
666 |
+
|
667 |
+
.select2-results .description {
|
668 |
+
display : block;
|
669 |
+
color : #999;
|
670 |
+
padding-top : 4px
|
671 |
+
}
|
672 |
+
|
673 |
+
.select2-dropdown {
|
674 |
+
border-color : #ddd
|
675 |
+
}
|
676 |
+
|
677 |
+
.select2-dropdown--below {
|
678 |
+
-webkit-box-shadow : 0 1px 1px rgba(0, 0, 0, .1);
|
679 |
+
box-shadow : 0 1px 1px rgba(0, 0, 0, .1)
|
680 |
+
}
|
681 |
+
|
682 |
+
.select2-dropdown--above {
|
683 |
+
-webkit-box-shadow : 0 -1px 1px rgba(0, 0, 0, .1);
|
684 |
+
box-shadow : 0 -1px 1px rgba(0, 0, 0, .1)
|
685 |
+
}
|
686 |
+
|
687 |
+
.select2-container .select2-selection__rendered.ui-sortable li {
|
688 |
+
cursor : move
|
689 |
+
}
|
690 |
+
|
691 |
+
.select2-container .select2-selection {
|
692 |
+
border-color : #ddd
|
693 |
+
}
|
694 |
+
|
695 |
+
.select2-container .select2-search__field {
|
696 |
+
min-width : 150px
|
697 |
+
}
|
698 |
+
|
699 |
+
.select2-container .select2-selection--single {
|
700 |
+
height : 32px
|
701 |
+
}
|
702 |
+
|
703 |
+
.select2-container .select2-selection--single .select2-selection__rendered {
|
704 |
+
line-height : 32px;
|
705 |
+
padding-right : 24px
|
706 |
+
}
|
707 |
+
|
708 |
+
.select2-container .select2-selection--single .select2-selection__arrow {
|
709 |
+
right : 3px;
|
710 |
+
height : 30px
|
711 |
+
}
|
712 |
+
|
713 |
+
.select2-container .select2-selection--multiple {
|
714 |
+
min-height : 28px;
|
715 |
+
border-radius : 0;
|
716 |
+
line-height : 1.5
|
717 |
+
}
|
718 |
+
|
719 |
+
.select2-container .select2-selection--multiple li {
|
720 |
+
margin : 0
|
721 |
+
}
|
722 |
+
|
723 |
+
.select2-container .select2-selection--multiple .select2-selection__choice {
|
724 |
+
padding : 2px 6px
|
725 |
+
}
|
726 |
+
|
727 |
+
.select2-container .select2-selection--multiple .select2-selection__choice .description {
|
728 |
+
display : none
|
729 |
+
}
|
730 |
+
|
731 |
+
.select2-container .select2-selection__clear {
|
732 |
+
color : #999;
|
733 |
+
margin-top : -1px
|
734 |
+
}
|
735 |
+
|
736 |
+
.select2-container .select2-search--inline .select2-search__field {
|
737 |
+
font-family : inherit;
|
738 |
+
font-size : inherit;
|
739 |
+
font-weight : inherit;
|
740 |
+
padding : 3px 0
|
741 |
}
|
plugin-fw/assets/js/codemirror/codemirror.js
CHANGED
@@ -1,5799 +1,5799 @@
|
|
1 |
-
// CodeMirror version 3.15
|
2 |
-
//
|
3 |
-
// CodeMirror is the only global var we claim
|
4 |
-
window.CodeMirror = (function() {
|
5 |
-
"use strict";
|
6 |
-
|
7 |
-
// BROWSER SNIFFING
|
8 |
-
|
9 |
-
// Crude, but necessary to handle a number of hard-to-feature-detect
|
10 |
-
// bugs and behavior differences.
|
11 |
-
var gecko = /gecko\/\d/i.test(navigator.userAgent);
|
12 |
-
var ie = /MSIE \d/.test(navigator.userAgent);
|
13 |
-
var ie_lt8 = ie && (document.documentMode == null || document.documentMode < 8);
|
14 |
-
var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9);
|
15 |
-
var webkit = /WebKit\//.test(navigator.userAgent);
|
16 |
-
var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(navigator.userAgent);
|
17 |
-
var chrome = /Chrome\//.test(navigator.userAgent);
|
18 |
-
var opera = /Opera\//.test(navigator.userAgent);
|
19 |
-
var safari = /Apple Computer/.test(navigator.vendor);
|
20 |
-
var khtml = /KHTML\//.test(navigator.userAgent);
|
21 |
-
var mac_geLion = /Mac OS X 1\d\D([7-9]|\d\d)\D/.test(navigator.userAgent);
|
22 |
-
var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent);
|
23 |
-
var phantom = /PhantomJS/.test(navigator.userAgent);
|
24 |
-
|
25 |
-
var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent);
|
26 |
-
// This is woefully incomplete. Suggestions for alternative methods welcome.
|
27 |
-
var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent);
|
28 |
-
var mac = ios || /Mac/.test(navigator.platform);
|
29 |
-
var windows = /windows/i.test(navigator.platform);
|
30 |
-
|
31 |
-
var opera_version = opera && navigator.userAgent.match(/Version\/(\d*\.\d*)/);
|
32 |
-
if (opera_version) opera_version = Number(opera_version[1]);
|
33 |
-
if (opera_version && opera_version >= 15) { opera = false; webkit = true; }
|
34 |
-
// Some browsers use the wrong event properties to signal cmd/ctrl on OS X
|
35 |
-
var flipCtrlCmd = mac && (qtwebkit || opera && (opera_version == null || opera_version < 12.11));
|
36 |
-
var captureMiddleClick = gecko || (ie && !ie_lt9);
|
37 |
-
|
38 |
-
// Optimize some code when these features are not used
|
39 |
-
var sawReadOnlySpans = false, sawCollapsedSpans = false;
|
40 |
-
|
41 |
-
// CONSTRUCTOR
|
42 |
-
|
43 |
-
function CodeMirror(place, options) {
|
44 |
-
if (!(this instanceof CodeMirror)) return new CodeMirror(place, options);
|
45 |
-
|
46 |
-
this.options = options = options || {};
|
47 |
-
// Determine effective options based on given values and defaults.
|
48 |
-
for (var opt in defaults) if (!options.hasOwnProperty(opt) && defaults.hasOwnProperty(opt))
|
49 |
-
options[opt] = defaults[opt];
|
50 |
-
setGuttersForLineNumbers(options);
|
51 |
-
|
52 |
-
var docStart = typeof options.value == "string" ? 0 : options.value.first;
|
53 |
-
var display = this.display = makeDisplay(place, docStart);
|
54 |
-
display.wrapper.CodeMirror = this;
|
55 |
-
updateGutters(this);
|
56 |
-
if (options.autofocus && !mobile) focusInput(this);
|
57 |
-
|
58 |
-
this.state = {keyMaps: [],
|
59 |
-
overlays: [],
|
60 |
-
modeGen: 0,
|
61 |
-
overwrite: false, focused: false,
|
62 |
-
suppressEdits: false, pasteIncoming: false,
|
63 |
-
draggingText: false,
|
64 |
-
highlight: new Delayed()};
|
65 |
-
|
66 |
-
themeChanged(this);
|
67 |
-
if (options.lineWrapping)
|
68 |
-
this.display.wrapper.className += " CodeMirror-wrap";
|
69 |
-
|
70 |
-
var doc = options.value;
|
71 |
-
if (typeof doc == "string") doc = new Doc(options.value, options.mode);
|
72 |
-
operation(this, attachDoc)(this, doc);
|
73 |
-
|
74 |
-
// Override magic textarea content restore that IE sometimes does
|
75 |
-
// on our hidden textarea on reload
|
76 |
-
if (ie) setTimeout(bind(resetInput, this, true), 20);
|
77 |
-
|
78 |
-
registerEventHandlers(this);
|
79 |
-
// IE throws unspecified error in certain cases, when
|
80 |
-
// trying to access activeElement before onload
|
81 |
-
var hasFocus; try { hasFocus = (document.activeElement == display.input); } catch(e) { }
|
82 |
-
if (hasFocus || (options.autofocus && !mobile)) setTimeout(bind(onFocus, this), 20);
|
83 |
-
else onBlur(this);
|
84 |
-
|
85 |
-
operation(this, function() {
|
86 |
-
for (var opt in optionHandlers)
|
87 |
-
if (optionHandlers.propertyIsEnumerable(opt))
|
88 |
-
optionHandlers[opt](this, options[opt], Init);
|
89 |
-
for (var i = 0; i < initHooks.length; ++i) initHooks[i](this);
|
90 |
-
})();
|
91 |
-
}
|
92 |
-
|
93 |
-
// DISPLAY CONSTRUCTOR
|
94 |
-
|
95 |
-
function makeDisplay(place, docStart) {
|
96 |
-
var d = {};
|
97 |
-
|
98 |
-
var input = d.input = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none; font-size: 4px;");
|
99 |
-
if (webkit) input.style.width = "1000px";
|
100 |
-
else input.setAttribute("wrap", "off");
|
101 |
-
// if border: 0; -- iOS fails to open keyboard (issue #1287)
|
102 |
-
if (ios) input.style.border = "1px solid black";
|
103 |
-
input.setAttribute("autocorrect", "off"); input.setAttribute("autocapitalize", "off"); input.setAttribute("spellcheck", "false");
|
104 |
-
|
105 |
-
// Wraps and hides input textarea
|
106 |
-
d.inputDiv = elt("div", [input], null, "overflow: hidden; position: relative; width: 3px; height: 0px;");
|
107 |
-
// The actual fake scrollbars.
|
108 |
-
d.scrollbarH = elt("div", [elt("div", null, null, "height: 1px")], "CodeMirror-hscrollbar");
|
109 |
-
d.scrollbarV = elt("div", [elt("div", null, null, "width: 1px")], "CodeMirror-vscrollbar");
|
110 |
-
d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler");
|
111 |
-
d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler");
|
112 |
-
// DIVs containing the selection and the actual code
|
113 |
-
d.lineDiv = elt("div", null, "CodeMirror-code");
|
114 |
-
d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1");
|
115 |
-
// Blinky cursor, and element used to ensure cursor fits at the end of a line
|
116 |
-
d.cursor = elt("div", "\u00a0", "CodeMirror-cursor");
|
117 |
-
// Secondary cursor, shown when on a 'jump' in bi-directional text
|
118 |
-
d.otherCursor = elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor");
|
119 |
-
// Used to measure text size
|
120 |
-
d.measure = elt("div", null, "CodeMirror-measure");
|
121 |
-
// Wraps everything that needs to exist inside the vertically-padded coordinate system
|
122 |
-
d.lineSpace = elt("div", [d.measure, d.selectionDiv, d.lineDiv, d.cursor, d.otherCursor],
|
123 |
-
null, "position: relative; outline: none");
|
124 |
-
// Moved around its parent to cover visible view
|
125 |
-
d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative");
|
126 |
-
// Set to the height of the text, causes scrolling
|
127 |
-
d.sizer = elt("div", [d.mover], "CodeMirror-sizer");
|
128 |
-
// D is needed because behavior of elts with overflow: auto and padding is inconsistent across browsers
|
129 |
-
d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerCutOff + "px; width: 1px;");
|
130 |
-
// Will contain the gutters, if any
|
131 |
-
d.gutters = elt("div", null, "CodeMirror-gutters");
|
132 |
-
d.lineGutter = null;
|
133 |
-
// Provides scrolling
|
134 |
-
d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll");
|
135 |
-
d.scroller.setAttribute("tabIndex", "-1");
|
136 |
-
// The element in which the editor lives.
|
137 |
-
d.wrapper = elt("div", [d.inputDiv, d.scrollbarH, d.scrollbarV,
|
138 |
-
d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror");
|
139 |
-
// Work around IE7 z-index bug
|
140 |
-
if (ie_lt8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }
|
141 |
-
if (place.appendChild) place.appendChild(d.wrapper); else place(d.wrapper);
|
142 |
-
|
143 |
-
// Needed to hide big blue blinking cursor on Mobile Safari
|
144 |
-
if (ios) input.style.width = "0px";
|
145 |
-
if (!webkit) d.scroller.draggable = true;
|
146 |
-
// Needed to handle Tab key in KHTML
|
147 |
-
if (khtml) { d.inputDiv.style.height = "1px"; d.inputDiv.style.position = "absolute"; }
|
148 |
-
// Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).
|
149 |
-
else if (ie_lt8) d.scrollbarH.style.minWidth = d.scrollbarV.style.minWidth = "18px";
|
150 |
-
|
151 |
-
// Current visible range (may be bigger than the view window).
|
152 |
-
d.viewOffset = d.lastSizeC = 0;
|
153 |
-
d.showingFrom = d.showingTo = docStart;
|
154 |
-
|
155 |
-
// Used to only resize the line number gutter when necessary (when
|
156 |
-
// the amount of lines crosses a boundary that makes its width change)
|
157 |
-
d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;
|
158 |
-
// See readInput and resetInput
|
159 |
-
d.prevInput = "";
|
160 |
-
// Set to true when a non-horizontal-scrolling widget is added. As
|
161 |
-
// an optimization, widget aligning is skipped when d is false.
|
162 |
-
d.alignWidgets = false;
|
163 |
-
// Flag that indicates whether we currently expect input to appear
|
164 |
-
// (after some event like 'keypress' or 'input') and are polling
|
165 |
-
// intensively.
|
166 |
-
d.pollingFast = false;
|
167 |
-
// Self-resetting timeout for the poller
|
168 |
-
d.poll = new Delayed();
|
169 |
-
|
170 |
-
d.cachedCharWidth = d.cachedTextHeight = null;
|
171 |
-
d.measureLineCache = [];
|
172 |
-
d.measureLineCachePos = 0;
|
173 |
-
|
174 |
-
// Tracks when resetInput has punted to just putting a short
|
175 |
-
// string instead of the (large) selection.
|
176 |
-
d.inaccurateSelection = false;
|
177 |
-
|
178 |
-
// Tracks the maximum line length so that the horizontal scrollbar
|
179 |
-
// can be kept static when scrolling.
|
180 |
-
d.maxLine = null;
|
181 |
-
d.maxLineLength = 0;
|
182 |
-
d.maxLineChanged = false;
|
183 |
-
|
184 |
-
// Used for measuring wheel scrolling granularity
|
185 |
-
d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;
|
186 |
-
|
187 |
-
return d;
|
188 |
-
}
|
189 |
-
|
190 |
-
// STATE UPDATES
|
191 |
-
|
192 |
-
// Used to get the editor into a consistent state again when options change.
|
193 |
-
|
194 |
-
function loadMode(cm) {
|
195 |
-
cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption);
|
196 |
-
cm.doc.iter(function(line) {
|
197 |
-
if (line.stateAfter) line.stateAfter = null;
|
198 |
-
if (line.styles) line.styles = null;
|
199 |
-
});
|
200 |
-
cm.doc.frontier = cm.doc.first;
|
201 |
-
startWorker(cm, 100);
|
202 |
-
cm.state.modeGen++;
|
203 |
-
if (cm.curOp) regChange(cm);
|
204 |
-
}
|
205 |
-
|
206 |
-
function wrappingChanged(cm) {
|
207 |
-
if (cm.options.lineWrapping) {
|
208 |
-
cm.display.wrapper.className += " CodeMirror-wrap";
|
209 |
-
cm.display.sizer.style.minWidth = "";
|
210 |
-
} else {
|
211 |
-
cm.display.wrapper.className = cm.display.wrapper.className.replace(" CodeMirror-wrap", "");
|
212 |
-
computeMaxLength(cm);
|
213 |
-
}
|
214 |
-
estimateLineHeights(cm);
|
215 |
-
regChange(cm);
|
216 |
-
clearCaches(cm);
|
217 |
-
setTimeout(function(){updateScrollbars(cm);}, 100);
|
218 |
-
}
|
219 |
-
|
220 |
-
function estimateHeight(cm) {
|
221 |
-
var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;
|
222 |
-
var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);
|
223 |
-
return function(line) {
|
224 |
-
if (lineIsHidden(cm.doc, line))
|
225 |
-
return 0;
|
226 |
-
else if (wrapping)
|
227 |
-
return (Math.ceil(line.text.length / perLine) || 1) * th;
|
228 |
-
else
|
229 |
-
return th;
|
230 |
-
};
|
231 |
-
}
|
232 |
-
|
233 |
-
function estimateLineHeights(cm) {
|
234 |
-
var doc = cm.doc, est = estimateHeight(cm);
|
235 |
-
doc.iter(function(line) {
|
236 |
-
var estHeight = est(line);
|
237 |
-
if (estHeight != line.height) updateLineHeight(line, estHeight);
|
238 |
-
});
|
239 |
-
}
|
240 |
-
|
241 |
-
function keyMapChanged(cm) {
|
242 |
-
var map = keyMap[cm.options.keyMap], style = map.style;
|
243 |
-
cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-keymap-\S+/g, "") +
|
244 |
-
(style ? " cm-keymap-" + style : "");
|
245 |
-
cm.state.disableInput = map.disableInput;
|
246 |
-
}
|
247 |
-
|
248 |
-
function themeChanged(cm) {
|
249 |
-
cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") +
|
250 |
-
cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-");
|
251 |
-
clearCaches(cm);
|
252 |
-
}
|
253 |
-
|
254 |
-
function guttersChanged(cm) {
|
255 |
-
updateGutters(cm);
|
256 |
-
regChange(cm);
|
257 |
-
setTimeout(function(){alignHorizontally(cm);}, 20);
|
258 |
-
}
|
259 |
-
|
260 |
-
function updateGutters(cm) {
|
261 |
-
var gutters = cm.display.gutters, specs = cm.options.gutters;
|
262 |
-
removeChildren(gutters);
|
263 |
-
for (var i = 0; i < specs.length; ++i) {
|
264 |
-
var gutterClass = specs[i];
|
265 |
-
var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass));
|
266 |
-
if (gutterClass == "CodeMirror-linenumbers") {
|
267 |
-
cm.display.lineGutter = gElt;
|
268 |
-
gElt.style.width = (cm.display.lineNumWidth || 1) + "px";
|
269 |
-
}
|
270 |
-
}
|
271 |
-
gutters.style.display = i ? "" : "none";
|
272 |
-
}
|
273 |
-
|
274 |
-
function lineLength(doc, line) {
|
275 |
-
if (line.height == 0) return 0;
|
276 |
-
var len = line.text.length, merged, cur = line;
|
277 |
-
while (merged = collapsedSpanAtStart(cur)) {
|
278 |
-
var found = merged.find();
|
279 |
-
cur = getLine(doc, found.from.line);
|
280 |
-
len += found.from.ch - found.to.ch;
|
281 |
-
}
|
282 |
-
cur = line;
|
283 |
-
while (merged = collapsedSpanAtEnd(cur)) {
|
284 |
-
var found = merged.find();
|
285 |
-
len -= cur.text.length - found.from.ch;
|
286 |
-
cur = getLine(doc, found.to.line);
|
287 |
-
len += cur.text.length - found.to.ch;
|
288 |
-
}
|
289 |
-
return len;
|
290 |
-
}
|
291 |
-
|
292 |
-
function computeMaxLength(cm) {
|
293 |
-
var d = cm.display, doc = cm.doc;
|
294 |
-
d.maxLine = getLine(doc, doc.first);
|
295 |
-
d.maxLineLength = lineLength(doc, d.maxLine);
|
296 |
-
d.maxLineChanged = true;
|
297 |
-
doc.iter(function(line) {
|
298 |
-
var len = lineLength(doc, line);
|
299 |
-
if (len > d.maxLineLength) {
|
300 |
-
d.maxLineLength = len;
|
301 |
-
d.maxLine = line;
|
302 |
-
}
|
303 |
-
});
|
304 |
-
}
|
305 |
-
|
306 |
-
// Make sure the gutters options contains the element
|
307 |
-
// "CodeMirror-linenumbers" when the lineNumbers option is true.
|
308 |
-
function setGuttersForLineNumbers(options) {
|
309 |
-
var found = false;
|
310 |
-
for (var i = 0; i < options.gutters.length; ++i) {
|
311 |
-
if (options.gutters[i] == "CodeMirror-linenumbers") {
|
312 |
-
if (options.lineNumbers) found = true;
|
313 |
-
else options.gutters.splice(i--, 1);
|
314 |
-
}
|
315 |
-
}
|
316 |
-
if (!found && options.lineNumbers)
|
317 |
-
options.gutters.push("CodeMirror-linenumbers");
|
318 |
-
}
|
319 |
-
|
320 |
-
// SCROLLBARS
|
321 |
-
|
322 |
-
// Re-synchronize the fake scrollbars with the actual size of the
|
323 |
-
// content. Optionally force a scrollTop.
|
324 |
-
function updateScrollbars(cm) {
|
325 |
-
var d = cm.display, docHeight = cm.doc.height;
|
326 |
-
var totalHeight = docHeight + paddingVert(d);
|
327 |
-
d.sizer.style.minHeight = d.heightForcer.style.top = totalHeight + "px";
|
328 |
-
d.gutters.style.height = Math.max(totalHeight, d.scroller.clientHeight - scrollerCutOff) + "px";
|
329 |
-
var scrollHeight = Math.max(totalHeight, d.scroller.scrollHeight);
|
330 |
-
var needsH = d.scroller.scrollWidth > (d.scroller.clientWidth + 1);
|
331 |
-
var needsV = scrollHeight > (d.scroller.clientHeight + 1);
|
332 |
-
if (needsV) {
|
333 |
-
d.scrollbarV.style.display = "block";
|
334 |
-
d.scrollbarV.style.bottom = needsH ? scrollbarWidth(d.measure) + "px" : "0";
|
335 |
-
d.scrollbarV.firstChild.style.height =
|
336 |
-
(scrollHeight - d.scroller.clientHeight + d.scrollbarV.clientHeight) + "px";
|
337 |
-
} else d.scrollbarV.style.display = "";
|
338 |
-
if (needsH) {
|
339 |
-
d.scrollbarH.style.display = "block";
|
340 |
-
d.scrollbarH.style.right = needsV ? scrollbarWidth(d.measure) + "px" : "0";
|
341 |
-
d.scrollbarH.firstChild.style.width =
|
342 |
-
(d.scroller.scrollWidth - d.scroller.clientWidth + d.scrollbarH.clientWidth) + "px";
|
343 |
-
} else d.scrollbarH.style.display = "";
|
344 |
-
if (needsH && needsV) {
|
345 |
-
d.scrollbarFiller.style.display = "block";
|
346 |
-
d.scrollbarFiller.style.height = d.scrollbarFiller.style.width = scrollbarWidth(d.measure) + "px";
|
347 |
-
} else d.scrollbarFiller.style.display = "";
|
348 |
-
if (needsH && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
|
349 |
-
d.gutterFiller.style.display = "block";
|
350 |
-
d.gutterFiller.style.height = scrollbarWidth(d.measure) + "px";
|
351 |
-
d.gutterFiller.style.width = d.gutters.offsetWidth + "px";
|
352 |
-
} else d.gutterFiller.style.display = "";
|
353 |
-
|
354 |
-
if (mac_geLion && scrollbarWidth(d.measure) === 0)
|
355 |
-
d.scrollbarV.style.minWidth = d.scrollbarH.style.minHeight = mac_geMountainLion ? "18px" : "12px";
|
356 |
-
}
|
357 |
-
|
358 |
-
function visibleLines(display, doc, viewPort) {
|
359 |
-
var top = display.scroller.scrollTop, height = display.wrapper.clientHeight;
|
360 |
-
if (typeof viewPort == "number") top = viewPort;
|
361 |
-
else if (viewPort) {top = viewPort.top; height = viewPort.bottom - viewPort.top;}
|
362 |
-
top = Math.floor(top - paddingTop(display));
|
363 |
-
var bottom = Math.ceil(top + height);
|
364 |
-
return {from: lineAtHeight(doc, top), to: lineAtHeight(doc, bottom)};
|
365 |
-
}
|
366 |
-
|
367 |
-
// LINE NUMBERS
|
368 |
-
|
369 |
-
function alignHorizontally(cm) {
|
370 |
-
var display = cm.display;
|
371 |
-
if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return;
|
372 |
-
var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;
|
373 |
-
var gutterW = display.gutters.offsetWidth, l = comp + "px";
|
374 |
-
for (var n = display.lineDiv.firstChild; n; n = n.nextSibling) if (n.alignable) {
|
375 |
-
for (var i = 0, a = n.alignable; i < a.length; ++i) a[i].style.left = l;
|
376 |
-
}
|
377 |
-
if (cm.options.fixedGutter)
|
378 |
-
display.gutters.style.left = (comp + gutterW) + "px";
|
379 |
-
}
|
380 |
-
|
381 |
-
function maybeUpdateLineNumberWidth(cm) {
|
382 |
-
if (!cm.options.lineNumbers) return false;
|
383 |
-
var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;
|
384 |
-
if (last.length != display.lineNumChars) {
|
385 |
-
var test = display.measure.appendChild(elt("div", [elt("div", last)],
|
386 |
-
"CodeMirror-linenumber CodeMirror-gutter-elt"));
|
387 |
-
var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;
|
388 |
-
display.lineGutter.style.width = "";
|
389 |
-
display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding);
|
390 |
-
display.lineNumWidth = display.lineNumInnerWidth + padding;
|
391 |
-
display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;
|
392 |
-
display.lineGutter.style.width = display.lineNumWidth + "px";
|
393 |
-
return true;
|
394 |
-
}
|
395 |
-
return false;
|
396 |
-
}
|
397 |
-
|
398 |
-
function lineNumberFor(options, i) {
|
399 |
-
return String(options.lineNumberFormatter(i + options.firstLineNumber));
|
400 |
-
}
|
401 |
-
function compensateForHScroll(display) {
|
402 |
-
return getRect(display.scroller).left - getRect(display.sizer).left;
|
403 |
-
}
|
404 |
-
|
405 |
-
// DISPLAY DRAWING
|
406 |
-
|
407 |
-
function updateDisplay(cm, changes, viewPort, forced) {
|
408 |
-
var oldFrom = cm.display.showingFrom, oldTo = cm.display.showingTo, updated;
|
409 |
-
var visible = visibleLines(cm.display, cm.doc, viewPort);
|
410 |
-
for (;;) {
|
411 |
-
if (!updateDisplayInner(cm, changes, visible, forced)) break;
|
412 |
-
forced = false;
|
413 |
-
updated = true;
|
414 |
-
updateSelection(cm);
|
415 |
-
updateScrollbars(cm);
|
416 |
-
|
417 |
-
// Clip forced viewport to actual scrollable area
|
418 |
-
if (viewPort)
|
419 |
-
viewPort = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight,
|
420 |
-
typeof viewPort == "number" ? viewPort : viewPort.top);
|
421 |
-
visible = visibleLines(cm.display, cm.doc, viewPort);
|
422 |
-
if (visible.from >= cm.display.showingFrom && visible.to <= cm.display.showingTo)
|
423 |
-
break;
|
424 |
-
changes = [];
|
425 |
-
}
|
426 |
-
|
427 |
-
if (updated) {
|
428 |
-
signalLater(cm, "update", cm);
|
429 |
-
if (cm.display.showingFrom != oldFrom || cm.display.showingTo != oldTo)
|
430 |
-
signalLater(cm, "viewportChange", cm, cm.display.showingFrom, cm.display.showingTo);
|
431 |
-
}
|
432 |
-
return updated;
|
433 |
-
}
|
434 |
-
|
435 |
-
// Uses a set of changes plus the current scroll position to
|
436 |
-
// determine which DOM updates have to be made, and makes the
|
437 |
-
// updates.
|
438 |
-
function updateDisplayInner(cm, changes, visible, forced) {
|
439 |
-
var display = cm.display, doc = cm.doc;
|
440 |
-
if (!display.wrapper.clientWidth) {
|
441 |
-
display.showingFrom = display.showingTo = doc.first;
|
442 |
-
display.viewOffset = 0;
|
443 |
-
return;
|
444 |
-
}
|
445 |
-
|
446 |
-
// Bail out if the visible area is already rendered and nothing changed.
|
447 |
-
if (!forced && changes.length == 0 &&
|
448 |
-
visible.from > display.showingFrom && visible.to < display.showingTo)
|
449 |
-
return;
|
450 |
-
|
451 |
-
if (maybeUpdateLineNumberWidth(cm))
|
452 |
-
changes = [{from: doc.first, to: doc.first + doc.size}];
|
453 |
-
var gutterW = display.sizer.style.marginLeft = display.gutters.offsetWidth + "px";
|
454 |
-
display.scrollbarH.style.left = cm.options.fixedGutter ? gutterW : "0";
|
455 |
-
|
456 |
-
// Used to determine which lines need their line numbers updated
|
457 |
-
var positionsChangedFrom = Infinity;
|
458 |
-
if (cm.options.lineNumbers)
|
459 |
-
for (var i = 0; i < changes.length; ++i)
|
460 |
-
if (changes[i].diff) { positionsChangedFrom = changes[i].from; break; }
|
461 |
-
|
462 |
-
var end = doc.first + doc.size;
|
463 |
-
var from = Math.max(visible.from - cm.options.viewportMargin, doc.first);
|
464 |
-
var to = Math.min(end, visible.to + cm.options.viewportMargin);
|
465 |
-
if (display.showingFrom < from && from - display.showingFrom < 20) from = Math.max(doc.first, display.showingFrom);
|
466 |
-
if (display.showingTo > to && display.showingTo - to < 20) to = Math.min(end, display.showingTo);
|
467 |
-
if (sawCollapsedSpans) {
|
468 |
-
from = lineNo(visualLine(doc, getLine(doc, from)));
|
469 |
-
while (to < end && lineIsHidden(doc, getLine(doc, to))) ++to;
|
470 |
-
}
|
471 |
-
|
472 |
-
// Create a range of theoretically intact lines, and punch holes
|
473 |
-
// in that using the change info.
|
474 |
-
var intact = [{from: Math.max(display.showingFrom, doc.first),
|
475 |
-
to: Math.min(display.showingTo, end)}];
|
476 |
-
if (intact[0].from >= intact[0].to) intact = [];
|
477 |
-
else intact = computeIntact(intact, changes);
|
478 |
-
// When merged lines are present, we might have to reduce the
|
479 |
-
// intact ranges because changes in continued fragments of the
|
480 |
-
// intact lines do require the lines to be redrawn.
|
481 |
-
if (sawCollapsedSpans)
|
482 |
-
for (var i = 0; i < intact.length; ++i) {
|
483 |
-
var range = intact[i], merged;
|
484 |
-
while (merged = collapsedSpanAtEnd(getLine(doc, range.to - 1))) {
|
485 |
-
var newTo = merged.find().from.line;
|
486 |
-
if (newTo > range.from) range.to = newTo;
|
487 |
-
else { intact.splice(i--, 1); break; }
|
488 |
-
}
|
489 |
-
}
|
490 |
-
|
491 |
-
// Clip off the parts that won't be visible
|
492 |
-
var intactLines = 0;
|
493 |
-
for (var i = 0; i < intact.length; ++i) {
|
494 |
-
var range = intact[i];
|
495 |
-
if (range.from < from) range.from = from;
|
496 |
-
if (range.to > to) range.to = to;
|
497 |
-
if (range.from >= range.to) intact.splice(i--, 1);
|
498 |
-
else intactLines += range.to - range.from;
|
499 |
-
}
|
500 |
-
if (!forced && intactLines == to - from && from == display.showingFrom && to == display.showingTo) {
|
501 |
-
updateViewOffset(cm);
|
502 |
-
return;
|
503 |
-
}
|
504 |
-
intact.sort(function(a, b) {return a.from - b.from;});
|
505 |
-
|
506 |
-
// Avoid crashing on IE's "unspecified error" when in iframes
|
507 |
-
try {
|
508 |
-
var focused = document.activeElement;
|
509 |
-
} catch(e) {}
|
510 |
-
if (intactLines < (to - from) * .7) display.lineDiv.style.display = "none";
|
511 |
-
patchDisplay(cm, from, to, intact, positionsChangedFrom);
|
512 |
-
display.lineDiv.style.display = "";
|
513 |
-
if (focused && document.activeElement != focused && focused.offsetHeight) focused.focus();
|
514 |
-
|
515 |
-
var different = from != display.showingFrom || to != display.showingTo ||
|
516 |
-
display.lastSizeC != display.wrapper.clientHeight;
|
517 |
-
// This is just a bogus formula that detects when the editor is
|
518 |
-
// resized or the font size changes.
|
519 |
-
if (different) {
|
520 |
-
display.lastSizeC = display.wrapper.clientHeight;
|
521 |
-
startWorker(cm, 400);
|
522 |
-
}
|
523 |
-
display.showingFrom = from; display.showingTo = to;
|
524 |
-
|
525 |
-
updateHeightsInViewport(cm);
|
526 |
-
updateViewOffset(cm);
|
527 |
-
|
528 |
-
return true;
|
529 |
-
}
|
530 |
-
|
531 |
-
function updateHeightsInViewport(cm) {
|
532 |
-
var display = cm.display;
|
533 |
-
var prevBottom = display.lineDiv.offsetTop;
|
534 |
-
for (var node = display.lineDiv.firstChild, height; node; node = node.nextSibling) if (node.lineObj) {
|
535 |
-
if (ie_lt8) {
|
536 |
-
var bot = node.offsetTop + node.offsetHeight;
|
537 |
-
height = bot - prevBottom;
|
538 |
-
prevBottom = bot;
|
539 |
-
} else {
|
540 |
-
var box = getRect(node);
|
541 |
-
height = box.bottom - box.top;
|
542 |
-
}
|
543 |
-
var diff = node.lineObj.height - height;
|
544 |
-
if (height < 2) height = textHeight(display);
|
545 |
-
if (diff > .001 || diff < -.001) {
|
546 |
-
updateLineHeight(node.lineObj, height);
|
547 |
-
var widgets = node.lineObj.widgets;
|
548 |
-
if (widgets) for (var i = 0; i < widgets.length; ++i)
|
549 |
-
widgets[i].height = widgets[i].node.offsetHeight;
|
550 |
-
}
|
551 |
-
}
|
552 |
-
}
|
553 |
-
|
554 |
-
function updateViewOffset(cm) {
|
555 |
-
var off = cm.display.viewOffset = heightAtLine(cm, getLine(cm.doc, cm.display.showingFrom));
|
556 |
-
// Position the mover div to align with the current virtual scroll position
|
557 |
-
cm.display.mover.style.top = off + "px";
|
558 |
-
}
|
559 |
-
|
560 |
-
function computeIntact(intact, changes) {
|
561 |
-
for (var i = 0, l = changes.length || 0; i < l; ++i) {
|
562 |
-
var change = changes[i], intact2 = [], diff = change.diff || 0;
|
563 |
-
for (var j = 0, l2 = intact.length; j < l2; ++j) {
|
564 |
-
var range = intact[j];
|
565 |
-
if (change.to <= range.from && change.diff) {
|
566 |
-
intact2.push({from: range.from + diff, to: range.to + diff});
|
567 |
-
} else if (change.to <= range.from || change.from >= range.to) {
|
568 |
-
intact2.push(range);
|
569 |
-
} else {
|
570 |
-
if (change.from > range.from)
|
571 |
-
intact2.push({from: range.from, to: change.from});
|
572 |
-
if (change.to < range.to)
|
573 |
-
intact2.push({from: change.to + diff, to: range.to + diff});
|
574 |
-
}
|
575 |
-
}
|
576 |
-
intact = intact2;
|
577 |
-
}
|
578 |
-
return intact;
|
579 |
-
}
|
580 |
-
|
581 |
-
function getDimensions(cm) {
|
582 |
-
var d = cm.display, left = {}, width = {};
|
583 |
-
for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {
|
584 |
-
left[cm.options.gutters[i]] = n.offsetLeft;
|
585 |
-
width[cm.options.gutters[i]] = n.offsetWidth;
|
586 |
-
}
|
587 |
-
return {fixedPos: compensateForHScroll(d),
|
588 |
-
gutterTotalWidth: d.gutters.offsetWidth,
|
589 |
-
gutterLeft: left,
|
590 |
-
gutterWidth: width,
|
591 |
-
wrapperWidth: d.wrapper.clientWidth};
|
592 |
-
}
|
593 |
-
|
594 |
-
function patchDisplay(cm, from, to, intact, updateNumbersFrom) {
|
595 |
-
var dims = getDimensions(cm);
|
596 |
-
var display = cm.display, lineNumbers = cm.options.lineNumbers;
|
597 |
-
if (!intact.length && (!webkit || !cm.display.currentWheelTarget))
|
598 |
-
removeChildren(display.lineDiv);
|
599 |
-
var container = display.lineDiv, cur = container.firstChild;
|
600 |
-
|
601 |
-
function rm(node) {
|
602 |
-
var next = node.nextSibling;
|
603 |
-
if (webkit && mac && cm.display.currentWheelTarget == node) {
|
604 |
-
node.style.display = "none";
|
605 |
-
node.lineObj = null;
|
606 |
-
} else {
|
607 |
-
node.parentNode.removeChild(node);
|
608 |
-
}
|
609 |
-
return next;
|
610 |
-
}
|
611 |
-
|
612 |
-
var nextIntact = intact.shift(), lineN = from;
|
613 |
-
cm.doc.iter(from, to, function(line) {
|
614 |
-
if (nextIntact && nextIntact.to == lineN) nextIntact = intact.shift();
|
615 |
-
if (lineIsHidden(cm.doc, line)) {
|
616 |
-
if (line.height != 0) updateLineHeight(line, 0);
|
617 |
-
if (line.widgets && cur.previousSibling) for (var i = 0; i < line.widgets.length; ++i) {
|
618 |
-
var w = line.widgets[i];
|
619 |
-
if (w.showIfHidden) {
|
620 |
-
var prev = cur.previousSibling;
|
621 |
-
if (/pre/i.test(prev.nodeName)) {
|
622 |
-
var wrap = elt("div", null, null, "position: relative");
|
623 |
-
prev.parentNode.replaceChild(wrap, prev);
|
624 |
-
wrap.appendChild(prev);
|
625 |
-
prev = wrap;
|
626 |
-
}
|
627 |
-
var wnode = prev.appendChild(elt("div", [w.node], "CodeMirror-linewidget"));
|
628 |
-
if (!w.handleMouseEvents) wnode.ignoreEvents = true;
|
629 |
-
positionLineWidget(w, wnode, prev, dims);
|
630 |
-
}
|
631 |
-
}
|
632 |
-
} else if (nextIntact && nextIntact.from <= lineN && nextIntact.to > lineN) {
|
633 |
-
// This line is intact. Skip to the actual node. Update its
|
634 |
-
// line number if needed.
|
635 |
-
while (cur.lineObj != line) cur = rm(cur);
|
636 |
-
if (lineNumbers && updateNumbersFrom <= lineN && cur.lineNumber)
|
637 |
-
setTextContent(cur.lineNumber, lineNumberFor(cm.options, lineN));
|
638 |
-
cur = cur.nextSibling;
|
639 |
-
} else {
|
640 |
-
// For lines with widgets, make an attempt to find and reuse
|
641 |
-
// the existing element, so that widgets aren't needlessly
|
642 |
-
// removed and re-inserted into the dom
|
643 |
-
if (line.widgets) for (var j = 0, search = cur, reuse; search && j < 20; ++j, search = search.nextSibling)
|
644 |
-
if (search.lineObj == line && /div/i.test(search.nodeName)) { reuse = search; break; }
|
645 |
-
// This line needs to be generated.
|
646 |
-
var lineNode = buildLineElement(cm, line, lineN, dims, reuse);
|
647 |
-
if (lineNode != reuse) {
|
648 |
-
container.insertBefore(lineNode, cur);
|
649 |
-
} else {
|
650 |
-
while (cur != reuse) cur = rm(cur);
|
651 |
-
cur = cur.nextSibling;
|
652 |
-
}
|
653 |
-
|
654 |
-
lineNode.lineObj = line;
|
655 |
-
}
|
656 |
-
++lineN;
|
657 |
-
});
|
658 |
-
while (cur) cur = rm(cur);
|
659 |
-
}
|
660 |
-
|
661 |
-
function buildLineElement(cm, line, lineNo, dims, reuse) {
|
662 |
-
var lineElement = lineContent(cm, line);
|
663 |
-
var markers = line.gutterMarkers, display = cm.display, wrap;
|
664 |
-
|
665 |
-
if (!cm.options.lineNumbers && !markers && !line.bgClass && !line.wrapClass && !line.widgets)
|
666 |
-
return lineElement;
|
667 |
-
|
668 |
-
// Lines with gutter elements, widgets or a background class need
|
669 |
-
// to be wrapped again, and have the extra elements added to the
|
670 |
-
// wrapper div
|
671 |
-
|
672 |
-
if (reuse) {
|
673 |
-
reuse.alignable = null;
|
674 |
-
var isOk = true, widgetsSeen = 0, insertBefore = null;
|
675 |
-
for (var n = reuse.firstChild, next; n; n = next) {
|
676 |
-
next = n.nextSibling;
|
677 |
-
if (!/\bCodeMirror-linewidget\b/.test(n.className)) {
|
678 |
-
reuse.removeChild(n);
|
679 |
-
} else {
|
680 |
-
for (var i = 0; i < line.widgets.length; ++i) {
|
681 |
-
var widget = line.widgets[i];
|
682 |
-
if (widget.node == n.firstChild) {
|
683 |
-
if (!widget.above && !insertBefore) insertBefore = n;
|
684 |
-
positionLineWidget(widget, n, reuse, dims);
|
685 |
-
++widgetsSeen;
|
686 |
-
break;
|
687 |
-
}
|
688 |
-
}
|
689 |
-
if (i == line.widgets.length) { isOk = false; break; }
|
690 |
-
}
|
691 |
-
}
|
692 |
-
reuse.insertBefore(lineElement, insertBefore);
|
693 |
-
if (isOk && widgetsSeen == line.widgets.length) {
|
694 |
-
wrap = reuse;
|
695 |
-
reuse.className = line.wrapClass || "";
|
696 |
-
}
|
697 |
-
}
|
698 |
-
if (!wrap) {
|
699 |
-
wrap = elt("div", null, line.wrapClass, "position: relative");
|
700 |
-
wrap.appendChild(lineElement);
|
701 |
-
}
|
702 |
-
// Kludge to make sure the styled element lies behind the selection (by z-index)
|
703 |
-
if (line.bgClass)
|
704 |
-
wrap.insertBefore(elt("div", null, line.bgClass + " CodeMirror-linebackground"), wrap.firstChild);
|
705 |
-
if (cm.options.lineNumbers || markers) {
|
706 |
-
var gutterWrap = wrap.insertBefore(elt("div", null, null, "position: absolute; left: " +
|
707 |
-
(cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"),
|
708 |
-
wrap.firstChild);
|
709 |
-
if (cm.options.fixedGutter) (wrap.alignable || (wrap.alignable = [])).push(gutterWrap);
|
710 |
-
if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"]))
|
711 |
-
wrap.lineNumber = gutterWrap.appendChild(
|
712 |
-
elt("div", lineNumberFor(cm.options, lineNo),
|
713 |
-
"CodeMirror-linenumber CodeMirror-gutter-elt",
|
714 |
-
"left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: "
|
715 |
-
+ display.lineNumInnerWidth + "px"));
|
716 |
-
if (markers)
|
717 |
-
for (var k = 0; k < cm.options.gutters.length; ++k) {
|
718 |
-
var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id];
|
719 |
-
if (found)
|
720 |
-
gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " +
|
721 |
-
dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px"));
|
722 |
-
}
|
723 |
-
}
|
724 |
-
if (ie_lt8) wrap.style.zIndex = 2;
|
725 |
-
if (line.widgets && wrap != reuse) for (var i = 0, ws = line.widgets; i < ws.length; ++i) {
|
726 |
-
var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget");
|
727 |
-
if (!widget.handleMouseEvents) node.ignoreEvents = true;
|
728 |
-
positionLineWidget(widget, node, wrap, dims);
|
729 |
-
if (widget.above)
|
730 |
-
wrap.insertBefore(node, cm.options.lineNumbers && line.height != 0 ? gutterWrap : lineElement);
|
731 |
-
else
|
732 |
-
wrap.appendChild(node);
|
733 |
-
signalLater(widget, "redraw");
|
734 |
-
}
|
735 |
-
return wrap;
|
736 |
-
}
|
737 |
-
|
738 |
-
function positionLineWidget(widget, node, wrap, dims) {
|
739 |
-
if (widget.noHScroll) {
|
740 |
-
(wrap.alignable || (wrap.alignable = [])).push(node);
|
741 |
-
var width = dims.wrapperWidth;
|
742 |
-
node.style.left = dims.fixedPos + "px";
|
743 |
-
if (!widget.coverGutter) {
|
744 |
-
width -= dims.gutterTotalWidth;
|
745 |
-
node.style.paddingLeft = dims.gutterTotalWidth + "px";
|
746 |
-
}
|
747 |
-
node.style.width = width + "px";
|
748 |
-
}
|
749 |
-
if (widget.coverGutter) {
|
750 |
-
node.style.zIndex = 5;
|
751 |
-
node.style.position = "relative";
|
752 |
-
if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px";
|
753 |
-
}
|
754 |
-
}
|
755 |
-
|
756 |
-
// SELECTION / CURSOR
|
757 |
-
|
758 |
-
function updateSelection(cm) {
|
759 |
-
var display = cm.display;
|
760 |
-
var collapsed = posEq(cm.doc.sel.from, cm.doc.sel.to);
|
761 |
-
if (collapsed || cm.options.showCursorWhenSelecting)
|
762 |
-
updateSelectionCursor(cm);
|
763 |
-
else
|
764 |
-
display.cursor.style.display = display.otherCursor.style.display = "none";
|
765 |
-
if (!collapsed)
|
766 |
-
updateSelectionRange(cm);
|
767 |
-
else
|
768 |
-
display.selectionDiv.style.display = "none";
|
769 |
-
|
770 |
-
// Move the hidden textarea near the cursor to prevent scrolling artifacts
|
771 |
-
if (cm.options.moveInputWithCursor) {
|
772 |
-
var headPos = cursorCoords(cm, cm.doc.sel.head, "div");
|
773 |
-
var wrapOff = getRect(display.wrapper), lineOff = getRect(display.lineDiv);
|
774 |
-
display.inputDiv.style.top = Math.max(0, Math.min(display.wrapper.clientHeight - 10,
|
775 |
-
headPos.top + lineOff.top - wrapOff.top)) + "px";
|
776 |
-
display.inputDiv.style.left = Math.max(0, Math.min(display.wrapper.clientWidth - 10,
|
777 |
-
headPos.left + lineOff.left - wrapOff.left)) + "px";
|
778 |
-
}
|
779 |
-
}
|
780 |
-
|
781 |
-
// No selection, plain cursor
|
782 |
-
function updateSelectionCursor(cm) {
|
783 |
-
var display = cm.display, pos = cursorCoords(cm, cm.doc.sel.head, "div");
|
784 |
-
display.cursor.style.left = pos.left + "px";
|
785 |
-
display.cursor.style.top = pos.top + "px";
|
786 |
-
display.cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px";
|
787 |
-
display.cursor.style.display = "";
|
788 |
-
|
789 |
-
if (pos.other) {
|
790 |
-
display.otherCursor.style.display = "";
|
791 |
-
display.otherCursor.style.left = pos.other.left + "px";
|
792 |
-
display.otherCursor.style.top = pos.other.top + "px";
|
793 |
-
display.otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px";
|
794 |
-
} else { display.otherCursor.style.display = "none"; }
|
795 |
-
}
|
796 |
-
|
797 |
-
// Highlight selection
|
798 |
-
function updateSelectionRange(cm) {
|
799 |
-
var display = cm.display, doc = cm.doc, sel = cm.doc.sel;
|
800 |
-
var fragment = document.createDocumentFragment();
|
801 |
-
var clientWidth = display.lineSpace.offsetWidth, pl = paddingLeft(cm.display);
|
802 |
-
|
803 |
-
function add(left, top, width, bottom) {
|
804 |
-
if (top < 0) top = 0;
|
805 |
-
fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left +
|
806 |
-
"px; top: " + top + "px; width: " + (width == null ? clientWidth - left : width) +
|
807 |
-
"px; height: " + (bottom - top) + "px"));
|
808 |
-
}
|
809 |
-
|
810 |
-
function drawForLine(line, fromArg, toArg) {
|
811 |
-
var lineObj = getLine(doc, line);
|
812 |
-
var lineLen = lineObj.text.length;
|
813 |
-
var start, end;
|
814 |
-
function coords(ch, bias) {
|
815 |
-
return charCoords(cm, Pos(line, ch), "div", lineObj, bias);
|
816 |
-
}
|
817 |
-
|
818 |
-
iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) {
|
819 |
-
var leftPos = coords(from, "left"), rightPos, left, right;
|
820 |
-
if (from == to) {
|
821 |
-
rightPos = leftPos;
|
822 |
-
left = right = leftPos.left;
|
823 |
-
} else {
|
824 |
-
rightPos = coords(to - 1, "right");
|
825 |
-
if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; }
|
826 |
-
left = leftPos.left;
|
827 |
-
right = rightPos.right;
|
828 |
-
}
|
829 |
-
if (fromArg == null && from == 0) left = pl;
|
830 |
-
if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part
|
831 |
-
add(left, leftPos.top, null, leftPos.bottom);
|
832 |
-
left = pl;
|
833 |
-
if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top);
|
834 |
-
}
|
835 |
-
if (toArg == null && to == lineLen) right = clientWidth;
|
836 |
-
if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left)
|
837 |
-
start = leftPos;
|
838 |
-
if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right)
|
839 |
-
end = rightPos;
|
840 |
-
if (left < pl + 1) left = pl;
|
841 |
-
add(left, rightPos.top, right - left, rightPos.bottom);
|
842 |
-
});
|
843 |
-
return {start: start, end: end};
|
844 |
-
}
|
845 |
-
|
846 |
-
if (sel.from.line == sel.to.line) {
|
847 |
-
drawForLine(sel.from.line, sel.from.ch, sel.to.ch);
|
848 |
-
} else {
|
849 |
-
var fromLine = getLine(doc, sel.from.line), toLine = getLine(doc, sel.to.line);
|
850 |
-
var singleVLine = visualLine(doc, fromLine) == visualLine(doc, toLine);
|
851 |
-
var leftEnd = drawForLine(sel.from.line, sel.from.ch, singleVLine ? fromLine.text.length : null).end;
|
852 |
-
var rightStart = drawForLine(sel.to.line, singleVLine ? 0 : null, sel.to.ch).start;
|
853 |
-
if (singleVLine) {
|
854 |
-
if (leftEnd.top < rightStart.top - 2) {
|
855 |
-
add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);
|
856 |
-
add(pl, rightStart.top, rightStart.left, rightStart.bottom);
|
857 |
-
} else {
|
858 |
-
add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);
|
859 |
-
}
|
860 |
-
}
|
861 |
-
if (leftEnd.bottom < rightStart.top)
|
862 |
-
add(pl, leftEnd.bottom, null, rightStart.top);
|
863 |
-
}
|
864 |
-
|
865 |
-
removeChildrenAndAdd(display.selectionDiv, fragment);
|
866 |
-
display.selectionDiv.style.display = "";
|
867 |
-
}
|
868 |
-
|
869 |
-
// Cursor-blinking
|
870 |
-
function restartBlink(cm) {
|
871 |
-
if (!cm.state.focused) return;
|
872 |
-
var display = cm.display;
|
873 |
-
clearInterval(display.blinker);
|
874 |
-
var on = true;
|
875 |
-
display.cursor.style.visibility = display.otherCursor.style.visibility = "";
|
876 |
-
display.blinker = setInterval(function() {
|
877 |
-
display.cursor.style.visibility = display.otherCursor.style.visibility = (on = !on) ? "" : "hidden";
|
878 |
-
}, cm.options.cursorBlinkRate);
|
879 |
-
}
|
880 |
-
|
881 |
-
// HIGHLIGHT WORKER
|
882 |
-
|
883 |
-
function startWorker(cm, time) {
|
884 |
-
if (cm.doc.mode.startState && cm.doc.frontier < cm.display.showingTo)
|
885 |
-
cm.state.highlight.set(time, bind(highlightWorker, cm));
|
886 |
-
}
|
887 |
-
|
888 |
-
function highlightWorker(cm) {
|
889 |
-
var doc = cm.doc;
|
890 |
-
if (doc.frontier < doc.first) doc.frontier = doc.first;
|
891 |
-
if (doc.frontier >= cm.display.showingTo) return;
|
892 |
-
var end = +new Date + cm.options.workTime;
|
893 |
-
var state = copyState(doc.mode, getStateBefore(cm, doc.frontier));
|
894 |
-
var changed = [], prevChange;
|
895 |
-
doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.showingTo + 500), function(line) {
|
896 |
-
if (doc.frontier >= cm.display.showingFrom) { // Visible
|
897 |
-
var oldStyles = line.styles;
|
898 |
-
line.styles = highlightLine(cm, line, state);
|
899 |
-
var ischange = !oldStyles || oldStyles.length != line.styles.length;
|
900 |
-
for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i];
|
901 |
-
if (ischange) {
|
902 |
-
if (prevChange && prevChange.end == doc.frontier) prevChange.end++;
|
903 |
-
else changed.push(prevChange = {start: doc.frontier, end: doc.frontier + 1});
|
904 |
-
}
|
905 |
-
line.stateAfter = copyState(doc.mode, state);
|
906 |
-
} else {
|
907 |
-
processLine(cm, line, state);
|
908 |
-
line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null;
|
909 |
-
}
|
910 |
-
++doc.frontier;
|
911 |
-
if (+new Date > end) {
|
912 |
-
startWorker(cm, cm.options.workDelay);
|
913 |
-
return true;
|
914 |
-
}
|
915 |
-
});
|
916 |
-
if (changed.length)
|
917 |
-
operation(cm, function() {
|
918 |
-
for (var i = 0; i < changed.length; ++i)
|
919 |
-
regChange(this, changed[i].start, changed[i].end);
|
920 |
-
})();
|
921 |
-
}
|
922 |
-
|
923 |
-
// Finds the line to start with when starting a parse. Tries to
|
924 |
-
// find a line with a stateAfter, so that it can start with a
|
925 |
-
// valid state. If that fails, it returns the line with the
|
926 |
-
// smallest indentation, which tends to need the least context to
|
927 |
-
// parse correctly.
|
928 |
-
function findStartLine(cm, n, precise) {
|
929 |
-
var minindent, minline, doc = cm.doc;
|
930 |
-
for (var search = n, lim = n - 100; search > lim; --search) {
|
931 |
-
if (search <= doc.first) return doc.first;
|
932 |
-
var line = getLine(doc, search - 1);
|
933 |
-
if (line.stateAfter && (!precise || search <= doc.frontier)) return search;
|
934 |
-
var indented = countColumn(line.text, null, cm.options.tabSize);
|
935 |
-
if (minline == null || minindent > indented) {
|
936 |
-
minline = search - 1;
|
937 |
-
minindent = indented;
|
938 |
-
}
|
939 |
-
}
|
940 |
-
return minline;
|
941 |
-
}
|
942 |
-
|
943 |
-
function getStateBefore(cm, n, precise) {
|
944 |
-
var doc = cm.doc, display = cm.display;
|
945 |
-
if (!doc.mode.startState) return true;
|
946 |
-
var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter;
|
947 |
-
if (!state) state = startState(doc.mode);
|
948 |
-
else state = copyState(doc.mode, state);
|
949 |
-
doc.iter(pos, n, function(line) {
|
950 |
-
processLine(cm, line, state);
|
951 |
-
var save = pos == n - 1 || pos % 5 == 0 || pos >= display.showingFrom && pos < display.showingTo;
|
952 |
-
line.stateAfter = save ? copyState(doc.mode, state) : null;
|
953 |
-
++pos;
|
954 |
-
});
|
955 |
-
return state;
|
956 |
-
}
|
957 |
-
|
958 |
-
// POSITION MEASUREMENT
|
959 |
-
|
960 |
-
function paddingTop(display) {return display.lineSpace.offsetTop;}
|
961 |
-
function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;}
|
962 |
-
function paddingLeft(display) {
|
963 |
-
var e = removeChildrenAndAdd(display.measure, elt("pre", null, null, "text-align: left")).appendChild(elt("span", "x"));
|
964 |
-
return e.offsetLeft;
|
965 |
-
}
|
966 |
-
|
967 |
-
function measureChar(cm, line, ch, data, bias) {
|
968 |
-
var dir = -1;
|
969 |
-
data = data || measureLine(cm, line);
|
970 |
-
|
971 |
-
for (var pos = ch;; pos += dir) {
|
972 |
-
var r = data[pos];
|
973 |
-
if (r) break;
|
974 |
-
if (dir < 0 && pos == 0) dir = 1;
|
975 |
-
}
|
976 |
-
bias = pos > ch ? "left" : pos < ch ? "right" : bias;
|
977 |
-
if (bias == "left" && r.leftSide) r = r.leftSide;
|
978 |
-
else if (bias == "right" && r.rightSide) r = r.rightSide;
|
979 |
-
return {left: pos < ch ? r.right : r.left,
|
980 |
-
right: pos > ch ? r.left : r.right,
|
981 |
-
top: r.top,
|
982 |
-
bottom: r.bottom};
|
983 |
-
}
|
984 |
-
|
985 |
-
function findCachedMeasurement(cm, line) {
|
986 |
-
var cache = cm.display.measureLineCache;
|
987 |
-
for (var i = 0; i < cache.length; ++i) {
|
988 |
-
var memo = cache[i];
|
989 |
-
if (memo.text == line.text && memo.markedSpans == line.markedSpans &&
|
990 |
-
cm.display.scroller.clientWidth == memo.width &&
|
991 |
-
memo.classes == line.textClass + "|" + line.bgClass + "|" + line.wrapClass)
|
992 |
-
return memo;
|
993 |
-
}
|
994 |
-
}
|
995 |
-
|
996 |
-
function clearCachedMeasurement(cm, line) {
|
997 |
-
var exists = findCachedMeasurement(cm, line);
|
998 |
-
if (exists) exists.text = exists.measure = exists.markedSpans = null;
|
999 |
-
}
|
1000 |
-
|
1001 |
-
function measureLine(cm, line) {
|
1002 |
-
// First look in the cache
|
1003 |
-
var cached = findCachedMeasurement(cm, line);
|
1004 |
-
if (cached) return cached.measure;
|
1005 |
-
|
1006 |
-
// Failing that, recompute and store result in cache
|
1007 |
-
var measure = measureLineInner(cm, line);
|
1008 |
-
var cache = cm.display.measureLineCache;
|
1009 |
-
var memo = {text: line.text, width: cm.display.scroller.clientWidth,
|
1010 |
-
markedSpans: line.markedSpans, measure: measure,
|
1011 |
-
classes: line.textClass + "|" + line.bgClass + "|" + line.wrapClass};
|
1012 |
-
if (cache.length == 16) cache[++cm.display.measureLineCachePos % 16] = memo;
|
1013 |
-
else cache.push(memo);
|
1014 |
-
return measure;
|
1015 |
-
}
|
1016 |
-
|
1017 |
-
function measureLineInner(cm, line) {
|
1018 |
-
var display = cm.display, measure = emptyArray(line.text.length);
|
1019 |
-
var pre = lineContent(cm, line, measure, true);
|
1020 |
-
|
1021 |
-
// IE does not cache element positions of inline elements between
|
1022 |
-
// calls to getBoundingClientRect. This makes the loop below,
|
1023 |
-
// which gathers the positions of all the characters on the line,
|
1024 |
-
// do an amount of layout work quadratic to the number of
|
1025 |
-
// characters. When line wrapping is off, we try to improve things
|
1026 |
-
// by first subdividing the line into a bunch of inline blocks, so
|
1027 |
-
// that IE can reuse most of the layout information from caches
|
1028 |
-
// for those blocks. This does interfere with line wrapping, so it
|
1029 |
-
// doesn't work when wrapping is on, but in that case the
|
1030 |
-
// situation is slightly better, since IE does cache line-wrapping
|
1031 |
-
// information and only recomputes per-line.
|
1032 |
-
if (ie && !ie_lt8 && !cm.options.lineWrapping && pre.childNodes.length > 100) {
|
1033 |
-
var fragment = document.createDocumentFragment();
|
1034 |
-
var chunk = 10, n = pre.childNodes.length;
|
1035 |
-
for (var i = 0, chunks = Math.ceil(n / chunk); i < chunks; ++i) {
|
1036 |
-
var wrap = elt("div", null, null, "display: inline-block");
|
1037 |
-
for (var j = 0; j < chunk && n; ++j) {
|
1038 |
-
wrap.appendChild(pre.firstChild);
|
1039 |
-
--n;
|
1040 |
-
}
|
1041 |
-
fragment.appendChild(wrap);
|
1042 |
-
}
|
1043 |
-
pre.appendChild(fragment);
|
1044 |
-
}
|
1045 |
-
|
1046 |
-
removeChildrenAndAdd(display.measure, pre);
|
1047 |
-
|
1048 |
-
var outer = getRect(display.lineDiv);
|
1049 |
-
var vranges = [], data = emptyArray(line.text.length), maxBot = pre.offsetHeight;
|
1050 |
-
// Work around an IE7/8 bug where it will sometimes have randomly
|
1051 |
-
// replaced our pre with a clone at this point.
|
1052 |
-
if (ie_lt9 && display.measure.first != pre)
|
1053 |
-
removeChildrenAndAdd(display.measure, pre);
|
1054 |
-
|
1055 |
-
function measureRect(rect) {
|
1056 |
-
var top = rect.top - outer.top, bot = rect.bottom - outer.top;
|
1057 |
-
if (bot > maxBot) bot = maxBot;
|
1058 |
-
if (top < 0) top = 0;
|
1059 |
-
for (var i = vranges.length - 2; i >= 0; i -= 2) {
|
1060 |
-
var rtop = vranges[i], rbot = vranges[i+1];
|
1061 |
-
if (rtop > bot || rbot < top) continue;
|
1062 |
-
if (rtop <= top && rbot >= bot ||
|
1063 |
-
top <= rtop && bot >= rbot ||
|
1064 |
-
Math.min(bot, rbot) - Math.max(top, rtop) >= (bot - top) >> 1) {
|
1065 |
-
vranges[i] = Math.min(top, rtop);
|
1066 |
-
vranges[i+1] = Math.max(bot, rbot);
|
1067 |
-
break;
|
1068 |
-
}
|
1069 |
-
}
|
1070 |
-
if (i < 0) { i = vranges.length; vranges.push(top, bot); }
|
1071 |
-
return {left: rect.left - outer.left,
|
1072 |
-
right: rect.right - outer.left,
|
1073 |
-
top: i, bottom: null};
|
1074 |
-
}
|
1075 |
-
function finishRect(rect) {
|
1076 |
-
rect.bottom = vranges[rect.top+1];
|
1077 |
-
rect.top = vranges[rect.top];
|
1078 |
-
}
|
1079 |
-
|
1080 |
-
for (var i = 0, cur; i < measure.length; ++i) if (cur = measure[i]) {
|
1081 |
-
var node = cur, rect = null;
|
1082 |
-
// A widget might wrap, needs special care
|
1083 |
-
if (/\bCodeMirror-widget\b/.test(cur.className) && cur.getClientRects) {
|
1084 |
-
if (cur.firstChild.nodeType == 1) node = cur.firstChild;
|
1085 |
-
var rects = node.getClientRects();
|
1086 |
-
if (rects.length > 1) {
|
1087 |
-
rect = data[i] = measureRect(rects[0]);
|
1088 |
-
rect.rightSide = measureRect(rects[rects.length - 1]);
|
1089 |
-
}
|
1090 |
-
}
|
1091 |
-
if (!rect) rect = data[i] = measureRect(getRect(node));
|
1092 |
-
if (cur.measureRight) rect.right = getRect(cur.measureRight).left;
|
1093 |
-
if (cur.leftSide) rect.leftSide = measureRect(getRect(cur.leftSide));
|
1094 |
-
}
|
1095 |
-
for (var i = 0, cur; i < data.length; ++i) if (cur = data[i]) {
|
1096 |
-
finishRect(cur);
|
1097 |
-
if (cur.leftSide) finishRect(cur.leftSide);
|
1098 |
-
if (cur.rightSide) finishRect(cur.rightSide);
|
1099 |
-
}
|
1100 |
-
return data;
|
1101 |
-
}
|
1102 |
-
|
1103 |
-
function measureLineWidth(cm, line) {
|
1104 |
-
var hasBadSpan = false;
|
1105 |
-
if (line.markedSpans) for (var i = 0; i < line.markedSpans; ++i) {
|
1106 |
-
var sp = line.markedSpans[i];
|
1107 |
-
if (sp.collapsed && (sp.to == null || sp.to == line.text.length)) hasBadSpan = true;
|
1108 |
-
}
|
1109 |
-
var cached = !hasBadSpan && findCachedMeasurement(cm, line);
|
1110 |
-
if (cached) return measureChar(cm, line, line.text.length, cached.measure, "right").right;
|
1111 |
-
|
1112 |
-
var pre = lineContent(cm, line, null, true);
|
1113 |
-
var end = pre.appendChild(zeroWidthElement(cm.display.measure));
|
1114 |
-
removeChildrenAndAdd(cm.display.measure, pre);
|
1115 |
-
return getRect(end).right - getRect(cm.display.lineDiv).left;
|
1116 |
-
}
|
1117 |
-
|
1118 |
-
function clearCaches(cm) {
|
1119 |
-
cm.display.measureLineCache.length = cm.display.measureLineCachePos = 0;
|
1120 |
-
cm.display.cachedCharWidth = cm.display.cachedTextHeight = null;
|
1121 |
-
if (!cm.options.lineWrapping) cm.display.maxLineChanged = true;
|
1122 |
-
cm.display.lineNumChars = null;
|
1123 |
-
}
|
1124 |
-
|
1125 |
-
function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; }
|
1126 |
-
function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; }
|
1127 |
-
|
1128 |
-
// Context is one of "line", "div" (display.lineDiv), "local"/null (editor), or "page"
|
1129 |
-
function intoCoordSystem(cm, lineObj, rect, context) {
|
1130 |
-
if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) {
|
1131 |
-
var size = widgetHeight(lineObj.widgets[i]);
|
1132 |
-
rect.top += size; rect.bottom += size;
|
1133 |
-
}
|
1134 |
-
if (context == "line") return rect;
|
1135 |
-
if (!context) context = "local";
|
1136 |
-
var yOff = heightAtLine(cm, lineObj);
|
1137 |
-
if (context == "local") yOff += paddingTop(cm.display);
|
1138 |
-
else yOff -= cm.display.viewOffset;
|
1139 |
-
if (context == "page" || context == "window") {
|
1140 |
-
var lOff = getRect(cm.display.lineSpace);
|
1141 |
-
yOff += lOff.top + (context == "window" ? 0 : pageScrollY());
|
1142 |
-
var xOff = lOff.left + (context == "window" ? 0 : pageScrollX());
|
1143 |
-
rect.left += xOff; rect.right += xOff;
|
1144 |
-
}
|
1145 |
-
rect.top += yOff; rect.bottom += yOff;
|
1146 |
-
return rect;
|
1147 |
-
}
|
1148 |
-
|
1149 |
-
// Context may be "window", "page", "div", or "local"/null
|
1150 |
-
// Result is in "div" coords
|
1151 |
-
function fromCoordSystem(cm, coords, context) {
|
1152 |
-
if (context == "div") return coords;
|
1153 |
-
var left = coords.left, top = coords.top;
|
1154 |
-
// First move into "page" coordinate system
|
1155 |
-
if (context == "page") {
|
1156 |
-
left -= pageScrollX();
|
1157 |
-
top -= pageScrollY();
|
1158 |
-
} else if (context == "local" || !context) {
|
1159 |
-
var localBox = getRect(cm.display.sizer);
|
1160 |
-
left += localBox.left;
|
1161 |
-
top += localBox.top;
|
1162 |
-
}
|
1163 |
-
|
1164 |
-
var lineSpaceBox = getRect(cm.display.lineSpace);
|
1165 |
-
return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top};
|
1166 |
-
}
|
1167 |
-
|
1168 |
-
function charCoords(cm, pos, context, lineObj, bias) {
|
1169 |
-
if (!lineObj) lineObj = getLine(cm.doc, pos.line);
|
1170 |
-
return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, null, bias), context);
|
1171 |
-
}
|
1172 |
-
|
1173 |
-
function cursorCoords(cm, pos, context, lineObj, measurement) {
|
1174 |
-
lineObj = lineObj || getLine(cm.doc, pos.line);
|
1175 |
-
if (!measurement) measurement = measureLine(cm, lineObj);
|
1176 |
-
function get(ch, right) {
|
1177 |
-
var m = measureChar(cm, lineObj, ch, measurement, right ? "right" : "left");
|
1178 |
-
if (right) m.left = m.right; else m.right = m.left;
|
1179 |
-
return intoCoordSystem(cm, lineObj, m, context);
|
1180 |
-
}
|
1181 |
-
function getBidi(ch, partPos) {
|
1182 |
-
var part = order[partPos], right = part.level % 2;
|
1183 |
-
if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) {
|
1184 |
-
part = order[--partPos];
|
1185 |
-
ch = bidiRight(part) - (part.level % 2 ? 0 : 1);
|
1186 |
-
right = true;
|
1187 |
-
} else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) {
|
1188 |
-
part = order[++partPos];
|
1189 |
-
ch = bidiLeft(part) - part.level % 2;
|
1190 |
-
right = false;
|
1191 |
-
}
|
1192 |
-
if (right && ch == part.to && ch > part.from) return get(ch - 1);
|
1193 |
-
return get(ch, right);
|
1194 |
-
}
|
1195 |
-
var order = getOrder(lineObj), ch = pos.ch;
|
1196 |
-
if (!order) return get(ch);
|
1197 |
-
var partPos = getBidiPartAt(order, ch);
|
1198 |
-
var val = getBidi(ch, partPos);
|
1199 |
-
if (bidiOther != null) val.other = getBidi(ch, bidiOther);
|
1200 |
-
return val;
|
1201 |
-
}
|
1202 |
-
|
1203 |
-
function PosWithInfo(line, ch, outside, xRel) {
|
1204 |
-
var pos = new Pos(line, ch);
|
1205 |
-
pos.xRel = xRel;
|
1206 |
-
if (outside) pos.outside = true;
|
1207 |
-
return pos;
|
1208 |
-
}
|
1209 |
-
|
1210 |
-
// Coords must be lineSpace-local
|
1211 |
-
function coordsChar(cm, x, y) {
|
1212 |
-
var doc = cm.doc;
|
1213 |
-
y += cm.display.viewOffset;
|
1214 |
-
if (y < 0) return PosWithInfo(doc.first, 0, true, -1);
|
1215 |
-
var lineNo = lineAtHeight(doc, y), last = doc.first + doc.size - 1;
|
1216 |
-
if (lineNo > last)
|
1217 |
-
return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1);
|
1218 |
-
if (x < 0) x = 0;
|
1219 |
-
|
1220 |
-
for (;;) {
|
1221 |
-
var lineObj = getLine(doc, lineNo);
|
1222 |
-
var found = coordsCharInner(cm, lineObj, lineNo, x, y);
|
1223 |
-
var merged = collapsedSpanAtEnd(lineObj);
|
1224 |
-
var mergedPos = merged && merged.find();
|
1225 |
-
if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0))
|
1226 |
-
lineNo = mergedPos.to.line;
|
1227 |
-
else
|
1228 |
-
return found;
|
1229 |
-
}
|
1230 |
-
}
|
1231 |
-
|
1232 |
-
function coordsCharInner(cm, lineObj, lineNo, x, y) {
|
1233 |
-
var innerOff = y - heightAtLine(cm, lineObj);
|
1234 |
-
var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth;
|
1235 |
-
var measurement = measureLine(cm, lineObj);
|
1236 |
-
|
1237 |
-
function getX(ch) {
|
1238 |
-
var sp = cursorCoords(cm, Pos(lineNo, ch), "line",
|
1239 |
-
lineObj, measurement);
|
1240 |
-
wrongLine = true;
|
1241 |
-
if (innerOff > sp.bottom) return sp.left - adjust;
|
1242 |
-
else if (innerOff < sp.top) return sp.left + adjust;
|
1243 |
-
else wrongLine = false;
|
1244 |
-
return sp.left;
|
1245 |
-
}
|
1246 |
-
|
1247 |
-
var bidi = getOrder(lineObj), dist = lineObj.text.length;
|
1248 |
-
var from = lineLeft(lineObj), to = lineRight(lineObj);
|
1249 |
-
var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine;
|
1250 |
-
|
1251 |
-
if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1);
|
1252 |
-
// Do a binary search between these bounds.
|
1253 |
-
for (;;) {
|
1254 |
-
if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) {
|
1255 |
-
var ch = x < fromX || x - fromX <= toX - x ? from : to;
|
1256 |
-
var xDiff = x - (ch == from ? fromX : toX);
|
1257 |
-
while (isExtendingChar.test(lineObj.text.charAt(ch))) ++ch;
|
1258 |
-
var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside,
|
1259 |
-
xDiff < 0 ? -1 : xDiff ? 1 : 0);
|
1260 |
-
return pos;
|
1261 |
-
}
|
1262 |
-
var step = Math.ceil(dist / 2), middle = from + step;
|
1263 |
-
if (bidi) {
|
1264 |
-
middle = from;
|
1265 |
-
for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1);
|
1266 |
-
}
|
1267 |
-
var middleX = getX(middle);
|
1268 |
-
if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;}
|
1269 |
-
else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;}
|
1270 |
-
}
|
1271 |
-
}
|
1272 |
-
|
1273 |
-
var measureText;
|
1274 |
-
function textHeight(display) {
|
1275 |
-
if (display.cachedTextHeight != null) return display.cachedTextHeight;
|
1276 |
-
if (measureText == null) {
|
1277 |
-
measureText = elt("pre");
|
1278 |
-
// Measure a bunch of lines, for browsers that compute
|
1279 |
-
// fractional heights.
|
1280 |
-
for (var i = 0; i < 49; ++i) {
|
1281 |
-
measureText.appendChild(document.createTextNode("x"));
|
1282 |
-
measureText.appendChild(elt("br"));
|
1283 |
-
}
|
1284 |
-
measureText.appendChild(document.createTextNode("x"));
|
1285 |
-
}
|
1286 |
-
removeChildrenAndAdd(display.measure, measureText);
|
1287 |
-
var height = measureText.offsetHeight / 50;
|
1288 |
-
if (height > 3) display.cachedTextHeight = height;
|
1289 |
-
removeChildren(display.measure);
|
1290 |
-
return height || 1;
|
1291 |
-
}
|
1292 |
-
|
1293 |
-
function charWidth(display) {
|
1294 |
-
if (display.cachedCharWidth != null) return display.cachedCharWidth;
|
1295 |
-
var anchor = elt("span", "x");
|
1296 |
-
var pre = elt("pre", [anchor]);
|
1297 |
-
removeChildrenAndAdd(display.measure, pre);
|
1298 |
-
var width = anchor.offsetWidth;
|
1299 |
-
if (width > 2) display.cachedCharWidth = width;
|
1300 |
-
return width || 10;
|
1301 |
-
}
|
1302 |
-
|
1303 |
-
// OPERATIONS
|
1304 |
-
|
1305 |
-
// Operations are used to wrap changes in such a way that each
|
1306 |
-
// change won't have to update the cursor and display (which would
|
1307 |
-
// be awkward, slow, and error-prone), but instead updates are
|
1308 |
-
// batched and then all combined and executed at once.
|
1309 |
-
|
1310 |
-
var nextOpId = 0;
|
1311 |
-
function startOperation(cm) {
|
1312 |
-
cm.curOp = {
|
1313 |
-
// An array of ranges of lines that have to be updated. See
|
1314 |
-
// updateDisplay.
|
1315 |
-
changes: [],
|
1316 |
-
forceUpdate: false,
|
1317 |
-
updateInput: null,
|
1318 |
-
userSelChange: null,
|
1319 |
-
textChanged: null,
|
1320 |
-
selectionChanged: false,
|
1321 |
-
cursorActivity: false,
|
1322 |
-
updateMaxLine: false,
|
1323 |
-
updateScrollPos: false,
|
1324 |
-
id: ++nextOpId
|
1325 |
-
};
|
1326 |
-
if (!delayedCallbackDepth++) delayedCallbacks = [];
|
1327 |
-
}
|
1328 |
-
|
1329 |
-
function endOperation(cm) {
|
1330 |
-
var op = cm.curOp, doc = cm.doc, display = cm.display;
|
1331 |
-
cm.curOp = null;
|
1332 |
-
|
1333 |
-
if (op.updateMaxLine) computeMaxLength(cm);
|
1334 |
-
if (display.maxLineChanged && !cm.options.lineWrapping && display.maxLine) {
|
1335 |
-
var width = measureLineWidth(cm, display.maxLine);
|
1336 |
-
display.sizer.style.minWidth = Math.max(0, width + 3 + scrollerCutOff) + "px";
|
1337 |
-
display.maxLineChanged = false;
|
1338 |
-
var maxScrollLeft = Math.max(0, display.sizer.offsetLeft + display.sizer.offsetWidth - display.scroller.clientWidth);
|
1339 |
-
if (maxScrollLeft < doc.scrollLeft && !op.updateScrollPos)
|
1340 |
-
setScrollLeft(cm, Math.min(display.scroller.scrollLeft, maxScrollLeft), true);
|
1341 |
-
}
|
1342 |
-
var newScrollPos, updated;
|
1343 |
-
if (op.updateScrollPos) {
|
1344 |
-
newScrollPos = op.updateScrollPos;
|
1345 |
-
} else if (op.selectionChanged && display.scroller.clientHeight) { // don't rescroll if not visible
|
1346 |
-
var coords = cursorCoords(cm, doc.sel.head);
|
1347 |
-
newScrollPos = calculateScrollPos(cm, coords.left, coords.top, coords.left, coords.bottom);
|
1348 |
-
}
|
1349 |
-
if (op.changes.length || op.forceUpdate || newScrollPos && newScrollPos.scrollTop != null) {
|
1350 |
-
updated = updateDisplay(cm, op.changes, newScrollPos && newScrollPos.scrollTop, op.forceUpdate);
|
1351 |
-
if (cm.display.scroller.offsetHeight) cm.doc.scrollTop = cm.display.scroller.scrollTop;
|
1352 |
-
}
|
1353 |
-
if (!updated && op.selectionChanged) updateSelection(cm);
|
1354 |
-
if (op.updateScrollPos) {
|
1355 |
-
display.scroller.scrollTop = display.scrollbarV.scrollTop = doc.scrollTop = newScrollPos.scrollTop;
|
1356 |
-
display.scroller.scrollLeft = display.scrollbarH.scrollLeft = doc.scrollLeft = newScrollPos.scrollLeft;
|
1357 |
-
alignHorizontally(cm);
|
1358 |
-
if (op.scrollToPos)
|
1359 |
-
scrollPosIntoView(cm, clipPos(cm.doc, op.scrollToPos), op.scrollToPosMargin);
|
1360 |
-
} else if (newScrollPos) {
|
1361 |
-
scrollCursorIntoView(cm);
|
1362 |
-
}
|
1363 |
-
if (op.selectionChanged) restartBlink(cm);
|
1364 |
-
|
1365 |
-
if (cm.state.focused && op.updateInput)
|
1366 |
-
resetInput(cm, op.userSelChange);
|
1367 |
-
|
1368 |
-
var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;
|
1369 |
-
if (hidden) for (var i = 0; i < hidden.length; ++i)
|
1370 |
-
if (!hidden[i].lines.length) signal(hidden[i], "hide");
|
1371 |
-
if (unhidden) for (var i = 0; i < unhidden.length; ++i)
|
1372 |
-
if (unhidden[i].lines.length) signal(unhidden[i], "unhide");
|
1373 |
-
|
1374 |
-
var delayed;
|
1375 |
-
if (!--delayedCallbackDepth) {
|
1376 |
-
delayed = delayedCallbacks;
|
1377 |
-
delayedCallbacks = null;
|
1378 |
-
}
|
1379 |
-
if (op.textChanged)
|
1380 |
-
signal(cm, "change", cm, op.textChanged);
|
1381 |
-
if (op.cursorActivity) signal(cm, "cursorActivity", cm);
|
1382 |
-
if (delayed) for (var i = 0; i < delayed.length; ++i) delayed[i]();
|
1383 |
-
}
|
1384 |
-
|
1385 |
-
// Wraps a function in an operation. Returns the wrapped function.
|
1386 |
-
function operation(cm1, f) {
|
1387 |
-
return function() {
|
1388 |
-
var cm = cm1 || this, withOp = !cm.curOp;
|
1389 |
-
if (withOp) startOperation(cm);
|
1390 |
-
try { var result = f.apply(cm, arguments); }
|
1391 |
-
finally { if (withOp) endOperation(cm); }
|
1392 |
-
return result;
|
1393 |
-
};
|
1394 |
-
}
|
1395 |
-
function docOperation(f) {
|
1396 |
-
return function() {
|
1397 |
-
var withOp = this.cm && !this.cm.curOp, result;
|
1398 |
-
if (withOp) startOperation(this.cm);
|
1399 |
-
try { result = f.apply(this, arguments); }
|
1400 |
-
finally { if (withOp) endOperation(this.cm); }
|
1401 |
-
return result;
|
1402 |
-
};
|
1403 |
-
}
|
1404 |
-
function runInOp(cm, f) {
|
1405 |
-
var withOp = !cm.curOp, result;
|
1406 |
-
if (withOp) startOperation(cm);
|
1407 |
-
try { result = f(); }
|
1408 |
-
finally { if (withOp) endOperation(cm); }
|
1409 |
-
return result;
|
1410 |
-
}
|
1411 |
-
|
1412 |
-
function regChange(cm, from, to, lendiff) {
|
1413 |
-
if (from == null) from = cm.doc.first;
|
1414 |
-
if (to == null) to = cm.doc.first + cm.doc.size;
|
1415 |
-
cm.curOp.changes.push({from: from, to: to, diff: lendiff});
|
1416 |
-
}
|
1417 |
-
|
1418 |
-
// INPUT HANDLING
|
1419 |
-
|
1420 |
-
function slowPoll(cm) {
|
1421 |
-
if (cm.display.pollingFast) return;
|
1422 |
-
cm.display.poll.set(cm.options.pollInterval, function() {
|
1423 |
-
readInput(cm);
|
1424 |
-
if (cm.state.focused) slowPoll(cm);
|
1425 |
-
});
|
1426 |
-
}
|
1427 |
-
|
1428 |
-
function fastPoll(cm) {
|
1429 |
-
var missed = false;
|
1430 |
-
cm.display.pollingFast = true;
|
1431 |
-
function p() {
|
1432 |
-
var changed = readInput(cm);
|
1433 |
-
if (!changed && !missed) {missed = true; cm.display.poll.set(60, p);}
|
1434 |
-
else {cm.display.pollingFast = false; slowPoll(cm);}
|
1435 |
-
}
|
1436 |
-
cm.display.poll.set(20, p);
|
1437 |
-
}
|
1438 |
-
|
1439 |
-
// prevInput is a hack to work with IME. If we reset the textarea
|
1440 |
-
// on every change, that breaks IME. So we look for changes
|
1441 |
-
// compared to the previous content instead. (Modern browsers have
|
1442 |
-
// events that indicate IME taking place, but these are not widely
|
1443 |
-
// supported or compatible enough yet to rely on.)
|
1444 |
-
function readInput(cm) {
|
1445 |
-
var input = cm.display.input, prevInput = cm.display.prevInput, doc = cm.doc, sel = doc.sel;
|
1446 |
-
if (!cm.state.focused || hasSelection(input) || isReadOnly(cm) || cm.state.disableInput) return false;
|
1447 |
-
var text = input.value;
|
1448 |
-
if (text == prevInput && posEq(sel.from, sel.to)) return false;
|
1449 |
-
if (ie && !ie_lt9 && cm.display.inputHasSelection === text) {
|
1450 |
-
resetInput(cm, true);
|
1451 |
-
return false;
|
1452 |
-
}
|
1453 |
-
|
1454 |
-
var withOp = !cm.curOp;
|
1455 |
-
if (withOp) startOperation(cm);
|
1456 |
-
sel.shift = false;
|
1457 |
-
var same = 0, l = Math.min(prevInput.length, text.length);
|
1458 |
-
while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same;
|
1459 |
-
var from = sel.from, to = sel.to;
|
1460 |
-
if (same < prevInput.length)
|
1461 |
-
from = Pos(from.line, from.ch - (prevInput.length - same));
|
1462 |
-
else if (cm.state.overwrite && posEq(from, to) && !cm.state.pasteIncoming)
|
1463 |
-
to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + (text.length - same)));
|
1464 |
-
|
1465 |
-
var updateInput = cm.curOp.updateInput;
|
1466 |
-
var changeEvent = {from: from, to: to, text: splitLines(text.slice(same)),
|
1467 |
-
origin: cm.state.pasteIncoming ? "paste" : "+input"};
|
1468 |
-
makeChange(cm.doc, changeEvent, "end");
|
1469 |
-
cm.curOp.updateInput = updateInput;
|
1470 |
-
signalLater(cm, "inputRead", cm, changeEvent);
|
1471 |
-
|
1472 |
-
if (text.length > 1000 || text.indexOf("\n") > -1) input.value = cm.display.prevInput = "";
|
1473 |
-
else cm.display.prevInput = text;
|
1474 |
-
if (withOp) endOperation(cm);
|
1475 |
-
cm.state.pasteIncoming = false;
|
1476 |
-
return true;
|
1477 |
-
}
|
1478 |
-
|
1479 |
-
function resetInput(cm, user) {
|
1480 |
-
var minimal, selected, doc = cm.doc;
|
1481 |
-
if (!posEq(doc.sel.from, doc.sel.to)) {
|
1482 |
-
cm.display.prevInput = "";
|
1483 |
-
minimal = hasCopyEvent &&
|
1484 |
-
(doc.sel.to.line - doc.sel.from.line > 100 || (selected = cm.getSelection()).length > 1000);
|
1485 |
-
var content = minimal ? "-" : selected || cm.getSelection();
|
1486 |
-
cm.display.input.value = content;
|
1487 |
-
if (cm.state.focused) selectInput(cm.display.input);
|
1488 |
-
if (ie && !ie_lt9) cm.display.inputHasSelection = content;
|
1489 |
-
} else if (user) {
|
1490 |
-
cm.display.prevInput = cm.display.input.value = "";
|
1491 |
-
if (ie && !ie_lt9) cm.display.inputHasSelection = null;
|
1492 |
-
}
|
1493 |
-
cm.display.inaccurateSelection = minimal;
|
1494 |
-
}
|
1495 |
-
|
1496 |
-
function focusInput(cm) {
|
1497 |
-
if (cm.options.readOnly != "nocursor" && (!mobile || document.activeElement != cm.display.input))
|
1498 |
-
cm.display.input.focus();
|
1499 |
-
}
|
1500 |
-
|
1501 |
-
function isReadOnly(cm) {
|
1502 |
-
return cm.options.readOnly || cm.doc.cantEdit;
|
1503 |
-
}
|
1504 |
-
|
1505 |
-
// EVENT HANDLERS
|
1506 |
-
|
1507 |
-
function registerEventHandlers(cm) {
|
1508 |
-
var d = cm.display;
|
1509 |
-
on(d.scroller, "mousedown", operation(cm, onMouseDown));
|
1510 |
-
if (ie)
|
1511 |
-
on(d.scroller, "dblclick", operation(cm, function(e) {
|
1512 |
-
if (signalDOMEvent(cm, e)) return;
|
1513 |
-
var pos = posFromMouse(cm, e);
|
1514 |
-
if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return;
|
1515 |
-
e_preventDefault(e);
|
1516 |
-
var word = findWordAt(getLine(cm.doc, pos.line).text, pos);
|
1517 |
-
extendSelection(cm.doc, word.from, word.to);
|
1518 |
-
}));
|
1519 |
-
else
|
1520 |
-
on(d.scroller, "dblclick", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); });
|
1521 |
-
on(d.lineSpace, "selectstart", function(e) {
|
1522 |
-
if (!eventInWidget(d, e)) e_preventDefault(e);
|
1523 |
-
});
|
1524 |
-
// Gecko browsers fire contextmenu *after* opening the menu, at
|
1525 |
-
// which point we can't mess with it anymore. Context menu is
|
1526 |
-
// handled in onMouseDown for Gecko.
|
1527 |
-
if (!captureMiddleClick) on(d.scroller, "contextmenu", function(e) {onContextMenu(cm, e);});
|
1528 |
-
|
1529 |
-
on(d.scroller, "scroll", function() {
|
1530 |
-
if (d.scroller.clientHeight) {
|
1531 |
-
setScrollTop(cm, d.scroller.scrollTop);
|
1532 |
-
setScrollLeft(cm, d.scroller.scrollLeft, true);
|
1533 |
-
signal(cm, "scroll", cm);
|
1534 |
-
}
|
1535 |
-
});
|
1536 |
-
on(d.scrollbarV, "scroll", function() {
|
1537 |
-
if (d.scroller.clientHeight) setScrollTop(cm, d.scrollbarV.scrollTop);
|
1538 |
-
});
|
1539 |
-
on(d.scrollbarH, "scroll", function() {
|
1540 |
-
if (d.scroller.clientHeight) setScrollLeft(cm, d.scrollbarH.scrollLeft);
|
1541 |
-
});
|
1542 |
-
|
1543 |
-
on(d.scroller, "mousewheel", function(e){onScrollWheel(cm, e);});
|
1544 |
-
on(d.scroller, "DOMMouseScroll", function(e){onScrollWheel(cm, e);});
|
1545 |
-
|
1546 |
-
function reFocus() { if (cm.state.focused) setTimeout(bind(focusInput, cm), 0); }
|
1547 |
-
on(d.scrollbarH, "mousedown", reFocus);
|
1548 |
-
on(d.scrollbarV, "mousedown", reFocus);
|
1549 |
-
// Prevent wrapper from ever scrolling
|
1550 |
-
on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });
|
1551 |
-
|
1552 |
-
var resizeTimer;
|
1553 |
-
function onResize() {
|
1554 |
-
if (resizeTimer == null) resizeTimer = setTimeout(function() {
|
1555 |
-
resizeTimer = null;
|
1556 |
-
// Might be a text scaling operation, clear size caches.
|
1557 |
-
d.cachedCharWidth = d.cachedTextHeight = knownScrollbarWidth = null;
|
1558 |
-
clearCaches(cm);
|
1559 |
-
runInOp(cm, bind(regChange, cm));
|
1560 |
-
}, 100);
|
1561 |
-
}
|
1562 |
-
on(window, "resize", onResize);
|
1563 |
-
// Above handler holds on to the editor and its data structures.
|
1564 |
-
// Here we poll to unregister it when the editor is no longer in
|
1565 |
-
// the document, so that it can be garbage-collected.
|
1566 |
-
function unregister() {
|
1567 |
-
for (var p = d.wrapper.parentNode; p && p != document.body; p = p.parentNode) {}
|
1568 |
-
if (p) setTimeout(unregister, 5000);
|
1569 |
-
else off(window, "resize", onResize);
|
1570 |
-
}
|
1571 |
-
setTimeout(unregister, 5000);
|
1572 |
-
|
1573 |
-
on(d.input, "keyup", operation(cm, function(e) {
|
1574 |
-
if (signalDOMEvent(cm, e) || cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return;
|
1575 |
-
if (e.keyCode == 16) cm.doc.sel.shift = false;
|
1576 |
-
}));
|
1577 |
-
on(d.input, "input", bind(fastPoll, cm));
|
1578 |
-
on(d.input, "keydown", operation(cm, onKeyDown));
|
1579 |
-
on(d.input, "keypress", operation(cm, onKeyPress));
|
1580 |
-
on(d.input, "focus", bind(onFocus, cm));
|
1581 |
-
on(d.input, "blur", bind(onBlur, cm));
|
1582 |
-
|
1583 |
-
function drag_(e) {
|
1584 |
-
if (signalDOMEvent(cm, e) || cm.options.onDragEvent && cm.options.onDragEvent(cm, addStop(e))) return;
|
1585 |
-
e_stop(e);
|
1586 |
-
}
|
1587 |
-
if (cm.options.dragDrop) {
|
1588 |
-
on(d.scroller, "dragstart", function(e){onDragStart(cm, e);});
|
1589 |
-
on(d.scroller, "dragenter", drag_);
|
1590 |
-
on(d.scroller, "dragover", drag_);
|
1591 |
-
on(d.scroller, "drop", operation(cm, onDrop));
|
1592 |
-
}
|
1593 |
-
on(d.scroller, "paste", function(e){
|
1594 |
-
if (eventInWidget(d, e)) return;
|
1595 |
-
focusInput(cm);
|
1596 |
-
fastPoll(cm);
|
1597 |
-
});
|
1598 |
-
on(d.input, "paste", function() {
|
1599 |
-
cm.state.pasteIncoming = true;
|
1600 |
-
fastPoll(cm);
|
1601 |
-
});
|
1602 |
-
|
1603 |
-
function prepareCopy() {
|
1604 |
-
if (d.inaccurateSelection) {
|
1605 |
-
d.prevInput = "";
|
1606 |
-
d.inaccurateSelection = false;
|
1607 |
-
d.input.value = cm.getSelection();
|
1608 |
-
selectInput(d.input);
|
1609 |
-
}
|
1610 |
-
}
|
1611 |
-
on(d.input, "cut", prepareCopy);
|
1612 |
-
on(d.input, "copy", prepareCopy);
|
1613 |
-
|
1614 |
-
// Needed to handle Tab key in KHTML
|
1615 |
-
if (khtml) on(d.sizer, "mouseup", function() {
|
1616 |
-
if (document.activeElement == d.input) d.input.blur();
|
1617 |
-
focusInput(cm);
|
1618 |
-
});
|
1619 |
-
}
|
1620 |
-
|
1621 |
-
function eventInWidget(display, e) {
|
1622 |
-
for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {
|
1623 |
-
if (!n || n.ignoreEvents || n.parentNode == display.sizer && n != display.mover) return true;
|
1624 |
-
}
|
1625 |
-
}
|
1626 |
-
|
1627 |
-
function posFromMouse(cm, e, liberal) {
|
1628 |
-
var display = cm.display;
|
1629 |
-
if (!liberal) {
|
1630 |
-
var target = e_target(e);
|
1631 |
-
if (target == display.scrollbarH || target == display.scrollbarH.firstChild ||
|
1632 |
-
target == display.scrollbarV || target == display.scrollbarV.firstChild ||
|
1633 |
-
target == display.scrollbarFiller || target == display.gutterFiller) return null;
|
1634 |
-
}
|
1635 |
-
var x, y, space = getRect(display.lineSpace);
|
1636 |
-
// Fails unpredictably on IE[67] when mouse is dragged around quickly.
|
1637 |
-
try { x = e.clientX; y = e.clientY; } catch (e) { return null; }
|
1638 |
-
return coordsChar(cm, x - space.left, y - space.top);
|
1639 |
-
}
|
1640 |
-
|
1641 |
-
var lastClick, lastDoubleClick;
|
1642 |
-
function onMouseDown(e) {
|
1643 |
-
if (signalDOMEvent(this, e)) return;
|
1644 |
-
var cm = this, display = cm.display, doc = cm.doc, sel = doc.sel;
|
1645 |
-
sel.shift = e.shiftKey;
|
1646 |
-
|
1647 |
-
if (eventInWidget(display, e)) {
|
1648 |
-
if (!webkit) {
|
1649 |
-
display.scroller.draggable = false;
|
1650 |
-
setTimeout(function(){display.scroller.draggable = true;}, 100);
|
1651 |
-
}
|
1652 |
-
return;
|
1653 |
-
}
|
1654 |
-
if (clickInGutter(cm, e)) return;
|
1655 |
-
var start = posFromMouse(cm, e);
|
1656 |
-
|
1657 |
-
switch (e_button(e)) {
|
1658 |
-
case 3:
|
1659 |
-
if (captureMiddleClick) onContextMenu.call(cm, cm, e);
|
1660 |
-
return;
|
1661 |
-
case 2:
|
1662 |
-
if (start) extendSelection(cm.doc, start);
|
1663 |
-
setTimeout(bind(focusInput, cm), 20);
|
1664 |
-
e_preventDefault(e);
|
1665 |
-
return;
|
1666 |
-
}
|
1667 |
-
// For button 1, if it was clicked inside the editor
|
1668 |
-
// (posFromMouse returning non-null), we have to adjust the
|
1669 |
-
// selection.
|
1670 |
-
if (!start) {if (e_target(e) == display.scroller) e_preventDefault(e); return;}
|
1671 |
-
|
1672 |
-
if (!cm.state.focused) onFocus(cm);
|
1673 |
-
|
1674 |
-
var now = +new Date, type = "single";
|
1675 |
-
if (lastDoubleClick && lastDoubleClick.time > now - 400 && posEq(lastDoubleClick.pos, start)) {
|
1676 |
-
type = "triple";
|
1677 |
-
e_preventDefault(e);
|
1678 |
-
setTimeout(bind(focusInput, cm), 20);
|
1679 |
-
selectLine(cm, start.line);
|
1680 |
-
} else if (lastClick && lastClick.time > now - 400 && posEq(lastClick.pos, start)) {
|
1681 |
-
type = "double";
|
1682 |
-
lastDoubleClick = {time: now, pos: start};
|
1683 |
-
e_preventDefault(e);
|
1684 |
-
var word = findWordAt(getLine(doc, start.line).text, start);
|
1685 |
-
extendSelection(cm.doc, word.from, word.to);
|
1686 |
-
} else { lastClick = {time: now, pos: start}; }
|
1687 |
-
|
1688 |
-
var last = start;
|
1689 |
-
if (cm.options.dragDrop && dragAndDrop && !isReadOnly(cm) && !posEq(sel.from, sel.to) &&
|
1690 |
-
!posLess(start, sel.from) && !posLess(sel.to, start) && type == "single") {
|
1691 |
-
var dragEnd = operation(cm, function(e2) {
|
1692 |
-
if (webkit) display.scroller.draggable = false;
|
1693 |
-
cm.state.draggingText = false;
|
1694 |
-
off(document, "mouseup", dragEnd);
|
1695 |
-
off(display.scroller, "drop", dragEnd);
|
1696 |
-
if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) {
|
1697 |
-
e_preventDefault(e2);
|
1698 |
-
extendSelection(cm.doc, start);
|
1699 |
-
focusInput(cm);
|
1700 |
-
}
|
1701 |
-
});
|
1702 |
-
// Let the drag handler handle this.
|
1703 |
-
if (webkit) display.scroller.draggable = true;
|
1704 |
-
cm.state.draggingText = dragEnd;
|
1705 |
-
// IE's approach to draggable
|
1706 |
-
if (display.scroller.dragDrop) display.scroller.dragDrop();
|
1707 |
-
on(document, "mouseup", dragEnd);
|
1708 |
-
on(display.scroller, "drop", dragEnd);
|
1709 |
-
return;
|
1710 |
-
}
|
1711 |
-
e_preventDefault(e);
|
1712 |
-
if (type == "single") extendSelection(cm.doc, clipPos(doc, start));
|
1713 |
-
|
1714 |
-
var startstart = sel.from, startend = sel.to, lastPos = start;
|
1715 |
-
|
1716 |
-
function doSelect(cur) {
|
1717 |
-
if (posEq(lastPos, cur)) return;
|
1718 |
-
lastPos = cur;
|
1719 |
-
|
1720 |
-
if (type == "single") {
|
1721 |
-
extendSelection(cm.doc, clipPos(doc, start), cur);
|
1722 |
-
return;
|
1723 |
-
}
|
1724 |
-
|
1725 |
-
startstart = clipPos(doc, startstart);
|
1726 |
-
startend = clipPos(doc, startend);
|
1727 |
-
if (type == "double") {
|
1728 |
-
var word = findWordAt(getLine(doc, cur.line).text, cur);
|
1729 |
-
if (posLess(cur, startstart)) extendSelection(cm.doc, word.from, startend);
|
1730 |
-
else extendSelection(cm.doc, startstart, word.to);
|
1731 |
-
} else if (type == "triple") {
|
1732 |
-
if (posLess(cur, startstart)) extendSelection(cm.doc, startend, clipPos(doc, Pos(cur.line, 0)));
|
1733 |
-
else extendSelection(cm.doc, startstart, clipPos(doc, Pos(cur.line + 1, 0)));
|
1734 |
-
}
|
1735 |
-
}
|
1736 |
-
|
1737 |
-
var editorSize = getRect(display.wrapper);
|
1738 |
-
// Used to ensure timeout re-tries don't fire when another extend
|
1739 |
-
// happened in the meantime (clearTimeout isn't reliable -- at
|
1740 |
-
// least on Chrome, the timeouts still happen even when cleared,
|
1741 |
-
// if the clear happens after their scheduled firing time).
|
1742 |
-
var counter = 0;
|
1743 |
-
|
1744 |
-
function extend(e) {
|
1745 |
-
var curCount = ++counter;
|
1746 |
-
var cur = posFromMouse(cm, e, true);
|
1747 |
-
if (!cur) return;
|
1748 |
-
if (!posEq(cur, last)) {
|
1749 |
-
if (!cm.state.focused) onFocus(cm);
|
1750 |
-
last = cur;
|
1751 |
-
doSelect(cur);
|
1752 |
-
var visible = visibleLines(display, doc);
|
1753 |
-
if (cur.line >= visible.to || cur.line < visible.from)
|
1754 |
-
setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150);
|
1755 |
-
} else {
|
1756 |
-
var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;
|
1757 |
-
if (outside) setTimeout(operation(cm, function() {
|
1758 |
-
if (counter != curCount) return;
|
1759 |
-
display.scroller.scrollTop += outside;
|
1760 |
-
extend(e);
|
1761 |
-
}), 50);
|
1762 |
-
}
|
1763 |
-
}
|
1764 |
-
|
1765 |
-
function done(e) {
|
1766 |
-
counter = Infinity;
|
1767 |
-
e_preventDefault(e);
|
1768 |
-
focusInput(cm);
|
1769 |
-
off(document, "mousemove", move);
|
1770 |
-
off(document, "mouseup", up);
|
1771 |
-
}
|
1772 |
-
|
1773 |
-
var move = operation(cm, function(e) {
|
1774 |
-
if (!ie && !e_button(e)) done(e);
|
1775 |
-
else extend(e);
|
1776 |
-
});
|
1777 |
-
var up = operation(cm, done);
|
1778 |
-
on(document, "mousemove", move);
|
1779 |
-
on(document, "mouseup", up);
|
1780 |
-
}
|
1781 |
-
|
1782 |
-
function clickInGutter(cm, e) {
|
1783 |
-
var display = cm.display;
|
1784 |
-
try { var mX = e.clientX, mY = e.clientY; }
|
1785 |
-
catch(e) { return false; }
|
1786 |
-
|
1787 |
-
if (mX >= Math.floor(getRect(display.gutters).right)) return false;
|
1788 |
-
e_preventDefault(e);
|
1789 |
-
if (!hasHandler(cm, "gutterClick")) return true;
|
1790 |
-
|
1791 |
-
var lineBox = getRect(display.lineDiv);
|
1792 |
-
if (mY > lineBox.bottom) return true;
|
1793 |
-
mY -= lineBox.top - display.viewOffset;
|
1794 |
-
|
1795 |
-
for (var i = 0; i < cm.options.gutters.length; ++i) {
|
1796 |
-
var g = display.gutters.childNodes[i];
|
1797 |
-
if (g && getRect(g).right >= mX) {
|
1798 |
-
var line = lineAtHeight(cm.doc, mY);
|
1799 |
-
var gutter = cm.options.gutters[i];
|
1800 |
-
signalLater(cm, "gutterClick", cm, line, gutter, e);
|
1801 |
-
break;
|
1802 |
-
}
|
1803 |
-
}
|
1804 |
-
return true;
|
1805 |
-
}
|
1806 |
-
|
1807 |
-
// Kludge to work around strange IE behavior where it'll sometimes
|
1808 |
-
// re-fire a series of drag-related events right after the drop (#1551)
|
1809 |
-
var lastDrop = 0;
|
1810 |
-
|
1811 |
-
function onDrop(e) {
|
1812 |
-
var cm = this;
|
1813 |
-
if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e) || (cm.options.onDragEvent && cm.options.onDragEvent(cm, addStop(e))))
|
1814 |
-
return;
|
1815 |
-
e_preventDefault(e);
|
1816 |
-
if (ie) lastDrop = +new Date;
|
1817 |
-
var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;
|
1818 |
-
if (!pos || isReadOnly(cm)) return;
|
1819 |
-
if (files && files.length && window.FileReader && window.File) {
|
1820 |
-
var n = files.length, text = Array(n), read = 0;
|
1821 |
-
var loadFile = function(file, i) {
|
1822 |
-
var reader = new FileReader;
|
1823 |
-
reader.onload = function() {
|
1824 |
-
text[i] = reader.result;
|
1825 |
-
if (++read == n) {
|
1826 |
-
pos = clipPos(cm.doc, pos);
|
1827 |
-
makeChange(cm.doc, {from: pos, to: pos, text: splitLines(text.join("\n")), origin: "paste"}, "around");
|
1828 |
-
}
|
1829 |
-
};
|
1830 |
-
reader.readAsText(file);
|
1831 |
-
};
|
1832 |
-
for (var i = 0; i < n; ++i) loadFile(files[i], i);
|
1833 |
-
} else {
|
1834 |
-
// Don't do a replace if the drop happened inside of the selected text.
|
1835 |
-
if (cm.state.draggingText && !(posLess(pos, cm.doc.sel.from) || posLess(cm.doc.sel.to, pos))) {
|
1836 |
-
cm.state.draggingText(e);
|
1837 |
-
// Ensure the editor is re-focused
|
1838 |
-
setTimeout(bind(focusInput, cm), 20);
|
1839 |
-
return;
|
1840 |
-
}
|
1841 |
-
try {
|
1842 |
-
var text = e.dataTransfer.getData("Text");
|
1843 |
-
if (text) {
|
1844 |
-
var curFrom = cm.doc.sel.from, curTo = cm.doc.sel.to;
|
1845 |
-
setSelection(cm.doc, pos, pos);
|
1846 |
-
if (cm.state.draggingText) replaceRange(cm.doc, "", curFrom, curTo, "paste");
|
1847 |
-
cm.replaceSelection(text, null, "paste");
|
1848 |
-
focusInput(cm);
|
1849 |
-
onFocus(cm);
|
1850 |
-
}
|
1851 |
-
}
|
1852 |
-
catch(e){}
|
1853 |
-
}
|
1854 |
-
}
|
1855 |
-
|
1856 |
-
function onDragStart(cm, e) {
|
1857 |
-
if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; }
|
1858 |
-
if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return;
|
1859 |
-
|
1860 |
-
var txt = cm.getSelection();
|
1861 |
-
e.dataTransfer.setData("Text", txt);
|
1862 |
-
|
1863 |
-
// Use dummy image instead of default browsers image.
|
1864 |
-
// Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.
|
1865 |
-
if (e.dataTransfer.setDragImage && !safari) {
|
1866 |
-
var img = elt("img", null, null, "position: fixed; left: 0; top: 0;");
|
1867 |
-
if (opera) {
|
1868 |
-
img.width = img.height = 1;
|
1869 |
-
cm.display.wrapper.appendChild(img);
|
1870 |
-
// Force a relayout, or Opera won't use our image for some obscure reason
|
1871 |
-
img._top = img.offsetTop;
|
1872 |
-
}
|
1873 |
-
e.dataTransfer.setDragImage(img, 0, 0);
|
1874 |
-
if (opera) img.parentNode.removeChild(img);
|
1875 |
-
}
|
1876 |
-
}
|
1877 |
-
|
1878 |
-
function setScrollTop(cm, val) {
|
1879 |
-
if (Math.abs(cm.doc.scrollTop - val) < 2) return;
|
1880 |
-
cm.doc.scrollTop = val;
|
1881 |
-
if (!gecko) updateDisplay(cm, [], val);
|
1882 |
-
if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val;
|
1883 |
-
if (cm.display.scrollbarV.scrollTop != val) cm.display.scrollbarV.scrollTop = val;
|
1884 |
-
if (gecko) updateDisplay(cm, []);
|
1885 |
-
startWorker(cm, 100);
|
1886 |
-
}
|
1887 |
-
function setScrollLeft(cm, val, isScroller) {
|
1888 |
-
if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return;
|
1889 |
-
val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth);
|
1890 |
-
cm.doc.scrollLeft = val;
|
1891 |
-
alignHorizontally(cm);
|
1892 |
-
if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val;
|
1893 |
-
if (cm.display.scrollbarH.scrollLeft != val) cm.display.scrollbarH.scrollLeft = val;
|
1894 |
-
}
|
1895 |
-
|
1896 |
-
// Since the delta values reported on mouse wheel events are
|
1897 |
-
// unstandardized between browsers and even browser versions, and
|
1898 |
-
// generally horribly unpredictable, this code starts by measuring
|
1899 |
-
// the scroll effect that the first few mouse wheel events have,
|
1900 |
-
// and, from that, detects the way it can convert deltas to pixel
|
1901 |
-
// offsets afterwards.
|
1902 |
-
//
|
1903 |
-
// The reason we want to know the amount a wheel event will scroll
|
1904 |
-
// is that it gives us a chance to update the display before the
|
1905 |
-
// actual scrolling happens, reducing flickering.
|
1906 |
-
|
1907 |
-
var wheelSamples = 0, wheelPixelsPerUnit = null;
|
1908 |
-
// Fill in a browser-detected starting value on browsers where we
|
1909 |
-
// know one. These don't have to be accurate -- the result of them
|
1910 |
-
// being wrong would just be a slight flicker on the first wheel
|
1911 |
-
// scroll (if it is large enough).
|
1912 |
-
if (ie) wheelPixelsPerUnit = -.53;
|
1913 |
-
else if (gecko) wheelPixelsPerUnit = 15;
|
1914 |
-
else if (chrome) wheelPixelsPerUnit = -.7;
|
1915 |
-
else if (safari) wheelPixelsPerUnit = -1/3;
|
1916 |
-
|
1917 |
-
function onScrollWheel(cm, e) {
|
1918 |
-
var dx = e.wheelDeltaX, dy = e.wheelDeltaY;
|
1919 |
-
if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail;
|
1920 |
-
if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail;
|
1921 |
-
else if (dy == null) dy = e.wheelDelta;
|
1922 |
-
|
1923 |
-
var display = cm.display, scroll = display.scroller;
|
1924 |
-
// Quit if there's nothing to scroll here
|
1925 |
-
if (!(dx && scroll.scrollWidth > scroll.clientWidth ||
|
1926 |
-
dy && scroll.scrollHeight > scroll.clientHeight)) return;
|
1927 |
-
|
1928 |
-
// Webkit browsers on OS X abort momentum scrolls when the target
|
1929 |
-
// of the scroll event is removed from the scrollable element.
|
1930 |
-
// This hack (see related code in patchDisplay) makes sure the
|
1931 |
-
// element is kept around.
|
1932 |
-
if (dy && mac && webkit) {
|
1933 |
-
for (var cur = e.target; cur != scroll; cur = cur.parentNode) {
|
1934 |
-
if (cur.lineObj) {
|
1935 |
-
cm.display.currentWheelTarget = cur;
|
1936 |
-
break;
|
1937 |
-
}
|
1938 |
-
}
|
1939 |
-
}
|
1940 |
-
|
1941 |
-
// On some browsers, horizontal scrolling will cause redraws to
|
1942 |
-
// happen before the gutter has been realigned, causing it to
|
1943 |
-
// wriggle around in a most unseemly way. When we have an
|
1944 |
-
// estimated pixels/delta value, we just handle horizontal
|
1945 |
-
// scrolling entirely here. It'll be slightly off from native, but
|
1946 |
-
// better than glitching out.
|
1947 |
-
if (dx && !gecko && !opera && wheelPixelsPerUnit != null) {
|
1948 |
-
if (dy)
|
1949 |
-
setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight)));
|
1950 |
-
setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth)));
|
1951 |
-
e_preventDefault(e);
|
1952 |
-
display.wheelStartX = null; // Abort measurement, if in progress
|
1953 |
-
return;
|
1954 |
-
}
|
1955 |
-
|
1956 |
-
if (dy && wheelPixelsPerUnit != null) {
|
1957 |
-
var pixels = dy * wheelPixelsPerUnit;
|
1958 |
-
var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;
|
1959 |
-
if (pixels < 0) top = Math.max(0, top + pixels - 50);
|
1960 |
-
else bot = Math.min(cm.doc.height, bot + pixels + 50);
|
1961 |
-
updateDisplay(cm, [], {top: top, bottom: bot});
|
1962 |
-
}
|
1963 |
-
|
1964 |
-
if (wheelSamples < 20) {
|
1965 |
-
if (display.wheelStartX == null) {
|
1966 |
-
display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;
|
1967 |
-
display.wheelDX = dx; display.wheelDY = dy;
|
1968 |
-
setTimeout(function() {
|
1969 |
-
if (display.wheelStartX == null) return;
|
1970 |
-
var movedX = scroll.scrollLeft - display.wheelStartX;
|
1971 |
-
var movedY = scroll.scrollTop - display.wheelStartY;
|
1972 |
-
var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||
|
1973 |
-
(movedX && display.wheelDX && movedX / display.wheelDX);
|
1974 |
-
display.wheelStartX = display.wheelStartY = null;
|
1975 |
-
if (!sample) return;
|
1976 |
-
wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);
|
1977 |
-
++wheelSamples;
|
1978 |
-
}, 200);
|
1979 |
-
} else {
|
1980 |
-
display.wheelDX += dx; display.wheelDY += dy;
|
1981 |
-
}
|
1982 |
-
}
|
1983 |
-
}
|
1984 |
-
|
1985 |
-
function doHandleBinding(cm, bound, dropShift) {
|
1986 |
-
if (typeof bound == "string") {
|
1987 |
-
bound = commands[bound];
|
1988 |
-
if (!bound) return false;
|
1989 |
-
}
|
1990 |
-
// Ensure previous input has been read, so that the handler sees a
|
1991 |
-
// consistent view of the document
|
1992 |
-
if (cm.display.pollingFast && readInput(cm)) cm.display.pollingFast = false;
|
1993 |
-
var doc = cm.doc, prevShift = doc.sel.shift, done = false;
|
1994 |
-
try {
|
1995 |
-
if (isReadOnly(cm)) cm.state.suppressEdits = true;
|
1996 |
-
if (dropShift) doc.sel.shift = false;
|
1997 |
-
done = bound(cm) != Pass;
|
1998 |
-
} finally {
|
1999 |
-
doc.sel.shift = prevShift;
|
2000 |
-
cm.state.suppressEdits = false;
|
2001 |
-
}
|
2002 |
-
return done;
|
2003 |
-
}
|
2004 |
-
|
2005 |
-
function allKeyMaps(cm) {
|
2006 |
-
var maps = cm.state.keyMaps.slice(0);
|
2007 |
-
if (cm.options.extraKeys) maps.push(cm.options.extraKeys);
|
2008 |
-
maps.push(cm.options.keyMap);
|
2009 |
-
return maps;
|
2010 |
-
}
|
2011 |
-
|
2012 |
-
var maybeTransition;
|
2013 |
-
function handleKeyBinding(cm, e) {
|
2014 |
-
// Handle auto keymap transitions
|
2015 |
-
var startMap = getKeyMap(cm.options.keyMap), next = startMap.auto;
|
2016 |
-
clearTimeout(maybeTransition);
|
2017 |
-
if (next && !isModifierKey(e)) maybeTransition = setTimeout(function() {
|
2018 |
-
if (getKeyMap(cm.options.keyMap) == startMap) {
|
2019 |
-
cm.options.keyMap = (next.call ? next.call(null, cm) : next);
|
2020 |
-
keyMapChanged(cm);
|
2021 |
-
}
|
2022 |
-
}, 50);
|
2023 |
-
|
2024 |
-
var name = keyName(e, true), handled = false;
|
2025 |
-
if (!name) return false;
|
2026 |
-
var keymaps = allKeyMaps(cm);
|
2027 |
-
|
2028 |
-
if (e.shiftKey) {
|
2029 |
-
// First try to resolve full name (including 'Shift-'). Failing
|
2030 |
-
// that, see if there is a cursor-motion command (starting with
|
2031 |
-
// 'go') bound to the keyname without 'Shift-'.
|
2032 |
-
handled = lookupKey("Shift-" + name, keymaps, function(b) {return doHandleBinding(cm, b, true);})
|
2033 |
-
|| lookupKey(name, keymaps, function(b) {
|
2034 |
-
if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion)
|
2035 |
-
return doHandleBinding(cm, b);
|
2036 |
-
});
|
2037 |
-
} else {
|
2038 |
-
handled = lookupKey(name, keymaps, function(b) { return doHandleBinding(cm, b); });
|
2039 |
-
}
|
2040 |
-
|
2041 |
-
if (handled) {
|
2042 |
-
e_preventDefault(e);
|
2043 |
-
restartBlink(cm);
|
2044 |
-
if (ie_lt9) { e.oldKeyCode = e.keyCode; e.keyCode = 0; }
|
2045 |
-
signalLater(cm, "keyHandled", cm, name, e);
|
2046 |
-
}
|
2047 |
-
return handled;
|
2048 |
-
}
|
2049 |
-
|
2050 |
-
function handleCharBinding(cm, e, ch) {
|
2051 |
-
var handled = lookupKey("'" + ch + "'", allKeyMaps(cm),
|
2052 |
-
function(b) { return doHandleBinding(cm, b, true); });
|
2053 |
-
if (handled) {
|
2054 |
-
e_preventDefault(e);
|
2055 |
-
restartBlink(cm);
|
2056 |
-
signalLater(cm, "keyHandled", cm, "'" + ch + "'", e);
|
2057 |
-
}
|
2058 |
-
return handled;
|
2059 |
-
}
|
2060 |
-
|
2061 |
-
var lastStoppedKey = null;
|
2062 |
-
function onKeyDown(e) {
|
2063 |
-
var cm = this;
|
2064 |
-
if (!cm.state.focused) onFocus(cm);
|
2065 |
-
if (ie && e.keyCode == 27) { e.returnValue = false; }
|
2066 |
-
if (signalDOMEvent(cm, e) || cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return;
|
2067 |
-
var code = e.keyCode;
|
2068 |
-
// IE does strange things with escape.
|
2069 |
-
cm.doc.sel.shift = code == 16 || e.shiftKey;
|
2070 |
-
// First give onKeyEvent option a chance to handle this.
|
2071 |
-
var handled = handleKeyBinding(cm, e);
|
2072 |
-
if (opera) {
|
2073 |
-
lastStoppedKey = handled ? code : null;
|
2074 |
-
// Opera has no cut event... we try to at least catch the key combo
|
2075 |
-
if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))
|
2076 |
-
cm.replaceSelection("");
|
2077 |
-
}
|
2078 |
-
}
|
2079 |
-
|
2080 |
-
function onKeyPress(e) {
|
2081 |
-
var cm = this;
|
2082 |
-
if (signalDOMEvent(cm, e) || cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return;
|
2083 |
-
var keyCode = e.keyCode, charCode = e.charCode;
|
2084 |
-
if (opera && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;}
|
2085 |
-
if (((opera && (!e.which || e.which < 10)) || khtml) && handleKeyBinding(cm, e)) return;
|
2086 |
-
var ch = String.fromCharCode(charCode == null ? keyCode : charCode);
|
2087 |
-
if (this.options.electricChars && this.doc.mode.electricChars &&
|
2088 |
-
this.options.smartIndent && !isReadOnly(this) &&
|
2089 |
-
this.doc.mode.electricChars.indexOf(ch) > -1)
|
2090 |
-
setTimeout(operation(cm, function() {indentLine(cm, cm.doc.sel.to.line, "smart");}), 75);
|
2091 |
-
if (handleCharBinding(cm, e, ch)) return;
|
2092 |
-
if (ie && !ie_lt9) cm.display.inputHasSelection = null;
|
2093 |
-
fastPoll(cm);
|
2094 |
-
}
|
2095 |
-
|
2096 |
-
function onFocus(cm) {
|
2097 |
-
if (cm.options.readOnly == "nocursor") return;
|
2098 |
-
if (!cm.state.focused) {
|
2099 |
-
signal(cm, "focus", cm);
|
2100 |
-
cm.state.focused = true;
|
2101 |
-
if (cm.display.wrapper.className.search(/\bCodeMirror-focused\b/) == -1)
|
2102 |
-
cm.display.wrapper.className += " CodeMirror-focused";
|
2103 |
-
resetInput(cm, true);
|
2104 |
-
}
|
2105 |
-
slowPoll(cm);
|
2106 |
-
restartBlink(cm);
|
2107 |
-
}
|
2108 |
-
function onBlur(cm) {
|
2109 |
-
if (cm.state.focused) {
|
2110 |
-
signal(cm, "blur", cm);
|
2111 |
-
cm.state.focused = false;
|
2112 |
-
cm.display.wrapper.className = cm.display.wrapper.className.replace(" CodeMirror-focused", "");
|
2113 |
-
}
|
2114 |
-
clearInterval(cm.display.blinker);
|
2115 |
-
setTimeout(function() {if (!cm.state.focused) cm.doc.sel.shift = false;}, 150);
|
2116 |
-
}
|
2117 |
-
|
2118 |
-
var detectingSelectAll;
|
2119 |
-
function onContextMenu(cm, e) {
|
2120 |
-
if (signalDOMEvent(cm, e, "contextmenu")) return;
|
2121 |
-
var display = cm.display, sel = cm.doc.sel;
|
2122 |
-
if (eventInWidget(display, e)) return;
|
2123 |
-
|
2124 |
-
var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;
|
2125 |
-
if (!pos || opera) return; // Opera is difficult.
|
2126 |
-
if (posEq(sel.from, sel.to) || posLess(pos, sel.from) || !posLess(pos, sel.to))
|
2127 |
-
operation(cm, setSelection)(cm.doc, pos, pos);
|
2128 |
-
|
2129 |
-
var oldCSS = display.input.style.cssText;
|
2130 |
-
display.inputDiv.style.position = "absolute";
|
2131 |
-
display.input.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (e.clientY - 5) +
|
2132 |
-
"px; left: " + (e.clientX - 5) + "px; z-index: 1000; background: white; outline: none;" +
|
2133 |
-
"border-width: 0; outline: none; overflow: hidden; opacity: .05; -ms-opacity: .05; filter: alpha(opacity=5);";
|
2134 |
-
focusInput(cm);
|
2135 |
-
resetInput(cm, true);
|
2136 |
-
// Adds "Select all" to context menu in FF
|
2137 |
-
if (posEq(sel.from, sel.to)) display.input.value = display.prevInput = " ";
|
2138 |
-
|
2139 |
-
function prepareSelectAllHack() {
|
2140 |
-
if (display.input.selectionStart != null) {
|
2141 |
-
var extval = display.input.value = " " + (posEq(sel.from, sel.to) ? "" : display.input.value);
|
2142 |
-
display.prevInput = " ";
|
2143 |
-
display.input.selectionStart = 1; display.input.selectionEnd = extval.length;
|
2144 |
-
}
|
2145 |
-
}
|
2146 |
-
function rehide() {
|
2147 |
-
display.inputDiv.style.position = "relative";
|
2148 |
-
display.input.style.cssText = oldCSS;
|
2149 |
-
if (ie_lt9) display.scrollbarV.scrollTop = display.scroller.scrollTop = scrollPos;
|
2150 |
-
slowPoll(cm);
|
2151 |
-
|
2152 |
-
// Try to detect the user choosing select-all
|
2153 |
-
if (display.input.selectionStart != null) {
|
2154 |
-
if (!ie || ie_lt9) prepareSelectAllHack();
|
2155 |
-
clearTimeout(detectingSelectAll);
|
2156 |
-
var i = 0, poll = function(){
|
2157 |
-
if (display.prevInput == " " && display.input.selectionStart == 0)
|
2158 |
-
operation(cm, commands.selectAll)(cm);
|
2159 |
-
else if (i++ < 10) detectingSelectAll = setTimeout(poll, 500);
|
2160 |
-
else resetInput(cm);
|
2161 |
-
};
|
2162 |
-
detectingSelectAll = setTimeout(poll, 200);
|
2163 |
-
}
|
2164 |
-
}
|
2165 |
-
|
2166 |
-
if (ie && !ie_lt9) prepareSelectAllHack();
|
2167 |
-
if (captureMiddleClick) {
|
2168 |
-
e_stop(e);
|
2169 |
-
var mouseup = function() {
|
2170 |
-
off(window, "mouseup", mouseup);
|
2171 |
-
setTimeout(rehide, 20);
|
2172 |
-
};
|
2173 |
-
on(window, "mouseup", mouseup);
|
2174 |
-
} else {
|
2175 |
-
setTimeout(rehide, 50);
|
2176 |
-
}
|
2177 |
-
}
|
2178 |
-
|
2179 |
-
// UPDATING
|
2180 |
-
|
2181 |
-
var changeEnd = CodeMirror.changeEnd = function(change) {
|
2182 |
-
if (!change.text) return change.to;
|
2183 |
-
return Pos(change.from.line + change.text.length - 1,
|
2184 |
-
lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0));
|
2185 |
-
};
|
2186 |
-
|
2187 |
-
// Make sure a position will be valid after the given change.
|
2188 |
-
function clipPostChange(doc, change, pos) {
|
2189 |
-
if (!posLess(change.from, pos)) return clipPos(doc, pos);
|
2190 |
-
var diff = (change.text.length - 1) - (change.to.line - change.from.line);
|
2191 |
-
if (pos.line > change.to.line + diff) {
|
2192 |
-
var preLine = pos.line - diff, lastLine = doc.first + doc.size - 1;
|
2193 |
-
if (preLine > lastLine) return Pos(lastLine, getLine(doc, lastLine).text.length);
|
2194 |
-
return clipToLen(pos, getLine(doc, preLine).text.length);
|
2195 |
-
}
|
2196 |
-
if (pos.line == change.to.line + diff)
|
2197 |
-
return clipToLen(pos, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0) +
|
2198 |
-
getLine(doc, change.to.line).text.length - change.to.ch);
|
2199 |
-
var inside = pos.line - change.from.line;
|
2200 |
-
return clipToLen(pos, change.text[inside].length + (inside ? 0 : change.from.ch));
|
2201 |
-
}
|
2202 |
-
|
2203 |
-
// Hint can be null|"end"|"start"|"around"|{anchor,head}
|
2204 |
-
function computeSelAfterChange(doc, change, hint) {
|
2205 |
-
if (hint && typeof hint == "object") // Assumed to be {anchor, head} object
|
2206 |
-
return {anchor: clipPostChange(doc, change, hint.anchor),
|
2207 |
-
head: clipPostChange(doc, change, hint.head)};
|
2208 |
-
|
2209 |
-
if (hint == "start") return {anchor: change.from, head: change.from};
|
2210 |
-
|
2211 |
-
var end = changeEnd(change);
|
2212 |
-
if (hint == "around") return {anchor: change.from, head: end};
|
2213 |
-
if (hint == "end") return {anchor: end, head: end};
|
2214 |
-
|
2215 |
-
// hint is null, leave the selection alone as much as possible
|
2216 |
-
var adjustPos = function(pos) {
|
2217 |
-
if (posLess(pos, change.from)) return pos;
|
2218 |
-
if (!posLess(change.to, pos)) return end;
|
2219 |
-
|
2220 |
-
var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;
|
2221 |
-
if (pos.line == change.to.line) ch += end.ch - change.to.ch;
|
2222 |
-
return Pos(line, ch);
|
2223 |
-
};
|
2224 |
-
return {anchor: adjustPos(doc.sel.anchor), head: adjustPos(doc.sel.head)};
|
2225 |
-
}
|
2226 |
-
|
2227 |
-
function filterChange(doc, change, update) {
|
2228 |
-
var obj = {
|
2229 |
-
canceled: false,
|
2230 |
-
from: change.from,
|
2231 |
-
to: change.to,
|
2232 |
-
text: change.text,
|
2233 |
-
origin: change.origin,
|
2234 |
-
cancel: function() { this.canceled = true; }
|
2235 |
-
};
|
2236 |
-
if (update) obj.update = function(from, to, text, origin) {
|
2237 |
-
if (from) this.from = clipPos(doc, from);
|
2238 |
-
if (to) this.to = clipPos(doc, to);
|
2239 |
-
if (text) this.text = text;
|
2240 |
-
if (origin !== undefined) this.origin = origin;
|
2241 |
-
};
|
2242 |
-
signal(doc, "beforeChange", doc, obj);
|
2243 |
-
if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj);
|
2244 |
-
|
2245 |
-
if (obj.canceled) return null;
|
2246 |
-
return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin};
|
2247 |
-
}
|
2248 |
-
|
2249 |
-
// Replace the range from from to to by the strings in replacement.
|
2250 |
-
// change is a {from, to, text [, origin]} object
|
2251 |
-
function makeChange(doc, change, selUpdate, ignoreReadOnly) {
|
2252 |
-
if (doc.cm) {
|
2253 |
-
if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, selUpdate, ignoreReadOnly);
|
2254 |
-
if (doc.cm.state.suppressEdits) return;
|
2255 |
-
}
|
2256 |
-
|
2257 |
-
if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) {
|
2258 |
-
change = filterChange(doc, change, true);
|
2259 |
-
if (!change) return;
|
2260 |
-
}
|
2261 |
-
|
2262 |
-
// Possibly split or suppress the update based on the presence
|
2263 |
-
// of read-only spans in its range.
|
2264 |
-
var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);
|
2265 |
-
if (split) {
|
2266 |
-
for (var i = split.length - 1; i >= 1; --i)
|
2267 |
-
makeChangeNoReadonly(doc, {from: split[i].from, to: split[i].to, text: [""]});
|
2268 |
-
if (split.length)
|
2269 |
-
makeChangeNoReadonly(doc, {from: split[0].from, to: split[0].to, text: change.text}, selUpdate);
|
2270 |
-
} else {
|
2271 |
-
makeChangeNoReadonly(doc, change, selUpdate);
|
2272 |
-
}
|
2273 |
-
}
|
2274 |
-
|
2275 |
-
function makeChangeNoReadonly(doc, change, selUpdate) {
|
2276 |
-
var selAfter = computeSelAfterChange(doc, change, selUpdate);
|
2277 |
-
addToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);
|
2278 |
-
|
2279 |
-
makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));
|
2280 |
-
var rebased = [];
|
2281 |
-
|
2282 |
-
linkedDocs(doc, function(doc, sharedHist) {
|
2283 |
-
if (!sharedHist && indexOf(rebased, doc.history) == -1) {
|
2284 |
-
rebaseHist(doc.history, change);
|
2285 |
-
rebased.push(doc.history);
|
2286 |
-
}
|
2287 |
-
makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));
|
2288 |
-
});
|
2289 |
-
}
|
2290 |
-
|
2291 |
-
function makeChangeFromHistory(doc, type) {
|
2292 |
-
if (doc.cm && doc.cm.state.suppressEdits) return;
|
2293 |
-
|
2294 |
-
var hist = doc.history;
|
2295 |
-
var event = (type == "undo" ? hist.done : hist.undone).pop();
|
2296 |
-
if (!event) return;
|
2297 |
-
|
2298 |
-
var anti = {changes: [], anchorBefore: event.anchorAfter, headBefore: event.headAfter,
|
2299 |
-
anchorAfter: event.anchorBefore, headAfter: event.headBefore,
|
2300 |
-
generation: hist.generation};
|
2301 |
-
(type == "undo" ? hist.undone : hist.done).push(anti);
|
2302 |
-
hist.generation = event.generation || ++hist.maxGeneration;
|
2303 |
-
|
2304 |
-
var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange");
|
2305 |
-
|
2306 |
-
for (var i = event.changes.length - 1; i >= 0; --i) {
|
2307 |
-
var change = event.changes[i];
|
2308 |
-
change.origin = type;
|
2309 |
-
if (filter && !filterChange(doc, change, false)) {
|
2310 |
-
(type == "undo" ? hist.done : hist.undone).length = 0;
|
2311 |
-
return;
|
2312 |
-
}
|
2313 |
-
|
2314 |
-
anti.changes.push(historyChangeFromChange(doc, change));
|
2315 |
-
|
2316 |
-
var after = i ? computeSelAfterChange(doc, change, null)
|
2317 |
-
: {anchor: event.anchorBefore, head: event.headBefore};
|
2318 |
-
makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));
|
2319 |
-
var rebased = [];
|
2320 |
-
|
2321 |
-
linkedDocs(doc, function(doc, sharedHist) {
|
2322 |
-
if (!sharedHist && indexOf(rebased, doc.history) == -1) {
|
2323 |
-
rebaseHist(doc.history, change);
|
2324 |
-
rebased.push(doc.history);
|
2325 |
-
}
|
2326 |
-
makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));
|
2327 |
-
});
|
2328 |
-
}
|
2329 |
-
}
|
2330 |
-
|
2331 |
-
function shiftDoc(doc, distance) {
|
2332 |
-
function shiftPos(pos) {return Pos(pos.line + distance, pos.ch);}
|
2333 |
-
doc.first += distance;
|
2334 |
-
if (doc.cm) regChange(doc.cm, doc.first, doc.first, distance);
|
2335 |
-
doc.sel.head = shiftPos(doc.sel.head); doc.sel.anchor = shiftPos(doc.sel.anchor);
|
2336 |
-
doc.sel.from = shiftPos(doc.sel.from); doc.sel.to = shiftPos(doc.sel.to);
|
2337 |
-
}
|
2338 |
-
|
2339 |
-
function makeChangeSingleDoc(doc, change, selAfter, spans) {
|
2340 |
-
if (doc.cm && !doc.cm.curOp)
|
2341 |
-
return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans);
|
2342 |
-
|
2343 |
-
if (change.to.line < doc.first) {
|
2344 |
-
shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));
|
2345 |
-
return;
|
2346 |
-
}
|
2347 |
-
if (change.from.line > doc.lastLine()) return;
|
2348 |
-
|
2349 |
-
// Clip the change to the size of this doc
|
2350 |
-
if (change.from.line < doc.first) {
|
2351 |
-
var shift = change.text.length - 1 - (doc.first - change.from.line);
|
2352 |
-
shiftDoc(doc, shift);
|
2353 |
-
change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),
|
2354 |
-
text: [lst(change.text)], origin: change.origin};
|
2355 |
-
}
|
2356 |
-
var last = doc.lastLine();
|
2357 |
-
if (change.to.line > last) {
|
2358 |
-
change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),
|
2359 |
-
text: [change.text[0]], origin: change.origin};
|
2360 |
-
}
|
2361 |
-
|
2362 |
-
change.removed = getBetween(doc, change.from, change.to);
|
2363 |
-
|
2364 |
-
if (!selAfter) selAfter = computeSelAfterChange(doc, change, null);
|
2365 |
-
if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans, selAfter);
|
2366 |
-
else updateDoc(doc, change, spans, selAfter);
|
2367 |
-
}
|
2368 |
-
|
2369 |
-
function makeChangeSingleDocInEditor(cm, change, spans, selAfter) {
|
2370 |
-
var doc = cm.doc, display = cm.display, from = change.from, to = change.to;
|
2371 |
-
|
2372 |
-
var recomputeMaxLength = false, checkWidthStart = from.line;
|
2373 |
-
if (!cm.options.lineWrapping) {
|
2374 |
-
checkWidthStart = lineNo(visualLine(doc, getLine(doc, from.line)));
|
2375 |
-
doc.iter(checkWidthStart, to.line + 1, function(line) {
|
2376 |
-
if (line == display.maxLine) {
|
2377 |
-
recomputeMaxLength = true;
|
2378 |
-
return true;
|
2379 |
-
}
|
2380 |
-
});
|
2381 |
-
}
|
2382 |
-
|
2383 |
-
if (!posLess(doc.sel.head, change.from) && !posLess(change.to, doc.sel.head))
|
2384 |
-
cm.curOp.cursorActivity = true;
|
2385 |
-
|
2386 |
-
updateDoc(doc, change, spans, selAfter, estimateHeight(cm));
|
2387 |
-
|
2388 |
-
if (!cm.options.lineWrapping) {
|
2389 |
-
doc.iter(checkWidthStart, from.line + change.text.length, function(line) {
|
2390 |
-
var len = lineLength(doc, line);
|
2391 |
-
if (len > display.maxLineLength) {
|
2392 |
-
display.maxLine = line;
|
2393 |
-
display.maxLineLength = len;
|
2394 |
-
display.maxLineChanged = true;
|
2395 |
-
recomputeMaxLength = false;
|
2396 |
-
}
|
2397 |
-
});
|
2398 |
-
if (recomputeMaxLength) cm.curOp.updateMaxLine = true;
|
2399 |
-
}
|
2400 |
-
|
2401 |
-
// Adjust frontier, schedule worker
|
2402 |
-
doc.frontier = Math.min(doc.frontier, from.line);
|
2403 |
-
startWorker(cm, 400);
|
2404 |
-
|
2405 |
-
var lendiff = change.text.length - (to.line - from.line) - 1;
|
2406 |
-
// Remember that these lines changed, for updating the display
|
2407 |
-
regChange(cm, from.line, to.line + 1, lendiff);
|
2408 |
-
|
2409 |
-
if (hasHandler(cm, "change")) {
|
2410 |
-
var changeObj = {from: from, to: to,
|
2411 |
-
text: change.text,
|
2412 |
-
removed: change.removed,
|
2413 |
-
origin: change.origin};
|
2414 |
-
if (cm.curOp.textChanged) {
|
2415 |
-
for (var cur = cm.curOp.textChanged; cur.next; cur = cur.next) {}
|
2416 |
-
cur.next = changeObj;
|
2417 |
-
} else cm.curOp.textChanged = changeObj;
|
2418 |
-
}
|
2419 |
-
}
|
2420 |
-
|
2421 |
-
function replaceRange(doc, code, from, to, origin) {
|
2422 |
-
if (!to) to = from;
|
2423 |
-
if (posLess(to, from)) { var tmp = to; to = from; from = tmp; }
|
2424 |
-
if (typeof code == "string") code = splitLines(code);
|
2425 |
-
makeChange(doc, {from: from, to: to, text: code, origin: origin}, null);
|
2426 |
-
}
|
2427 |
-
|
2428 |
-
// POSITION OBJECT
|
2429 |
-
|
2430 |
-
function Pos(line, ch) {
|
2431 |
-
if (!(this instanceof Pos)) return new Pos(line, ch);
|
2432 |
-
this.line = line; this.ch = ch;
|
2433 |
-
}
|
2434 |
-
CodeMirror.Pos = Pos;
|
2435 |
-
|
2436 |
-
function posEq(a, b) {return a.line == b.line && a.ch == b.ch;}
|
2437 |
-
function posLess(a, b) {return a.line < b.line || (a.line == b.line && a.ch < b.ch);}
|
2438 |
-
function copyPos(x) {return Pos(x.line, x.ch);}
|
2439 |
-
|
2440 |
-
// SELECTION
|
2441 |
-
|
2442 |
-
function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));}
|
2443 |
-
function clipPos(doc, pos) {
|
2444 |
-
if (pos.line < doc.first) return Pos(doc.first, 0);
|
2445 |
-
var last = doc.first + doc.size - 1;
|
2446 |
-
if (pos.line > last) return Pos(last, getLine(doc, last).text.length);
|
2447 |
-
return clipToLen(pos, getLine(doc, pos.line).text.length);
|
2448 |
-
}
|
2449 |
-
function clipToLen(pos, linelen) {
|
2450 |
-
var ch = pos.ch;
|
2451 |
-
if (ch == null || ch > linelen) return Pos(pos.line, linelen);
|
2452 |
-
else if (ch < 0) return Pos(pos.line, 0);
|
2453 |
-
else return pos;
|
2454 |
-
}
|
2455 |
-
function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;}
|
2456 |
-
|
2457 |
-
// If shift is held, this will move the selection anchor. Otherwise,
|
2458 |
-
// it'll set the whole selection.
|
2459 |
-
function extendSelection(doc, pos, other, bias) {
|
2460 |
-
if (doc.sel.shift || doc.sel.extend) {
|
2461 |
-
var anchor = doc.sel.anchor;
|
2462 |
-
if (other) {
|
2463 |
-
var posBefore = posLess(pos, anchor);
|
2464 |
-
if (posBefore != posLess(other, anchor)) {
|
2465 |
-
anchor = pos;
|
2466 |
-
pos = other;
|
2467 |
-
} else if (posBefore != posLess(pos, other)) {
|
2468 |
-
pos = other;
|
2469 |
-
}
|
2470 |
-
}
|
2471 |
-
setSelection(doc, anchor, pos, bias);
|
2472 |
-
} else {
|
2473 |
-
setSelection(doc, pos, other || pos, bias);
|
2474 |
-
}
|
2475 |
-
if (doc.cm) doc.cm.curOp.userSelChange = true;
|
2476 |
-
}
|
2477 |
-
|
2478 |
-
function filterSelectionChange(doc, anchor, head) {
|
2479 |
-
var obj = {anchor: anchor, head: head};
|
2480 |
-
signal(doc, "beforeSelectionChange", doc, obj);
|
2481 |
-
if (doc.cm) signal(doc.cm, "beforeSelectionChange", doc.cm, obj);
|
2482 |
-
obj.anchor = clipPos(doc, obj.anchor); obj.head = clipPos(doc, obj.head);
|
2483 |
-
return obj;
|
2484 |
-
}
|
2485 |
-
|
2486 |
-
// Update the selection. Last two args are only used by
|
2487 |
-
// updateDoc, since they have to be expressed in the line
|
2488 |
-
// numbers before the update.
|
2489 |
-
function setSelection(doc, anchor, head, bias, checkAtomic) {
|
2490 |
-
if (!checkAtomic && hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) {
|
2491 |
-
var filtered = filterSelectionChange(doc, anchor, head);
|
2492 |
-
head = filtered.head;
|
2493 |
-
anchor = filtered.anchor;
|
2494 |
-
}
|
2495 |
-
|
2496 |
-
var sel = doc.sel;
|
2497 |
-
sel.goalColumn = null;
|
2498 |
-
// Skip over atomic spans.
|
2499 |
-
if (checkAtomic || !posEq(anchor, sel.anchor))
|
2500 |
-
anchor = skipAtomic(doc, anchor, bias, checkAtomic != "push");
|
2501 |
-
if (checkAtomic || !posEq(head, sel.head))
|
2502 |
-
head = skipAtomic(doc, head, bias, checkAtomic != "push");
|
2503 |
-
|
2504 |
-
if (posEq(sel.anchor, anchor) && posEq(sel.head, head)) return;
|
2505 |
-
|
2506 |
-
sel.anchor = anchor; sel.head = head;
|
2507 |
-
var inv = posLess(head, anchor);
|
2508 |
-
sel.from = inv ? head : anchor;
|
2509 |
-
sel.to = inv ? anchor : head;
|
2510 |
-
|
2511 |
-
if (doc.cm)
|
2512 |
-
doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged =
|
2513 |
-
doc.cm.curOp.cursorActivity = true;
|
2514 |
-
|
2515 |
-
signalLater(doc, "cursorActivity", doc);
|
2516 |
-
}
|
2517 |
-
|
2518 |
-
function reCheckSelection(cm) {
|
2519 |
-
setSelection(cm.doc, cm.doc.sel.from, cm.doc.sel.to, null, "push");
|
2520 |
-
}
|
2521 |
-
|
2522 |
-
function skipAtomic(doc, pos, bias, mayClear) {
|
2523 |
-
var flipped = false, curPos = pos;
|
2524 |
-
var dir = bias || 1;
|
2525 |
-
doc.cantEdit = false;
|
2526 |
-
search: for (;;) {
|
2527 |
-
var line = getLine(doc, curPos.line);
|
2528 |
-
if (line.markedSpans) {
|
2529 |
-
for (var i = 0; i < line.markedSpans.length; ++i) {
|
2530 |
-
var sp = line.markedSpans[i], m = sp.marker;
|
2531 |
-
if ((sp.from == null || (m.inclusiveLeft ? sp.from <= curPos.ch : sp.from < curPos.ch)) &&
|
2532 |
-
(sp.to == null || (m.inclusiveRight ? sp.to >= curPos.ch : sp.to > curPos.ch))) {
|
2533 |
-
if (mayClear) {
|
2534 |
-
signal(m, "beforeCursorEnter");
|
2535 |
-
if (m.explicitlyCleared) {
|
2536 |
-
if (!line.markedSpans) break;
|
2537 |
-
else {--i; continue;}
|
2538 |
-
}
|
2539 |
-
}
|
2540 |
-
if (!m.atomic) continue;
|
2541 |
-
var newPos = m.find()[dir < 0 ? "from" : "to"];
|
2542 |
-
if (posEq(newPos, curPos)) {
|
2543 |
-
newPos.ch += dir;
|
2544 |
-
if (newPos.ch < 0) {
|
2545 |
-
if (newPos.line > doc.first) newPos = clipPos(doc, Pos(newPos.line - 1));
|
2546 |
-
else newPos = null;
|
2547 |
-
} else if (newPos.ch > line.text.length) {
|
2548 |
-
if (newPos.line < doc.first + doc.size - 1) newPos = Pos(newPos.line + 1, 0);
|
2549 |
-
else newPos = null;
|
2550 |
-
}
|
2551 |
-
if (!newPos) {
|
2552 |
-
if (flipped) {
|
2553 |
-
// Driven in a corner -- no valid cursor position found at all
|
2554 |
-
// -- try again *with* clearing, if we didn't already
|
2555 |
-
if (!mayClear) return skipAtomic(doc, pos, bias, true);
|
2556 |
-
// Otherwise, turn off editing until further notice, and return the start of the doc
|
2557 |
-
doc.cantEdit = true;
|
2558 |
-
return Pos(doc.first, 0);
|
2559 |
-
}
|
2560 |
-
flipped = true; newPos = pos; dir = -dir;
|
2561 |
-
}
|
2562 |
-
}
|
2563 |
-
curPos = newPos;
|
2564 |
-
continue search;
|
2565 |
-
}
|
2566 |
-
}
|
2567 |
-
}
|
2568 |
-
return curPos;
|
2569 |
-
}
|
2570 |
-
}
|
2571 |
-
|
2572 |
-
// SCROLLING
|
2573 |
-
|
2574 |
-
function scrollCursorIntoView(cm) {
|
2575 |
-
var coords = scrollPosIntoView(cm, cm.doc.sel.head, cm.options.cursorScrollMargin);
|
2576 |
-
if (!cm.state.focused) return;
|
2577 |
-
var display = cm.display, box = getRect(display.sizer), doScroll = null;
|
2578 |
-
if (coords.top + box.top < 0) doScroll = true;
|
2579 |
-
else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false;
|
2580 |
-
if (doScroll != null && !phantom) {
|
2581 |
-
var hidden = display.cursor.style.display == "none";
|
2582 |
-
if (hidden) {
|
2583 |
-
display.cursor.style.display = "";
|
2584 |
-
display.cursor.style.left = coords.left + "px";
|
2585 |
-
display.cursor.style.top = (coords.top - display.viewOffset) + "px";
|
2586 |
-
}
|
2587 |
-
display.cursor.scrollIntoView(doScroll);
|
2588 |
-
if (hidden) display.cursor.style.display = "none";
|
2589 |
-
}
|
2590 |
-
}
|
2591 |
-
|
2592 |
-
function scrollPosIntoView(cm, pos, margin) {
|
2593 |
-
if (margin == null) margin = 0;
|
2594 |
-
for (;;) {
|
2595 |
-
var changed = false, coords = cursorCoords(cm, pos);
|
2596 |
-
var scrollPos = calculateScrollPos(cm, coords.left, coords.top - margin, coords.left, coords.bottom + margin);
|
2597 |
-
var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;
|
2598 |
-
if (scrollPos.scrollTop != null) {
|
2599 |
-
setScrollTop(cm, scrollPos.scrollTop);
|
2600 |
-
if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true;
|
2601 |
-
}
|
2602 |
-
if (scrollPos.scrollLeft != null) {
|
2603 |
-
setScrollLeft(cm, scrollPos.scrollLeft);
|
2604 |
-
if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true;
|
2605 |
-
}
|
2606 |
-
if (!changed) return coords;
|
2607 |
-
}
|
2608 |
-
}
|
2609 |
-
|
2610 |
-
function scrollIntoView(cm, x1, y1, x2, y2) {
|
2611 |
-
var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2);
|
2612 |
-
if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop);
|
2613 |
-
if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft);
|
2614 |
-
}
|
2615 |
-
|
2616 |
-
function calculateScrollPos(cm, x1, y1, x2, y2) {
|
2617 |
-
var display = cm.display, snapMargin = textHeight(cm.display);
|
2618 |
-
if (y1 < 0) y1 = 0;
|
2619 |
-
var screen = display.scroller.clientHeight - scrollerCutOff, screentop = display.scroller.scrollTop, result = {};
|
2620 |
-
var docBottom = cm.doc.height + paddingVert(display);
|
2621 |
-
var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin;
|
2622 |
-
if (y1 < screentop) {
|
2623 |
-
result.scrollTop = atTop ? 0 : y1;
|
2624 |
-
} else if (y2 > screentop + screen) {
|
2625 |
-
var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen);
|
2626 |
-
if (newTop != screentop) result.scrollTop = newTop;
|
2627 |
-
}
|
2628 |
-
|
2629 |
-
var screenw = display.scroller.clientWidth - scrollerCutOff, screenleft = display.scroller.scrollLeft;
|
2630 |
-
x1 += display.gutters.offsetWidth; x2 += display.gutters.offsetWidth;
|
2631 |
-
var gutterw = display.gutters.offsetWidth;
|
2632 |
-
var atLeft = x1 < gutterw + 10;
|
2633 |
-
if (x1 < screenleft + gutterw || atLeft) {
|
2634 |
-
if (atLeft) x1 = 0;
|
2635 |
-
result.scrollLeft = Math.max(0, x1 - 10 - gutterw);
|
2636 |
-
} else if (x2 > screenw + screenleft - 3) {
|
2637 |
-
result.scrollLeft = x2 + 10 - screenw;
|
2638 |
-
}
|
2639 |
-
return result;
|
2640 |
-
}
|
2641 |
-
|
2642 |
-
function updateScrollPos(cm, left, top) {
|
2643 |
-
cm.curOp.updateScrollPos = {scrollLeft: left == null ? cm.doc.scrollLeft : left,
|
2644 |
-
scrollTop: top == null ? cm.doc.scrollTop : top};
|
2645 |
-
}
|
2646 |
-
|
2647 |
-
function addToScrollPos(cm, left, top) {
|
2648 |
-
var pos = cm.curOp.updateScrollPos || (cm.curOp.updateScrollPos = {scrollLeft: cm.doc.scrollLeft, scrollTop: cm.doc.scrollTop});
|
2649 |
-
var scroll = cm.display.scroller;
|
2650 |
-
pos.scrollTop = Math.max(0, Math.min(scroll.scrollHeight - scroll.clientHeight, pos.scrollTop + top));
|
2651 |
-
pos.scrollLeft = Math.max(0, Math.min(scroll.scrollWidth - scroll.clientWidth, pos.scrollLeft + left));
|
2652 |
-
}
|
2653 |
-
|
2654 |
-
// API UTILITIES
|
2655 |
-
|
2656 |
-
function indentLine(cm, n, how, aggressive) {
|
2657 |
-
var doc = cm.doc;
|
2658 |
-
if (how == null) how = "add";
|
2659 |
-
if (how == "smart") {
|
2660 |
-
if (!cm.doc.mode.indent) how = "prev";
|
2661 |
-
else var state = getStateBefore(cm, n);
|
2662 |
-
}
|
2663 |
-
|
2664 |
-
var tabSize = cm.options.tabSize;
|
2665 |
-
var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);
|
2666 |
-
var curSpaceString = line.text.match(/^\s*/)[0], indentation;
|
2667 |
-
if (how == "smart") {
|
2668 |
-
indentation = cm.doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);
|
2669 |
-
if (indentation == Pass) {
|
2670 |
-
if (!aggressive) return;
|
2671 |
-
how = "prev";
|
2672 |
-
}
|
2673 |
-
}
|
2674 |
-
if (how == "prev") {
|
2675 |
-
if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize);
|
2676 |
-
else indentation = 0;
|
2677 |
-
} else if (how == "add") {
|
2678 |
-
indentation = curSpace + cm.options.indentUnit;
|
2679 |
-
} else if (how == "subtract") {
|
2680 |
-
indentation = curSpace - cm.options.indentUnit;
|
2681 |
-
} else if (typeof how == "number") {
|
2682 |
-
indentation = curSpace + how;
|
2683 |
-
}
|
2684 |
-
indentation = Math.max(0, indentation);
|
2685 |
-
|
2686 |
-
var indentString = "", pos = 0;
|
2687 |
-
if (cm.options.indentWithTabs)
|
2688 |
-
for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";}
|
2689 |
-
if (pos < indentation) indentString += spaceStr(indentation - pos);
|
2690 |
-
|
2691 |
-
if (indentString != curSpaceString)
|
2692 |
-
replaceRange(cm.doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input");
|
2693 |
-
line.stateAfter = null;
|
2694 |
-
}
|
2695 |
-
|
2696 |
-
function changeLine(cm, handle, op) {
|
2697 |
-
var no = handle, line = handle, doc = cm.doc;
|
2698 |
-
if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle));
|
2699 |
-
else no = lineNo(handle);
|
2700 |
-
if (no == null) return null;
|
2701 |
-
if (op(line, no)) regChange(cm, no, no + 1);
|
2702 |
-
else return null;
|
2703 |
-
return line;
|
2704 |
-
}
|
2705 |
-
|
2706 |
-
function findPosH(doc, pos, dir, unit, visually) {
|
2707 |
-
var line = pos.line, ch = pos.ch, origDir = dir;
|
2708 |
-
var lineObj = getLine(doc, line);
|
2709 |
-
var possible = true;
|
2710 |
-
function findNextLine() {
|
2711 |
-
var l = line + dir;
|
2712 |
-
if (l < doc.first || l >= doc.first + doc.size) return (possible = false);
|
2713 |
-
line = l;
|
2714 |
-
return lineObj = getLine(doc, l);
|
2715 |
-
}
|
2716 |
-
function moveOnce(boundToLine) {
|
2717 |
-
var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true);
|
2718 |
-
if (next == null) {
|
2719 |
-
if (!boundToLine && findNextLine()) {
|
2720 |
-
if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj);
|
2721 |
-
else ch = dir < 0 ? lineObj.text.length : 0;
|
2722 |
-
} else return (possible = false);
|
2723 |
-
} else ch = next;
|
2724 |
-
return true;
|
2725 |
-
}
|
2726 |
-
|
2727 |
-
if (unit == "char") moveOnce();
|
2728 |
-
else if (unit == "column") moveOnce(true);
|
2729 |
-
else if (unit == "word" || unit == "group") {
|
2730 |
-
var sawType = null, group = unit == "group";
|
2731 |
-
for (var first = true;; first = false) {
|
2732 |
-
if (dir < 0 && !moveOnce(!first)) break;
|
2733 |
-
var cur = lineObj.text.charAt(ch) || "\n";
|
2734 |
-
var type = isWordChar(cur) ? "w"
|
2735 |
-
: !group ? null
|
2736 |
-
: /\s/.test(cur) ? null
|
2737 |
-
: "p";
|
2738 |
-
if (sawType && sawType != type) {
|
2739 |
-
if (dir < 0) {dir = 1; moveOnce();}
|
2740 |
-
break;
|
2741 |
-
}
|
2742 |
-
if (type) sawType = type;
|
2743 |
-
if (dir > 0 && !moveOnce(!first)) break;
|
2744 |
-
}
|
2745 |
-
}
|
2746 |
-
var result = skipAtomic(doc, Pos(line, ch), origDir, true);
|
2747 |
-
if (!possible) result.hitSide = true;
|
2748 |
-
return result;
|
2749 |
-
}
|
2750 |
-
|
2751 |
-
function findPosV(cm, pos, dir, unit) {
|
2752 |
-
var doc = cm.doc, x = pos.left, y;
|
2753 |
-
if (unit == "page") {
|
2754 |
-
var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);
|
2755 |
-
y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display));
|
2756 |
-
} else if (unit == "line") {
|
2757 |
-
y = dir > 0 ? pos.bottom + 3 : pos.top - 3;
|
2758 |
-
}
|
2759 |
-
for (;;) {
|
2760 |
-
var target = coordsChar(cm, x, y);
|
2761 |
-
if (!target.outside) break;
|
2762 |
-
if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; }
|
2763 |
-
y += dir * 5;
|
2764 |
-
}
|
2765 |
-
return target;
|
2766 |
-
}
|
2767 |
-
|
2768 |
-
function findWordAt(line, pos) {
|
2769 |
-
var start = pos.ch, end = pos.ch;
|
2770 |
-
if (line) {
|
2771 |
-
if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end;
|
2772 |
-
var startChar = line.charAt(start);
|
2773 |
-
var check = isWordChar(startChar) ? isWordChar
|
2774 |
-
: /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);}
|
2775 |
-
: function(ch) {return !/\s/.test(ch) && !isWordChar(ch);};
|
2776 |
-
while (start > 0 && check(line.charAt(start - 1))) --start;
|
2777 |
-
while (end < line.length && check(line.charAt(end))) ++end;
|
2778 |
-
}
|
2779 |
-
return {from: Pos(pos.line, start), to: Pos(pos.line, end)};
|
2780 |
-
}
|
2781 |
-
|
2782 |
-
function selectLine(cm, line) {
|
2783 |
-
extendSelection(cm.doc, Pos(line, 0), clipPos(cm.doc, Pos(line + 1, 0)));
|
2784 |
-
}
|
2785 |
-
|
2786 |
-
// PROTOTYPE
|
2787 |
-
|
2788 |
-
// The publicly visible API. Note that operation(null, f) means
|
2789 |
-
// 'wrap f in an operation, performed on its `this` parameter'
|
2790 |
-
|
2791 |
-
CodeMirror.prototype = {
|
2792 |
-
constructor: CodeMirror,
|
2793 |
-
focus: function(){window.focus(); focusInput(this); onFocus(this); fastPoll(this);},
|
2794 |
-
|
2795 |
-
setOption: function(option, value) {
|
2796 |
-
var options = this.options, old = options[option];
|
2797 |
-
if (options[option] == value && option != "mode") return;
|
2798 |
-
options[option] = value;
|
2799 |
-
if (optionHandlers.hasOwnProperty(option))
|
2800 |
-
operation(this, optionHandlers[option])(this, value, old);
|
2801 |
-
},
|
2802 |
-
|
2803 |
-
getOption: function(option) {return this.options[option];},
|
2804 |
-
getDoc: function() {return this.doc;},
|
2805 |
-
|
2806 |
-
addKeyMap: function(map, bottom) {
|
2807 |
-
this.state.keyMaps[bottom ? "push" : "unshift"](map);
|
2808 |
-
},
|
2809 |
-
removeKeyMap: function(map) {
|
2810 |
-
var maps = this.state.keyMaps;
|
2811 |
-
for (var i = 0; i < maps.length; ++i)
|
2812 |
-
if (maps[i] == map || (typeof maps[i] != "string" && maps[i].name == map)) {
|
2813 |
-
maps.splice(i, 1);
|
2814 |
-
return true;
|
2815 |
-
}
|
2816 |
-
},
|
2817 |
-
|
2818 |
-
addOverlay: operation(null, function(spec, options) {
|
2819 |
-
var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);
|
2820 |
-
if (mode.startState) throw new Error("Overlays may not be stateful.");
|
2821 |
-
this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque});
|
2822 |
-
this.state.modeGen++;
|
2823 |
-
regChange(this);
|
2824 |
-
}),
|
2825 |
-
removeOverlay: operation(null, function(spec) {
|
2826 |
-
var overlays = this.state.overlays;
|
2827 |
-
for (var i = 0; i < overlays.length; ++i) {
|
2828 |
-
var cur = overlays[i].modeSpec;
|
2829 |
-
if (cur == spec || typeof spec == "string" && cur.name == spec) {
|
2830 |
-
overlays.splice(i, 1);
|
2831 |
-
this.state.modeGen++;
|
2832 |
-
regChange(this);
|
2833 |
-
return;
|
2834 |
-
}
|
2835 |
-
}
|
2836 |
-
}),
|
2837 |
-
|
2838 |
-
indentLine: operation(null, function(n, dir, aggressive) {
|
2839 |
-
if (typeof dir != "string" && typeof dir != "number") {
|
2840 |
-
if (dir == null) dir = this.options.smartIndent ? "smart" : "prev";
|
2841 |
-
else dir = dir ? "add" : "subtract";
|
2842 |
-
}
|
2843 |
-
if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive);
|
2844 |
-
}),
|
2845 |
-
indentSelection: operation(null, function(how) {
|
2846 |
-
var sel = this.doc.sel;
|
2847 |
-
if (posEq(sel.from, sel.to)) return indentLine(this, sel.from.line, how);
|
2848 |
-
var e = sel.to.line - (sel.to.ch ? 0 : 1);
|
2849 |
-
for (var i = sel.from.line; i <= e; ++i) indentLine(this, i, how);
|
2850 |
-
}),
|
2851 |
-
|
2852 |
-
// Fetch the parser token for a given character. Useful for hacks
|
2853 |
-
// that want to inspect the mode state (say, for completion).
|
2854 |
-
getTokenAt: function(pos, precise) {
|
2855 |
-
var doc = this.doc;
|
2856 |
-
pos = clipPos(doc, pos);
|
2857 |
-
var state = getStateBefore(this, pos.line, precise), mode = this.doc.mode;
|
2858 |
-
var line = getLine(doc, pos.line);
|
2859 |
-
var stream = new StringStream(line.text, this.options.tabSize);
|
2860 |
-
while (stream.pos < pos.ch && !stream.eol()) {
|
2861 |
-
stream.start = stream.pos;
|
2862 |
-
var style = mode.token(stream, state);
|
2863 |
-
}
|
2864 |
-
return {start: stream.start,
|
2865 |
-
end: stream.pos,
|
2866 |
-
string: stream.current(),
|
2867 |
-
className: style || null, // Deprecated, use 'type' instead
|
2868 |
-
type: style || null,
|
2869 |
-
state: state};
|
2870 |
-
},
|
2871 |
-
|
2872 |
-
getTokenTypeAt: function(pos) {
|
2873 |
-
pos = clipPos(this.doc, pos);
|
2874 |
-
var styles = getLineStyles(this, getLine(this.doc, pos.line));
|
2875 |
-
var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;
|
2876 |
-
if (ch == 0) return styles[2];
|
2877 |
-
for (;;) {
|
2878 |
-
var mid = (before + after) >> 1;
|
2879 |
-
if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid;
|
2880 |
-
else if (styles[mid * 2 + 1] < ch) before = mid + 1;
|
2881 |
-
else return styles[mid * 2 + 2];
|
2882 |
-
}
|
2883 |
-
},
|
2884 |
-
|
2885 |
-
getModeAt: function(pos) {
|
2886 |
-
var mode = this.doc.mode;
|
2887 |
-
if (!mode.innerMode) return mode;
|
2888 |
-
return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode;
|
2889 |
-
},
|
2890 |
-
|
2891 |
-
getHelper: function(pos, type) {
|
2892 |
-
if (!helpers.hasOwnProperty(type)) return;
|
2893 |
-
var help = helpers[type], mode = this.getModeAt(pos);
|
2894 |
-
return mode[type] && help[mode[type]] ||
|
2895 |
-
mode.helperType && help[mode.helperType] ||
|
2896 |
-
help[mode.name];
|
2897 |
-
},
|
2898 |
-
|
2899 |
-
getStateAfter: function(line, precise) {
|
2900 |
-
var doc = this.doc;
|
2901 |
-
line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);
|
2902 |
-
return getStateBefore(this, line + 1, precise);
|
2903 |
-
},
|
2904 |
-
|
2905 |
-
cursorCoords: function(start, mode) {
|
2906 |
-
var pos, sel = this.doc.sel;
|
2907 |
-
if (start == null) pos = sel.head;
|
2908 |
-
else if (typeof start == "object") pos = clipPos(this.doc, start);
|
2909 |
-
else pos = start ? sel.from : sel.to;
|
2910 |
-
return cursorCoords(this, pos, mode || "page");
|
2911 |
-
},
|
2912 |
-
|
2913 |
-
charCoords: function(pos, mode) {
|
2914 |
-
return charCoords(this, clipPos(this.doc, pos), mode || "page");
|
2915 |
-
},
|
2916 |
-
|
2917 |
-
coordsChar: function(coords, mode) {
|
2918 |
-
coords = fromCoordSystem(this, coords, mode || "page");
|
2919 |
-
return coordsChar(this, coords.left, coords.top);
|
2920 |
-
},
|
2921 |
-
|
2922 |
-
lineAtHeight: function(height, mode) {
|
2923 |
-
height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top;
|
2924 |
-
return lineAtHeight(this.doc, height + this.display.viewOffset);
|
2925 |
-
},
|
2926 |
-
heightAtLine: function(line, mode) {
|
2927 |
-
var end = false, last = this.doc.first + this.doc.size - 1;
|
2928 |
-
if (line < this.doc.first) line = this.doc.first;
|
2929 |
-
else if (line > last) { line = last; end = true; }
|
2930 |
-
var lineObj = getLine(this.doc, line);
|
2931 |
-
return intoCoordSystem(this, getLine(this.doc, line), {top: 0, left: 0}, mode || "page").top +
|
2932 |
-
(end ? lineObj.height : 0);
|
2933 |
-
},
|
2934 |
-
|
2935 |
-
defaultTextHeight: function() { return textHeight(this.display); },
|
2936 |
-
defaultCharWidth: function() { return charWidth(this.display); },
|
2937 |
-
|
2938 |
-
setGutterMarker: operation(null, function(line, gutterID, value) {
|
2939 |
-
return changeLine(this, line, function(line) {
|
2940 |
-
var markers = line.gutterMarkers || (line.gutterMarkers = {});
|
2941 |
-
markers[gutterID] = value;
|
2942 |
-
if (!value && isEmpty(markers)) line.gutterMarkers = null;
|
2943 |
-
return true;
|
2944 |
-
});
|
2945 |
-
}),
|
2946 |
-
|
2947 |
-
clearGutter: operation(null, function(gutterID) {
|
2948 |
-
var cm = this, doc = cm.doc, i = doc.first;
|
2949 |
-
doc.iter(function(line) {
|
2950 |
-
if (line.gutterMarkers && line.gutterMarkers[gutterID]) {
|
2951 |
-
line.gutterMarkers[gutterID] = null;
|
2952 |
-
regChange(cm, i, i + 1);
|
2953 |
-
if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null;
|
2954 |
-
}
|
2955 |
-
++i;
|
2956 |
-
});
|
2957 |
-
}),
|
2958 |
-
|
2959 |
-
addLineClass: operation(null, function(handle, where, cls) {
|
2960 |
-
return changeLine(this, handle, function(line) {
|
2961 |
-
var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass";
|
2962 |
-
if (!line[prop]) line[prop] = cls;
|
2963 |
-
else if (new RegExp("(?:^|\\s)" + cls + "(?:$|\\s)").test(line[prop])) return false;
|
2964 |
-
else line[prop] += " " + cls;
|
2965 |
-
return true;
|
2966 |
-
});
|
2967 |
-
}),
|
2968 |
-
|
2969 |
-
removeLineClass: operation(null, function(handle, where, cls) {
|
2970 |
-
return changeLine(this, handle, function(line) {
|
2971 |
-
var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass";
|
2972 |
-
var cur = line[prop];
|
2973 |
-
if (!cur) return false;
|
2974 |
-
else if (cls == null) line[prop] = null;
|
2975 |
-
else {
|
2976 |
-
var found = cur.match(new RegExp("(?:^|\\s+)" + cls + "(?:$|\\s+)"));
|
2977 |
-
if (!found) return false;
|
2978 |
-
var end = found.index + found[0].length;
|
2979 |
-
line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null;
|
2980 |
-
}
|
2981 |
-
return true;
|
2982 |
-
});
|
2983 |
-
}),
|
2984 |
-
|
2985 |
-
addLineWidget: operation(null, function(handle, node, options) {
|
2986 |
-
return addLineWidget(this, handle, node, options);
|
2987 |
-
}),
|
2988 |
-
|
2989 |
-
removeLineWidget: function(widget) { widget.clear(); },
|
2990 |
-
|
2991 |
-
lineInfo: function(line) {
|
2992 |
-
if (typeof line == "number") {
|
2993 |
-
if (!isLine(this.doc, line)) return null;
|
2994 |
-
var n = line;
|
2995 |
-
line = getLine(this.doc, line);
|
2996 |
-
if (!line) return null;
|
2997 |
-
} else {
|
2998 |
-
var n = lineNo(line);
|
2999 |
-
if (n == null) return null;
|
3000 |
-
}
|
3001 |
-
return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,
|
3002 |
-
textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,
|
3003 |
-
widgets: line.widgets};
|
3004 |
-
},
|
3005 |
-
|
3006 |
-
getViewport: function() { return {from: this.display.showingFrom, to: this.display.showingTo};},
|
3007 |
-
|
3008 |
-
addWidget: function(pos, node, scroll, vert, horiz) {
|
3009 |
-
var display = this.display;
|
3010 |
-
pos = cursorCoords(this, clipPos(this.doc, pos));
|
3011 |
-
var top = pos.bottom, left = pos.left;
|
3012 |
-
node.style.position = "absolute";
|
3013 |
-
display.sizer.appendChild(node);
|
3014 |
-
if (vert == "over") {
|
3015 |
-
top = pos.top;
|
3016 |
-
} else if (vert == "above" || vert == "near") {
|
3017 |
-
var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),
|
3018 |
-
hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);
|
3019 |
-
// Default to positioning above (if specified and possible); otherwise default to positioning below
|
3020 |
-
if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)
|
3021 |
-
top = pos.top - node.offsetHeight;
|
3022 |
-
else if (pos.bottom + node.offsetHeight <= vspace)
|
3023 |
-
top = pos.bottom;
|
3024 |
-
if (left + node.offsetWidth > hspace)
|
3025 |
-
left = hspace - node.offsetWidth;
|
3026 |
-
}
|
3027 |
-
node.style.top = top + "px";
|
3028 |
-
node.style.left = node.style.right = "";
|
3029 |
-
if (horiz == "right") {
|
3030 |
-
left = display.sizer.clientWidth - node.offsetWidth;
|
3031 |
-
node.style.right = "0px";
|
3032 |
-
} else {
|
3033 |
-
if (horiz == "left") left = 0;
|
3034 |
-
else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2;
|
3035 |
-
node.style.left = left + "px";
|
3036 |
-
}
|
3037 |
-
if (scroll)
|
3038 |
-
scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight);
|
3039 |
-
},
|
3040 |
-
|
3041 |
-
triggerOnKeyDown: operation(null, onKeyDown),
|
3042 |
-
|
3043 |
-
execCommand: function(cmd) {return commands[cmd](this);},
|
3044 |
-
|
3045 |
-
findPosH: function(from, amount, unit, visually) {
|
3046 |
-
var dir = 1;
|
3047 |
-
if (amount < 0) { dir = -1; amount = -amount; }
|
3048 |
-
for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) {
|
3049 |
-
cur = findPosH(this.doc, cur, dir, unit, visually);
|
3050 |
-
if (cur.hitSide) break;
|
3051 |
-
}
|
3052 |
-
return cur;
|
3053 |
-
},
|
3054 |
-
|
3055 |
-
moveH: operation(null, function(dir, unit) {
|
3056 |
-
var sel = this.doc.sel, pos;
|
3057 |
-
if (sel.shift || sel.extend || posEq(sel.from, sel.to))
|
3058 |
-
pos = findPosH(this.doc, sel.head, dir, unit, this.options.rtlMoveVisually);
|
3059 |
-
else
|
3060 |
-
pos = dir < 0 ? sel.from : sel.to;
|
3061 |
-
extendSelection(this.doc, pos, pos, dir);
|
3062 |
-
}),
|
3063 |
-
|
3064 |
-
deleteH: operation(null, function(dir, unit) {
|
3065 |
-
var sel = this.doc.sel;
|
3066 |
-
if (!posEq(sel.from, sel.to)) replaceRange(this.doc, "", sel.from, sel.to, "+delete");
|
3067 |
-
else replaceRange(this.doc, "", sel.from, findPosH(this.doc, sel.head, dir, unit, false), "+delete");
|
3068 |
-
this.curOp.userSelChange = true;
|
3069 |
-
}),
|
3070 |
-
|
3071 |
-
findPosV: function(from, amount, unit, goalColumn) {
|
3072 |
-
var dir = 1, x = goalColumn;
|
3073 |
-
if (amount < 0) { dir = -1; amount = -amount; }
|
3074 |
-
for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) {
|
3075 |
-
var coords = cursorCoords(this, cur, "div");
|
3076 |
-
if (x == null) x = coords.left;
|
3077 |
-
else coords.left = x;
|
3078 |
-
cur = findPosV(this, coords, dir, unit);
|
3079 |
-
if (cur.hitSide) break;
|
3080 |
-
}
|
3081 |
-
return cur;
|
3082 |
-
},
|
3083 |
-
|
3084 |
-
moveV: operation(null, function(dir, unit) {
|
3085 |
-
var sel = this.doc.sel;
|
3086 |
-
var pos = cursorCoords(this, sel.head, "div");
|
3087 |
-
if (sel.goalColumn != null) pos.left = sel.goalColumn;
|
3088 |
-
var target = findPosV(this, pos, dir, unit);
|
3089 |
-
|
3090 |
-
if (unit == "page") addToScrollPos(this, 0, charCoords(this, target, "div").top - pos.top);
|
3091 |
-
extendSelection(this.doc, target, target, dir);
|
3092 |
-
sel.goalColumn = pos.left;
|
3093 |
-
}),
|
3094 |
-
|
3095 |
-
toggleOverwrite: function(value) {
|
3096 |
-
if (value != null && value == this.state.overwrite) return;
|
3097 |
-
if (this.state.overwrite = !this.state.overwrite)
|
3098 |
-
this.display.cursor.className += " CodeMirror-overwrite";
|
3099 |
-
else
|
3100 |
-
this.display.cursor.className = this.display.cursor.className.replace(" CodeMirror-overwrite", "");
|
3101 |
-
},
|
3102 |
-
hasFocus: function() { return this.state.focused; },
|
3103 |
-
|
3104 |
-
scrollTo: operation(null, function(x, y) {
|
3105 |
-
updateScrollPos(this, x, y);
|
3106 |
-
}),
|
3107 |
-
getScrollInfo: function() {
|
3108 |
-
var scroller = this.display.scroller, co = scrollerCutOff;
|
3109 |
-
return {left: scroller.scrollLeft, top: scroller.scrollTop,
|
3110 |
-
height: scroller.scrollHeight - co, width: scroller.scrollWidth - co,
|
3111 |
-
clientHeight: scroller.clientHeight - co, clientWidth: scroller.clientWidth - co};
|
3112 |
-
},
|
3113 |
-
|
3114 |
-
scrollIntoView: operation(null, function(pos, margin) {
|
3115 |
-
if (typeof pos == "number") pos = Pos(pos, 0);
|
3116 |
-
if (!margin) margin = 0;
|
3117 |
-
var coords = pos;
|
3118 |
-
|
3119 |
-
if (!pos || pos.line != null) {
|
3120 |
-
this.curOp.scrollToPos = pos ? clipPos(this.doc, pos) : this.doc.sel.head;
|
3121 |
-
this.curOp.scrollToPosMargin = margin;
|
3122 |
-
coords = cursorCoords(this, this.curOp.scrollToPos);
|
3123 |
-
}
|
3124 |
-
var sPos = calculateScrollPos(this, coords.left, coords.top - margin, coords.right, coords.bottom + margin);
|
3125 |
-
updateScrollPos(this, sPos.scrollLeft, sPos.scrollTop);
|
3126 |
-
}),
|
3127 |
-
|
3128 |
-
setSize: operation(null, function(width, height) {
|
3129 |
-
function interpret(val) {
|
3130 |
-
return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val;
|
3131 |
-
}
|
3132 |
-
if (width != null) this.display.wrapper.style.width = interpret(width);
|
3133 |
-
if (height != null) this.display.wrapper.style.height = interpret(height);
|
3134 |
-
if (this.options.lineWrapping)
|
3135 |
-
this.display.measureLineCache.length = this.display.measureLineCachePos = 0;
|
3136 |
-
this.curOp.forceUpdate = true;
|
3137 |
-
}),
|
3138 |
-
|
3139 |
-
operation: function(f){return runInOp(this, f);},
|
3140 |
-
|
3141 |
-
refresh: operation(null, function() {
|
3142 |
-
clearCaches(this);
|
3143 |
-
updateScrollPos(this, this.doc.scrollLeft, this.doc.scrollTop);
|
3144 |
-
regChange(this);
|
3145 |
-
}),
|
3146 |
-
|
3147 |
-
swapDoc: operation(null, function(doc) {
|
3148 |
-
var old = this.doc;
|
3149 |
-
old.cm = null;
|
3150 |
-
attachDoc(this, doc);
|
3151 |
-
clearCaches(this);
|
3152 |
-
resetInput(this, true);
|
3153 |
-
updateScrollPos(this, doc.scrollLeft, doc.scrollTop);
|
3154 |
-
return old;
|
3155 |
-
}),
|
3156 |
-
|
3157 |
-
getInputField: function(){return this.display.input;},
|
3158 |
-
getWrapperElement: function(){return this.display.wrapper;},
|
3159 |
-
getScrollerElement: function(){return this.display.scroller;},
|
3160 |
-
getGutterElement: function(){return this.display.gutters;}
|
3161 |
-
};
|
3162 |
-
eventMixin(CodeMirror);
|
3163 |
-
|
3164 |
-
// OPTION DEFAULTS
|
3165 |
-
|
3166 |
-
var optionHandlers = CodeMirror.optionHandlers = {};
|
3167 |
-
|
3168 |
-
// The default configuration options.
|
3169 |
-
var defaults = CodeMirror.defaults = {};
|
3170 |
-
|
3171 |
-
function option(name, deflt, handle, notOnInit) {
|
3172 |
-
CodeMirror.defaults[name] = deflt;
|
3173 |
-
if (handle) optionHandlers[name] =
|
3174 |
-
notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle;
|
3175 |
-
}
|
3176 |
-
|
3177 |
-
var Init = CodeMirror.Init = {toString: function(){return "CodeMirror.Init";}};
|
3178 |
-
|
3179 |
-
// These two are, on init, called from the constructor because they
|
3180 |
-
// have to be initialized before the editor can start at all.
|
3181 |
-
option("value", "", function(cm, val) {
|
3182 |
-
cm.setValue(val);
|
3183 |
-
}, true);
|
3184 |
-
option("mode", null, function(cm, val) {
|
3185 |
-
cm.doc.modeOption = val;
|
3186 |
-
loadMode(cm);
|
3187 |
-
}, true);
|
3188 |
-
|
3189 |
-
option("indentUnit", 2, loadMode, true);
|
3190 |
-
option("indentWithTabs", false);
|
3191 |
-
option("smartIndent", true);
|
3192 |
-
option("tabSize", 4, function(cm) {
|
3193 |
-
loadMode(cm);
|
3194 |
-
clearCaches(cm);
|
3195 |
-
regChange(cm);
|
3196 |
-
}, true);
|
3197 |
-
option("electricChars", true);
|
3198 |
-
option("rtlMoveVisually", !windows);
|
3199 |
-
|
3200 |
-
option("theme", "default", function(cm) {
|
3201 |
-
themeChanged(cm);
|
3202 |
-
guttersChanged(cm);
|
3203 |
-
}, true);
|
3204 |
-
option("keyMap", "default", keyMapChanged);
|
3205 |
-
option("extraKeys", null);
|
3206 |
-
|
3207 |
-
option("onKeyEvent", null);
|
3208 |
-
option("onDragEvent", null);
|
3209 |
-
|
3210 |
-
option("lineWrapping", false, wrappingChanged, true);
|
3211 |
-
option("gutters", [], function(cm) {
|
3212 |
-
setGuttersForLineNumbers(cm.options);
|
3213 |
-
guttersChanged(cm);
|
3214 |
-
}, true);
|
3215 |
-
option("fixedGutter", true, function(cm, val) {
|
3216 |
-
cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0";
|
3217 |
-
cm.refresh();
|
3218 |
-
}, true);
|
3219 |
-
option("coverGutterNextToScrollbar", false, updateScrollbars, true);
|
3220 |
-
option("lineNumbers", false, function(cm) {
|
3221 |
-
setGuttersForLineNumbers(cm.options);
|
3222 |
-
guttersChanged(cm);
|
3223 |
-
}, true);
|
3224 |
-
option("firstLineNumber", 1, guttersChanged, true);
|
3225 |
-
option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true);
|
3226 |
-
option("showCursorWhenSelecting", false, updateSelection, true);
|
3227 |
-
|
3228 |
-
option("readOnly", false, function(cm, val) {
|
3229 |
-
if (val == "nocursor") {onBlur(cm); cm.display.input.blur();}
|
3230 |
-
else if (!val) resetInput(cm, true);
|
3231 |
-
});
|
3232 |
-
option("dragDrop", true);
|
3233 |
-
|
3234 |
-
option("cursorBlinkRate", 530);
|
3235 |
-
option("cursorScrollMargin", 0);
|
3236 |
-
option("cursorHeight", 1);
|
3237 |
-
option("workTime", 100);
|
3238 |
-
option("workDelay", 100);
|
3239 |
-
option("flattenSpans", true);
|
3240 |
-
option("pollInterval", 100);
|
3241 |
-
option("undoDepth", 40, function(cm, val){cm.doc.history.undoDepth = val;});
|
3242 |
-
option("historyEventDelay", 500);
|
3243 |
-
option("viewportMargin", 10, function(cm){cm.refresh();}, true);
|
3244 |
-
option("maxHighlightLength", 10000, function(cm){loadMode(cm); cm.refresh();}, true);
|
3245 |
-
option("moveInputWithCursor", true, function(cm, val) {
|
3246 |
-
if (!val) cm.display.inputDiv.style.top = cm.display.inputDiv.style.left = 0;
|
3247 |
-
});
|
3248 |
-
|
3249 |
-
option("tabindex", null, function(cm, val) {
|
3250 |
-
cm.display.input.tabIndex = val || "";
|
3251 |
-
});
|
3252 |
-
option("autofocus", null);
|
3253 |
-
|
3254 |
-
// MODE DEFINITION AND QUERYING
|
3255 |
-
|
3256 |
-
// Known modes, by name and by MIME
|
3257 |
-
var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {};
|
3258 |
-
|
3259 |
-
CodeMirror.defineMode = function(name, mode) {
|
3260 |
-
if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name;
|
3261 |
-
if (arguments.length > 2) {
|
3262 |
-
mode.dependencies = [];
|
3263 |
-
for (var i = 2; i < arguments.length; ++i) mode.dependencies.push(arguments[i]);
|
3264 |
-
}
|
3265 |
-
modes[name] = mode;
|
3266 |
-
};
|
3267 |
-
|
3268 |
-
CodeMirror.defineMIME = function(mime, spec) {
|
3269 |
-
mimeModes[mime] = spec;
|
3270 |
-
};
|
3271 |
-
|
3272 |
-
CodeMirror.resolveMode = function(spec) {
|
3273 |
-
if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) {
|
3274 |
-
spec = mimeModes[spec];
|
3275 |
-
} else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) {
|
3276 |
-
var found = mimeModes[spec.name];
|
3277 |
-
spec = createObj(found, spec);
|
3278 |
-
spec.name = found.name;
|
3279 |
-
} else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) {
|
3280 |
-
return CodeMirror.resolveMode("application/xml");
|
3281 |
-
}
|
3282 |
-
if (typeof spec == "string") return {name: spec};
|
3283 |
-
else return spec || {name: "null"};
|
3284 |
-
};
|
3285 |
-
|
3286 |
-
CodeMirror.getMode = function(options, spec) {
|
3287 |
-
var spec = CodeMirror.resolveMode(spec);
|
3288 |
-
var mfactory = modes[spec.name];
|
3289 |
-
if (!mfactory) return CodeMirror.getMode(options, "text/plain");
|
3290 |
-
var modeObj = mfactory(options, spec);
|
3291 |
-
if (modeExtensions.hasOwnProperty(spec.name)) {
|
3292 |
-
var exts = modeExtensions[spec.name];
|
3293 |
-
for (var prop in exts) {
|
3294 |
-
if (!exts.hasOwnProperty(prop)) continue;
|
3295 |
-
if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop];
|
3296 |
-
modeObj[prop] = exts[prop];
|
3297 |
-
}
|
3298 |
-
}
|
3299 |
-
modeObj.name = spec.name;
|
3300 |
-
|
3301 |
-
return modeObj;
|
3302 |
-
};
|
3303 |
-
|
3304 |
-
CodeMirror.defineMode("null", function() {
|
3305 |
-
return {token: function(stream) {stream.skipToEnd();}};
|
3306 |
-
});
|
3307 |
-
CodeMirror.defineMIME("text/plain", "null");
|
3308 |
-
|
3309 |
-
var modeExtensions = CodeMirror.modeExtensions = {};
|
3310 |
-
CodeMirror.extendMode = function(mode, properties) {
|
3311 |
-
var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});
|
3312 |
-
copyObj(properties, exts);
|
3313 |
-
};
|
3314 |
-
|
3315 |
-
// EXTENSIONS
|
3316 |
-
|
3317 |
-
CodeMirror.defineExtension = function(name, func) {
|
3318 |
-
CodeMirror.prototype[name] = func;
|
3319 |
-
};
|
3320 |
-
CodeMirror.defineDocExtension = function(name, func) {
|
3321 |
-
Doc.prototype[name] = func;
|
3322 |
-
};
|
3323 |
-
CodeMirror.defineOption = option;
|
3324 |
-
|
3325 |
-
var initHooks = [];
|
3326 |
-
CodeMirror.defineInitHook = function(f) {initHooks.push(f);};
|
3327 |
-
|
3328 |
-
var helpers = CodeMirror.helpers = {};
|
3329 |
-
CodeMirror.registerHelper = function(type, name, value) {
|
3330 |
-
if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {};
|
3331 |
-
helpers[type][name] = value;
|
3332 |
-
};
|
3333 |
-
|
3334 |
-
// UTILITIES
|
3335 |
-
|
3336 |
-
CodeMirror.isWordChar = isWordChar;
|
3337 |
-
|
3338 |
-
// MODE STATE HANDLING
|
3339 |
-
|
3340 |
-
// Utility functions for working with state. Exported because modes
|
3341 |
-
// sometimes need to do this.
|
3342 |
-
function copyState(mode, state) {
|
3343 |
-
if (state === true) return state;
|
3344 |
-
if (mode.copyState) return mode.copyState(state);
|
3345 |
-
var nstate = {};
|
3346 |
-
for (var n in state) {
|
3347 |
-
var val = state[n];
|
3348 |
-
if (val instanceof Array) val = val.concat([]);
|
3349 |
-
nstate[n] = val;
|
3350 |
-
}
|
3351 |
-
return nstate;
|
3352 |
-
}
|
3353 |
-
CodeMirror.copyState = copyState;
|
3354 |
-
|
3355 |
-
function startState(mode, a1, a2) {
|
3356 |
-
return mode.startState ? mode.startState(a1, a2) : true;
|
3357 |
-
}
|
3358 |
-
CodeMirror.startState = startState;
|
3359 |
-
|
3360 |
-
CodeMirror.innerMode = function(mode, state) {
|
3361 |
-
while (mode.innerMode) {
|
3362 |
-
var info = mode.innerMode(state);
|
3363 |
-
if (!info || info.mode == mode) break;
|
3364 |
-
state = info.state;
|
3365 |
-
mode = info.mode;
|
3366 |
-
}
|
3367 |
-
return info || {mode: mode, state: state};
|
3368 |
-
};
|
3369 |
-
|
3370 |
-
// STANDARD COMMANDS
|
3371 |
-
|
3372 |
-
var commands = CodeMirror.commands = {
|
3373 |
-
selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()));},
|
3374 |
-
killLine: function(cm) {
|
3375 |
-
var from = cm.getCursor(true), to = cm.getCursor(false), sel = !posEq(from, to);
|
3376 |
-
if (!sel && cm.getLine(from.line).length == from.ch)
|
3377 |
-
cm.replaceRange("", from, Pos(from.line + 1, 0), "+delete");
|
3378 |
-
else cm.replaceRange("", from, sel ? to : Pos(from.line), "+delete");
|
3379 |
-
},
|
3380 |
-
deleteLine: function(cm) {
|
3381 |
-
var l = cm.getCursor().line;
|
3382 |
-
cm.replaceRange("", Pos(l, 0), Pos(l), "+delete");
|
3383 |
-
},
|
3384 |
-
delLineLeft: function(cm) {
|
3385 |
-
var cur = cm.getCursor();
|
3386 |
-
cm.replaceRange("", Pos(cur.line, 0), cur, "+delete");
|
3387 |
-
},
|
3388 |
-
undo: function(cm) {cm.undo();},
|
3389 |
-
redo: function(cm) {cm.redo();},
|
3390 |
-
goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));},
|
3391 |
-
goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));},
|
3392 |
-
goLineStart: function(cm) {
|
3393 |
-
cm.extendSelection(lineStart(cm, cm.getCursor().line));
|
3394 |
-
},
|
3395 |
-
goLineStartSmart: function(cm) {
|
3396 |
-
var cur = cm.getCursor(), start = lineStart(cm, cur.line);
|
3397 |
-
var line = cm.getLineHandle(start.line);
|
3398 |
-
var order = getOrder(line);
|
3399 |
-
if (!order || order[0].level == 0) {
|
3400 |
-
var firstNonWS = Math.max(0, line.text.search(/\S/));
|
3401 |
-
var inWS = cur.line == start.line && cur.ch <= firstNonWS && cur.ch;
|
3402 |
-
cm.extendSelection(Pos(start.line, inWS ? 0 : firstNonWS));
|
3403 |
-
} else cm.extendSelection(start);
|
3404 |
-
},
|
3405 |
-
goLineEnd: function(cm) {
|
3406 |
-
cm.extendSelection(lineEnd(cm, cm.getCursor().line));
|
3407 |
-
},
|
3408 |
-
goLineRight: function(cm) {
|
3409 |
-
var top = cm.charCoords(cm.getCursor(), "div").top + 5;
|
3410 |
-
cm.extendSelection(cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"));
|
3411 |
-
},
|
3412 |
-
goLineLeft: function(cm) {
|
3413 |
-
var top = cm.charCoords(cm.getCursor(), "div").top + 5;
|
3414 |
-
cm.extendSelection(cm.coordsChar({left: 0, top: top}, "div"));
|
3415 |
-
},
|
3416 |
-
goLineUp: function(cm) {cm.moveV(-1, "line");},
|
3417 |
-
goLineDown: function(cm) {cm.moveV(1, "line");},
|
3418 |
-
goPageUp: function(cm) {cm.moveV(-1, "page");},
|
3419 |
-
goPageDown: function(cm) {cm.moveV(1, "page");},
|
3420 |
-
goCharLeft: function(cm) {cm.moveH(-1, "char");},
|
3421 |
-
goCharRight: function(cm) {cm.moveH(1, "char");},
|
3422 |
-
goColumnLeft: function(cm) {cm.moveH(-1, "column");},
|
3423 |
-
goColumnRight: function(cm) {cm.moveH(1, "column");},
|
3424 |
-
goWordLeft: function(cm) {cm.moveH(-1, "word");},
|
3425 |
-
goGroupRight: function(cm) {cm.moveH(1, "group");},
|
3426 |
-
goGroupLeft: function(cm) {cm.moveH(-1, "group");},
|
3427 |
-
goWordRight: function(cm) {cm.moveH(1, "word");},
|
3428 |
-
delCharBefore: function(cm) {cm.deleteH(-1, "char");},
|
3429 |
-
delCharAfter: function(cm) {cm.deleteH(1, "char");},
|
3430 |
-
delWordBefore: function(cm) {cm.deleteH(-1, "word");},
|
3431 |
-
delWordAfter: function(cm) {cm.deleteH(1, "word");},
|
3432 |
-
delGroupBefore: function(cm) {cm.deleteH(-1, "group");},
|
3433 |
-
delGroupAfter: function(cm) {cm.deleteH(1, "group");},
|
3434 |
-
indentAuto: function(cm) {cm.indentSelection("smart");},
|
3435 |
-
indentMore: function(cm) {cm.indentSelection("add");},
|
3436 |
-
indentLess: function(cm) {cm.indentSelection("subtract");},
|
3437 |
-
insertTab: function(cm) {cm.replaceSelection("\t", "end", "+input");},
|
3438 |
-
defaultTab: function(cm) {
|
3439 |
-
if (cm.somethingSelected()) cm.indentSelection("add");
|
3440 |
-
else cm.replaceSelection("\t", "end", "+input");
|
3441 |
-
},
|
3442 |
-
transposeChars: function(cm) {
|
3443 |
-
var cur = cm.getCursor(), line = cm.getLine(cur.line);
|
3444 |
-
if (cur.ch > 0 && cur.ch < line.length - 1)
|
3445 |
-
cm.replaceRange(line.charAt(cur.ch) + line.charAt(cur.ch - 1),
|
3446 |
-
Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1));
|
3447 |
-
},
|
3448 |
-
newlineAndIndent: function(cm) {
|
3449 |
-
operation(cm, function() {
|
3450 |
-
cm.replaceSelection("\n", "end", "+input");
|
3451 |
-
cm.indentLine(cm.getCursor().line, null, true);
|
3452 |
-
})();
|
3453 |
-
},
|
3454 |
-
toggleOverwrite: function(cm) {cm.toggleOverwrite();}
|
3455 |
-
};
|
3456 |
-
|
3457 |
-
// STANDARD KEYMAPS
|
3458 |
-
|
3459 |
-
var keyMap = CodeMirror.keyMap = {};
|
3460 |
-
keyMap.basic = {
|
3461 |
-
"Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown",
|
3462 |
-
"End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown",
|
3463 |
-
"Delete": "delCharAfter", "Backspace": "delCharBefore", "Tab": "defaultTab", "Shift-Tab": "indentAuto",
|
3464 |
-
"Enter": "newlineAndIndent", "Insert": "toggleOverwrite"
|
3465 |
-
};
|
3466 |
-
// Note that the save and find-related commands aren't defined by
|
3467 |
-
// default. Unknown commands are simply ignored.
|
3468 |
-
keyMap.pcDefault = {
|
3469 |
-
"Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo",
|
3470 |
-
"Ctrl-Home": "goDocStart", "Alt-Up": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Down": "goDocEnd",
|
3471 |
-
"Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd",
|
3472 |
-
"Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find",
|
3473 |
-
"Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll",
|
3474 |
-
"Ctrl-[": "indentLess", "Ctrl-]": "indentMore",
|
3475 |
-
fallthrough: "basic"
|
3476 |
-
};
|
3477 |
-
keyMap.macDefault = {
|
3478 |
-
"Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo",
|
3479 |
-
"Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft",
|
3480 |
-
"Alt-Right": "goGroupRight", "Cmd-Left": "goLineStart", "Cmd-Right": "goLineEnd", "Alt-Backspace": "delGroupBefore",
|
3481 |
-
"Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find",
|
3482 |
-
"Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll",
|
3483 |
-
"Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delLineLeft",
|
3484 |
-
fallthrough: ["basic", "emacsy"]
|
3485 |
-
};
|
3486 |
-
keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault;
|
3487 |
-
keyMap.emacsy = {
|
3488 |
-
"Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
|
3489 |
-
"Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd",
|
3490 |
-
"Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore",
|
3491 |
-
"Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars"
|
3492 |
-
};
|
3493 |
-
|
3494 |
-
// KEYMAP DISPATCH
|
3495 |
-
|
3496 |
-
function getKeyMap(val) {
|
3497 |
-
if (typeof val == "string") return keyMap[val];
|
3498 |
-
else return val;
|
3499 |
-
}
|
3500 |
-
|
3501 |
-
function lookupKey(name, maps, handle) {
|
3502 |
-
function lookup(map) {
|
3503 |
-
map = getKeyMap(map);
|
3504 |
-
var found = map[name];
|
3505 |
-
if (found === false) return "stop";
|
3506 |
-
if (found != null && handle(found)) return true;
|
3507 |
-
if (map.nofallthrough) return "stop";
|
3508 |
-
|
3509 |
-
var fallthrough = map.fallthrough;
|
3510 |
-
if (fallthrough == null) return false;
|
3511 |
-
if (Object.prototype.toString.call(fallthrough) != "[object Array]")
|
3512 |
-
return lookup(fallthrough);
|
3513 |
-
for (var i = 0, e = fallthrough.length; i < e; ++i) {
|
3514 |
-
var done = lookup(fallthrough[i]);
|
3515 |
-
if (done) return done;
|
3516 |
-
}
|
3517 |
-
return false;
|
3518 |
-
}
|
3519 |
-
|
3520 |
-
for (var i = 0; i < maps.length; ++i) {
|
3521 |
-
var done = lookup(maps[i]);
|
3522 |
-
if (done) return done != "stop";
|
3523 |
-
}
|
3524 |
-
}
|
3525 |
-
function isModifierKey(event) {
|
3526 |
-
var name = keyNames[event.keyCode];
|
3527 |
-
return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod";
|
3528 |
-
}
|
3529 |
-
function keyName(event, noShift) {
|
3530 |
-
if (opera && event.keyCode == 34 && event["char"]) return false;
|
3531 |
-
var name = keyNames[event.keyCode];
|
3532 |
-
if (name == null || event.altGraphKey) return false;
|
3533 |
-
if (event.altKey) name = "Alt-" + name;
|
3534 |
-
if (flipCtrlCmd ? event.metaKey : event.ctrlKey) name = "Ctrl-" + name;
|
3535 |
-
if (flipCtrlCmd ? event.ctrlKey : event.metaKey) name = "Cmd-" + name;
|
3536 |
-
if (!noShift && event.shiftKey) name = "Shift-" + name;
|
3537 |
-
return name;
|
3538 |
-
}
|
3539 |
-
CodeMirror.lookupKey = lookupKey;
|
3540 |
-
CodeMirror.isModifierKey = isModifierKey;
|
3541 |
-
CodeMirror.keyName = keyName;
|
3542 |
-
|
3543 |
-
// FROMTEXTAREA
|
3544 |
-
|
3545 |
-
CodeMirror.fromTextArea = function(textarea, options) {
|
3546 |
-
if (!options) options = {};
|
3547 |
-
options.value = textarea.value;
|
3548 |
-
if (!options.tabindex && textarea.tabindex)
|
3549 |
-
options.tabindex = textarea.tabindex;
|
3550 |
-
if (!options.placeholder && textarea.placeholder)
|
3551 |
-
options.placeholder = textarea.placeholder;
|
3552 |
-
// Set autofocus to true if this textarea is focused, or if it has
|
3553 |
-
// autofocus and no other element is focused.
|
3554 |
-
if (options.autofocus == null) {
|
3555 |
-
var hasFocus = document.body;
|
3556 |
-
// doc.activeElement occasionally throws on IE
|
3557 |
-
try { hasFocus = document.activeElement; } catch(e) {}
|
3558 |
-
options.autofocus = hasFocus == textarea ||
|
3559 |
-
textarea.getAttribute("autofocus") != null && hasFocus == document.body;
|
3560 |
-
}
|
3561 |
-
|
3562 |
-
function save() {textarea.value = cm.getValue();}
|
3563 |
-
if (textarea.form) {
|
3564 |
-
on(textarea.form, "submit", save);
|
3565 |
-
// Deplorable hack to make the submit method do the right thing.
|
3566 |
-
if (!options.leaveSubmitMethodAlone) {
|
3567 |
-
var form = textarea.form, realSubmit = form.submit;
|
3568 |
-
try {
|
3569 |
-
var wrappedSubmit = form.submit = function() {
|
3570 |
-
save();
|
3571 |
-
form.submit = realSubmit;
|
3572 |
-
form.submit();
|
3573 |
-
form.submit = wrappedSubmit;
|
3574 |
-
};
|
3575 |
-
} catch(e) {}
|
3576 |
-
}
|
3577 |
-
}
|
3578 |
-
|
3579 |
-
textarea.style.display = "none";
|
3580 |
-
var cm = CodeMirror(function(node) {
|
3581 |
-
textarea.parentNode.insertBefore(node, textarea.nextSibling);
|
3582 |
-
}, options);
|
3583 |
-
cm.save = save;
|
3584 |
-
cm.getTextArea = function() { return textarea; };
|
3585 |
-
cm.toTextArea = function() {
|
3586 |
-
save();
|
3587 |
-
textarea.parentNode.removeChild(cm.getWrapperElement());
|
3588 |
-
textarea.style.display = "";
|
3589 |
-
if (textarea.form) {
|
3590 |
-
off(textarea.form, "submit", save);
|
3591 |
-
if (typeof textarea.form.submit == "function")
|
3592 |
-
textarea.form.submit = realSubmit;
|
3593 |
-
}
|
3594 |
-
};
|
3595 |
-
return cm;
|
3596 |
-
};
|
3597 |
-
|
3598 |
-
// STRING STREAM
|
3599 |
-
|
3600 |
-
// Fed to the mode parsers, provides helper functions to make
|
3601 |
-
// parsers more succinct.
|
3602 |
-
|
3603 |
-
// The character stream used by a mode's parser.
|
3604 |
-
function StringStream(string, tabSize) {
|
3605 |
-
this.pos = this.start = 0;
|
3606 |
-
this.string = string;
|
3607 |
-
this.tabSize = tabSize || 8;
|
3608 |
-
this.lastColumnPos = this.lastColumnValue = 0;
|
3609 |
-
}
|
3610 |
-
|
3611 |
-
StringStream.prototype = {
|
3612 |
-
eol: function() {return this.pos >= this.string.length;},
|
3613 |
-
sol: function() {return this.pos == 0;},
|
3614 |
-
peek: function() {return this.string.charAt(this.pos) || undefined;},
|
3615 |
-
next: function() {
|
3616 |
-
if (this.pos < this.string.length)
|
3617 |
-
return this.string.charAt(this.pos++);
|
3618 |
-
},
|
3619 |
-
eat: function(match) {
|
3620 |
-
var ch = this.string.charAt(this.pos);
|
3621 |
-
if (typeof match == "string") var ok = ch == match;
|
3622 |
-
else var ok = ch && (match.test ? match.test(ch) : match(ch));
|
3623 |
-
if (ok) {++this.pos; return ch;}
|
3624 |
-
},
|
3625 |
-
eatWhile: function(match) {
|
3626 |
-
var start = this.pos;
|
3627 |
-
while (this.eat(match)){}
|
3628 |
-
return this.pos > start;
|
3629 |
-
},
|
3630 |
-
eatSpace: function() {
|
3631 |
-
var start = this.pos;
|
3632 |
-
while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;
|
3633 |
-
return this.pos > start;
|
3634 |
-
},
|
3635 |
-
skipToEnd: function() {this.pos = this.string.length;},
|
3636 |
-
skipTo: function(ch) {
|
3637 |
-
var found = this.string.indexOf(ch, this.pos);
|
3638 |
-
if (found > -1) {this.pos = found; return true;}
|
3639 |
-
},
|
3640 |
-
backUp: function(n) {this.pos -= n;},
|
3641 |
-
column: function() {
|
3642 |
-
if (this.lastColumnPos < this.start) {
|
3643 |
-
this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);
|
3644 |
-
this.lastColumnPos = this.start;
|
3645 |
-
}
|
3646 |
-
return this.lastColumnValue;
|
3647 |
-
},
|
3648 |
-
indentation: function() {return countColumn(this.string, null, this.tabSize);},
|
3649 |
-
match: function(pattern, consume, caseInsensitive) {
|
3650 |
-
if (typeof pattern == "string") {
|
3651 |
-
var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};
|
3652 |
-
var substr = this.string.substr(this.pos, pattern.length);
|
3653 |
-
if (cased(substr) == cased(pattern)) {
|
3654 |
-
if (consume !== false) this.pos += pattern.length;
|
3655 |
-
return true;
|
3656 |
-
}
|
3657 |
-
} else {
|
3658 |
-
var match = this.string.slice(this.pos).match(pattern);
|
3659 |
-
if (match && match.index > 0) return null;
|
3660 |
-
if (match && consume !== false) this.pos += match[0].length;
|
3661 |
-
return match;
|
3662 |
-
}
|
3663 |
-
},
|
3664 |
-
current: function(){return this.string.slice(this.start, this.pos);}
|
3665 |
-
};
|
3666 |
-
CodeMirror.StringStream = StringStream;
|
3667 |
-
|
3668 |
-
// TEXTMARKERS
|
3669 |
-
|
3670 |
-
function TextMarker(doc, type) {
|
3671 |
-
this.lines = [];
|
3672 |
-
this.type = type;
|
3673 |
-
this.doc = doc;
|
3674 |
-
}
|
3675 |
-
CodeMirror.TextMarker = TextMarker;
|
3676 |
-
eventMixin(TextMarker);
|
3677 |
-
|
3678 |
-
TextMarker.prototype.clear = function() {
|
3679 |
-
if (this.explicitlyCleared) return;
|
3680 |
-
var cm = this.doc.cm, withOp = cm && !cm.curOp;
|
3681 |
-
if (withOp) startOperation(cm);
|
3682 |
-
if (hasHandler(this, "clear")) {
|
3683 |
-
var found = this.find();
|
3684 |
-
if (found) signalLater(this, "clear", found.from, found.to);
|
3685 |
-
}
|
3686 |
-
var min = null, max = null;
|
3687 |
-
for (var i = 0; i < this.lines.length; ++i) {
|
3688 |
-
var line = this.lines[i];
|
3689 |
-
var span = getMarkedSpanFor(line.markedSpans, this);
|
3690 |
-
if (span.to != null) max = lineNo(line);
|
3691 |
-
line.markedSpans = removeMarkedSpan(line.markedSpans, span);
|
3692 |
-
if (span.from != null)
|
3693 |
-
min = lineNo(line);
|
3694 |
-
else if (this.collapsed && !lineIsHidden(this.doc, line) && cm)
|
3695 |
-
updateLineHeight(line, textHeight(cm.display));
|
3696 |
-
}
|
3697 |
-
if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) {
|
3698 |
-
var visual = visualLine(cm.doc, this.lines[i]), len = lineLength(cm.doc, visual);
|
3699 |
-
if (len > cm.display.maxLineLength) {
|
3700 |
-
cm.display.maxLine = visual;
|
3701 |
-
cm.display.maxLineLength = len;
|
3702 |
-
cm.display.maxLineChanged = true;
|
3703 |
-
}
|
3704 |
-
}
|
3705 |
-
|
3706 |
-
if (min != null && cm) regChange(cm, min, max + 1);
|
3707 |
-
this.lines.length = 0;
|
3708 |
-
this.explicitlyCleared = true;
|
3709 |
-
if (this.atomic && this.doc.cantEdit) {
|
3710 |
-
this.doc.cantEdit = false;
|
3711 |
-
if (cm) reCheckSelection(cm);
|
3712 |
-
}
|
3713 |
-
if (withOp) endOperation(cm);
|
3714 |
-
};
|
3715 |
-
|
3716 |
-
TextMarker.prototype.find = function() {
|
3717 |
-
var from, to;
|
3718 |
-
for (var i = 0; i < this.lines.length; ++i) {
|
3719 |
-
var line = this.lines[i];
|
3720 |
-
var span = getMarkedSpanFor(line.markedSpans, this);
|
3721 |
-
if (span.from != null || span.to != null) {
|
3722 |
-
var found = lineNo(line);
|
3723 |
-
if (span.from != null) from = Pos(found, span.from);
|
3724 |
-
if (span.to != null) to = Pos(found, span.to);
|
3725 |
-
}
|
3726 |
-
}
|
3727 |
-
if (this.type == "bookmark") return from;
|
3728 |
-
return from && {from: from, to: to};
|
3729 |
-
};
|
3730 |
-
|
3731 |
-
TextMarker.prototype.changed = function() {
|
3732 |
-
var pos = this.find(), cm = this.doc.cm;
|
3733 |
-
if (!pos || !cm) return;
|
3734 |
-
var line = getLine(this.doc, pos.from.line);
|
3735 |
-
clearCachedMeasurement(cm, line);
|
3736 |
-
if (pos.from.line >= cm.display.showingFrom && pos.from.line < cm.display.showingTo) {
|
3737 |
-
for (var node = cm.display.lineDiv.firstChild; node; node = node.nextSibling) if (node.lineObj == line) {
|
3738 |
-
if (node.offsetHeight != line.height) updateLineHeight(line, node.offsetHeight);
|
3739 |
-
break;
|
3740 |
-
}
|
3741 |
-
runInOp(cm, function() {
|
3742 |
-
cm.curOp.selectionChanged = cm.curOp.forceUpdate = cm.curOp.updateMaxLine = true;
|
3743 |
-
});
|
3744 |
-
}
|
3745 |
-
};
|
3746 |
-
|
3747 |
-
TextMarker.prototype.attachLine = function(line) {
|
3748 |
-
if (!this.lines.length && this.doc.cm) {
|
3749 |
-
var op = this.doc.cm.curOp;
|
3750 |
-
if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)
|
3751 |
-
(op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this);
|
3752 |
-
}
|
3753 |
-
this.lines.push(line);
|
3754 |
-
};
|
3755 |
-
TextMarker.prototype.detachLine = function(line) {
|
3756 |
-
this.lines.splice(indexOf(this.lines, line), 1);
|
3757 |
-
if (!this.lines.length && this.doc.cm) {
|
3758 |
-
var op = this.doc.cm.curOp;
|
3759 |
-
(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);
|
3760 |
-
}
|
3761 |
-
};
|
3762 |
-
|
3763 |
-
function markText(doc, from, to, options, type) {
|
3764 |
-
if (options && options.shared) return markTextShared(doc, from, to, options, type);
|
3765 |
-
if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type);
|
3766 |
-
|
3767 |
-
var marker = new TextMarker(doc, type);
|
3768 |
-
if (type == "range" && !posLess(from, to)) return marker;
|
3769 |
-
if (options) copyObj(options, marker);
|
3770 |
-
if (marker.replacedWith) {
|
3771 |
-
marker.collapsed = true;
|
3772 |
-
marker.replacedWith = elt("span", [marker.replacedWith], "CodeMirror-widget");
|
3773 |
-
if (!options.handleMouseEvents) marker.replacedWith.ignoreEvents = true;
|
3774 |
-
}
|
3775 |
-
if (marker.collapsed) sawCollapsedSpans = true;
|
3776 |
-
|
3777 |
-
if (marker.addToHistory)
|
3778 |
-
addToHistory(doc, {from: from, to: to, origin: "markText"},
|
3779 |
-
{head: doc.sel.head, anchor: doc.sel.anchor}, NaN);
|
3780 |
-
|
3781 |
-
var curLine = from.line, size = 0, collapsedAtStart, collapsedAtEnd, cm = doc.cm, updateMaxLine;
|
3782 |
-
doc.iter(curLine, to.line + 1, function(line) {
|
3783 |
-
if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(doc, line) == cm.display.maxLine)
|
3784 |
-
updateMaxLine = true;
|
3785 |
-
var span = {from: null, to: null, marker: marker};
|
3786 |
-
size += line.text.length;
|
3787 |
-
if (curLine == from.line) {span.from = from.ch; size -= from.ch;}
|
3788 |
-
if (curLine == to.line) {span.to = to.ch; size -= line.text.length - to.ch;}
|
3789 |
-
if (marker.collapsed) {
|
3790 |
-
if (curLine == to.line) collapsedAtEnd = collapsedSpanAt(line, to.ch);
|
3791 |
-
if (curLine == from.line) collapsedAtStart = collapsedSpanAt(line, from.ch);
|
3792 |
-
else updateLineHeight(line, 0);
|
3793 |
-
}
|
3794 |
-
addMarkedSpan(line, span);
|
3795 |
-
++curLine;
|
3796 |
-
});
|
3797 |
-
if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) {
|
3798 |
-
if (lineIsHidden(doc, line)) updateLineHeight(line, 0);
|
3799 |
-
});
|
3800 |
-
|
3801 |
-
if (marker.clearOnEnter) on(marker, "beforeCursorEnter", function() { marker.clear(); });
|
3802 |
-
|
3803 |
-
if (marker.readOnly) {
|
3804 |
-
sawReadOnlySpans = true;
|
3805 |
-
if (doc.history.done.length || doc.history.undone.length)
|
3806 |
-
doc.clearHistory();
|
3807 |
-
}
|
3808 |
-
if (marker.collapsed) {
|
3809 |
-
if (collapsedAtStart != collapsedAtEnd)
|
3810 |
-
throw new Error("Inserting collapsed marker overlapping an existing one");
|
3811 |
-
marker.size = size;
|
3812 |
-
marker.atomic = true;
|
3813 |
-
}
|
3814 |
-
if (cm) {
|
3815 |
-
if (updateMaxLine) cm.curOp.updateMaxLine = true;
|
3816 |
-
if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.collapsed)
|
3817 |
-
regChange(cm, from.line, to.line + 1);
|
3818 |
-
if (marker.atomic) reCheckSelection(cm);
|
3819 |
-
}
|
3820 |
-
return marker;
|
3821 |
-
}
|
3822 |
-
|
3823 |
-
// SHARED TEXTMARKERS
|
3824 |
-
|
3825 |
-
function SharedTextMarker(markers, primary) {
|
3826 |
-
this.markers = markers;
|
3827 |
-
this.primary = primary;
|
3828 |
-
for (var i = 0, me = this; i < markers.length; ++i) {
|
3829 |
-
markers[i].parent = this;
|
3830 |
-
on(markers[i], "clear", function(){me.clear();});
|
3831 |
-
}
|
3832 |
-
}
|
3833 |
-
CodeMirror.SharedTextMarker = SharedTextMarker;
|
3834 |
-
eventMixin(SharedTextMarker);
|
3835 |
-
|
3836 |
-
SharedTextMarker.prototype.clear = function() {
|
3837 |
-
if (this.explicitlyCleared) return;
|
3838 |
-
this.explicitlyCleared = true;
|
3839 |
-
for (var i = 0; i < this.markers.length; ++i)
|
3840 |
-
this.markers[i].clear();
|
3841 |
-
signalLater(this, "clear");
|
3842 |
-
};
|
3843 |
-
SharedTextMarker.prototype.find = function() {
|
3844 |
-
return this.primary.find();
|
3845 |
-
};
|
3846 |
-
|
3847 |
-
function markTextShared(doc, from, to, options, type) {
|
3848 |
-
options = copyObj(options);
|
3849 |
-
options.shared = false;
|
3850 |
-
var markers = [markText(doc, from, to, options, type)], primary = markers[0];
|
3851 |
-
var widget = options.replacedWith;
|
3852 |
-
linkedDocs(doc, function(doc) {
|
3853 |
-
if (widget) options.replacedWith = widget.cloneNode(true);
|
3854 |
-
markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));
|
3855 |
-
for (var i = 0; i < doc.linked.length; ++i)
|
3856 |
-
if (doc.linked[i].isParent) return;
|
3857 |
-
primary = lst(markers);
|
3858 |
-
});
|
3859 |
-
return new SharedTextMarker(markers, primary);
|
3860 |
-
}
|
3861 |
-
|
3862 |
-
// TEXTMARKER SPANS
|
3863 |
-
|
3864 |
-
function getMarkedSpanFor(spans, marker) {
|
3865 |
-
if (spans) for (var i = 0; i < spans.length; ++i) {
|
3866 |
-
var span = spans[i];
|
3867 |
-
if (span.marker == marker) return span;
|
3868 |
-
}
|
3869 |
-
}
|
3870 |
-
function removeMarkedSpan(spans, span) {
|
3871 |
-
for (var r, i = 0; i < spans.length; ++i)
|
3872 |
-
if (spans[i] != span) (r || (r = [])).push(spans[i]);
|
3873 |
-
return r;
|
3874 |
-
}
|
3875 |
-
function addMarkedSpan(line, span) {
|
3876 |
-
line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];
|
3877 |
-
span.marker.attachLine(line);
|
3878 |
-
}
|
3879 |
-
|
3880 |
-
function markedSpansBefore(old, startCh, isInsert) {
|
3881 |
-
if (old) for (var i = 0, nw; i < old.length; ++i) {
|
3882 |
-
var span = old[i], marker = span.marker;
|
3883 |
-
var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);
|
3884 |
-
if (startsBefore || marker.type == "bookmark" && span.from == startCh && (!isInsert || !span.marker.insertLeft)) {
|
3885 |
-
var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);
|
3886 |
-
(nw || (nw = [])).push({from: span.from,
|
3887 |
-
to: endsAfter ? null : span.to,
|
3888 |
-
marker: marker});
|
3889 |
-
}
|
3890 |
-
}
|
3891 |
-
return nw;
|
3892 |
-
}
|
3893 |
-
|
3894 |
-
function markedSpansAfter(old, endCh, isInsert) {
|
3895 |
-
if (old) for (var i = 0, nw; i < old.length; ++i) {
|
3896 |
-
var span = old[i], marker = span.marker;
|
3897 |
-
var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);
|
3898 |
-
if (endsAfter || marker.type == "bookmark" && span.from == endCh && (!isInsert || span.marker.insertLeft)) {
|
3899 |
-
var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);
|
3900 |
-
(nw || (nw = [])).push({from: startsBefore ? null : span.from - endCh,
|
3901 |
-
to: span.to == null ? null : span.to - endCh,
|
3902 |
-
marker: marker});
|
3903 |
-
}
|
3904 |
-
}
|
3905 |
-
return nw;
|
3906 |
-
}
|
3907 |
-
|
3908 |
-
function stretchSpansOverChange(doc, change) {
|
3909 |
-
var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;
|
3910 |
-
var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;
|
3911 |
-
if (!oldFirst && !oldLast) return null;
|
3912 |
-
|
3913 |
-
var startCh = change.from.ch, endCh = change.to.ch, isInsert = posEq(change.from, change.to);
|
3914 |
-
// Get the spans that 'stick out' on both sides
|
3915 |
-
var first = markedSpansBefore(oldFirst, startCh, isInsert);
|
3916 |
-
var last = markedSpansAfter(oldLast, endCh, isInsert);
|
3917 |
-
|
3918 |
-
// Next, merge those two ends
|
3919 |
-
var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);
|
3920 |
-
if (first) {
|
3921 |
-
// Fix up .to properties of first
|
3922 |
-
for (var i = 0; i < first.length; ++i) {
|
3923 |
-
var span = first[i];
|
3924 |
-
if (span.to == null) {
|
3925 |
-
var found = getMarkedSpanFor(last, span.marker);
|
3926 |
-
if (!found) span.to = startCh;
|
3927 |
-
else if (sameLine) span.to = found.to == null ? null : found.to + offset;
|
3928 |
-
}
|
3929 |
-
}
|
3930 |
-
}
|
3931 |
-
if (last) {
|
3932 |
-
// Fix up .from in last (or move them into first in case of sameLine)
|
3933 |
-
for (var i = 0; i < last.length; ++i) {
|
3934 |
-
var span = last[i];
|
3935 |
-
if (span.to != null) span.to += offset;
|
3936 |
-
if (span.from == null) {
|
3937 |
-
var found = getMarkedSpanFor(first, span.marker);
|
3938 |
-
if (!found) {
|
3939 |
-
span.from = offset;
|
3940 |
-
if (sameLine) (first || (first = [])).push(span);
|
3941 |
-
}
|
3942 |
-
} else {
|
3943 |
-
span.from += offset;
|
3944 |
-
if (sameLine) (first || (first = [])).push(span);
|
3945 |
-
}
|
3946 |
-
}
|
3947 |
-
}
|
3948 |
-
if (sameLine && first) {
|
3949 |
-
// Make sure we didn't create any zero-length spans
|
3950 |
-
for (var i = 0; i < first.length; ++i)
|
3951 |
-
if (first[i].from != null && first[i].from == first[i].to && first[i].marker.type != "bookmark")
|
3952 |
-
first.splice(i--, 1);
|
3953 |
-
if (!first.length) first = null;
|
3954 |
-
}
|
3955 |
-
|
3956 |
-
var newMarkers = [first];
|
3957 |
-
if (!sameLine) {
|
3958 |
-
// Fill gap with whole-line-spans
|
3959 |
-
var gap = change.text.length - 2, gapMarkers;
|
3960 |
-
if (gap > 0 && first)
|
3961 |
-
for (var i = 0; i < first.length; ++i)
|
3962 |
-
if (first[i].to == null)
|
3963 |
-
(gapMarkers || (gapMarkers = [])).push({from: null, to: null, marker: first[i].marker});
|
3964 |
-
for (var i = 0; i < gap; ++i)
|
3965 |
-
newMarkers.push(gapMarkers);
|
3966 |
-
newMarkers.push(last);
|
3967 |
-
}
|
3968 |
-
return newMarkers;
|
3969 |
-
}
|
3970 |
-
|
3971 |
-
function mergeOldSpans(doc, change) {
|
3972 |
-
var old = getOldSpans(doc, change);
|
3973 |
-
var stretched = stretchSpansOverChange(doc, change);
|
3974 |
-
if (!old) return stretched;
|
3975 |
-
if (!stretched) return old;
|
3976 |
-
|
3977 |
-
for (var i = 0; i < old.length; ++i) {
|
3978 |
-
var oldCur = old[i], stretchCur = stretched[i];
|
3979 |
-
if (oldCur && stretchCur) {
|
3980 |
-
spans: for (var j = 0; j < stretchCur.length; ++j) {
|
3981 |
-
var span = stretchCur[j];
|
3982 |
-
for (var k = 0; k < oldCur.length; ++k)
|
3983 |
-
if (oldCur[k].marker == span.marker) continue spans;
|
3984 |
-
oldCur.push(span);
|
3985 |
-
}
|
3986 |
-
} else if (stretchCur) {
|
3987 |
-
old[i] = stretchCur;
|
3988 |
-
}
|
3989 |
-
}
|
3990 |
-
return old;
|
3991 |
-
}
|
3992 |
-
|
3993 |
-
function removeReadOnlyRanges(doc, from, to) {
|
3994 |
-
var markers = null;
|
3995 |
-
doc.iter(from.line, to.line + 1, function(line) {
|
3996 |
-
if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) {
|
3997 |
-
var mark = line.markedSpans[i].marker;
|
3998 |
-
if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))
|
3999 |
-
(markers || (markers = [])).push(mark);
|
4000 |
-
}
|
4001 |
-
});
|
4002 |
-
if (!markers) return null;
|
4003 |
-
var parts = [{from: from, to: to}];
|
4004 |
-
for (var i = 0; i < markers.length; ++i) {
|
4005 |
-
var mk = markers[i], m = mk.find();
|
4006 |
-
for (var j = 0; j < parts.length; ++j) {
|
4007 |
-
var p = parts[j];
|
4008 |
-
if (posLess(p.to, m.from) || posLess(m.to, p.from)) continue;
|
4009 |
-
var newParts = [j, 1];
|
4010 |
-
if (posLess(p.from, m.from) || !mk.inclusiveLeft && posEq(p.from, m.from))
|
4011 |
-
newParts.push({from: p.from, to: m.from});
|
4012 |
-
if (posLess(m.to, p.to) || !mk.inclusiveRight && posEq(p.to, m.to))
|
4013 |
-
newParts.push({from: m.to, to: p.to});
|
4014 |
-
parts.splice.apply(parts, newParts);
|
4015 |
-
j += newParts.length - 1;
|
4016 |
-
}
|
4017 |
-
}
|
4018 |
-
return parts;
|
4019 |
-
}
|
4020 |
-
|
4021 |
-
function collapsedSpanAt(line, ch) {
|
4022 |
-
var sps = sawCollapsedSpans && line.markedSpans, found;
|
4023 |
-
if (sps) for (var sp, i = 0; i < sps.length; ++i) {
|
4024 |
-
sp = sps[i];
|
4025 |
-
if (!sp.marker.collapsed) continue;
|
4026 |
-
if ((sp.from == null || sp.from < ch) &&
|
4027 |
-
(sp.to == null || sp.to > ch) &&
|
4028 |
-
(!found || found.width < sp.marker.width))
|
4029 |
-
found = sp.marker;
|
4030 |
-
}
|
4031 |
-
return found;
|
4032 |
-
}
|
4033 |
-
function collapsedSpanAtStart(line) { return collapsedSpanAt(line, -1); }
|
4034 |
-
function collapsedSpanAtEnd(line) { return collapsedSpanAt(line, line.text.length + 1); }
|
4035 |
-
|
4036 |
-
function visualLine(doc, line) {
|
4037 |
-
var merged;
|
4038 |
-
while (merged = collapsedSpanAtStart(line))
|
4039 |
-
line = getLine(doc, merged.find().from.line);
|
4040 |
-
return line;
|
4041 |
-
}
|
4042 |
-
|
4043 |
-
function lineIsHidden(doc, line) {
|
4044 |
-
var sps = sawCollapsedSpans && line.markedSpans;
|
4045 |
-
if (sps) for (var sp, i = 0; i < sps.length; ++i) {
|
4046 |
-
sp = sps[i];
|
4047 |
-
if (!sp.marker.collapsed) continue;
|
4048 |
-
if (sp.from == null) return true;
|
4049 |
-
if (sp.marker.replacedWith) continue;
|
4050 |
-
if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))
|
4051 |
-
return true;
|
4052 |
-
}
|
4053 |
-
}
|
4054 |
-
function lineIsHiddenInner(doc, line, span) {
|
4055 |
-
if (span.to == null) {
|
4056 |
-
var end = span.marker.find().to, endLine = getLine(doc, end.line);
|
4057 |
-
return lineIsHiddenInner(doc, endLine, getMarkedSpanFor(endLine.markedSpans, span.marker));
|
4058 |
-
}
|
4059 |
-
if (span.marker.inclusiveRight && span.to == line.text.length)
|
4060 |
-
return true;
|
4061 |
-
for (var sp, i = 0; i < line.markedSpans.length; ++i) {
|
4062 |
-
sp = line.markedSpans[i];
|
4063 |
-
if (sp.marker.collapsed && !sp.marker.replacedWith && sp.from == span.to &&
|
4064 |
-
(sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&
|
4065 |
-
lineIsHiddenInner(doc, line, sp)) return true;
|
4066 |
-
}
|
4067 |
-
}
|
4068 |
-
|
4069 |
-
function detachMarkedSpans(line) {
|
4070 |
-
var spans = line.markedSpans;
|
4071 |
-
if (!spans) return;
|
4072 |
-
for (var i = 0; i < spans.length; ++i)
|
4073 |
-
spans[i].marker.detachLine(line);
|
4074 |
-
line.markedSpans = null;
|
4075 |
-
}
|
4076 |
-
|
4077 |
-
function attachMarkedSpans(line, spans) {
|
4078 |
-
if (!spans) return;
|
4079 |
-
for (var i = 0; i < spans.length; ++i)
|
4080 |
-
spans[i].marker.attachLine(line);
|
4081 |
-
line.markedSpans = spans;
|
4082 |
-
}
|
4083 |
-
|
4084 |
-
// LINE WIDGETS
|
4085 |
-
|
4086 |
-
var LineWidget = CodeMirror.LineWidget = function(cm, node, options) {
|
4087 |
-
if (options) for (var opt in options) if (options.hasOwnProperty(opt))
|
4088 |
-
this[opt] = options[opt];
|
4089 |
-
this.cm = cm;
|
4090 |
-
this.node = node;
|
4091 |
-
};
|
4092 |
-
eventMixin(LineWidget);
|
4093 |
-
function widgetOperation(f) {
|
4094 |
-
return function() {
|
4095 |
-
var withOp = !this.cm.curOp;
|
4096 |
-
if (withOp) startOperation(this.cm);
|
4097 |
-
try {var result = f.apply(this, arguments);}
|
4098 |
-
finally {if (withOp) endOperation(this.cm);}
|
4099 |
-
return result;
|
4100 |
-
};
|
4101 |
-
}
|
4102 |
-
LineWidget.prototype.clear = widgetOperation(function() {
|
4103 |
-
var ws = this.line.widgets, no = lineNo(this.line);
|
4104 |
-
if (no == null || !ws) return;
|
4105 |
-
for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1);
|
4106 |
-
if (!ws.length) this.line.widgets = null;
|
4107 |
-
var aboveVisible = heightAtLine(this.cm, this.line) < this.cm.doc.scrollTop;
|
4108 |
-
updateLineHeight(this.line, Math.max(0, this.line.height - widgetHeight(this)));
|
4109 |
-
if (aboveVisible) addToScrollPos(this.cm, 0, -this.height);
|
4110 |
-
regChange(this.cm, no, no + 1);
|
4111 |
-
});
|
4112 |
-
LineWidget.prototype.changed = widgetOperation(function() {
|
4113 |
-
var oldH = this.height;
|
4114 |
-
this.height = null;
|
4115 |
-
var diff = widgetHeight(this) - oldH;
|
4116 |
-
if (!diff) return;
|
4117 |
-
updateLineHeight(this.line, this.line.height + diff);
|
4118 |
-
var no = lineNo(this.line);
|
4119 |
-
regChange(this.cm, no, no + 1);
|
4120 |
-
});
|
4121 |
-
|
4122 |
-
function widgetHeight(widget) {
|
4123 |
-
if (widget.height != null) return widget.height;
|
4124 |
-
if (!widget.node.parentNode || widget.node.parentNode.nodeType != 1)
|
4125 |
-
removeChildrenAndAdd(widget.cm.display.measure, elt("div", [widget.node], null, "position: relative"));
|
4126 |
-
return widget.height = widget.node.offsetHeight;
|
4127 |
-
}
|
4128 |
-
|
4129 |
-
function addLineWidget(cm, handle, node, options) {
|
4130 |
-
var widget = new LineWidget(cm, node, options);
|
4131 |
-
if (widget.noHScroll) cm.display.alignWidgets = true;
|
4132 |
-
changeLine(cm, handle, function(line) {
|
4133 |
-
var widgets = line.widgets || (line.widgets = []);
|
4134 |
-
if (widget.insertAt == null) widgets.push(widget);
|
4135 |
-
else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget);
|
4136 |
-
widget.line = line;
|
4137 |
-
if (!lineIsHidden(cm.doc, line) || widget.showIfHidden) {
|
4138 |
-
var aboveVisible = heightAtLine(cm, line) < cm.doc.scrollTop;
|
4139 |
-
updateLineHeight(line, line.height + widgetHeight(widget));
|
4140 |
-
if (aboveVisible) addToScrollPos(cm, 0, widget.height);
|
4141 |
-
}
|
4142 |
-
return true;
|
4143 |
-
});
|
4144 |
-
return widget;
|
4145 |
-
}
|
4146 |
-
|
4147 |
-
// LINE DATA STRUCTURE
|
4148 |
-
|
4149 |
-
// Line objects. These hold state related to a line, including
|
4150 |
-
// highlighting info (the styles array).
|
4151 |
-
var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) {
|
4152 |
-
this.text = text;
|
4153 |
-
attachMarkedSpans(this, markedSpans);
|
4154 |
-
this.height = estimateHeight ? estimateHeight(this) : 1;
|
4155 |
-
};
|
4156 |
-
eventMixin(Line);
|
4157 |
-
|
4158 |
-
function updateLine(line, text, markedSpans, estimateHeight) {
|
4159 |
-
line.text = text;
|
4160 |
-
if (line.stateAfter) line.stateAfter = null;
|
4161 |
-
if (line.styles) line.styles = null;
|
4162 |
-
if (line.order != null) line.order = null;
|
4163 |
-
detachMarkedSpans(line);
|
4164 |
-
attachMarkedSpans(line, markedSpans);
|
4165 |
-
var estHeight = estimateHeight ? estimateHeight(line) : 1;
|
4166 |
-
if (estHeight != line.height) updateLineHeight(line, estHeight);
|
4167 |
-
}
|
4168 |
-
|
4169 |
-
function cleanUpLine(line) {
|
4170 |
-
line.parent = null;
|
4171 |
-
detachMarkedSpans(line);
|
4172 |
-
}
|
4173 |
-
|
4174 |
-
// Run the given mode's parser over a line, update the styles
|
4175 |
-
// array, which contains alternating fragments of text and CSS
|
4176 |
-
// classes.
|
4177 |
-
function runMode(cm, text, mode, state, f) {
|
4178 |
-
var flattenSpans = mode.flattenSpans;
|
4179 |
-
if (flattenSpans == null) flattenSpans = cm.options.flattenSpans;
|
4180 |
-
var curStart = 0, curStyle = null;
|
4181 |
-
var stream = new StringStream(text, cm.options.tabSize), style;
|
4182 |
-
if (text == "" && mode.blankLine) mode.blankLine(state);
|
4183 |
-
while (!stream.eol()) {
|
4184 |
-
if (stream.pos > cm.options.maxHighlightLength) {
|
4185 |
-
flattenSpans = false;
|
4186 |
-
// Webkit seems to refuse to render text nodes longer than 57444 characters
|
4187 |
-
stream.pos = Math.min(text.length, stream.start + 50000);
|
4188 |
-
style = null;
|
4189 |
-
} else {
|
4190 |
-
style = mode.token(stream, state);
|
4191 |
-
}
|
4192 |
-
if (!flattenSpans || curStyle != style) {
|
4193 |
-
if (curStart < stream.start) f(stream.start, curStyle);
|
4194 |
-
curStart = stream.start; curStyle = style;
|
4195 |
-
}
|
4196 |
-
stream.start = stream.pos;
|
4197 |
-
}
|
4198 |
-
if (curStart < stream.pos) f(stream.pos, curStyle);
|
4199 |
-
}
|
4200 |
-
|
4201 |
-
function highlightLine(cm, line, state) {
|
4202 |
-
// A styles array always starts with a number identifying the
|
4203 |
-
// mode/overlays that it is based on (for easy invalidation).
|
4204 |
-
var st = [cm.state.modeGen];
|
4205 |
-
// Compute the base array of styles
|
4206 |
-
runMode(cm, line.text, cm.doc.mode, state, function(end, style) {st.push(end, style);});
|
4207 |
-
|
4208 |
-
// Run overlays, adjust style array.
|
4209 |
-
for (var o = 0; o < cm.state.overlays.length; ++o) {
|
4210 |
-
var overlay = cm.state.overlays[o], i = 1, at = 0;
|
4211 |
-
runMode(cm, line.text, overlay.mode, true, function(end, style) {
|
4212 |
-
var start = i;
|
4213 |
-
// Ensure there's a token end at the current position, and that i points at it
|
4214 |
-
while (at < end) {
|
4215 |
-
var i_end = st[i];
|
4216 |
-
if (i_end > end)
|
4217 |
-
st.splice(i, 1, end, st[i+1], i_end);
|
4218 |
-
i += 2;
|
4219 |
-
at = Math.min(end, i_end);
|
4220 |
-
}
|
4221 |
-
if (!style) return;
|
4222 |
-
if (overlay.opaque) {
|
4223 |
-
st.splice(start, i - start, end, style);
|
4224 |
-
i = start + 2;
|
4225 |
-
} else {
|
4226 |
-
for (; start < i; start += 2) {
|
4227 |
-
var cur = st[start+1];
|
4228 |
-
st[start+1] = cur ? cur + " " + style : style;
|
4229 |
-
}
|
4230 |
-
}
|
4231 |
-
});
|
4232 |
-
}
|
4233 |
-
|
4234 |
-
return st;
|
4235 |
-
}
|
4236 |
-
|
4237 |
-
function getLineStyles(cm, line) {
|
4238 |
-
if (!line.styles || line.styles[0] != cm.state.modeGen)
|
4239 |
-
line.styles = highlightLine(cm, line, line.stateAfter = getStateBefore(cm, lineNo(line)));
|
4240 |
-
return line.styles;
|
4241 |
-
}
|
4242 |
-
|
4243 |
-
// Lightweight form of highlight -- proceed over this line and
|
4244 |
-
// update state, but don't save a style array.
|
4245 |
-
function processLine(cm, line, state) {
|
4246 |
-
var mode = cm.doc.mode;
|
4247 |
-
var stream = new StringStream(line.text, cm.options.tabSize);
|
4248 |
-
if (line.text == "" && mode.blankLine) mode.blankLine(state);
|
4249 |
-
while (!stream.eol() && stream.pos <= cm.options.maxHighlightLength) {
|
4250 |
-
mode.token(stream, state);
|
4251 |
-
stream.start = stream.pos;
|
4252 |
-
}
|
4253 |
-
}
|
4254 |
-
|
4255 |
-
var styleToClassCache = {};
|
4256 |
-
function styleToClass(style) {
|
4257 |
-
if (!style) return null;
|
4258 |
-
return styleToClassCache[style] ||
|
4259 |
-
(styleToClassCache[style] = "cm-" + style.replace(/ +/g, " cm-"));
|
4260 |
-
}
|
4261 |
-
|
4262 |
-
function lineContent(cm, realLine, measure, copyWidgets) {
|
4263 |
-
var merged, line = realLine, empty = true;
|
4264 |
-
while (merged = collapsedSpanAtStart(line))
|
4265 |
-
line = getLine(cm.doc, merged.find().from.line);
|
4266 |
-
|
4267 |
-
var builder = {pre: elt("pre"), col: 0, pos: 0,
|
4268 |
-
measure: null, measuredSomething: false, cm: cm,
|
4269 |
-
copyWidgets: copyWidgets};
|
4270 |
-
if (line.textClass) builder.pre.className = line.textClass;
|
4271 |
-
|
4272 |
-
do {
|
4273 |
-
if (line.text) empty = false;
|
4274 |
-
builder.measure = line == realLine && measure;
|
4275 |
-
builder.pos = 0;
|
4276 |
-
builder.addToken = builder.measure ? buildTokenMeasure : buildToken;
|
4277 |
-
if ((ie || webkit) && cm.getOption("lineWrapping"))
|
4278 |
-
builder.addToken = buildTokenSplitSpaces(builder.addToken);
|
4279 |
-
var next = insertLineContent(line, builder, getLineStyles(cm, line));
|
4280 |
-
if (measure && line == realLine && !builder.measuredSomething) {
|
4281 |
-
measure[0] = builder.pre.appendChild(zeroWidthElement(cm.display.measure));
|
4282 |
-
builder.measuredSomething = true;
|
4283 |
-
}
|
4284 |
-
if (next) line = getLine(cm.doc, next.to.line);
|
4285 |
-
} while (next);
|
4286 |
-
|
4287 |
-
if (measure && !builder.measuredSomething && !measure[0])
|
4288 |
-
measure[0] = builder.pre.appendChild(empty ? elt("span", "\u00a0") : zeroWidthElement(cm.display.measure));
|
4289 |
-
if (!builder.pre.firstChild && !lineIsHidden(cm.doc, realLine))
|
4290 |
-
builder.pre.appendChild(document.createTextNode("\u00a0"));
|
4291 |
-
|
4292 |
-
var order;
|
4293 |
-
// Work around problem with the reported dimensions of single-char
|
4294 |
-
// direction spans on IE (issue #1129). See also the comment in
|
4295 |
-
// cursorCoords.
|
4296 |
-
if (measure && ie && (order = getOrder(line))) {
|
4297 |
-
var l = order.length - 1;
|
4298 |
-
if (order[l].from == order[l].to) --l;
|
4299 |
-
var last = order[l], prev = order[l - 1];
|
4300 |
-
if (last.from + 1 == last.to && prev && last.level < prev.level) {
|
4301 |
-
var span = measure[builder.pos - 1];
|
4302 |
-
if (span) span.parentNode.insertBefore(span.measureRight = zeroWidthElement(cm.display.measure),
|
4303 |
-
span.nextSibling);
|
4304 |
-
}
|
4305 |
-
}
|
4306 |
-
|
4307 |
-
signal(cm, "renderLine", cm, realLine, builder.pre);
|
4308 |
-
return builder.pre;
|
4309 |
-
}
|
4310 |
-
|
4311 |
-
var tokenSpecialChars = /[\t\u0000-\u0019\u00ad\u200b\u2028\u2029\uFEFF]/g;
|
4312 |
-
function buildToken(builder, text, style, startStyle, endStyle, title) {
|
4313 |
-
if (!text) return;
|
4314 |
-
if (!tokenSpecialChars.test(text)) {
|
4315 |
-
builder.col += text.length;
|
4316 |
-
var content = document.createTextNode(text);
|
4317 |
-
} else {
|
4318 |
-
var content = document.createDocumentFragment(), pos = 0;
|
4319 |
-
while (true) {
|
4320 |
-
tokenSpecialChars.lastIndex = pos;
|
4321 |
-
var m = tokenSpecialChars.exec(text);
|
4322 |
-
var skipped = m ? m.index - pos : text.length - pos;
|
4323 |
-
if (skipped) {
|
4324 |
-
content.appendChild(document.createTextNode(text.slice(pos, pos + skipped)));
|
4325 |
-
builder.col += skipped;
|
4326 |
-
}
|
4327 |
-
if (!m) break;
|
4328 |
-
pos += skipped + 1;
|
4329 |
-
if (m[0] == "\t") {
|
4330 |
-
var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;
|
4331 |
-
content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab"));
|
4332 |
-
builder.col += tabWidth;
|
4333 |
-
} else {
|
4334 |
-
var token = elt("span", "\u2022", "cm-invalidchar");
|
4335 |
-
token.title = "\\u" + m[0].charCodeAt(0).toString(16);
|
4336 |
-
content.appendChild(token);
|
4337 |
-
builder.col += 1;
|
4338 |
-
}
|
4339 |
-
}
|
4340 |
-
}
|
4341 |
-
if (style || startStyle || endStyle || builder.measure) {
|
4342 |
-
var fullStyle = style || "";
|
4343 |
-
if (startStyle) fullStyle += startStyle;
|
4344 |
-
if (endStyle) fullStyle += endStyle;
|
4345 |
-
var token = elt("span", [content], fullStyle);
|
4346 |
-
if (title) token.title = title;
|
4347 |
-
return builder.pre.appendChild(token);
|
4348 |
-
}
|
4349 |
-
builder.pre.appendChild(content);
|
4350 |
-
}
|
4351 |
-
|
4352 |
-
function buildTokenMeasure(builder, text, style, startStyle, endStyle) {
|
4353 |
-
var wrapping = builder.cm.options.lineWrapping;
|
4354 |
-
for (var i = 0; i < text.length; ++i) {
|
4355 |
-
var ch = text.charAt(i), start = i == 0;
|
4356 |
-
if (ch >= "\ud800" && ch < "\udbff" && i < text.length - 1) {
|
4357 |
-
ch = text.slice(i, i + 2);
|
4358 |
-
++i;
|
4359 |
-
} else if (i && wrapping && spanAffectsWrapping(text, i)) {
|
4360 |
-
builder.pre.appendChild(elt("wbr"));
|
4361 |
-
}
|
4362 |
-
var old = builder.measure[builder.pos];
|
4363 |
-
var span = builder.measure[builder.pos] =
|
4364 |
-
buildToken(builder, ch, style,
|
4365 |
-
start && startStyle, i == text.length - 1 && endStyle);
|
4366 |
-
if (old) span.leftSide = old.leftSide || old;
|
4367 |
-
// In IE single-space nodes wrap differently than spaces
|
4368 |
-
// embedded in larger text nodes, except when set to
|
4369 |
-
// white-space: normal (issue #1268).
|
4370 |
-
if (ie && wrapping && ch == " " && i && !/\s/.test(text.charAt(i - 1)) &&
|
4371 |
-
i < text.length - 1 && !/\s/.test(text.charAt(i + 1)))
|
4372 |
-
span.style.whiteSpace = "normal";
|
4373 |
-
builder.pos += ch.length;
|
4374 |
-
}
|
4375 |
-
if (text.length) builder.measuredSomething = true;
|
4376 |
-
}
|
4377 |
-
|
4378 |
-
function buildTokenSplitSpaces(inner) {
|
4379 |
-
function split(old) {
|
4380 |
-
var out = " ";
|
4381 |
-
for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? " " : "\u00a0";
|
4382 |
-
out += " ";
|
4383 |
-
return out;
|
4384 |
-
}
|
4385 |
-
return function(builder, text, style, startStyle, endStyle, title) {
|
4386 |
-
return inner(builder, text.replace(/ {3,}/, split), style, startStyle, endStyle, title);
|
4387 |
-
};
|
4388 |
-
}
|
4389 |
-
|
4390 |
-
function buildCollapsedSpan(builder, size, marker, ignoreWidget) {
|
4391 |
-
var widget = !ignoreWidget && marker.replacedWith;
|
4392 |
-
if (widget) {
|
4393 |
-
if (builder.copyWidgets) widget = widget.cloneNode(true);
|
4394 |
-
builder.pre.appendChild(widget);
|
4395 |
-
if (builder.measure) {
|
4396 |
-
if (size) {
|
4397 |
-
builder.measure[builder.pos] = widget;
|
4398 |
-
} else {
|
4399 |
-
var elt = builder.measure[builder.pos] = zeroWidthElement(builder.cm.display.measure);
|
4400 |
-
if (marker.type != "bookmark" || marker.insertLeft)
|
4401 |
-
builder.pre.insertBefore(elt, widget);
|
4402 |
-
else
|
4403 |
-
builder.pre.appendChild(elt);
|
4404 |
-
}
|
4405 |
-
builder.measuredSomething = true;
|
4406 |
-
}
|
4407 |
-
}
|
4408 |
-
builder.pos += size;
|
4409 |
-
}
|
4410 |
-
|
4411 |
-
// Outputs a number of spans to make up a line, taking highlighting
|
4412 |
-
// and marked text into account.
|
4413 |
-
function insertLineContent(line, builder, styles) {
|
4414 |
-
var spans = line.markedSpans, allText = line.text, at = 0;
|
4415 |
-
if (!spans) {
|
4416 |
-
for (var i = 1; i < styles.length; i+=2)
|
4417 |
-
builder.addToken(builder, allText.slice(at, at = styles[i]), styleToClass(styles[i+1]));
|
4418 |
-
return;
|
4419 |
-
}
|
4420 |
-
|
4421 |
-
var len = allText.length, pos = 0, i = 1, text = "", style;
|
4422 |
-
var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed;
|
4423 |
-
for (;;) {
|
4424 |
-
if (nextChange == pos) { // Update current marker set
|
4425 |
-
spanStyle = spanEndStyle = spanStartStyle = title = "";
|
4426 |
-
collapsed = null; nextChange = Infinity;
|
4427 |
-
var foundBookmark = null;
|
4428 |
-
for (var j = 0; j < spans.length; ++j) {
|
4429 |
-
var sp = spans[j], m = sp.marker;
|
4430 |
-
if (sp.from <= pos && (sp.to == null || sp.to > pos)) {
|
4431 |
-
if (sp.to != null && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; }
|
4432 |
-
if (m.className) spanStyle += " " + m.className;
|
4433 |
-
if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle;
|
4434 |
-
if (m.endStyle && sp.to == nextChange) spanEndStyle += " " + m.endStyle;
|
4435 |
-
if (m.title && !title) title = m.title;
|
4436 |
-
if (m.collapsed && (!collapsed || collapsed.marker.size < m.size))
|
4437 |
-
collapsed = sp;
|
4438 |
-
} else if (sp.from > pos && nextChange > sp.from) {
|
4439 |
-
nextChange = sp.from;
|
4440 |
-
}
|
4441 |
-
if (m.type == "bookmark" && sp.from == pos && m.replacedWith) foundBookmark = m;
|
4442 |
-
}
|
4443 |
-
if (collapsed && (collapsed.from || 0) == pos) {
|
4444 |
-
buildCollapsedSpan(builder, (collapsed.to == null ? len : collapsed.to) - pos,
|
4445 |
-
collapsed.marker, collapsed.from == null);
|
4446 |
-
if (collapsed.to == null) return collapsed.marker.find();
|
4447 |
-
}
|
4448 |
-
if (foundBookmark && !collapsed) buildCollapsedSpan(builder, 0, foundBookmark);
|
4449 |
-
}
|
4450 |
-
if (pos >= len) break;
|
4451 |
-
|
4452 |
-
var upto = Math.min(len, nextChange);
|
4453 |
-
while (true) {
|
4454 |
-
if (text) {
|
4455 |
-
var end = pos + text.length;
|
4456 |
-
if (!collapsed) {
|
4457 |
-
var tokenText = end > upto ? text.slice(0, upto - pos) : text;
|
4458 |
-
builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,
|
4459 |
-
spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title);
|
4460 |
-
}
|
4461 |
-
if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;}
|
4462 |
-
pos = end;
|
4463 |
-
spanStartStyle = "";
|
4464 |
-
}
|
4465 |
-
text = allText.slice(at, at = styles[i++]);
|
4466 |
-
style = styleToClass(styles[i++]);
|
4467 |
-
}
|
4468 |
-
}
|
4469 |
-
}
|
4470 |
-
|
4471 |
-
// DOCUMENT DATA STRUCTURE
|
4472 |
-
|
4473 |
-
function updateDoc(doc, change, markedSpans, selAfter, estimateHeight) {
|
4474 |
-
function spansFor(n) {return markedSpans ? markedSpans[n] : null;}
|
4475 |
-
function update(line, text, spans) {
|
4476 |
-
updateLine(line, text, spans, estimateHeight);
|
4477 |
-
signalLater(line, "change", line, change);
|
4478 |
-
}
|
4479 |
-
|
4480 |
-
var from = change.from, to = change.to, text = change.text;
|
4481 |
-
var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);
|
4482 |
-
var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;
|
4483 |
-
|
4484 |
-
// First adjust the line structure
|
4485 |
-
if (from.ch == 0 && to.ch == 0 && lastText == "") {
|
4486 |
-
// This is a whole-line replace. Treated specially to make
|
4487 |
-
// sure line objects move the way they are supposed to.
|
4488 |
-
for (var i = 0, e = text.length - 1, added = []; i < e; ++i)
|
4489 |
-
added.push(new Line(text[i], spansFor(i), estimateHeight));
|
4490 |
-
update(lastLine, lastLine.text, lastSpans);
|
4491 |
-
if (nlines) doc.remove(from.line, nlines);
|
4492 |
-
if (added.length) doc.insert(from.line, added);
|
4493 |
-
} else if (firstLine == lastLine) {
|
4494 |
-
if (text.length == 1) {
|
4495 |
-
update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);
|
4496 |
-
} else {
|
4497 |
-
for (var added = [], i = 1, e = text.length - 1; i < e; ++i)
|
4498 |
-
added.push(new Line(text[i], spansFor(i), estimateHeight));
|
4499 |
-
added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));
|
4500 |
-
update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
|
4501 |
-
doc.insert(from.line + 1, added);
|
4502 |
-
}
|
4503 |
-
} else if (text.length == 1) {
|
4504 |
-
update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));
|
4505 |
-
doc.remove(from.line + 1, nlines);
|
4506 |
-
} else {
|
4507 |
-
update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
|
4508 |
-
update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);
|
4509 |
-
for (var i = 1, e = text.length - 1, added = []; i < e; ++i)
|
4510 |
-
added.push(new Line(text[i], spansFor(i), estimateHeight));
|
4511 |
-
if (nlines > 1) doc.remove(from.line + 1, nlines - 1);
|
4512 |
-
doc.insert(from.line + 1, added);
|
4513 |
-
}
|
4514 |
-
|
4515 |
-
signalLater(doc, "change", doc, change);
|
4516 |
-
setSelection(doc, selAfter.anchor, selAfter.head, null, true);
|
4517 |
-
}
|
4518 |
-
|
4519 |
-
function LeafChunk(lines) {
|
4520 |
-
this.lines = lines;
|
4521 |
-
this.parent = null;
|
4522 |
-
for (var i = 0, e = lines.length, height = 0; i < e; ++i) {
|
4523 |
-
lines[i].parent = this;
|
4524 |
-
height += lines[i].height;
|
4525 |
-
}
|
4526 |
-
this.height = height;
|
4527 |
-
}
|
4528 |
-
|
4529 |
-
LeafChunk.prototype = {
|
4530 |
-
chunkSize: function() { return this.lines.length; },
|
4531 |
-
removeInner: function(at, n) {
|
4532 |
-
for (var i = at, e = at + n; i < e; ++i) {
|
4533 |
-
var line = this.lines[i];
|
4534 |
-
this.height -= line.height;
|
4535 |
-
cleanUpLine(line);
|
4536 |
-
signalLater(line, "delete");
|
4537 |
-
}
|
4538 |
-
this.lines.splice(at, n);
|
4539 |
-
},
|
4540 |
-
collapse: function(lines) {
|
4541 |
-
lines.splice.apply(lines, [lines.length, 0].concat(this.lines));
|
4542 |
-
},
|
4543 |
-
insertInner: function(at, lines, height) {
|
4544 |
-
this.height += height;
|
4545 |
-
this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));
|
4546 |
-
for (var i = 0, e = lines.length; i < e; ++i) lines[i].parent = this;
|
4547 |
-
},
|
4548 |
-
iterN: function(at, n, op) {
|
4549 |
-
for (var e = at + n; at < e; ++at)
|
4550 |
-
if (op(this.lines[at])) return true;
|
4551 |
-
}
|
4552 |
-
};
|
4553 |
-
|
4554 |
-
function BranchChunk(children) {
|
4555 |
-
this.children = children;
|
4556 |
-
var size = 0, height = 0;
|
4557 |
-
for (var i = 0, e = children.length; i < e; ++i) {
|
4558 |
-
var ch = children[i];
|
4559 |
-
size += ch.chunkSize(); height += ch.height;
|
4560 |
-
ch.parent = this;
|
4561 |
-
}
|
4562 |
-
this.size = size;
|
4563 |
-
this.height = height;
|
4564 |
-
this.parent = null;
|
4565 |
-
}
|
4566 |
-
|
4567 |
-
BranchChunk.prototype = {
|
4568 |
-
chunkSize: function() { return this.size; },
|
4569 |
-
removeInner: function(at, n) {
|
4570 |
-
this.size -= n;
|
4571 |
-
for (var i = 0; i < this.children.length; ++i) {
|
4572 |
-
var child = this.children[i], sz = child.chunkSize();
|
4573 |
-
if (at < sz) {
|
4574 |
-
var rm = Math.min(n, sz - at), oldHeight = child.height;
|
4575 |
-
child.removeInner(at, rm);
|
4576 |
-
this.height -= oldHeight - child.height;
|
4577 |
-
if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }
|
4578 |
-
if ((n -= rm) == 0) break;
|
4579 |
-
at = 0;
|
4580 |
-
} else at -= sz;
|
4581 |
-
}
|
4582 |
-
if (this.size - n < 25) {
|
4583 |
-
var lines = [];
|
4584 |
-
this.collapse(lines);
|
4585 |
-
this.children = [new LeafChunk(lines)];
|
4586 |
-
this.children[0].parent = this;
|
4587 |
-
}
|
4588 |
-
},
|
4589 |
-
collapse: function(lines) {
|
4590 |
-
for (var i = 0, e = this.children.length; i < e; ++i) this.children[i].collapse(lines);
|
4591 |
-
},
|
4592 |
-
insertInner: function(at, lines, height) {
|
4593 |
-
this.size += lines.length;
|
4594 |
-
this.height += height;
|
4595 |
-
for (var i = 0, e = this.children.length; i < e; ++i) {
|
4596 |
-
var child = this.children[i], sz = child.chunkSize();
|
4597 |
-
if (at <= sz) {
|
4598 |
-
child.insertInner(at, lines, height);
|
4599 |
-
if (child.lines && child.lines.length > 50) {
|
4600 |
-
while (child.lines.length > 50) {
|
4601 |
-
var spilled = child.lines.splice(child.lines.length - 25, 25);
|
4602 |
-
var newleaf = new LeafChunk(spilled);
|
4603 |
-
child.height -= newleaf.height;
|
4604 |
-
this.children.splice(i + 1, 0, newleaf);
|
4605 |
-
newleaf.parent = this;
|
4606 |
-
}
|
4607 |
-
this.maybeSpill();
|
4608 |
-
}
|
4609 |
-
break;
|
4610 |
-
}
|
4611 |
-
at -= sz;
|
4612 |
-
}
|
4613 |
-
},
|
4614 |
-
maybeSpill: function() {
|
4615 |
-
if (this.children.length <= 10) return;
|
4616 |
-
var me = this;
|
4617 |
-
do {
|
4618 |
-
var spilled = me.children.splice(me.children.length - 5, 5);
|
4619 |
-
var sibling = new BranchChunk(spilled);
|
4620 |
-
if (!me.parent) { // Become the parent node
|
4621 |
-
var copy = new BranchChunk(me.children);
|
4622 |
-
copy.parent = me;
|
4623 |
-
me.children = [copy, sibling];
|
4624 |
-
me = copy;
|
4625 |
-
} else {
|
4626 |
-
me.size -= sibling.size;
|
4627 |
-
me.height -= sibling.height;
|
4628 |
-
var myIndex = indexOf(me.parent.children, me);
|
4629 |
-
me.parent.children.splice(myIndex + 1, 0, sibling);
|
4630 |
-
}
|
4631 |
-
sibling.parent = me.parent;
|
4632 |
-
} while (me.children.length > 10);
|
4633 |
-
me.parent.maybeSpill();
|
4634 |
-
},
|
4635 |
-
iterN: function(at, n, op) {
|
4636 |
-
for (var i = 0, e = this.children.length; i < e; ++i) {
|
4637 |
-
var child = this.children[i], sz = child.chunkSize();
|
4638 |
-
if (at < sz) {
|
4639 |
-
var used = Math.min(n, sz - at);
|
4640 |
-
if (child.iterN(at, used, op)) return true;
|
4641 |
-
if ((n -= used) == 0) break;
|
4642 |
-
at = 0;
|
4643 |
-
} else at -= sz;
|
4644 |
-
}
|
4645 |
-
}
|
4646 |
-
};
|
4647 |
-
|
4648 |
-
var nextDocId = 0;
|
4649 |
-
var Doc = CodeMirror.Doc = function(text, mode, firstLine) {
|
4650 |
-
if (!(this instanceof Doc)) return new Doc(text, mode, firstLine);
|
4651 |
-
if (firstLine == null) firstLine = 0;
|
4652 |
-
|
4653 |
-
BranchChunk.call(this, [new LeafChunk([new Line("", null)])]);
|
4654 |
-
this.first = firstLine;
|
4655 |
-
this.scrollTop = this.scrollLeft = 0;
|
4656 |
-
this.cantEdit = false;
|
4657 |
-
this.history = makeHistory();
|
4658 |
-
this.cleanGeneration = 1;
|
4659 |
-
this.frontier = firstLine;
|
4660 |
-
var start = Pos(firstLine, 0);
|
4661 |
-
this.sel = {from: start, to: start, head: start, anchor: start, shift: false, extend: false, goalColumn: null};
|
4662 |
-
this.id = ++nextDocId;
|
4663 |
-
this.modeOption = mode;
|
4664 |
-
|
4665 |
-
if (typeof text == "string") text = splitLines(text);
|
4666 |
-
updateDoc(this, {from: start, to: start, text: text}, null, {head: start, anchor: start});
|
4667 |
-
};
|
4668 |
-
|
4669 |
-
Doc.prototype = createObj(BranchChunk.prototype, {
|
4670 |
-
constructor: Doc,
|
4671 |
-
iter: function(from, to, op) {
|
4672 |
-
if (op) this.iterN(from - this.first, to - from, op);
|
4673 |
-
else this.iterN(this.first, this.first + this.size, from);
|
4674 |
-
},
|
4675 |
-
|
4676 |
-
insert: function(at, lines) {
|
4677 |
-
var height = 0;
|
4678 |
-
for (var i = 0, e = lines.length; i < e; ++i) height += lines[i].height;
|
4679 |
-
this.insertInner(at - this.first, lines, height);
|
4680 |
-
},
|
4681 |
-
remove: function(at, n) { this.removeInner(at - this.first, n); },
|
4682 |
-
|
4683 |
-
getValue: function(lineSep) {
|
4684 |
-
var lines = getLines(this, this.first, this.first + this.size);
|
4685 |
-
if (lineSep === false) return lines;
|
4686 |
-
return lines.join(lineSep || "\n");
|
4687 |
-
},
|
4688 |
-
setValue: function(code) {
|
4689 |
-
var top = Pos(this.first, 0), last = this.first + this.size - 1;
|
4690 |
-
makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),
|
4691 |
-
text: splitLines(code), origin: "setValue"},
|
4692 |
-
{head: top, anchor: top}, true);
|
4693 |
-
},
|
4694 |
-
replaceRange: function(code, from, to, origin) {
|
4695 |
-
from = clipPos(this, from);
|
4696 |
-
to = to ? clipPos(this, to) : from;
|
4697 |
-
replaceRange(this, code, from, to, origin);
|
4698 |
-
},
|
4699 |
-
getRange: function(from, to, lineSep) {
|
4700 |
-
var lines = getBetween(this, clipPos(this, from), clipPos(this, to));
|
4701 |
-
if (lineSep === false) return lines;
|
4702 |
-
return lines.join(lineSep || "\n");
|
4703 |
-
},
|
4704 |
-
|
4705 |
-
getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;},
|
4706 |
-
setLine: function(line, text) {
|
4707 |
-
if (isLine(this, line))
|
4708 |
-
replaceRange(this, text, Pos(line, 0), clipPos(this, Pos(line)));
|
4709 |
-
},
|
4710 |
-
removeLine: function(line) {
|
4711 |
-
if (line) replaceRange(this, "", clipPos(this, Pos(line - 1)), clipPos(this, Pos(line)));
|
4712 |
-
else replaceRange(this, "", Pos(0, 0), clipPos(this, Pos(1, 0)));
|
4713 |
-
},
|
4714 |
-
|
4715 |
-
getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);},
|
4716 |
-
getLineNumber: function(line) {return lineNo(line);},
|
4717 |
-
|
4718 |
-
getLineHandleVisualStart: function(line) {
|
4719 |
-
if (typeof line == "number") line = getLine(this, line);
|
4720 |
-
return visualLine(this, line);
|
4721 |
-
},
|
4722 |
-
|
4723 |
-
lineCount: function() {return this.size;},
|
4724 |
-
firstLine: function() {return this.first;},
|
4725 |
-
lastLine: function() {return this.first + this.size - 1;},
|
4726 |
-
|
4727 |
-
clipPos: function(pos) {return clipPos(this, pos);},
|
4728 |
-
|
4729 |
-
getCursor: function(start) {
|
4730 |
-
var sel = this.sel, pos;
|
4731 |
-
if (start == null || start == "head") pos = sel.head;
|
4732 |
-
else if (start == "anchor") pos = sel.anchor;
|
4733 |
-
else if (start == "end" || start === false) pos = sel.to;
|
4734 |
-
else pos = sel.from;
|
4735 |
-
return copyPos(pos);
|
4736 |
-
},
|
4737 |
-
somethingSelected: function() {return !posEq(this.sel.head, this.sel.anchor);},
|
4738 |
-
|
4739 |
-
setCursor: docOperation(function(line, ch, extend) {
|
4740 |
-
var pos = clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line);
|
4741 |
-
if (extend) extendSelection(this, pos);
|
4742 |
-
else setSelection(this, pos, pos);
|
4743 |
-
}),
|
4744 |
-
setSelection: docOperation(function(anchor, head) {
|
4745 |
-
setSelection(this, clipPos(this, anchor), clipPos(this, head || anchor));
|
4746 |
-
}),
|
4747 |
-
extendSelection: docOperation(function(from, to) {
|
4748 |
-
extendSelection(this, clipPos(this, from), to && clipPos(this, to));
|
4749 |
-
}),
|
4750 |
-
|
4751 |
-
getSelection: function(lineSep) {return this.getRange(this.sel.from, this.sel.to, lineSep);},
|
4752 |
-
replaceSelection: function(code, collapse, origin) {
|
4753 |
-
makeChange(this, {from: this.sel.from, to: this.sel.to, text: splitLines(code), origin: origin}, collapse || "around");
|
4754 |
-
},
|
4755 |
-
undo: docOperation(function() {makeChangeFromHistory(this, "undo");}),
|
4756 |
-
redo: docOperation(function() {makeChangeFromHistory(this, "redo");}),
|
4757 |
-
|
4758 |
-
setExtending: function(val) {this.sel.extend = val;},
|
4759 |
-
|
4760 |
-
historySize: function() {
|
4761 |
-
var hist = this.history;
|
4762 |
-
return {undo: hist.done.length, redo: hist.undone.length};
|
4763 |
-
},
|
4764 |
-
clearHistory: function() {this.history = makeHistory(this.history.maxGeneration);},
|
4765 |
-
|
4766 |
-
markClean: function() {
|
4767 |
-
this.cleanGeneration = this.changeGeneration();
|
4768 |
-
},
|
4769 |
-
changeGeneration: function() {
|
4770 |
-
this.history.lastOp = this.history.lastOrigin = null;
|
4771 |
-
return this.history.generation;
|
4772 |
-
},
|
4773 |
-
isClean: function (gen) {
|
4774 |
-
return this.history.generation == (gen || this.cleanGeneration);
|
4775 |
-
},
|
4776 |
-
|
4777 |
-
getHistory: function() {
|
4778 |
-
return {done: copyHistoryArray(this.history.done),
|
4779 |
-
undone: copyHistoryArray(this.history.undone)};
|
4780 |
-
},
|
4781 |
-
setHistory: function(histData) {
|
4782 |
-
var hist = this.history = makeHistory(this.history.maxGeneration);
|
4783 |
-
hist.done = histData.done.slice(0);
|
4784 |
-
|
4785 |
-
},
|
4786 |
-
|
4787 |
-
markText: function(from, to, options) {
|
4788 |
-
return markText(this, clipPos(this, from), clipPos(this, to), options, "range");
|
4789 |
-
},
|
4790 |
-
setBookmark: function(pos, options) {
|
4791 |
-
var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),
|
4792 |
-
insertLeft: options && options.insertLeft};
|
4793 |
-
pos = clipPos(this, pos);
|
4794 |
-
return markText(this, pos, pos, realOpts, "bookmark");
|
4795 |
-
},
|
4796 |
-
findMarksAt: function(pos) {
|
4797 |
-
pos = clipPos(this, pos);
|
4798 |
-
var markers = [], spans = getLine(this, pos.line).markedSpans;
|
4799 |
-
if (spans) for (var i = 0; i < spans.length; ++i) {
|
4800 |
-
var span = spans[i];
|
4801 |
-
if ((span.from == null || span.from <= pos.ch) &&
|
4802 |
-
(span.to == null || span.to >= pos.ch))
|
4803 |
-
markers.push(span.marker.parent || span.marker);
|
4804 |
-
}
|
4805 |
-
return markers;
|
4806 |
-
},
|
4807 |
-
getAllMarks: function() {
|
4808 |
-
var markers = [];
|
4809 |
-
this.iter(function(line) {
|
4810 |
-
var sps = line.markedSpans;
|
4811 |
-
if (sps) for (var i = 0; i < sps.length; ++i)
|
4812 |
-
if (sps[i].from != null) markers.push(sps[i].marker);
|
4813 |
-
});
|
4814 |
-
return markers;
|
4815 |
-
},
|
4816 |
-
|
4817 |
-
posFromIndex: function(off) {
|
4818 |
-
var ch, lineNo = this.first;
|
4819 |
-
this.iter(function(line) {
|
4820 |
-
var sz = line.text.length + 1;
|
4821 |
-
if (sz > off) { ch = off; return true; }
|
4822 |
-
off -= sz;
|
4823 |
-
++lineNo;
|
4824 |
-
});
|
4825 |
-
return clipPos(this, Pos(lineNo, ch));
|
4826 |
-
},
|
4827 |
-
indexFromPos: function (coords) {
|
4828 |
-
coords = clipPos(this, coords);
|
4829 |
-
var index = coords.ch;
|
4830 |
-
if (coords.line < this.first || coords.ch < 0) return 0;
|
4831 |
-
this.iter(this.first, coords.line, function (line) {
|
4832 |
-
index += line.text.length + 1;
|
4833 |
-
});
|
4834 |
-
return index;
|
4835 |
-
},
|
4836 |
-
|
4837 |
-
copy: function(copyHistory) {
|
4838 |
-
var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first);
|
4839 |
-
doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;
|
4840 |
-
doc.sel = {from: this.sel.from, to: this.sel.to, head: this.sel.head, anchor: this.sel.anchor,
|
4841 |
-
shift: this.sel.shift, extend: false, goalColumn: this.sel.goalColumn};
|
4842 |
-
if (copyHistory) {
|
4843 |
-
doc.history.undoDepth = this.history.undoDepth;
|
4844 |
-
doc.setHistory(this.getHistory());
|
4845 |
-
}
|
4846 |
-
return doc;
|
4847 |
-
},
|
4848 |
-
|
4849 |
-
linkedDoc: function(options) {
|
4850 |
-
if (!options) options = {};
|
4851 |
-
var from = this.first, to = this.first + this.size;
|
4852 |
-
if (options.from != null && options.from > from) from = options.from;
|
4853 |
-
if (options.to != null && options.to < to) to = options.to;
|
4854 |
-
var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from);
|
4855 |
-
if (options.sharedHist) copy.history = this.history;
|
4856 |
-
(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});
|
4857 |
-
copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];
|
4858 |
-
return copy;
|
4859 |
-
},
|
4860 |
-
unlinkDoc: function(other) {
|
4861 |
-
if (other instanceof CodeMirror) other = other.doc;
|
4862 |
-
if (this.linked) for (var i = 0; i < this.linked.length; ++i) {
|
4863 |
-
var link = this.linked[i];
|
4864 |
-
if (link.doc != other) continue;
|
4865 |
-
this.linked.splice(i, 1);
|
4866 |
-
other.unlinkDoc(this);
|
4867 |
-
break;
|
4868 |
-
}
|
4869 |
-
// If the histories were shared, split them again
|
4870 |
-
if (other.history == this.history) {
|
4871 |
-
var splitIds = [other.id];
|
4872 |
-
linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true);
|
4873 |
-
other.history = makeHistory();
|
4874 |
-
other.history.done = copyHistoryArray(this.history.done, splitIds);
|
4875 |
-
other.history.undone = copyHistoryArray(this.history.undone, splitIds);
|
4876 |
-
}
|
4877 |
-
},
|
4878 |
-
iterLinkedDocs: function(f) {linkedDocs(this, f);},
|
4879 |
-
|
4880 |
-
getMode: function() {return this.mode;},
|
4881 |
-
getEditor: function() {return this.cm;}
|
4882 |
-
});
|
4883 |
-
|
4884 |
-
Doc.prototype.eachLine = Doc.prototype.iter;
|
4885 |
-
|
4886 |
-
// The Doc methods that should be available on CodeMirror instances
|
4887 |
-
var dontDelegate = "iter insert remove copy getEditor".split(" ");
|
4888 |
-
for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)
|
4889 |
-
CodeMirror.prototype[prop] = (function(method) {
|
4890 |
-
return function() {return method.apply(this.doc, arguments);};
|
4891 |
-
})(Doc.prototype[prop]);
|
4892 |
-
|
4893 |
-
eventMixin(Doc);
|
4894 |
-
|
4895 |
-
function linkedDocs(doc, f, sharedHistOnly) {
|
4896 |
-
function propagate(doc, skip, sharedHist) {
|
4897 |
-
if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) {
|
4898 |
-
var rel = doc.linked[i];
|
4899 |
-
if (rel.doc == skip) continue;
|
4900 |
-
var shared = sharedHist && rel.sharedHist;
|
4901 |
-
if (sharedHistOnly && !shared) continue;
|
4902 |
-
f(rel.doc, shared);
|
4903 |
-
propagate(rel.doc, doc, shared);
|
4904 |
-
}
|
4905 |
-
}
|
4906 |
-
propagate(doc, null, true);
|
4907 |
-
}
|
4908 |
-
|
4909 |
-
function attachDoc(cm, doc) {
|
4910 |
-
if (doc.cm) throw new Error("This document is already in use.");
|
4911 |
-
cm.doc = doc;
|
4912 |
-
doc.cm = cm;
|
4913 |
-
estimateLineHeights(cm);
|
4914 |
-
loadMode(cm);
|
4915 |
-
if (!cm.options.lineWrapping) computeMaxLength(cm);
|
4916 |
-
cm.options.mode = doc.modeOption;
|
4917 |
-
regChange(cm);
|
4918 |
-
}
|
4919 |
-
|
4920 |
-
// LINE UTILITIES
|
4921 |
-
|
4922 |
-
function getLine(chunk, n) {
|
4923 |
-
n -= chunk.first;
|
4924 |
-
while (!chunk.lines) {
|
4925 |
-
for (var i = 0;; ++i) {
|
4926 |
-
var child = chunk.children[i], sz = child.chunkSize();
|
4927 |
-
if (n < sz) { chunk = child; break; }
|
4928 |
-
n -= sz;
|
4929 |
-
}
|
4930 |
-
}
|
4931 |
-
return chunk.lines[n];
|
4932 |
-
}
|
4933 |
-
|
4934 |
-
function getBetween(doc, start, end) {
|
4935 |
-
var out = [], n = start.line;
|
4936 |
-
doc.iter(start.line, end.line + 1, function(line) {
|
4937 |
-
var text = line.text;
|
4938 |
-
if (n == end.line) text = text.slice(0, end.ch);
|
4939 |
-
if (n == start.line) text = text.slice(start.ch);
|
4940 |
-
out.push(text);
|
4941 |
-
++n;
|
4942 |
-
});
|
4943 |
-
return out;
|
4944 |
-
}
|
4945 |
-
function getLines(doc, from, to) {
|
4946 |
-
var out = [];
|
4947 |
-
doc.iter(from, to, function(line) { out.push(line.text); });
|
4948 |
-
return out;
|
4949 |
-
}
|
4950 |
-
|
4951 |
-
function updateLineHeight(line, height) {
|
4952 |
-
var diff = height - line.height;
|
4953 |
-
for (var n = line; n; n = n.parent) n.height += diff;
|
4954 |
-
}
|
4955 |
-
|
4956 |
-
function lineNo(line) {
|
4957 |
-
if (line.parent == null) return null;
|
4958 |
-
var cur = line.parent, no = indexOf(cur.lines, line);
|
4959 |
-
for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {
|
4960 |
-
for (var i = 0;; ++i) {
|
4961 |
-
if (chunk.children[i] == cur) break;
|
4962 |
-
no += chunk.children[i].chunkSize();
|
4963 |
-
}
|
4964 |
-
}
|
4965 |
-
return no + cur.first;
|
4966 |
-
}
|
4967 |
-
|
4968 |
-
function lineAtHeight(chunk, h) {
|
4969 |
-
var n = chunk.first;
|
4970 |
-
outer: do {
|
4971 |
-
for (var i = 0, e = chunk.children.length; i < e; ++i) {
|
4972 |
-
var child = chunk.children[i], ch = child.height;
|
4973 |
-
if (h < ch) { chunk = child; continue outer; }
|
4974 |
-
h -= ch;
|
4975 |
-
n += child.chunkSize();
|
4976 |
-
}
|
4977 |
-
return n;
|
4978 |
-
} while (!chunk.lines);
|
4979 |
-
for (var i = 0, e = chunk.lines.length; i < e; ++i) {
|
4980 |
-
var line = chunk.lines[i], lh = line.height;
|
4981 |
-
if (h < lh) break;
|
4982 |
-
h -= lh;
|
4983 |
-
}
|
4984 |
-
return n + i;
|
4985 |
-
}
|
4986 |
-
|
4987 |
-
function heightAtLine(cm, lineObj) {
|
4988 |
-
lineObj = visualLine(cm.doc, lineObj);
|
4989 |
-
|
4990 |
-
var h = 0, chunk = lineObj.parent;
|
4991 |
-
for (var i = 0; i < chunk.lines.length; ++i) {
|
4992 |
-
var line = chunk.lines[i];
|
4993 |
-
if (line == lineObj) break;
|
4994 |
-
else h += line.height;
|
4995 |
-
}
|
4996 |
-
for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {
|
4997 |
-
for (var i = 0; i < p.children.length; ++i) {
|
4998 |
-
var cur = p.children[i];
|
4999 |
-
if (cur == chunk) break;
|
5000 |
-
else h += cur.height;
|
5001 |
-
}
|
5002 |
-
}
|
5003 |
-
return h;
|
5004 |
-
}
|
5005 |
-
|
5006 |
-
function getOrder(line) {
|
5007 |
-
var order = line.order;
|
5008 |
-
if (order == null) order = line.order = bidiOrdering(line.text);
|
5009 |
-
return order;
|
5010 |
-
}
|
5011 |
-
|
5012 |
-
// HISTORY
|
5013 |
-
|
5014 |
-
function makeHistory(startGen) {
|
5015 |
-
return {
|
5016 |
-
// Arrays of history events. Doing something adds an event to
|
5017 |
-
// done and clears undo. Undoing moves events from done to
|
5018 |
-
// undone, redoing moves them in the other direction.
|
5019 |
-
done: [], undone: [], undoDepth: Infinity,
|
5020 |
-
// Used to track when changes can be merged into a single undo
|
5021 |
-
// event
|
5022 |
-
lastTime: 0, lastOp: null, lastOrigin: null,
|
5023 |
-
// Used by the isClean() method
|
5024 |
-
generation: startGen || 1, maxGeneration: startGen || 1
|
5025 |
-
};
|
5026 |
-
}
|
5027 |
-
|
5028 |
-
function attachLocalSpans(doc, change, from, to) {
|
5029 |
-
var existing = change["spans_" + doc.id], n = 0;
|
5030 |
-
doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) {
|
5031 |
-
if (line.markedSpans)
|
5032 |
-
(existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans;
|
5033 |
-
++n;
|
5034 |
-
});
|
5035 |
-
}
|
5036 |
-
|
5037 |
-
function historyChangeFromChange(doc, change) {
|
5038 |
-
var from = { line: change.from.line, ch: change.from.ch };
|
5039 |
-
var histChange = {from: from, to: changeEnd(change), text: getBetween(doc, change.from, change.to)};
|
5040 |
-
attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);
|
5041 |
-
linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true);
|
5042 |
-
return histChange;
|
5043 |
-
}
|
5044 |
-
|
5045 |
-
function addToHistory(doc, change, selAfter, opId) {
|
5046 |
-
var hist = doc.history;
|
5047 |
-
hist.undone.length = 0;
|
5048 |
-
var time = +new Date, cur = lst(hist.done);
|
5049 |
-
|
5050 |
-
if (cur &&
|
5051 |
-
(hist.lastOp == opId ||
|
5052 |
-
hist.lastOrigin == change.origin && change.origin &&
|
5053 |
-
((change.origin.charAt(0) == "+" && doc.cm && hist.lastTime > time - doc.cm.options.historyEventDelay) ||
|
5054 |
-
change.origin.charAt(0) == "*"))) {
|
5055 |
-
// Merge this change into the last event
|
5056 |
-
var last = lst(cur.changes);
|
5057 |
-
if (posEq(change.from, change.to) && posEq(change.from, last.to)) {
|
5058 |
-
// Optimized case for simple insertion -- don't want to add
|
5059 |
-
// new changesets for every character typed
|
5060 |
-
last.to = changeEnd(change);
|
5061 |
-
} else {
|
5062 |
-
// Add new sub-event
|
5063 |
-
cur.changes.push(historyChangeFromChange(doc, change));
|
5064 |
-
}
|
5065 |
-
cur.anchorAfter = selAfter.anchor; cur.headAfter = selAfter.head;
|
5066 |
-
} else {
|
5067 |
-
// Can not be merged, start a new event.
|
5068 |
-
cur = {changes: [historyChangeFromChange(doc, change)],
|
5069 |
-
generation: hist.generation,
|
5070 |
-
anchorBefore: doc.sel.anchor, headBefore: doc.sel.head,
|
5071 |
-
anchorAfter: selAfter.anchor, headAfter: selAfter.head};
|
5072 |
-
hist.done.push(cur);
|
5073 |
-
hist.generation = ++hist.maxGeneration;
|
5074 |
-
while (hist.done.length > hist.undoDepth)
|
5075 |
-
hist.done.shift();
|
5076 |
-
}
|
5077 |
-
hist.lastTime = time;
|
5078 |
-
hist.lastOp = opId;
|
5079 |
-
hist.lastOrigin = change.origin;
|
5080 |
-
}
|
5081 |
-
|
5082 |
-
function removeClearedSpans(spans) {
|
5083 |
-
if (!spans) return null;
|
5084 |
-
for (var i = 0, out; i < spans.length; ++i) {
|
5085 |
-
if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); }
|
5086 |
-
else if (out) out.push(spans[i]);
|
5087 |
-
}
|
5088 |
-
return !out ? spans : out.length ? out : null;
|
5089 |
-
}
|
5090 |
-
|
5091 |
-
function getOldSpans(doc, change) {
|
5092 |
-
var found = change["spans_" + doc.id];
|
5093 |
-
if (!found) return null;
|
5094 |
-
for (var i = 0, nw = []; i < change.text.length; ++i)
|
5095 |
-
nw.push(removeClearedSpans(found[i]));
|
5096 |
-
return nw;
|
5097 |
-
}
|
5098 |
-
|
5099 |
-
// Used both to provide a JSON-safe object in .getHistory, and, when
|
5100 |
-
// detaching a document, to split the history in two
|
5101 |
-
function copyHistoryArray(events, newGroup) {
|
5102 |
-
for (var i = 0, copy = []; i < events.length; ++i) {
|
5103 |
-
var event = events[i], changes = event.changes, newChanges = [];
|
5104 |
-
copy.push({changes: newChanges, anchorBefore: event.anchorBefore, headBefore: event.headBefore,
|
5105 |
-
anchorAfter: event.anchorAfter, headAfter: event.headAfter});
|
5106 |
-
for (var j = 0; j < changes.length; ++j) {
|
5107 |
-
var change = changes[j], m;
|
5108 |
-
newChanges.push({from: change.from, to: change.to, text: change.text});
|
5109 |
-
if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\d+)$/)) {
|
5110 |
-
if (indexOf(newGroup, Number(m[1])) > -1) {
|
5111 |
-
lst(newChanges)[prop] = change[prop];
|
5112 |
-
delete change[prop];
|
5113 |
-
}
|
5114 |
-
}
|
5115 |
-
}
|
5116 |
-
}
|
5117 |
-
return copy;
|
5118 |
-
}
|
5119 |
-
|
5120 |
-
// Rebasing/resetting history to deal with externally-sourced changes
|
5121 |
-
|
5122 |
-
function rebaseHistSel(pos, from, to, diff) {
|
5123 |
-
if (to < pos.line) {
|
5124 |
-
pos.line += diff;
|
5125 |
-
} else if (from < pos.line) {
|
5126 |
-
pos.line = from;
|
5127 |
-
pos.ch = 0;
|
5128 |
-
}
|
5129 |
-
}
|
5130 |
-
|
5131 |
-
// Tries to rebase an array of history events given a change in the
|
5132 |
-
// document. If the change touches the same lines as the event, the
|
5133 |
-
// event, and everything 'behind' it, is discarded. If the change is
|
5134 |
-
// before the event, the event's positions are updated. Uses a
|
5135 |
-
// copy-on-write scheme for the positions, to avoid having to
|
5136 |
-
// reallocate them all on every rebase, but also avoid problems with
|
5137 |
-
// shared position objects being unsafely updated.
|
5138 |
-
function rebaseHistArray(array, from, to, diff) {
|
5139 |
-
for (var i = 0; i < array.length; ++i) {
|
5140 |
-
var sub = array[i], ok = true;
|
5141 |
-
for (var j = 0; j < sub.changes.length; ++j) {
|
5142 |
-
var cur = sub.changes[j];
|
5143 |
-
if (!sub.copied) { cur.from = copyPos(cur.from); cur.to = copyPos(cur.to); }
|
5144 |
-
if (to < cur.from.line) {
|
5145 |
-
cur.from.line += diff;
|
5146 |
-
cur.to.line += diff;
|
5147 |
-
} else if (from <= cur.to.line) {
|
5148 |
-
ok = false;
|
5149 |
-
break;
|
5150 |
-
}
|
5151 |
-
}
|
5152 |
-
if (!sub.copied) {
|
5153 |
-
sub.anchorBefore = copyPos(sub.anchorBefore); sub.headBefore = copyPos(sub.headBefore);
|
5154 |
-
sub.anchorAfter = copyPos(sub.anchorAfter); sub.readAfter = copyPos(sub.headAfter);
|
5155 |
-
sub.copied = true;
|
5156 |
-
}
|
5157 |
-
if (!ok) {
|
5158 |
-
array.splice(0, i + 1);
|
5159 |
-
i = 0;
|
5160 |
-
} else {
|
5161 |
-
rebaseHistSel(sub.anchorBefore); rebaseHistSel(sub.headBefore);
|
5162 |
-
rebaseHistSel(sub.anchorAfter); rebaseHistSel(sub.headAfter);
|
5163 |
-
}
|
5164 |
-
}
|
5165 |
-
}
|
5166 |
-
|
5167 |
-
function rebaseHist(hist, change) {
|
5168 |
-
var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;
|
5169 |
-
rebaseHistArray(hist.done, from, to, diff);
|
5170 |
-
rebaseHistArray(hist.undone, from, to, diff);
|
5171 |
-
}
|
5172 |
-
|
5173 |
-
// EVENT OPERATORS
|
5174 |
-
|
5175 |
-
function stopMethod() {e_stop(this);}
|
5176 |
-
// Ensure an event has a stop method.
|
5177 |
-
function addStop(event) {
|
5178 |
-
if (!event.stop) event.stop = stopMethod;
|
5179 |
-
return event;
|
5180 |
-
}
|
5181 |
-
|
5182 |
-
function e_preventDefault(e) {
|
5183 |
-
if (e.preventDefault) e.preventDefault();
|
5184 |
-
else e.returnValue = false;
|
5185 |
-
}
|
5186 |
-
function e_stopPropagation(e) {
|
5187 |
-
if (e.stopPropagation) e.stopPropagation();
|
5188 |
-
else e.cancelBubble = true;
|
5189 |
-
}
|
5190 |
-
function e_defaultPrevented(e) {
|
5191 |
-
return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false;
|
5192 |
-
}
|
5193 |
-
function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}
|
5194 |
-
CodeMirror.e_stop = e_stop;
|
5195 |
-
CodeMirror.e_preventDefault = e_preventDefault;
|
5196 |
-
CodeMirror.e_stopPropagation = e_stopPropagation;
|
5197 |
-
|
5198 |
-
function e_target(e) {return e.target || e.srcElement;}
|
5199 |
-
function e_button(e) {
|
5200 |
-
var b = e.which;
|
5201 |
-
if (b == null) {
|
5202 |
-
if (e.button & 1) b = 1;
|
5203 |
-
else if (e.button & 2) b = 3;
|
5204 |
-
else if (e.button & 4) b = 2;
|
5205 |
-
}
|
5206 |
-
if (mac && e.ctrlKey && b == 1) b = 3;
|
5207 |
-
return b;
|
5208 |
-
}
|
5209 |
-
|
5210 |
-
// EVENT HANDLING
|
5211 |
-
|
5212 |
-
function on(emitter, type, f) {
|
5213 |
-
if (emitter.addEventListener)
|
5214 |
-
emitter.addEventListener(type, f, false);
|
5215 |
-
else if (emitter.attachEvent)
|
5216 |
-
emitter.attachEvent("on" + type, f);
|
5217 |
-
else {
|
5218 |
-
var map = emitter._handlers || (emitter._handlers = {});
|
5219 |
-
var arr = map[type] || (map[type] = []);
|
5220 |
-
arr.push(f);
|
5221 |
-
}
|
5222 |
-
}
|
5223 |
-
|
5224 |
-
function off(emitter, type, f) {
|
5225 |
-
if (emitter.removeEventListener)
|
5226 |
-
emitter.removeEventListener(type, f, false);
|
5227 |
-
else if (emitter.detachEvent)
|
5228 |
-
emitter.detachEvent("on" + type, f);
|
5229 |
-
else {
|
5230 |
-
var arr = emitter._handlers && emitter._handlers[type];
|
5231 |
-
if (!arr) return;
|
5232 |
-
for (var i = 0; i < arr.length; ++i)
|
5233 |
-
if (arr[i] == f) { arr.splice(i, 1); break; }
|
5234 |
-
}
|
5235 |
-
}
|
5236 |
-
|
5237 |
-
function signal(emitter, type /*, values...*/) {
|
5238 |
-
var arr = emitter._handlers && emitter._handlers[type];
|
5239 |
-
if (!arr) return;
|
5240 |
-
var args = Array.prototype.slice.call(arguments, 2);
|
5241 |
-
for (var i = 0; i < arr.length; ++i) arr[i].apply(null, args);
|
5242 |
-
}
|
5243 |
-
|
5244 |
-
var delayedCallbacks, delayedCallbackDepth = 0;
|
5245 |
-
function signalLater(emitter, type /*, values...*/) {
|
5246 |
-
var arr = emitter._handlers && emitter._handlers[type];
|
5247 |
-
if (!arr) return;
|
5248 |
-
var args = Array.prototype.slice.call(arguments, 2);
|
5249 |
-
if (!delayedCallbacks) {
|
5250 |
-
++delayedCallbackDepth;
|
5251 |
-
delayedCallbacks = [];
|
5252 |
-
setTimeout(fireDelayed, 0);
|
5253 |
-
}
|
5254 |
-
function bnd(f) {return function(){f.apply(null, args);};};
|
5255 |
-
for (var i = 0; i < arr.length; ++i)
|
5256 |
-
delayedCallbacks.push(bnd(arr[i]));
|
5257 |
-
}
|
5258 |
-
|
5259 |
-
function signalDOMEvent(cm, e, override) {
|
5260 |
-
signal(cm, override || e.type, cm, e);
|
5261 |
-
return e_defaultPrevented(e) || e.codemirrorIgnore;
|
5262 |
-
}
|
5263 |
-
|
5264 |
-
function fireDelayed() {
|
5265 |
-
--delayedCallbackDepth;
|
5266 |
-
var delayed = delayedCallbacks;
|
5267 |
-
delayedCallbacks = null;
|
5268 |
-
for (var i = 0; i < delayed.length; ++i) delayed[i]();
|
5269 |
-
}
|
5270 |
-
|
5271 |
-
function hasHandler(emitter, type) {
|
5272 |
-
var arr = emitter._handlers && emitter._handlers[type];
|
5273 |
-
return arr && arr.length > 0;
|
5274 |
-
}
|
5275 |
-
|
5276 |
-
CodeMirror.on = on; CodeMirror.off = off; CodeMirror.signal = signal;
|
5277 |
-
|
5278 |
-
function eventMixin(ctor) {
|
5279 |
-
ctor.prototype.on = function(type, f) {on(this, type, f);};
|
5280 |
-
ctor.prototype.off = function(type, f) {off(this, type, f);};
|
5281 |
-
}
|
5282 |
-
|
5283 |
-
// MISC UTILITIES
|
5284 |
-
|
5285 |
-
// Number of pixels added to scroller and sizer to hide scrollbar
|
5286 |
-
var scrollerCutOff = 30;
|
5287 |
-
|
5288 |
-
// Returned or thrown by various protocols to signal 'I'm not
|
5289 |
-
// handling this'.
|
5290 |
-
var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}};
|
5291 |
-
|
5292 |
-
function Delayed() {this.id = null;}
|
5293 |
-
Delayed.prototype = {set: function(ms, f) {clearTimeout(this.id); this.id = setTimeout(f, ms);}};
|
5294 |
-
|
5295 |
-
// Counts the column offset in a string, taking tabs into account.
|
5296 |
-
// Used mostly to find indentation.
|
5297 |
-
function countColumn(string, end, tabSize, startIndex, startValue) {
|
5298 |
-
if (end == null) {
|
5299 |
-
end = string.search(/[^\s\u00a0]/);
|
5300 |
-
if (end == -1) end = string.length;
|
5301 |
-
}
|
5302 |
-
for (var i = startIndex || 0, n = startValue || 0; i < end; ++i) {
|
5303 |
-
if (string.charAt(i) == "\t") n += tabSize - (n % tabSize);
|
5304 |
-
else ++n;
|
5305 |
-
}
|
5306 |
-
return n;
|
5307 |
-
}
|
5308 |
-
CodeMirror.countColumn = countColumn;
|
5309 |
-
|
5310 |
-
var spaceStrs = [""];
|
5311 |
-
function spaceStr(n) {
|
5312 |
-
while (spaceStrs.length <= n)
|
5313 |
-
spaceStrs.push(lst(spaceStrs) + " ");
|
5314 |
-
return spaceStrs[n];
|
5315 |
-
}
|
5316 |
-
|
5317 |
-
function lst(arr) { return arr[arr.length-1]; }
|
5318 |
-
|
5319 |
-
function selectInput(node) {
|
5320 |
-
if (ios) { // Mobile Safari apparently has a bug where select() is broken.
|
5321 |
-
node.selectionStart = 0;
|
5322 |
-
node.selectionEnd = node.value.length;
|
5323 |
-
} else {
|
5324 |
-
// Suppress mysterious IE10 errors
|
5325 |
-
try { node.select(); }
|
5326 |
-
catch(_e) {}
|
5327 |
-
}
|
5328 |
-
}
|
5329 |
-
|
5330 |
-
function indexOf(collection, elt) {
|
5331 |
-
if (collection.indexOf) return collection.indexOf(elt);
|
5332 |
-
for (var i = 0, e = collection.length; i < e; ++i)
|
5333 |
-
if (collection[i] == elt) return i;
|
5334 |
-
return -1;
|
5335 |
-
}
|
5336 |
-
|
5337 |
-
function createObj(base, props) {
|
5338 |
-
function Obj() {}
|
5339 |
-
Obj.prototype = base;
|
5340 |
-
var inst = new Obj();
|
5341 |
-
if (props) copyObj(props, inst);
|
5342 |
-
return inst;
|
5343 |
-
}
|
5344 |
-
|
5345 |
-
function copyObj(obj, target) {
|
5346 |
-
if (!target) target = {};
|
5347 |
-
for (var prop in obj) if (obj.hasOwnProperty(prop)) target[prop] = obj[prop];
|
5348 |
-
return target;
|
5349 |
-
}
|
5350 |
-
|
5351 |
-
function emptyArray(size) {
|
5352 |
-
for (var a = [], i = 0; i < size; ++i) a.push(undefined);
|
5353 |
-
return a;
|
5354 |
-
}
|
5355 |
-
|
5356 |
-
function bind(f) {
|
5357 |
-
var args = Array.prototype.slice.call(arguments, 1);
|
5358 |
-
return function(){return f.apply(null, args);};
|
5359 |
-
}
|
5360 |
-
|
5361 |
-
var nonASCIISingleCaseWordChar = /[\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;
|
5362 |
-
function isWordChar(ch) {
|
5363 |
-
return /\w/.test(ch) || ch > "\x80" &&
|
5364 |
-
(ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch));
|
5365 |
-
}
|
5366 |
-
|
5367 |
-
function isEmpty(obj) {
|
5368 |
-
for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false;
|
5369 |
-
return true;
|
5370 |
-
}
|
5371 |
-
|
5372 |
-
var isExtendingChar = /[\u0300-\u036F\u0483-\u0487\u0488-\u0489\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\uA66F\uA670-\uA672\uA674-\uA67D\uA69F\udc00-\udfff]/;
|
5373 |
-
|
5374 |
-
// DOM UTILITIES
|
5375 |
-
|
5376 |
-
function elt(tag, content, className, style) {
|
5377 |
-
var e = document.createElement(tag);
|
5378 |
-
if (className) e.className = className;
|
5379 |
-
if (style) e.style.cssText = style;
|
5380 |
-
if (typeof content == "string") setTextContent(e, content);
|
5381 |
-
else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]);
|
5382 |
-
return e;
|
5383 |
-
}
|
5384 |
-
|
5385 |
-
function removeChildren(e) {
|
5386 |
-
for (var count = e.childNodes.length; count > 0; --count)
|
5387 |
-
e.removeChild(e.firstChild);
|
5388 |
-
return e;
|
5389 |
-
}
|
5390 |
-
|
5391 |
-
function removeChildrenAndAdd(parent, e) {
|
5392 |
-
return removeChildren(parent).appendChild(e);
|
5393 |
-
}
|
5394 |
-
|
5395 |
-
function setTextContent(e, str) {
|
5396 |
-
if (ie_lt9) {
|
5397 |
-
e.innerHTML = "";
|
5398 |
-
e.appendChild(document.createTextNode(str));
|
5399 |
-
} else e.textContent = str;
|
5400 |
-
}
|
5401 |
-
|
5402 |
-
function getRect(node) {
|
5403 |
-
return node.getBoundingClientRect();
|
5404 |
-
}
|
5405 |
-
CodeMirror.replaceGetRect = function(f) { getRect = f; };
|
5406 |
-
|
5407 |
-
// FEATURE DETECTION
|
5408 |
-
|
5409 |
-
// Detect drag-and-drop
|
5410 |
-
var dragAndDrop = function() {
|
5411 |
-
// There is *some* kind of drag-and-drop support in IE6-8, but I
|
5412 |
-
// couldn't get it to work yet.
|
5413 |
-
if (ie_lt9) return false;
|
5414 |
-
var div = elt('div');
|
5415 |
-
return "draggable" in div || "dragDrop" in div;
|
5416 |
-
}();
|
5417 |
-
|
5418 |
-
// For a reason I have yet to figure out, some browsers disallow
|
5419 |
-
// word wrapping between certain characters *only* if a new inline
|
5420 |
-
// element is started between them. This makes it hard to reliably
|
5421 |
-
// measure the position of things, since that requires inserting an
|
5422 |
-
// extra span. This terribly fragile set of tests matches the
|
5423 |
-
// character combinations that suffer from this phenomenon on the
|
5424 |
-
// various browsers.
|
5425 |
-
function spanAffectsWrapping() { return false; }
|
5426 |
-
if (gecko) // Only for "$'"
|
5427 |
-
spanAffectsWrapping = function(str, i) {
|
5428 |
-
return str.charCodeAt(i - 1) == 36 && str.charCodeAt(i) == 39;
|
5429 |
-
};
|
5430 |
-
else if (safari && !/Version\/([6-9]|\d\d)\b/.test(navigator.userAgent))
|
5431 |
-
spanAffectsWrapping = function(str, i) {
|
5432 |
-
return /\-[^ \-?]|\?[^ !\'\"\),.\-\/:;\?\]\}]/.test(str.slice(i - 1, i + 1));
|
5433 |
-
};
|
5434 |
-
else if (webkit && !/Chrome\/(?:29|[3-9]\d|\d\d\d)\./.test(navigator.userAgent))
|
5435 |
-
spanAffectsWrapping = function(str, i) {
|
5436 |
-
if (i > 1 && str.charCodeAt(i - 1) == 45) {
|
5437 |
-
if (/\w/.test(str.charAt(i - 2)) && /[^\-?\.]/.test(str.charAt(i))) return true;
|
5438 |
-
if (i > 2 && /[\d\.,]/.test(str.charAt(i - 2)) && /[\d\.,]/.test(str.charAt(i))) return false;
|
5439 |
-
}
|
5440 |
-
return /[~!#%&*)=+}\]|\"\.>,:;][({[<]|-[^\-?\.\u2010-\u201f\u2026]|\?[\w~`@#$%\^&*(_=+{[|><]|…[\w~`@#$%\^&*(_=+{[><]/.test(str.slice(i - 1, i + 1));
|
5441 |
-
};
|
5442 |
-
|
5443 |
-
var knownScrollbarWidth;
|
5444 |
-
function scrollbarWidth(measure) {
|
5445 |
-
if (knownScrollbarWidth != null) return knownScrollbarWidth;
|
5446 |
-
var test = elt("div", null, null, "width: 50px; height: 50px; overflow-x: scroll");
|
5447 |
-
removeChildrenAndAdd(measure, test);
|
5448 |
-
if (test.offsetWidth)
|
5449 |
-
knownScrollbarWidth = test.offsetHeight - test.clientHeight;
|
5450 |
-
return knownScrollbarWidth || 0;
|
5451 |
-
}
|
5452 |
-
|
5453 |
-
var zwspSupported;
|
5454 |
-
function zeroWidthElement(measure) {
|
5455 |
-
if (zwspSupported == null) {
|
5456 |
-
var test = elt("span", "\u200b");
|
5457 |
-
removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")]));
|
5458 |
-
if (measure.firstChild.offsetHeight != 0)
|
5459 |
-
zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !ie_lt8;
|
5460 |
-
}
|
5461 |
-
if (zwspSupported) return elt("span", "\u200b");
|
5462 |
-
else return elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px");
|
5463 |
-
}
|
5464 |
-
|
5465 |
-
// See if "".split is the broken IE version, if so, provide an
|
5466 |
-
// alternative way to split lines.
|
5467 |
-
var splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) {
|
5468 |
-
var pos = 0, result = [], l = string.length;
|
5469 |
-
while (pos <= l) {
|
5470 |
-
var nl = string.indexOf("\n", pos);
|
5471 |
-
if (nl == -1) nl = string.length;
|
5472 |
-
var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl);
|
5473 |
-
var rt = line.indexOf("\r");
|
5474 |
-
if (rt != -1) {
|
5475 |
-
result.push(line.slice(0, rt));
|
5476 |
-
pos += rt + 1;
|
5477 |
-
} else {
|
5478 |
-
result.push(line);
|
5479 |
-
pos = nl + 1;
|
5480 |
-
}
|
5481 |
-
}
|
5482 |
-
return result;
|
5483 |
-
} : function(string){return string.split(/\r\n?|\n/);};
|
5484 |
-
CodeMirror.splitLines = splitLines;
|
5485 |
-
|
5486 |
-
var hasSelection = window.getSelection ? function(te) {
|
5487 |
-
try { return te.selectionStart != te.selectionEnd; }
|
5488 |
-
catch(e) { return false; }
|
5489 |
-
} : function(te) {
|
5490 |
-
try {var range = te.ownerDocument.selection.createRange();}
|
5491 |
-
catch(e) {}
|
5492 |
-
if (!range || range.parentElement() != te) return false;
|
5493 |
-
return range.compareEndPoints("StartToEnd", range) != 0;
|
5494 |
-
};
|
5495 |
-
|
5496 |
-
var hasCopyEvent = (function() {
|
5497 |
-
var e = elt("div");
|
5498 |
-
if ("oncopy" in e) return true;
|
5499 |
-
e.setAttribute("oncopy", "return;");
|
5500 |
-
return typeof e.oncopy == 'function';
|
5501 |
-
})();
|
5502 |
-
|
5503 |
-
// KEY NAMING
|
5504 |
-
|
5505 |
-
var keyNames = {3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt",
|
5506 |
-
19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End",
|
5507 |
-
36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert",
|
5508 |
-
46: "Delete", 59: ";", 91: "Mod", 92: "Mod", 93: "Mod", 109: "-", 107: "=", 127: "Delete",
|
5509 |
-
186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\",
|
5510 |
-
221: "]", 222: "'", 63276: "PageUp", 63277: "PageDown", 63275: "End", 63273: "Home",
|
5511 |
-
63234: "Left", 63232: "Up", 63235: "Right", 63233: "Down", 63302: "Insert", 63272: "Delete"};
|
5512 |
-
CodeMirror.keyNames = keyNames;
|
5513 |
-
(function() {
|
5514 |
-
// Number keys
|
5515 |
-
for (var i = 0; i < 10; i++) keyNames[i + 48] = String(i);
|
5516 |
-
// Alphabetic keys
|
5517 |
-
for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i);
|
5518 |
-
// Function keys
|
5519 |
-
for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i;
|
5520 |
-
})();
|
5521 |
-
|
5522 |
-
// BIDI HELPERS
|
5523 |
-
|
5524 |
-
function iterateBidiSections(order, from, to, f) {
|
5525 |
-
if (!order) return f(from, to, "ltr");
|
5526 |
-
var found = false;
|
5527 |
-
for (var i = 0; i < order.length; ++i) {
|
5528 |
-
var part = order[i];
|
5529 |
-
if (part.from < to && part.to > from || from == to && part.to == from) {
|
5530 |
-
f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr");
|
5531 |
-
found = true;
|
5532 |
-
}
|
5533 |
-
}
|
5534 |
-
if (!found) f(from, to, "ltr");
|
5535 |
-
}
|
5536 |
-
|
5537 |
-
function bidiLeft(part) { return part.level % 2 ? part.to : part.from; }
|
5538 |
-
function bidiRight(part) { return part.level % 2 ? part.from : part.to; }
|
5539 |
-
|
5540 |
-
function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; }
|
5541 |
-
function lineRight(line) {
|
5542 |
-
var order = getOrder(line);
|
5543 |
-
if (!order) return line.text.length;
|
5544 |
-
return bidiRight(lst(order));
|
5545 |
-
}
|
5546 |
-
|
5547 |
-
function lineStart(cm, lineN) {
|
5548 |
-
var line = getLine(cm.doc, lineN);
|
5549 |
-
var visual = visualLine(cm.doc, line);
|
5550 |
-
if (visual != line) lineN = lineNo(visual);
|
5551 |
-
var order = getOrder(visual);
|
5552 |
-
var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual);
|
5553 |
-
return Pos(lineN, ch);
|
5554 |
-
}
|
5555 |
-
function lineEnd(cm, lineN) {
|
5556 |
-
var merged, line;
|
5557 |
-
while (merged = collapsedSpanAtEnd(line = getLine(cm.doc, lineN)))
|
5558 |
-
lineN = merged.find().to.line;
|
5559 |
-
var order = getOrder(line);
|
5560 |
-
var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line);
|
5561 |
-
return Pos(lineN, ch);
|
5562 |
-
}
|
5563 |
-
|
5564 |
-
function compareBidiLevel(order, a, b) {
|
5565 |
-
var linedir = order[0].level;
|
5566 |
-
if (a == linedir) return true;
|
5567 |
-
if (b == linedir) return false;
|
5568 |
-
return a < b;
|
5569 |
-
}
|
5570 |
-
var bidiOther;
|
5571 |
-
function getBidiPartAt(order, pos) {
|
5572 |
-
for (var i = 0, found; i < order.length; ++i) {
|
5573 |
-
var cur = order[i];
|
5574 |
-
if (cur.from < pos && cur.to > pos) { bidiOther = null; return i; }
|
5575 |
-
if (cur.from == pos || cur.to == pos) {
|
5576 |
-
if (found == null) {
|
5577 |
-
found = i;
|
5578 |
-
} else if (compareBidiLevel(order, cur.level, order[found].level)) {
|
5579 |
-
bidiOther = found;
|
5580 |
-
return i;
|
5581 |
-
} else {
|
5582 |
-
bidiOther = i;
|
5583 |
-
return found;
|
5584 |
-
}
|
5585 |
-
}
|
5586 |
-
}
|
5587 |
-
bidiOther = null;
|
5588 |
-
return found;
|
5589 |
-
}
|
5590 |
-
|
5591 |
-
function moveInLine(line, pos, dir, byUnit) {
|
5592 |
-
if (!byUnit) return pos + dir;
|
5593 |
-
do pos += dir;
|
5594 |
-
while (pos > 0 && isExtendingChar.test(line.text.charAt(pos)));
|
5595 |
-
return pos;
|
5596 |
-
}
|
5597 |
-
|
5598 |
-
// This is somewhat involved. It is needed in order to move
|
5599 |
-
// 'visually' through bi-directional text -- i.e., pressing left
|
5600 |
-
// should make the cursor go left, even when in RTL text. The
|
5601 |
-
// tricky part is the 'jumps', where RTL and LTR text touch each
|
5602 |
-
// other. This often requires the cursor offset to move more than
|
5603 |
-
// one unit, in order to visually move one unit.
|
5604 |
-
function moveVisually(line, start, dir, byUnit) {
|
5605 |
-
var bidi = getOrder(line);
|
5606 |
-
if (!bidi) return moveLogically(line, start, dir, byUnit);
|
5607 |
-
var pos = getBidiPartAt(bidi, start), part = bidi[pos];
|
5608 |
-
var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit);
|
5609 |
-
|
5610 |
-
for (;;) {
|
5611 |
-
if (target > part.from && target < part.to) return target;
|
5612 |
-
if (target == part.from || target == part.to) {
|
5613 |
-
if (getBidiPartAt(bidi, target) == pos) return target;
|
5614 |
-
part = bidi[pos += dir];
|
5615 |
-
return (dir > 0) == part.level % 2 ? part.to : part.from;
|
5616 |
-
} else {
|
5617 |
-
part = bidi[pos += dir];
|
5618 |
-
if (!part) return null;
|
5619 |
-
if ((dir > 0) == part.level % 2)
|
5620 |
-
target = moveInLine(line, part.to, -1, byUnit);
|
5621 |
-
else
|
5622 |
-
target = moveInLine(line, part.from, 1, byUnit);
|
5623 |
-
}
|
5624 |
-
}
|
5625 |
-
}
|
5626 |
-
|
5627 |
-
function moveLogically(line, start, dir, byUnit) {
|
5628 |
-
var target = start + dir;
|
5629 |
-
if (byUnit) while (target > 0 && isExtendingChar.test(line.text.charAt(target))) target += dir;
|
5630 |
-
return target < 0 || target > line.text.length ? null : target;
|
5631 |
-
}
|
5632 |
-
|
5633 |
-
// Bidirectional ordering algorithm
|
5634 |
-
// See http://unicode.org/reports/tr9/tr9-13.html for the algorithm
|
5635 |
-
// that this (partially) implements.
|
5636 |
-
|
5637 |
-
// One-char codes used for character types:
|
5638 |
-
// L (L): Left-to-Right
|
5639 |
-
// R (R): Right-to-Left
|
5640 |
-
// r (AL): Right-to-Left Arabic
|
5641 |
-
// 1 (EN): European Number
|
5642 |
-
// + (ES): European Number Separator
|
5643 |
-
// % (ET): European Number Terminator
|
5644 |
-
// n (AN): Arabic Number
|
5645 |
-
// , (CS): Common Number Separator
|
5646 |
-
// m (NSM): Non-Spacing Mark
|
5647 |
-
// b (BN): Boundary Neutral
|
5648 |
-
// s (B): Paragraph Separator
|
5649 |
-
// t (S): Segment Separator
|
5650 |
-
// w (WS): Whitespace
|
5651 |
-
// N (ON): Other Neutrals
|
5652 |
-
|
5653 |
-
// Returns null if characters are ordered as they appear
|
5654 |
-
// (left-to-right), or an array of sections ({from, to, level}
|
5655 |
-
// objects) in the order in which they occur visually.
|
5656 |
-
var bidiOrdering = (function() {
|
5657 |
-
// Character types for codepoints 0 to 0xff
|
5658 |
-
var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLL";
|
5659 |
-
// Character types for codepoints 0x600 to 0x6ff
|
5660 |
-
var arabicTypes = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmmrrrrrrrrrrrrrrrrrr";
|
5661 |
-
function charType(code) {
|
5662 |
-
if (code <= 0xff) return lowTypes.charAt(code);
|
5663 |
-
else if (0x590 <= code && code <= 0x5f4) return "R";
|
5664 |
-
else if (0x600 <= code && code <= 0x6ff) return arabicTypes.charAt(code - 0x600);
|
5665 |
-
else if (0x700 <= code && code <= 0x8ac) return "r";
|
5666 |
-
else return "L";
|
5667 |
-
}
|
5668 |
-
|
5669 |
-
var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;
|
5670 |
-
var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;
|
5671 |
-
// Browsers seem to always treat the boundaries of block elements as being L.
|
5672 |
-
var outerType = "L";
|
5673 |
-
|
5674 |
-
return function(str) {
|
5675 |
-
if (!bidiRE.test(str)) return false;
|
5676 |
-
var len = str.length, types = [];
|
5677 |
-
for (var i = 0, type; i < len; ++i)
|
5678 |
-
types.push(type = charType(str.charCodeAt(i)));
|
5679 |
-
|
5680 |
-
// W1. Examine each non-spacing mark (NSM) in the level run, and
|
5681 |
-
// change the type of the NSM to the type of the previous
|
5682 |
-
// character. If the NSM is at the start of the level run, it will
|
5683 |
-
// get the type of sor.
|
5684 |
-
for (var i = 0, prev = outerType; i < len; ++i) {
|
5685 |
-
var type = types[i];
|
5686 |
-
if (type == "m") types[i] = prev;
|
5687 |
-
else prev = type;
|
5688 |
-
}
|
5689 |
-
|
5690 |
-
// W2. Search backwards from each instance of a European number
|
5691 |
-
// until the first strong type (R, L, AL, or sor) is found. If an
|
5692 |
-
// AL is found, change the type of the European number to Arabic
|
5693 |
-
// number.
|
5694 |
-
// W3. Change all ALs to R.
|
5695 |
-
for (var i = 0, cur = outerType; i < len; ++i) {
|
5696 |
-
var type = types[i];
|
5697 |
-
if (type == "1" && cur == "r") types[i] = "n";
|
5698 |
-
else if (isStrong.test(type)) { cur = type; if (type == "r") types[i] = "R"; }
|
5699 |
-
}
|
5700 |
-
|
5701 |
-
// W4. A single European separator between two European numbers
|
5702 |
-
// changes to a European number. A single common separator between
|
5703 |
-
// two numbers of the same type changes to that type.
|
5704 |
-
for (var i = 1, prev = types[0]; i < len - 1; ++i) {
|
5705 |
-
var type = types[i];
|
5706 |
-
if (type == "+" && prev == "1" && types[i+1] == "1") types[i] = "1";
|
5707 |
-
else if (type == "," && prev == types[i+1] &&
|
5708 |
-
(prev == "1" || prev == "n")) types[i] = prev;
|
5709 |
-
prev = type;
|
5710 |
-
}
|
5711 |
-
|
5712 |
-
// W5. A sequence of European terminators adjacent to European
|
5713 |
-
// numbers changes to all European numbers.
|
5714 |
-
// W6. Otherwise, separators and terminators change to Other
|
5715 |
-
// Neutral.
|
5716 |
-
for (var i = 0; i < len; ++i) {
|
5717 |
-
var type = types[i];
|
5718 |
-
if (type == ",") types[i] = "N";
|
5719 |
-
else if (type == "%") {
|
5720 |
-
for (var end = i + 1; end < len && types[end] == "%"; ++end) {}
|
5721 |
-
var replace = (i && types[i-1] == "!") || (end < len - 1 && types[end] == "1") ? "1" : "N";
|
5722 |
-
for (var j = i; j < end; ++j) types[j] = replace;
|
5723 |
-
i = end - 1;
|
5724 |
-
}
|
5725 |
-
}
|
5726 |
-
|
5727 |
-
// W7. Search backwards from each instance of a European number
|
5728 |
-
// until the first strong type (R, L, or sor) is found. If an L is
|
5729 |
-
// found, then change the type of the European number to L.
|
5730 |
-
for (var i = 0, cur = outerType; i < len; ++i) {
|
5731 |
-
var type = types[i];
|
5732 |
-
if (cur == "L" && type == "1") types[i] = "L";
|
5733 |
-
else if (isStrong.test(type)) cur = type;
|
5734 |
-
}
|
5735 |
-
|
5736 |
-
// N1. A sequence of neutrals takes the direction of the
|
5737 |
-
// surrounding strong text if the text on both sides has the same
|
5738 |
-
// direction. European and Arabic numbers act as if they were R in
|
5739 |
-
// terms of their influence on neutrals. Start-of-level-run (sor)
|
5740 |
-
// and end-of-level-run (eor) are used at level run boundaries.
|
5741 |
-
// N2. Any remaining neutrals take the embedding direction.
|
5742 |
-
for (var i = 0; i < len; ++i) {
|
5743 |
-
if (isNeutral.test(types[i])) {
|
5744 |
-
for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {}
|
5745 |
-
var before = (i ? types[i-1] : outerType) == "L";
|
5746 |
-
var after = (end < len - 1 ? types[end] : outerType) == "L";
|
5747 |
-
var replace = before || after ? "L" : "R";
|
5748 |
-
for (var j = i; j < end; ++j) types[j] = replace;
|
5749 |
-
i = end - 1;
|
5750 |
-
}
|
5751 |
-
}
|
5752 |
-
|
5753 |
-
// Here we depart from the documented algorithm, in order to avoid
|
5754 |
-
// building up an actual levels array. Since there are only three
|
5755 |
-
// levels (0, 1, 2) in an implementation that doesn't take
|
5756 |
-
// explicit embedding into account, we can build up the order on
|
5757 |
-
// the fly, without following the level-based algorithm.
|
5758 |
-
var order = [], m;
|
5759 |
-
for (var i = 0; i < len;) {
|
5760 |
-
if (countsAsLeft.test(types[i])) {
|
5761 |
-
var start = i;
|
5762 |
-
for (++i; i < len && countsAsLeft.test(types[i]); ++i) {}
|
5763 |
-
order.push({from: start, to: i, level: 0});
|
5764 |
-
} else {
|
5765 |
-
var pos = i, at = order.length;
|
5766 |
-
for (++i; i < len && types[i] != "L"; ++i) {}
|
5767 |
-
for (var j = pos; j < i;) {
|
5768 |
-
if (countsAsNum.test(types[j])) {
|
5769 |
-
if (pos < j) order.splice(at, 0, {from: pos, to: j, level: 1});
|
5770 |
-
var nstart = j;
|
5771 |
-
for (++j; j < i && countsAsNum.test(types[j]); ++j) {}
|
5772 |
-
order.splice(at, 0, {from: nstart, to: j, level: 2});
|
5773 |
-
pos = j;
|
5774 |
-
} else ++j;
|
5775 |
-
}
|
5776 |
-
if (pos < i) order.splice(at, 0, {from: pos, to: i, level: 1});
|
5777 |
-
}
|
5778 |
-
}
|
5779 |
-
if (order[0].level == 1 && (m = str.match(/^\s+/))) {
|
5780 |
-
order[0].from = m[0].length;
|
5781 |
-
order.unshift({from: 0, to: m[0].length, level: 0});
|
5782 |
-
}
|
5783 |
-
if (lst(order).level == 1 && (m = str.match(/\s+$/))) {
|
5784 |
-
lst(order).to -= m[0].length;
|
5785 |
-
order.push({from: len - m[0].length, to: len, level: 0});
|
5786 |
-
}
|
5787 |
-
if (order[0].level != lst(order).level)
|
5788 |
-
order.push({from: len, to: len, level: order[0].level});
|
5789 |
-
|
5790 |
-
return order;
|
5791 |
-
};
|
5792 |
-
})();
|
5793 |
-
|
5794 |
-
// THE END
|
5795 |
-
|
5796 |
-
CodeMirror.version = "3.15.0";
|
5797 |
-
|
5798 |
-
return CodeMirror;
|
5799 |
-
})();
|
1 |
+
// CodeMirror version 3.15
|
2 |
+
//
|
3 |
+
// CodeMirror is the only global var we claim
|
4 |
+
window.CodeMirror = (function() {
|
5 |
+
"use strict";
|
6 |
+
|
7 |
+
// BROWSER SNIFFING
|
8 |
+
|
9 |
+
// Crude, but necessary to handle a number of hard-to-feature-detect
|
10 |
+
// bugs and behavior differences.
|
11 |
+
var gecko = /gecko\/\d/i.test(navigator.userAgent);
|
12 |
+
var ie = /MSIE \d/.test(navigator.userAgent);
|
13 |
+
var ie_lt8 = ie && (document.documentMode == null || document.documentMode < 8);
|
14 |
+
var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9);
|
15 |
+
var webkit = /WebKit\//.test(navigator.userAgent);
|
16 |
+
var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(navigator.userAgent);
|
17 |
+
var chrome = /Chrome\//.test(navigator.userAgent);
|
18 |
+
var opera = /Opera\//.test(navigator.userAgent);
|
19 |
+
var safari = /Apple Computer/.test(navigator.vendor);
|
20 |
+
var khtml = /KHTML\//.test(navigator.userAgent);
|
21 |
+
var mac_geLion = /Mac OS X 1\d\D([7-9]|\d\d)\D/.test(navigator.userAgent);
|
22 |
+
var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent);
|
23 |
+
var phantom = /PhantomJS/.test(navigator.userAgent);
|
24 |
+
|
25 |
+
var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent);
|
26 |
+
// This is woefully incomplete. Suggestions for alternative methods welcome.
|
27 |
+
var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent);
|
28 |
+
var mac = ios || /Mac/.test(navigator.platform);
|
29 |
+
var windows = /windows/i.test(navigator.platform);
|
30 |
+
|
31 |
+
var opera_version = opera && navigator.userAgent.match(/Version\/(\d*\.\d*)/);
|
32 |
+
if (opera_version) opera_version = Number(opera_version[1]);
|
33 |
+
if (opera_version && opera_version >= 15) { opera = false; webkit = true; }
|
34 |
+
// Some browsers use the wrong event properties to signal cmd/ctrl on OS X
|
35 |
+
var flipCtrlCmd = mac && (qtwebkit || opera && (opera_version == null || opera_version < 12.11));
|
36 |
+
var captureMiddleClick = gecko || (ie && !ie_lt9);
|
37 |
+
|
38 |
+
// Optimize some code when these features are not used
|
39 |
+
var sawReadOnlySpans = false, sawCollapsedSpans = false;
|
40 |
+
|
41 |
+
// CONSTRUCTOR
|
42 |
+
|
43 |
+
function CodeMirror(place, options) {
|
44 |
+
if (!(this instanceof CodeMirror)) return new CodeMirror(place, options);
|
45 |
+
|
46 |
+
this.options = options = options || {};
|
47 |
+
// Determine effective options based on given values and defaults.
|
48 |
+
for (var opt in defaults) if (!options.hasOwnProperty(opt) && defaults.hasOwnProperty(opt))
|
49 |
+
options[opt] = defaults[opt];
|
50 |
+
setGuttersForLineNumbers(options);
|
51 |
+
|
52 |
+
var docStart = typeof options.value == "string" ? 0 : options.value.first;
|
53 |
+
var display = this.display = makeDisplay(place, docStart);
|
54 |
+
display.wrapper.CodeMirror = this;
|
55 |
+
updateGutters(this);
|
56 |
+
if (options.autofocus && !mobile) focusInput(this);
|
57 |
+
|
58 |
+
this.state = {keyMaps: [],
|
59 |
+
overlays: [],
|
60 |
+
modeGen: 0,
|
61 |
+
overwrite: false, focused: false,
|
62 |
+
suppressEdits: false, pasteIncoming: false,
|
63 |
+
draggingText: false,
|
64 |
+
highlight: new Delayed()};
|
65 |
+
|
66 |
+
themeChanged(this);
|
67 |
+
if (options.lineWrapping)
|
68 |
+
this.display.wrapper.className += " CodeMirror-wrap";
|
69 |
+
|
70 |
+
var doc = options.value;
|
71 |
+
if (typeof doc == "string") doc = new Doc(options.value, options.mode);
|
72 |
+
operation(this, attachDoc)(this, doc);
|
73 |
+
|
74 |
+
// Override magic textarea content restore that IE sometimes does
|
75 |
+
// on our hidden textarea on reload
|
76 |
+
if (ie) setTimeout(bind(resetInput, this, true), 20);
|
77 |
+
|
78 |
+
registerEventHandlers(this);
|
79 |
+
// IE throws unspecified error in certain cases, when
|
80 |
+
// trying to access activeElement before onload
|
81 |
+
var hasFocus; try { hasFocus = (document.activeElement == display.input); } catch(e) { }
|
82 |
+
if (hasFocus || (options.autofocus && !mobile)) setTimeout(bind(onFocus, this), 20);
|
83 |
+
else onBlur(this);
|
84 |
+
|
85 |
+
operation(this, function() {
|
86 |
+
for (var opt in optionHandlers)
|
87 |
+
if (optionHandlers.propertyIsEnumerable(opt))
|
88 |
+
optionHandlers[opt](this, options[opt], Init);
|
89 |
+
for (var i = 0; i < initHooks.length; ++i) initHooks[i](this);
|
90 |
+
})();
|
91 |
+
}
|
92 |
+
|
93 |
+
// DISPLAY CONSTRUCTOR
|
94 |
+
|
95 |
+
function makeDisplay(place, docStart) {
|
96 |
+
var d = {};
|
97 |
+
|
98 |
+
var input = d.input = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none; font-size: 4px;");
|
99 |
+
if (webkit) input.style.width = "1000px";
|
100 |
+
else input.setAttribute("wrap", "off");
|
101 |
+
// if border: 0; -- iOS fails to open keyboard (issue #1287)
|
102 |
+
if (ios) input.style.border = "1px solid black";
|
103 |
+
input.setAttribute("autocorrect", "off"); input.setAttribute("autocapitalize", "off"); input.setAttribute("spellcheck", "false");
|
104 |
+
|
105 |
+
// Wraps and hides input textarea
|
106 |
+
d.inputDiv = elt("div", [input], null, "overflow: hidden; position: relative; width: 3px; height: 0px;");
|
107 |
+
// The actual fake scrollbars.
|
108 |
+
d.scrollbarH = elt("div", [elt("div", null, null, "height: 1px")], "CodeMirror-hscrollbar");
|
109 |
+
d.scrollbarV = elt("div", [elt("div", null, null, "width: 1px")], "CodeMirror-vscrollbar");
|
110 |
+
d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler");
|
111 |
+
d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler");
|
112 |
+
// DIVs containing the selection and the actual code
|
113 |
+
d.lineDiv = elt("div", null, "CodeMirror-code");
|
114 |
+
d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1");
|
115 |
+
// Blinky cursor, and element used to ensure cursor fits at the end of a line
|
116 |
+
d.cursor = elt("div", "\u00a0", "CodeMirror-cursor");
|
117 |
+
// Secondary cursor, shown when on a 'jump' in bi-directional text
|
118 |
+
d.otherCursor = elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor");
|
119 |
+
// Used to measure text size
|
120 |
+
d.measure = elt("div", null, "CodeMirror-measure");
|
121 |
+
// Wraps everything that needs to exist inside the vertically-padded coordinate system
|
122 |
+
d.lineSpace = elt("div", [d.measure, d.selectionDiv, d.lineDiv, d.cursor, d.otherCursor],
|
123 |
+
null, "position: relative; outline: none");
|
124 |
+
// Moved around its parent to cover visible view
|
125 |
+
d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative");
|
126 |
+
// Set to the height of the text, causes scrolling
|
127 |
+
d.sizer = elt("div", [d.mover], "CodeMirror-sizer");
|
128 |
+
// D is needed because behavior of elts with overflow: auto and padding is inconsistent across browsers
|
129 |
+
d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerCutOff + "px; width: 1px;");
|
130 |
+
// Will contain the gutters, if any
|
131 |
+
d.gutters = elt("div", null, "CodeMirror-gutters");
|
132 |
+
d.lineGutter = null;
|
133 |
+
// Provides scrolling
|
134 |
+
d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll");
|
135 |
+
d.scroller.setAttribute("tabIndex", "-1");
|
136 |
+
// The element in which the editor lives.
|
137 |
+
d.wrapper = elt("div", [d.inputDiv, d.scrollbarH, d.scrollbarV,
|
138 |
+
d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror");
|
139 |
+
// Work around IE7 z-index bug
|
140 |
+
if (ie_lt8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }
|
141 |
+
if (place.appendChild) place.appendChild(d.wrapper); else place(d.wrapper);
|
142 |
+
|
143 |
+
// Needed to hide big blue blinking cursor on Mobile Safari
|
144 |
+
if (ios) input.style.width = "0px";
|
145 |
+
if (!webkit) d.scroller.draggable = true;
|
146 |
+
// Needed to handle Tab key in KHTML
|
147 |
+
if (khtml) { d.inputDiv.style.height = "1px"; d.inputDiv.style.position = "absolute"; }
|
148 |
+
// Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).
|
149 |
+
else if (ie_lt8) d.scrollbarH.style.minWidth = d.scrollbarV.style.minWidth = "18px";
|
150 |
+
|
151 |
+
// Current visible range (may be bigger than the view window).
|
152 |
+
d.viewOffset = d.lastSizeC = 0;
|
153 |
+
d.showingFrom = d.showingTo = docStart;
|
154 |
+
|
155 |
+
// Used to only resize the line number gutter when necessary (when
|
156 |
+
// the amount of lines crosses a boundary that makes its width change)
|
157 |
+
d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;
|
158 |
+
// See readInput and resetInput
|
159 |
+
d.prevInput = "";
|
160 |
+
// Set to true when a non-horizontal-scrolling widget is added. As
|
161 |
+
// an optimization, widget aligning is skipped when d is false.
|
162 |
+
d.alignWidgets = false;
|
163 |
+
// Flag that indicates whether we currently expect input to appear
|
164 |
+
// (after some event like 'keypress' or 'input') and are polling
|
165 |
+
// intensively.
|
166 |
+
d.pollingFast = false;
|
167 |
+
// Self-resetting timeout for the poller
|
168 |
+
d.poll = new Delayed();
|
169 |
+
|
170 |
+
d.cachedCharWidth = d.cachedTextHeight = null;
|
171 |
+
d.measureLineCache = [];
|
172 |
+
d.measureLineCachePos = 0;
|
173 |
+
|
174 |
+
// Tracks when resetInput has punted to just putting a short
|
175 |
+
// string instead of the (large) selection.
|
176 |
+
d.inaccurateSelection = false;
|
177 |
+
|
178 |
+
// Tracks the maximum line length so that the horizontal scrollbar
|
179 |
+
// can be kept static when scrolling.
|
180 |
+
d.maxLine = null;
|
181 |
+
d.maxLineLength = 0;
|
182 |
+
d.maxLineChanged = false;
|
183 |
+
|
184 |
+
// Used for measuring wheel scrolling granularity
|
185 |
+
d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;
|
186 |
+
|
187 |
+
return d;
|
188 |
+
}
|
189 |
+
|
190 |
+
// STATE UPDATES
|
191 |
+
|
192 |
+
// Used to get the editor into a consistent state again when options change.
|
193 |
+
|
194 |
+
function loadMode(cm) {
|
195 |
+
cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption);
|
196 |
+
cm.doc.iter(function(line) {
|
197 |
+
if (line.stateAfter) line.stateAfter = null;
|
198 |
+
if (line.styles) line.styles = null;
|
199 |
+
});
|
200 |
+
cm.doc.frontier = cm.doc.first;
|
201 |
+
startWorker(cm, 100);
|
202 |
+
cm.state.modeGen++;
|
203 |
+
if (cm.curOp) regChange(cm);
|
204 |
+
}
|
205 |
+
|
206 |
+
function wrappingChanged(cm) {
|
207 |
+
if (cm.options.lineWrapping) {
|
208 |
+
cm.display.wrapper.className += " CodeMirror-wrap";
|
209 |
+
cm.display.sizer.style.minWidth = "";
|
210 |
+
} else {
|
211 |
+
cm.display.wrapper.className = cm.display.wrapper.className.replace(" CodeMirror-wrap", "");
|
212 |
+
computeMaxLength(cm);
|
213 |
+
}
|
214 |
+
estimateLineHeights(cm);
|
215 |
+
regChange(cm);
|
216 |
+
clearCaches(cm);
|
217 |
+
setTimeout(function(){updateScrollbars(cm);}, 100);
|
218 |
+
}
|
219 |
+
|
220 |
+
function estimateHeight(cm) {
|
221 |
+
var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;
|
222 |
+
var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);
|
223 |
+
return function(line) {
|
224 |
+
if (lineIsHidden(cm.doc, line))
|
225 |
+
return 0;
|
226 |
+
else if (wrapping)
|
227 |
+
return (Math.ceil(line.text.length / perLine) || 1) * th;
|
228 |
+
else
|
229 |
+
return th;
|
230 |
+
};
|
231 |
+
}
|
232 |
+
|
233 |
+
function estimateLineHeights(cm) {
|
234 |
+
var doc = cm.doc, est = estimateHeight(cm);
|
235 |
+
doc.iter(function(line) {
|
236 |
+
var estHeight = est(line);
|
237 |
+
if (estHeight != line.height) updateLineHeight(line, estHeight);
|
238 |
+
});
|
239 |
+
}
|
240 |
+
|
241 |
+
function keyMapChanged(cm) {
|
242 |
+
var map = keyMap[cm.options.keyMap], style = map.style;
|
243 |
+
cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-keymap-\S+/g, "") +
|
244 |
+
(style ? " cm-keymap-" + style : "");
|
245 |
+
cm.state.disableInput = map.disableInput;
|
246 |
+
}
|
247 |
+
|
248 |
+
function themeChanged(cm) {
|
249 |
+
cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") +
|
250 |
+
cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-");
|
251 |
+
clearCaches(cm);
|
252 |
+
}
|
253 |
+
|
254 |
+
function guttersChanged(cm) {
|
255 |
+
updateGutters(cm);
|
256 |
+
regChange(cm);
|
257 |
+
setTimeout(function(){alignHorizontally(cm);}, 20);
|
258 |
+
}
|
259 |
+
|
260 |
+
function updateGutters(cm) {
|
261 |
+
var gutters = cm.display.gutters, specs = cm.options.gutters;
|
262 |
+
removeChildren(gutters);
|
263 |
+
for (var i = 0; i < specs.length; ++i) {
|
264 |
+
var gutterClass = specs[i];
|
265 |
+
var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass));
|
266 |
+
if (gutterClass == "CodeMirror-linenumbers") {
|
267 |
+
cm.display.lineGutter = gElt;
|
268 |
+
gElt.style.width = (cm.display.lineNumWidth || 1) + "px";
|
269 |
+
}
|
270 |
+
}
|
271 |
+
gutters.style.display = i ? "" : "none";
|
272 |
+
}
|
273 |
+
|
274 |
+
function lineLength(doc, line) {
|
275 |
+
if (line.height == 0) return 0;
|
276 |
+
var len = line.text.length, merged, cur = line;
|
277 |
+
while (merged = collapsedSpanAtStart(cur)) {
|
278 |
+
var found = merged.find();
|
279 |
+
cur = getLine(doc, found.from.line);
|
280 |
+
len += found.from.ch - found.to.ch;
|
281 |
+
}
|
282 |
+
cur = line;
|
283 |
+
while (merged = collapsedSpanAtEnd(cur)) {
|
284 |
+
var found = merged.find();
|
285 |
+
len -= cur.text.length - found.from.ch;
|
286 |
+
cur = getLine(doc, found.to.line);
|
287 |
+
len += cur.text.length - found.to.ch;
|
288 |
+
}
|
289 |
+
return len;
|
290 |
+
}
|
291 |
+
|
292 |
+
function computeMaxLength(cm) {
|
293 |
+
var d = cm.display, doc = cm.doc;
|
294 |
+
d.maxLine = getLine(doc, doc.first);
|
295 |
+
d.maxLineLength = lineLength(doc, d.maxLine);
|
296 |
+
d.maxLineChanged = true;
|
297 |
+
doc.iter(function(line) {
|
298 |
+
var len = lineLength(doc, line);
|
299 |
+
if (len > d.maxLineLength) {
|
300 |
+
d.maxLineLength = len;
|
301 |
+
d.maxLine = line;
|
302 |
+
}
|
303 |
+
});
|
304 |
+
}
|
305 |
+
|
306 |
+
// Make sure the gutters options contains the element
|
307 |
+
// "CodeMirror-linenumbers" when the lineNumbers option is true.
|
308 |
+
function setGuttersForLineNumbers(options) {
|
309 |
+
var found = false;
|
310 |
+
for (var i = 0; i < options.gutters.length; ++i) {
|
311 |
+
if (options.gutters[i] == "CodeMirror-linenumbers") {
|
312 |
+
if (options.lineNumbers) found = true;
|
313 |
+
else options.gutters.splice(i--, 1);
|
314 |
+
}
|
315 |
+
}
|
316 |
+
if (!found && options.lineNumbers)
|
317 |
+
options.gutters.push("CodeMirror-linenumbers");
|
318 |
+
}
|
319 |
+
|
320 |
+
// SCROLLBARS
|
321 |
+
|
322 |
+
// Re-synchronize the fake scrollbars with the actual size of the
|
323 |
+
// content. Optionally force a scrollTop.
|
324 |
+
function updateScrollbars(cm) {
|
325 |
+
var d = cm.display, docHeight = cm.doc.height;
|
326 |
+
var totalHeight = docHeight + paddingVert(d);
|
327 |
+
d.sizer.style.minHeight = d.heightForcer.style.top = totalHeight + "px";
|
328 |
+
d.gutters.style.height = Math.max(totalHeight, d.scroller.clientHeight - scrollerCutOff) + "px";
|
329 |
+
var scrollHeight = Math.max(totalHeight, d.scroller.scrollHeight);
|
330 |
+
var needsH = d.scroller.scrollWidth > (d.scroller.clientWidth + 1);
|
331 |
+
var needsV = scrollHeight > (d.scroller.clientHeight + 1);
|
332 |
+
if (needsV) {
|
333 |
+
d.scrollbarV.style.display = "block";
|
334 |
+
d.scrollbarV.style.bottom = needsH ? scrollbarWidth(d.measure) + "px" : "0";
|
335 |
+
d.scrollbarV.firstChild.style.height =
|
336 |
+
(scrollHeight - d.scroller.clientHeight + d.scrollbarV.clientHeight) + "px";
|
337 |
+
} else d.scrollbarV.style.display = "";
|
338 |
+
if (needsH) {
|
339 |
+
d.scrollbarH.style.display = "block";
|
340 |
+
d.scrollbarH.style.right = needsV ? scrollbarWidth(d.measure) + "px" : "0";
|
341 |
+
d.scrollbarH.firstChild.style.width =
|
342 |
+
(d.scroller.scrollWidth - d.scroller.clientWidth + d.scrollbarH.clientWidth) + "px";
|
343 |
+
} else d.scrollbarH.style.display = "";
|
344 |
+
if (needsH && needsV) {
|
345 |
+
d.scrollbarFiller.style.display = "block";
|
346 |
+
d.scrollbarFiller.style.height = d.scrollbarFiller.style.width = scrollbarWidth(d.measure) + "px";
|
347 |
+
} else d.scrollbarFiller.style.display = "";
|
348 |
+
if (needsH && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
|
349 |
+
d.gutterFiller.style.display = "block";
|
350 |
+
d.gutterFiller.style.height = scrollbarWidth(d.measure) + "px";
|
351 |
+
d.gutterFiller.style.width = d.gutters.offsetWidth + "px";
|
352 |
+
} else d.gutterFiller.style.display = "";
|
353 |
+
|
354 |
+
if (mac_geLion && scrollbarWidth(d.measure) === 0)
|
355 |
+
d.scrollbarV.style.minWidth = d.scrollbarH.style.minHeight = mac_geMountainLion ? "18px" : "12px";
|
356 |
+
}
|
357 |
+
|
358 |
+
function visibleLines(display, doc, viewPort) {
|
359 |
+
var top = display.scroller.scrollTop, height = display.wrapper.clientHeight;
|
360 |
+
if (typeof viewPort == "number") top = viewPort;
|
361 |
+
else if (viewPort) {top = viewPort.top; height = viewPort.bottom - viewPort.top;}
|
362 |
+
top = Math.floor(top - paddingTop(display));
|
363 |
+
var bottom = Math.ceil(top + height);
|
364 |
+
return {from: lineAtHeight(doc, top), to: lineAtHeight(doc, bottom)};
|
365 |
+
}
|
366 |
+
|
367 |
+
// LINE NUMBERS
|
368 |
+
|
369 |
+
function alignHorizontally(cm) {
|
370 |
+
var display = cm.display;
|
371 |
+
if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return;
|
372 |
+
var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;
|
373 |
+
var gutterW = display.gutters.offsetWidth, l = comp + "px";
|
374 |
+
for (var n = display.lineDiv.firstChild; n; n = n.nextSibling) if (n.alignable) {
|
375 |
+
for (var i = 0, a = n.alignable; i < a.length; ++i) a[i].style.left = l;
|
376 |
+
}
|
377 |
+
if (cm.options.fixedGutter)
|
378 |
+
display.gutters.style.left = (comp + gutterW) + "px";
|
379 |
+
}
|
380 |
+
|
381 |
+
function maybeUpdateLineNumberWidth(cm) {
|
382 |
+
if (!cm.options.lineNumbers) return false;
|
383 |
+
var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;
|
384 |
+
if (last.length != display.lineNumChars) {
|
385 |
+
var test = display.measure.appendChild(elt("div", [elt("div", last)],
|
386 |
+
"CodeMirror-linenumber CodeMirror-gutter-elt"));
|
387 |
+
var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;
|
388 |
+
display.lineGutter.style.width = "";
|
389 |
+
display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding);
|
390 |
+
display.lineNumWidth = display.lineNumInnerWidth + padding;
|
391 |
+
display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;
|
392 |
+
display.lineGutter.style.width = display.lineNumWidth + "px";
|
393 |
+
return true;
|
394 |
+
}
|
395 |
+
return false;
|
396 |
+
}
|
397 |
+
|
398 |
+
function lineNumberFor(options, i) {
|
399 |
+
return String(options.lineNumberFormatter(i + options.firstLineNumber));
|
400 |
+
}
|
401 |
+
function compensateForHScroll(display) {
|
402 |
+
return getRect(display.scroller).left - getRect(display.sizer).left;
|
403 |
+
}
|
404 |
+
|
405 |
+
// DISPLAY DRAWING
|
406 |
+
|
407 |
+
function updateDisplay(cm, changes, viewPort, forced) {
|
408 |
+
var oldFrom = cm.display.showingFrom, oldTo = cm.display.showingTo, updated;
|
409 |
+
var visible = visibleLines(cm.display, cm.doc, viewPort);
|
410 |
+
for (;;) {
|
411 |
+
if (!updateDisplayInner(cm, changes, visible, forced)) break;
|
412 |
+
forced = false;
|
413 |
+
updated = true;
|
414 |
+
updateSelection(cm);
|
415 |
+
updateScrollbars(cm);
|
416 |
+
|
417 |
+
// Clip forced viewport to actual scrollable area
|
418 |
+
if (viewPort)
|
419 |
+
viewPort = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight,
|
420 |
+
typeof viewPort == "number" ? viewPort : viewPort.top);
|
421 |
+
visible = visibleLines(cm.display, cm.doc, viewPort);
|
422 |
+
if (visible.from >= cm.display.showingFrom && visible.to <= cm.display.showingTo)
|
423 |
+
break;
|
424 |
+
changes = [];
|
425 |
+
}
|
426 |
+
|
427 |
+
if (updated) {
|
428 |
+
signalLater(cm, "update", cm);
|
429 |
+
if (cm.display.showingFrom != oldFrom || cm.display.showingTo != oldTo)
|
430 |
+
signalLater(cm, "viewportChange", cm, cm.display.showingFrom, cm.display.showingTo);
|
431 |
+
}
|
432 |
+
return updated;
|
433 |
+
}
|
434 |
+
|
435 |
+
// Uses a set of changes plus the current scroll position to
|
436 |
+
// determine which DOM updates have to be made, and makes the
|
437 |
+
// updates.
|
438 |
+
function updateDisplayInner(cm, changes, visible, forced) {
|
439 |
+
var display = cm.display, doc = cm.doc;
|
440 |
+
if (!display.wrapper.clientWidth) {
|
441 |
+
display.showingFrom = display.showingTo = doc.first;
|
442 |
+
display.viewOffset = 0;
|
443 |
+
return;
|
444 |
+
}
|
445 |
+
|
446 |
+
// Bail out if the visible area is already rendered and nothing changed.
|
447 |
+
if (!forced && changes.length == 0 &&
|
448 |
+
visible.from > display.showingFrom && visible.to < display.showingTo)
|
449 |
+
return;
|
450 |
+
|
451 |
+
if (maybeUpdateLineNumberWidth(cm))
|
452 |
+
changes = [{from: doc.first, to: doc.first + doc.size}];
|
453 |
+
var gutterW = display.sizer.style.marginLeft = display.gutters.offsetWidth + "px";
|
454 |
+
display.scrollbarH.style.left = cm.options.fixedGutter ? gutterW : "0";
|
455 |
+
|
456 |
+
// Used to determine which lines need their line numbers updated
|
457 |
+
var positionsChangedFrom = Infinity;
|
458 |
+
if (cm.options.lineNumbers)
|
459 |
+
for (var i = 0; i < changes.length; ++i)
|
460 |
+
if (changes[i].diff) { positionsChangedFrom = changes[i].from; break; }
|
461 |
+
|
462 |
+
var end = doc.first + doc.size;
|
463 |
+
var from = Math.max(visible.from - cm.options.viewportMargin, doc.first);
|
464 |
+
var to = Math.min(end, visible.to + cm.options.viewportMargin);
|
465 |
+
if (display.showingFrom < from && from - display.showingFrom < 20) from = Math.max(doc.first, display.showingFrom);
|
466 |
+
if (display.showingTo > to && display.showingTo - to < 20) to = Math.min(end, display.showingTo);
|
467 |
+
if (sawCollapsedSpans) {
|
468 |
+
from = lineNo(visualLine(doc, getLine(doc, from)));
|
469 |
+
while (to < end && lineIsHidden(doc, getLine(doc, to))) ++to;
|
470 |
+
}
|
471 |
+
|
472 |
+
// Create a range of theoretically intact lines, and punch holes
|
473 |
+
// in that using the change info.
|
474 |
+
var intact = [{from: Math.max(display.showingFrom, doc.first),
|
475 |
+
to: Math.min(display.showingTo, end)}];
|
476 |
+
if (intact[0].from >= intact[0].to) intact = [];
|
477 |
+
else intact = computeIntact(intact, changes);
|
478 |
+
// When merged lines are present, we might have to reduce the
|
479 |
+
// intact ranges because changes in continued fragments of the
|
480 |
+
// intact lines do require the lines to be redrawn.
|
481 |
+
if (sawCollapsedSpans)
|
482 |
+
for (var i = 0; i < intact.length; ++i) {
|
483 |
+
var range = intact[i], merged;
|
484 |
+
while (merged = collapsedSpanAtEnd(getLine(doc, range.to - 1))) {
|
485 |
+
var newTo = merged.find().from.line;
|
486 |
+
if (newTo > range.from) range.to = newTo;
|
487 |
+
else { intact.splice(i--, 1); break; }
|
488 |
+
}
|
489 |
+
}
|
490 |
+
|
491 |
+
// Clip off the parts that won't be visible
|
492 |
+
var intactLines = 0;
|
493 |
+
for (var i = 0; i < intact.length; ++i) {
|
494 |
+
var range = intact[i];
|
495 |
+
if (range.from < from) range.from = from;
|
496 |
+
if (range.to > to) range.to = to;
|
497 |
+
if (range.from >= range.to) intact.splice(i--, 1);
|
498 |
+
else intactLines += range.to - range.from;
|
499 |
+
}
|
500 |
+
if (!forced && intactLines == to - from && from == display.showingFrom && to == display.showingTo) {
|
501 |
+
updateViewOffset(cm);
|
502 |
+
return;
|
503 |
+
}
|
504 |
+
intact.sort(function(a, b) {return a.from - b.from;});
|
505 |
+
|
506 |
+
// Avoid crashing on IE's "unspecified error" when in iframes
|
507 |
+
try {
|
508 |
+
var focused = document.activeElement;
|
509 |
+
} catch(e) {}
|
510 |
+
if (intactLines < (to - from) * .7) display.lineDiv.style.display = "none";
|
511 |
+
patchDisplay(cm, from, to, intact, positionsChangedFrom);
|
512 |
+
display.lineDiv.style.display = "";
|
513 |
+
if (focused && document.activeElement != focused && focused.offsetHeight) focused.focus();
|
514 |
+
|
515 |
+
var different = from != display.showingFrom || to != display.showingTo ||
|
516 |
+
display.lastSizeC != display.wrapper.clientHeight;
|
517 |
+
// This is just a bogus formula that detects when the editor is
|
518 |
+
// resized or the font size changes.
|
519 |
+
if (different) {
|
520 |
+
display.lastSizeC = display.wrapper.clientHeight;
|
521 |
+
startWorker(cm, 400);
|
522 |
+
}
|
523 |
+
display.showingFrom = from; display.showingTo = to;
|
524 |
+
|
525 |
+
updateHeightsInViewport(cm);
|
526 |
+
updateViewOffset(cm);
|
527 |
+
|
528 |
+
return true;
|
529 |
+
}
|
530 |
+
|
531 |
+
function updateHeightsInViewport(cm) {
|
532 |
+
var display = cm.display;
|
533 |
+
var prevBottom = display.lineDiv.offsetTop;
|
534 |
+
for (var node = display.lineDiv.firstChild, height; node; node = node.nextSibling) if (node.lineObj) {
|
535 |
+
if (ie_lt8) {
|
536 |
+
var bot = node.offsetTop + node.offsetHeight;
|
537 |
+
height = bot - prevBottom;
|
538 |
+
prevBottom = bot;
|
539 |
+
} else {
|
540 |
+
var box = getRect(node);
|
541 |
+
height = box.bottom - box.top;
|
542 |
+
}
|
543 |
+
var diff = node.lineObj.height - height;
|
544 |
+
if (height < 2) height = textHeight(display);
|
545 |
+
if (diff > .001 || diff < -.001) {
|
546 |
+
updateLineHeight(node.lineObj, height);
|
547 |
+
var widgets = node.lineObj.widgets;
|
548 |
+
if (widgets) for (var i = 0; i < widgets.length; ++i)
|
549 |
+
widgets[i].height = widgets[i].node.offsetHeight;
|
550 |
+
}
|
551 |
+
}
|
552 |
+
}
|
553 |
+
|
554 |
+
function updateViewOffset(cm) {
|
555 |
+
var off = cm.display.viewOffset = heightAtLine(cm, getLine(cm.doc, cm.display.showingFrom));
|
556 |
+
// Position the mover div to align with the current virtual scroll position
|
557 |
+
cm.display.mover.style.top = off + "px";
|
558 |
+
}
|
559 |
+
|
560 |
+
function computeIntact(intact, changes) {
|
561 |
+
for (var i = 0, l = changes.length || 0; i < l; ++i) {
|
562 |
+
var change = changes[i], intact2 = [], diff = change.diff || 0;
|
563 |
+
for (var j = 0, l2 = intact.length; j < l2; ++j) {
|
564 |
+
var range = intact[j];
|
565 |
+
if (change.to <= range.from && change.diff) {
|
566 |
+
intact2.push({from: range.from + diff, to: range.to + diff});
|
567 |
+
} else if (change.to <= range.from || change.from >= range.to) {
|
568 |
+
intact2.push(range);
|
569 |
+
} else {
|
570 |
+
if (change.from > range.from)
|
571 |
+
intact2.push({from: range.from, to: change.from});
|
572 |
+
if (change.to < range.to)
|
573 |
+
intact2.push({from: change.to + diff, to: range.to + diff});
|
574 |
+
}
|
575 |
+
}
|
576 |
+
intact = intact2;
|
577 |
+
}
|
578 |
+
return intact;
|
579 |
+
}
|
580 |
+
|
581 |
+
function getDimensions(cm) {
|
582 |
+
var d = cm.display, left = {}, width = {};
|
583 |
+
for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {
|
584 |
+
left[cm.options.gutters[i]] = n.offsetLeft;
|
585 |
+
width[cm.options.gutters[i]] = n.offsetWidth;
|
586 |
+
}
|
587 |
+
return {fixedPos: compensateForHScroll(d),
|
588 |
+
gutterTotalWidth: d.gutters.offsetWidth,
|
589 |
+
gutterLeft: left,
|
590 |
+
gutterWidth: width,
|
591 |
+
wrapperWidth: d.wrapper.clientWidth};
|
592 |
+
}
|
593 |
+
|
594 |
+
function patchDisplay(cm, from, to, intact, updateNumbersFrom) {
|
595 |
+
var dims = getDimensions(cm);
|
596 |
+
var display = cm.display, lineNumbers = cm.options.lineNumbers;
|
597 |
+
if (!intact.length && (!webkit || !cm.display.currentWheelTarget))
|
598 |
+
removeChildren(display.lineDiv);
|
599 |
+
var container = display.lineDiv, cur = container.firstChild;
|
600 |
+
|
601 |
+
function rm(node) {
|
602 |
+
var next = node.nextSibling;
|
603 |
+
if (webkit && mac && cm.display.currentWheelTarget == node) {
|
604 |
+
node.style.display = "none";
|
605 |
+
node.lineObj = null;
|
606 |
+
} else {
|
607 |
+
node.parentNode.removeChild(node);
|
608 |
+
}
|
609 |
+
return next;
|
610 |
+
}
|
611 |
+
|
612 |
+
var nextIntact = intact.shift(), lineN = from;
|
613 |
+
cm.doc.iter(from, to, function(line) {
|
614 |
+
if (nextIntact && nextIntact.to == lineN) nextIntact = intact.shift();
|
615 |
+
if (lineIsHidden(cm.doc, line)) {
|
616 |
+
if (line.height != 0) updateLineHeight(line, 0);
|
617 |
+
if (line.widgets && cur.previousSibling) for (var i = 0; i < line.widgets.length; ++i) {
|
618 |
+
var w = line.widgets[i];
|
619 |
+
if (w.showIfHidden) {
|
620 |
+
var prev = cur.previousSibling;
|
621 |
+
if (/pre/i.test(prev.nodeName)) {
|
622 |
+
var wrap = elt("div", null, null, "position: relative");
|
623 |
+
prev.parentNode.replaceChild(wrap, prev);
|
624 |
+
wrap.appendChild(prev);
|
625 |
+
prev = wrap;
|
626 |
+
}
|
627 |
+
var wnode = prev.appendChild(elt("div", [w.node], "CodeMirror-linewidget"));
|
628 |
+
if (!w.handleMouseEvents) wnode.ignoreEvents = true;
|
629 |
+
positionLineWidget(w, wnode, prev, dims);
|
630 |
+
}
|
631 |
+
}
|
632 |
+
} else if (nextIntact && nextIntact.from <= lineN && nextIntact.to > lineN) {
|
633 |
+
// This line is intact. Skip to the actual node. Update its
|
634 |
+
// line number if needed.
|
635 |
+
while (cur.lineObj != line) cur = rm(cur);
|
636 |
+
if (lineNumbers && updateNumbersFrom <= lineN && cur.lineNumber)
|
637 |
+
setTextContent(cur.lineNumber, lineNumberFor(cm.options, lineN));
|
638 |
+
cur = cur.nextSibling;
|
639 |
+
} else {
|
640 |
+
// For lines with widgets, make an attempt to find and reuse
|
641 |
+
// the existing element, so that widgets aren't needlessly
|
642 |
+
// removed and re-inserted into the dom
|
643 |
+
if (line.widgets) for (var j = 0, search = cur, reuse; search && j < 20; ++j, search = search.nextSibling)
|
644 |
+
if (search.lineObj == line && /div/i.test(search.nodeName)) { reuse = search; break; }
|
645 |
+
// This line needs to be generated.
|
646 |
+
var lineNode = buildLineElement(cm, line, lineN, dims, reuse);
|
647 |
+
if (lineNode != reuse) {
|
648 |
+
container.insertBefore(lineNode, cur);
|
649 |
+
} else {
|
650 |
+
while (cur != reuse) cur = rm(cur);
|
651 |
+
cur = cur.nextSibling;
|
652 |
+
}
|
653 |
+
|
654 |
+
lineNode.lineObj = line;
|
655 |
+
}
|
656 |
+
++lineN;
|
657 |
+
});
|
658 |
+
while (cur) cur = rm(cur);
|
659 |
+
}
|
660 |
+
|
661 |
+
function buildLineElement(cm, line, lineNo, dims, reuse) {
|
662 |
+
var lineElement = lineContent(cm, line);
|
663 |
+
var markers = line.gutterMarkers, display = cm.display, wrap;
|
664 |
+
|
665 |
+
if (!cm.options.lineNumbers && !markers && !line.bgClass && !line.wrapClass && !line.widgets)
|
666 |
+
return lineElement;
|
667 |
+
|
668 |
+
// Lines with gutter elements, widgets or a background class need
|
669 |
+
// to be wrapped again, and have the extra elements added to the
|
670 |
+
// wrapper div
|
671 |
+
|
672 |
+
if (reuse) {
|
673 |
+
reuse.alignable = null;
|
674 |
+
var isOk = true, widgetsSeen = 0, insertBefore = null;
|
675 |
+
for (var n = reuse.firstChild, next; n; n = next) {
|
676 |
+
next = n.nextSibling;
|
677 |
+
if (!/\bCodeMirror-linewidget\b/.test(n.className)) {
|
678 |
+
reuse.removeChild(n);
|
679 |
+
} else {
|
680 |
+
for (var i = 0; i < line.widgets.length; ++i) {
|
681 |
+
var widget = line.widgets[i];
|
682 |
+
if (widget.node == n.firstChild) {
|
683 |
+
if (!widget.above && !insertBefore) insertBefore = n;
|
684 |
+
positionLineWidget(widget, n, reuse, dims);
|
685 |
+
++widgetsSeen;
|
686 |
+
break;
|
687 |
+
}
|
688 |
+
}
|
689 |
+
if (i == line.widgets.length) { isOk = false; break; }
|
690 |
+
}
|
691 |
+
}
|
692 |
+
reuse.insertBefore(lineElement, insertBefore);
|
693 |
+
if (isOk && widgetsSeen == line.widgets.length) {
|
694 |
+
wrap = reuse;
|
695 |
+
reuse.className = line.wrapClass || "";
|
696 |
+
}
|
697 |
+
}
|
698 |
+
if (!wrap) {
|
699 |
+
wrap = elt("div", null, line.wrapClass, "position: relative");
|
700 |
+
wrap.appendChild(lineElement);
|
701 |
+
}
|
702 |
+
// Kludge to make sure the styled element lies behind the selection (by z-index)
|
703 |
+
if (line.bgClass)
|
704 |
+
wrap.insertBefore(elt("div", null, line.bgClass + " CodeMirror-linebackground"), wrap.firstChild);
|
705 |
+
if (cm.options.lineNumbers || markers) {
|
706 |
+
var gutterWrap = wrap.insertBefore(elt("div", null, null, "position: absolute; left: " +
|
707 |
+
(cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"),
|
708 |
+
wrap.firstChild);
|
709 |
+
if (cm.options.fixedGutter) (wrap.alignable || (wrap.alignable = [])).push(gutterWrap);
|
710 |
+
if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"]))
|
711 |
+
wrap.lineNumber = gutterWrap.appendChild(
|
712 |
+
elt("div", lineNumberFor(cm.options, lineNo),
|
713 |
+
"CodeMirror-linenumber CodeMirror-gutter-elt",
|
714 |
+
"left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: "
|
715 |
+
+ display.lineNumInnerWidth + "px"));
|
716 |
+
if (markers)
|
717 |
+
for (var k = 0; k < cm.options.gutters.length; ++k) {
|
718 |
+
var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id];
|
719 |
+
if (found)
|
720 |
+
gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " +
|
721 |
+
dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px"));
|
722 |
+
}
|
723 |
+
}
|
724 |
+
if (ie_lt8) wrap.style.zIndex = 2;
|
725 |
+
if (line.widgets && wrap != reuse) for (var i = 0, ws = line.widgets; i < ws.length; ++i) {
|
726 |
+
var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget");
|
727 |
+
if (!widget.handleMouseEvents) node.ignoreEvents = true;
|
728 |
+
positionLineWidget(widget, node, wrap, dims);
|
729 |
+
if (widget.above)
|
730 |
+
wrap.insertBefore(node, cm.options.lineNumbers && line.height != 0 ? gutterWrap : lineElement);
|
731 |
+
else
|
732 |
+
wrap.appendChild(node);
|
733 |
+
signalLater(widget, "redraw");
|
734 |
+
}
|
735 |
+
return wrap;
|
736 |
+
}
|
737 |
+
|
738 |
+
function positionLineWidget(widget, node, wrap, dims) {
|
739 |
+
if (widget.noHScroll) {
|
740 |
+
(wrap.alignable || (wrap.alignable = [])).push(node);
|
741 |
+
var width = dims.wrapperWidth;
|
742 |
+
node.style.left = dims.fixedPos + "px";
|
743 |
+
if (!widget.coverGutter) {
|
744 |
+
width -= dims.gutterTotalWidth;
|
745 |
+
node.style.paddingLeft = dims.gutterTotalWidth + "px";
|
746 |
+
}
|
747 |
+
node.style.width = width + "px";
|
748 |
+
}
|
749 |
+
if (widget.coverGutter) {
|
750 |
+
node.style.zIndex = 5;
|
751 |
+
node.style.position = "relative";
|
752 |
+
if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px";
|
753 |
+
}
|
754 |
+
}
|
755 |
+
|
756 |
+
// SELECTION / CURSOR
|
757 |
+
|
758 |
+
function updateSelection(cm) {
|
759 |
+
var display = cm.display;
|
760 |
+
var collapsed = posEq(cm.doc.sel.from, cm.doc.sel.to);
|
761 |
+
if (collapsed || cm.options.showCursorWhenSelecting)
|
762 |
+
updateSelectionCursor(cm);
|
763 |
+
else
|
764 |
+
display.cursor.style.display = display.otherCursor.style.display = "none";
|
765 |
+
if (!collapsed)
|
766 |
+
updateSelectionRange(cm);
|
767 |
+
else
|
768 |
+
display.selectionDiv.style.display = "none";
|
769 |
+
|
770 |
+
// Move the hidden textarea near the cursor to prevent scrolling artifacts
|
771 |
+
if (cm.options.moveInputWithCursor) {
|
772 |
+
var headPos = cursorCoords(cm, cm.doc.sel.head, "div");
|
773 |
+
var wrapOff = getRect(display.wrapper), lineOff = getRect(display.lineDiv);
|
774 |
+
display.inputDiv.style.top = Math.max(0, Math.min(display.wrapper.clientHeight - 10,
|
775 |
+
headPos.top + lineOff.top - wrapOff.top)) + "px";
|
776 |
+
display.inputDiv.style.left = Math.max(0, Math.min(display.wrapper.clientWidth - 10,
|
777 |
+
headPos.left + lineOff.left - wrapOff.left)) + "px";
|
778 |
+
}
|
779 |
+
}
|
780 |
+
|
781 |
+
// No selection, plain cursor
|
782 |
+
function updateSelectionCursor(cm) {
|
783 |
+
var display = cm.display, pos = cursorCoords(cm, cm.doc.sel.head, "div");
|
784 |
+
display.cursor.style.left = pos.left + "px";
|
785 |
+
display.cursor.style.top = pos.top + "px";
|
786 |
+
display.cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px";
|
787 |
+
display.cursor.style.display = "";
|
788 |
+
|
789 |
+
if (pos.other) {
|
790 |
+
display.otherCursor.style.display = "";
|
791 |
+
display.otherCursor.style.left = pos.other.left + "px";
|
792 |
+
display.otherCursor.style.top = pos.other.top + "px";
|
793 |
+
display.otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px";
|
794 |
+
} else { display.otherCursor.style.display = "none"; }
|
795 |
+
}
|
796 |
+
|
797 |
+
// Highlight selection
|
798 |
+
function updateSelectionRange(cm) {
|
799 |
+
var display = cm.display, doc = cm.doc, sel = cm.doc.sel;
|
800 |
+
var fragment = document.createDocumentFragment();
|
801 |
+
var clientWidth = display.lineSpace.offsetWidth, pl = paddingLeft(cm.display);
|
802 |
+
|
803 |
+
function add(left, top, width, bottom) {
|
804 |
+
if (top < 0) top = 0;
|
805 |
+
fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left +
|
806 |
+
"px; top: " + top + "px; width: " + (width == null ? clientWidth - left : width) +
|
807 |
+
"px; height: " + (bottom - top) + "px"));
|
808 |
+
}
|
809 |
+
|
810 |
+
function drawForLine(line, fromArg, toArg) {
|
811 |
+
var lineObj = getLine(doc, line);
|
812 |
+
var lineLen = lineObj.text.length;
|
813 |
+
var start, end;
|
814 |
+
function coords(ch, bias) {
|
815 |
+
return charCoords(cm, Pos(line, ch), "div", lineObj, bias);
|
816 |
+
}
|
817 |
+
|
818 |
+
iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) {
|
819 |
+
var leftPos = coords(from, "left"), rightPos, left, right;
|
820 |
+
if (from == to) {
|
821 |
+
rightPos = leftPos;
|
822 |
+
left = right = leftPos.left;
|
823 |
+
} else {
|
824 |
+
rightPos = coords(to - 1, "right");
|
825 |
+
if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; }
|
826 |
+
left = leftPos.left;
|
827 |
+
right = rightPos.right;
|
828 |
+
}
|
829 |
+
if (fromArg == null && from == 0) left = pl;
|
830 |
+
if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part
|
831 |
+
add(left, leftPos.top, null, leftPos.bottom);
|
832 |
+
left = pl;
|
833 |
+
if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top);
|
834 |
+
}
|
835 |
+
if (toArg == null && to == lineLen) right = clientWidth;
|
836 |
+
if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left)
|
837 |
+
start = leftPos;
|
838 |
+
if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right)
|
839 |
+
end = rightPos;
|
840 |
+
if (left < pl + 1) left = pl;
|
841 |
+
add(left, rightPos.top, right - left, rightPos.bottom);
|
842 |
+
});
|
843 |
+
return {start: start, end: end};
|
844 |
+
}
|
845 |
+
|
846 |
+
if (sel.from.line == sel.to.line) {
|
847 |
+
drawForLine(sel.from.line, sel.from.ch, sel.to.ch);
|
848 |
+
} else {
|
849 |
+
var fromLine = getLine(doc, sel.from.line), toLine = getLine(doc, sel.to.line);
|
850 |
+
var singleVLine = visualLine(doc, fromLine) == visualLine(doc, toLine);
|
851 |
+
var leftEnd = drawForLine(sel.from.line, sel.from.ch, singleVLine ? fromLine.text.length : null).end;
|
852 |
+
var rightStart = drawForLine(sel.to.line, singleVLine ? 0 : null, sel.to.ch).start;
|
853 |
+
if (singleVLine) {
|
854 |
+
if (leftEnd.top < rightStart.top - 2) {
|
855 |
+
add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);
|
856 |
+
add(pl, rightStart.top, rightStart.left, rightStart.bottom);
|
857 |
+
} else {
|
858 |
+
add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);
|
859 |
+
}
|
860 |
+
}
|
861 |
+
if (leftEnd.bottom < rightStart.top)
|
862 |
+
add(pl, leftEnd.bottom, null, rightStart.top);
|
863 |
+
}
|
864 |
+
|
865 |
+
removeChildrenAndAdd(display.selectionDiv, fragment);
|
866 |
+
display.selectionDiv.style.display = "";
|
867 |
+
}
|
868 |
+
|
869 |
+
// Cursor-blinking
|
870 |
+
function restartBlink(cm) {
|
871 |
+
if (!cm.state.focused) return;
|
872 |
+
var display = cm.display;
|
873 |
+
clearInterval(display.blinker);
|
874 |
+
var on = true;
|
875 |
+
display.cursor.style.visibility = display.otherCursor.style.visibility = "";
|
876 |
+
display.blinker = setInterval(function() {
|
877 |
+
display.cursor.style.visibility = display.otherCursor.style.visibility = (on = !on) ? "" : "hidden";
|
878 |
+
}, cm.options.cursorBlinkRate);
|
879 |
+
}
|
880 |
+
|
881 |
+
// HIGHLIGHT WORKER
|
882 |
+
|
883 |
+
function startWorker(cm, time) {
|
884 |
+
if (cm.doc.mode.startState && cm.doc.frontier < cm.display.showingTo)
|
885 |
+
cm.state.highlight.set(time, bind(highlightWorker, cm));
|
886 |
+
}
|
887 |
+
|
888 |
+
function highlightWorker(cm) {
|
889 |
+
var doc = cm.doc;
|
890 |
+
if (doc.frontier < doc.first) doc.frontier = doc.first;
|
891 |
+
if (doc.frontier >= cm.display.showingTo) return;
|
892 |
+
var end = +new Date + cm.options.workTime;
|
893 |
+
var state = copyState(doc.mode, getStateBefore(cm, doc.frontier));
|
894 |
+
var changed = [], prevChange;
|
895 |
+
doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.showingTo + 500), function(line) {
|
896 |
+
if (doc.frontier >= cm.display.showingFrom) { // Visible
|
897 |
+
var oldStyles = line.styles;
|
898 |
+
line.styles = highlightLine(cm, line, state);
|
899 |
+
var ischange = !oldStyles || oldStyles.length != line.styles.length;
|
900 |
+
for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i];
|
901 |
+
if (ischange) {
|
902 |
+
if (prevChange && prevChange.end == doc.frontier) prevChange.end++;
|
903 |
+
else changed.push(prevChange = {start: doc.frontier, end: doc.frontier + 1});
|
904 |
+
}
|
905 |
+
line.stateAfter = copyState(doc.mode, state);
|
906 |
+
} else {
|
907 |
+
processLine(cm, line, state);
|
908 |
+
line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null;
|
909 |
+
}
|
910 |
+
++doc.frontier;
|
911 |
+
if (+new Date > end) {
|
912 |
+
startWorker(cm, cm.options.workDelay);
|
913 |
+
return true;
|
914 |
+
}
|
915 |
+
});
|
916 |
+
if (changed.length)
|
917 |
+
operation(cm, function() {
|
918 |
+
for (var i = 0; i < changed.length; ++i)
|
919 |
+
regChange(this, changed[i].start, changed[i].end);
|
920 |
+
})();
|
921 |
+
}
|
922 |
+
|
923 |
+
// Finds the line to start with when starting a parse. Tries to
|
924 |
+
// find a line with a stateAfter, so that it can start with a
|
925 |
+
// valid state. If that fails, it returns the line with the
|
926 |
+
// smallest indentation, which tends to need the least context to
|
927 |
+
// parse correctly.
|
928 |
+
function findStartLine(cm, n, precise) {
|
929 |
+
var minindent, minline, doc = cm.doc;
|
930 |
+
for (var search = n, lim = n - 100; search > lim; --search) {
|
931 |
+
if (search <= doc.first) return doc.first;
|
932 |
+
var line = getLine(doc, search - 1);
|
933 |
+
if (line.stateAfter && (!precise || search <= doc.frontier)) return search;
|
934 |
+
var indented = countColumn(line.text, null, cm.options.tabSize);
|
935 |
+
if (minline == null || minindent > indented) {
|
936 |
+
minline = search - 1;
|
937 |
+
minindent = indented;
|
938 |
+
}
|
939 |
+
}
|
940 |
+
return minline;
|
941 |
+
}
|
942 |
+
|
943 |
+
function getStateBefore(cm, n, precise) {
|
944 |
+
var doc = cm.doc, display = cm.display;
|
945 |
+
if (!doc.mode.startState) return true;
|
946 |
+
var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter;
|
947 |
+
if (!state) state = startState(doc.mode);
|
948 |
+
else state = copyState(doc.mode, state);
|
949 |
+
doc.iter(pos, n, function(line) {
|
950 |
+
processLine(cm, line, state);
|
951 |
+
var save = pos == n - 1 || pos % 5 == 0 || pos >= display.showingFrom && pos < display.showingTo;
|
952 |
+
line.stateAfter = save ? copyState(doc.mode, state) : null;
|
953 |
+
++pos;
|
954 |
+
});
|
955 |
+
return state;
|
956 |
+
}
|
957 |
+
|
958 |
+
// POSITION MEASUREMENT
|
959 |
+
|
960 |
+
function paddingTop(display) {return display.lineSpace.offsetTop;}
|
961 |
+
function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;}
|
962 |
+
function paddingLeft(display) {
|
963 |
+
var e = removeChildrenAndAdd(display.measure, elt("pre", null, null, "text-align: left")).appendChild(elt("span", "x"));
|
964 |
+
return e.offsetLeft;
|
965 |
+
}
|
966 |
+
|
967 |
+
function measureChar(cm, line, ch, data, bias) {
|
968 |
+
var dir = -1;
|
969 |
+
data = data || measureLine(cm, line);
|
970 |
+
|
971 |
+
for (var pos = ch;; pos += dir) {
|
972 |
+
var r = data[pos];
|
973 |
+
if (r) break;
|
974 |
+
if (dir < 0 && pos == 0) dir = 1;
|
975 |
+
}
|
976 |
+
bias = pos > ch ? "left" : pos < ch ? "right" : bias;
|
977 |
+
if (bias == "left" && r.leftSide) r = r.leftSide;
|
978 |
+
else if (bias == "right" && r.rightSide) r = r.rightSide;
|
979 |
+
return {left: pos < ch ? r.right : r.left,
|
980 |
+
right: pos > ch ? r.left : r.right,
|
981 |
+
top: r.top,
|
982 |
+
bottom: r.bottom};
|
983 |
+
}
|
984 |
+
|
985 |
+
function findCachedMeasurement(cm, line) {
|
986 |
+
var cache = cm.display.measureLineCache;
|
987 |
+
for (var i = 0; i < cache.length; ++i) {
|
988 |
+
var memo = cache[i];
|
989 |
+
if (memo.text == line.text && memo.markedSpans == line.markedSpans &&
|
990 |
+
cm.display.scroller.clientWidth == memo.width &&
|
991 |
+
memo.classes == line.textClass + "|" + line.bgClass + "|" + line.wrapClass)
|
992 |
+
return memo;
|
993 |
+
}
|
994 |
+
}
|
995 |
+
|
996 |
+
function clearCachedMeasurement(cm, line) {
|
997 |
+
var exists = findCachedMeasurement(cm, line);
|
998 |
+
if (exists) exists.text = exists.measure = exists.markedSpans = null;
|
999 |
+
}
|
1000 |
+
|
1001 |
+
function measureLine(cm, line) {
|
1002 |
+
// First look in the cache
|
1003 |
+
var cached = findCachedMeasurement(cm, line);
|
1004 |
+
if (cached) return cached.measure;
|
1005 |
+
|
1006 |
+
// Failing that, recompute and store result in cache
|
1007 |
+
var measure = measureLineInner(cm, line);
|
1008 |
+
var cache = cm.display.measureLineCache;
|
1009 |
+
var memo = {text: line.text, width: cm.display.scroller.clientWidth,
|
1010 |
+
markedSpans: line.markedSpans, measure: measure,
|
1011 |
+
classes: line.textClass + "|" + line.bgClass + "|" + line.wrapClass};
|
1012 |
+
if (cache.length == 16) cache[++cm.display.measureLineCachePos % 16] = memo;
|
1013 |
+
else cache.push(memo);
|
1014 |
+
return measure;
|
1015 |
+
}
|
1016 |
+
|
1017 |
+
function measureLineInner(cm, line) {
|
1018 |
+
var display = cm.display, measure = emptyArray(line.text.length);
|
1019 |
+
var pre = lineContent(cm, line, measure, true);
|
1020 |
+
|
1021 |
+
// IE does not cache element positions of inline elements between
|
1022 |
+
// calls to getBoundingClientRect. This makes the loop below,
|
1023 |
+
// which gathers the positions of all the characters on the line,
|
1024 |
+
// do an amount of layout work quadratic to the number of
|
1025 |
+
// characters. When line wrapping is off, we try to improve things
|
1026 |
+
// by first subdividing the line into a bunch of inline blocks, so
|
1027 |
+
// that IE can reuse most of the layout information from caches
|
1028 |
+
// for those blocks. This does interfere with line wrapping, so it
|
1029 |
+
// doesn't work when wrapping is on, but in that case the
|
1030 |
+
// situation is slightly better, since IE does cache line-wrapping
|
1031 |
+
// information and only recomputes per-line.
|
1032 |
+
if (ie && !ie_lt8 && !cm.options.lineWrapping && pre.childNodes.length > 100) {
|
1033 |
+
var fragment = document.createDocumentFragment();
|
1034 |
+
var chunk = 10, n = pre.childNodes.length;
|
1035 |
+
for (var i = 0, chunks = Math.ceil(n / chunk); i < chunks; ++i) {
|
1036 |
+
var wrap = elt("div", null, null, "display: inline-block");
|
1037 |
+
for (var j = 0; j < chunk && n; ++j) {
|
1038 |
+
wrap.appendChild(pre.firstChild);
|
1039 |
+
--n;
|
1040 |
+
}
|
1041 |
+
fragment.appendChild(wrap);
|
1042 |
+
}
|
1043 |
+
pre.appendChild(fragment);
|
1044 |
+
}
|
1045 |
+
|
1046 |
+
removeChildrenAndAdd(display.measure, pre);
|
1047 |
+
|
1048 |
+
var outer = getRect(display.lineDiv);
|
1049 |
+
var vranges = [], data = emptyArray(line.text.length), maxBot = pre.offsetHeight;
|
1050 |
+
// Work around an IE7/8 bug where it will sometimes have randomly
|
1051 |
+
// replaced our pre with a clone at this point.
|
1052 |
+
if (ie_lt9 && display.measure.first != pre)
|
1053 |
+
removeChildrenAndAdd(display.measure, pre);
|
1054 |
+
|
1055 |
+
function measureRect(rect) {
|
1056 |
+
var top = rect.top - outer.top, bot = rect.bottom - outer.top;
|
1057 |
+
if (bot > maxBot) bot = maxBot;
|
1058 |
+
if (top < 0) top = 0;
|
1059 |
+
for (var i = vranges.length - 2; i >= 0; i -= 2) {
|
1060 |
+
var rtop = vranges[i], rbot = vranges[i+1];
|
1061 |
+
if (rtop > bot || rbot < top) continue;
|
1062 |
+
if (rtop <= top && rbot >= bot ||
|
1063 |
+
top <= rtop && bot >= rbot ||
|
1064 |
+
Math.min(bot, rbot) - Math.max(top, rtop) >= (bot - top) >> 1) {
|
1065 |
+
vranges[i] = Math.min(top, rtop);
|
1066 |
+
vranges[i+1] = Math.max(bot, rbot);
|
1067 |
+
break;
|
1068 |
+
}
|
1069 |
+
}
|
1070 |
+
if (i < 0) { i = vranges.length; vranges.push(top, bot); }
|
1071 |
+
return {left: rect.left - outer.left,
|
1072 |
+
right: rect.right - outer.left,
|
1073 |
+
top: i, bottom: null};
|
1074 |
+
}
|
1075 |
+
function finishRect(rect) {
|
1076 |
+
rect.bottom = vranges[rect.top+1];
|
1077 |
+
rect.top = vranges[rect.top];
|
1078 |
+
}
|
1079 |
+
|
1080 |
+
for (var i = 0, cur; i < measure.length; ++i) if (cur = measure[i]) {
|
1081 |
+
var node = cur, rect = null;
|
1082 |
+
// A widget might wrap, needs special care
|
1083 |
+
if (/\bCodeMirror-widget\b/.test(cur.className) && cur.getClientRects) {
|
1084 |
+
if (cur.firstChild.nodeType == 1) node = cur.firstChild;
|
1085 |
+
var rects = node.getClientRects();
|
1086 |
+
if (rects.length > 1) {
|
1087 |
+
rect = data[i] = measureRect(rects[0]);
|
1088 |
+
rect.rightSide = measureRect(rects[rects.length - 1]);
|
1089 |
+
}
|
1090 |
+
}
|
1091 |
+
if (!rect) rect = data[i] = measureRect(getRect(node));
|
1092 |
+
if (cur.measureRight) rect.right = getRect(cur.measureRight).left;
|
1093 |
+
if (cur.leftSide) rect.leftSide = measureRect(getRect(cur.leftSide));
|
1094 |
+
}
|
1095 |
+
for (var i = 0, cur; i < data.length; ++i) if (cur = data[i]) {
|
1096 |
+
finishRect(cur);
|
1097 |
+
if (cur.leftSide) finishRect(cur.leftSide);
|
1098 |
+
if (cur.rightSide) finishRect(cur.rightSide);
|
1099 |
+
}
|
1100 |
+
return data;
|
1101 |
+
}
|
1102 |
+
|
1103 |
+
function measureLineWidth(cm, line) {
|
1104 |
+
var hasBadSpan = false;
|
1105 |
+
if (line.markedSpans) for (var i = 0; i < line.markedSpans; ++i) {
|
1106 |
+
var sp = line.markedSpans[i];
|
1107 |
+
if (sp.collapsed && (sp.to == null || sp.to == line.text.length)) hasBadSpan = true;
|
1108 |
+
}
|
1109 |
+
var cached = !hasBadSpan && findCachedMeasurement(cm, line);
|
1110 |
+
if (cached) return measureChar(cm, line, line.text.length, cached.measure, "right").right;
|
1111 |
+
|
1112 |
+
var pre = lineContent(cm, line, null, true);
|
1113 |
+
var end = pre.appendChild(zeroWidthElement(cm.display.measure));
|
1114 |
+
removeChildrenAndAdd(cm.display.measure, pre);
|
1115 |
+
return getRect(end).right - getRect(cm.display.lineDiv).left;
|
1116 |
+
}
|
1117 |
+
|
1118 |
+
function clearCaches(cm) {
|
1119 |
+
cm.display.measureLineCache.length = cm.display.measureLineCachePos = 0;
|
1120 |
+
cm.display.cachedCharWidth = cm.display.cachedTextHeight = null;
|
1121 |
+
if (!cm.options.lineWrapping) cm.display.maxLineChanged = true;
|
1122 |
+
cm.display.lineNumChars = null;
|
1123 |
+
}
|
1124 |
+
|
1125 |
+
function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; }
|
1126 |
+
function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; }
|
1127 |
+
|
1128 |
+
// Context is one of "line", "div" (display.lineDiv), "local"/null (editor), or "page"
|
1129 |
+
function intoCoordSystem(cm, lineObj, rect, context) {
|
1130 |
+
if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) {
|
1131 |
+
var size = widgetHeight(lineObj.widgets[i]);
|
1132 |
+
rect.top += size; rect.bottom += size;
|
1133 |
+
}
|
1134 |
+
if (context == "line") return rect;
|
1135 |
+
if (!context) context = "local";
|
1136 |
+
var yOff = heightAtLine(cm, lineObj);
|
1137 |
+
if (context == "local") yOff += paddingTop(cm.display);
|
1138 |
+
else yOff -= cm.display.viewOffset;
|
1139 |
+
if (context == "page" || context == "window") {
|
1140 |
+
var lOff = getRect(cm.display.lineSpace);
|
1141 |
+
yOff += lOff.top + (context == "window" ? 0 : pageScrollY());
|
1142 |
+
var xOff = lOff.left + (context == "window" ? 0 : pageScrollX());
|
1143 |
+
rect.left += xOff; rect.right += xOff;
|
1144 |
+
}
|
1145 |
+
rect.top += yOff; rect.bottom += yOff;
|
1146 |
+
return rect;
|
1147 |
+
}
|
1148 |
+
|
1149 |
+
// Context may be "window", "page", "div", or "local"/null
|
1150 |
+
// Result is in "div" coords
|
1151 |
+
function fromCoordSystem(cm, coords, context) {
|
1152 |
+
if (context == "div") return coords;
|
1153 |
+
var left = coords.left, top = coords.top;
|
1154 |
+
// First move into "page" coordinate system
|
1155 |
+
if (context == "page") {
|
1156 |
+
left -= pageScrollX();
|
1157 |
+
top -= pageScrollY();
|
1158 |
+
} else if (context == "local" || !context) {
|
1159 |
+
var localBox = getRect(cm.display.sizer);
|
1160 |
+
left += localBox.left;
|
1161 |
+
top += localBox.top;
|
1162 |
+
}
|
1163 |
+
|
1164 |
+
var lineSpaceBox = getRect(cm.display.lineSpace);
|
1165 |
+
return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top};
|
1166 |
+
}
|
1167 |
+
|
1168 |
+
function charCoords(cm, pos, context, lineObj, bias) {
|
1169 |
+
if (!lineObj) lineObj = getLine(cm.doc, pos.line);
|
1170 |
+
return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, null, bias), context);
|
1171 |
+
}
|
1172 |
+
|
1173 |
+
function cursorCoords(cm, pos, context, lineObj, measurement) {
|
1174 |
+
lineObj = lineObj || getLine(cm.doc, pos.line);
|
1175 |
+
if (!measurement) measurement = measureLine(cm, lineObj);
|
1176 |
+
function get(ch, right) {
|
1177 |
+
var m = measureChar(cm, lineObj, ch, measurement, right ? "right" : "left");
|
1178 |
+
if (right) m.left = m.right; else m.right = m.left;
|
1179 |
+
return intoCoordSystem(cm, lineObj, m, context);
|
1180 |
+
}
|
1181 |
+
function getBidi(ch, partPos) {
|
1182 |
+
var part = order[partPos], right = part.level % 2;
|
1183 |
+
if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) {
|
1184 |
+
part = order[--partPos];
|
1185 |
+
ch = bidiRight(part) - (part.level % 2 ? 0 : 1);
|
1186 |
+
right = true;
|
1187 |
+
} else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) {
|
1188 |
+
part = order[++partPos];
|
1189 |
+
ch = bidiLeft(part) - part.level % 2;
|
1190 |
+
right = false;
|
1191 |
+
}
|
1192 |
+
if (right && ch == part.to && ch > part.from) return get(ch - 1);
|
1193 |
+
return get(ch, right);
|
1194 |
+
}
|
1195 |
+
var order = getOrder(lineObj), ch = pos.ch;
|
1196 |
+
if (!order) return get(ch);
|
1197 |
+
var partPos = getBidiPartAt(order, ch);
|
1198 |
+
var val = getBidi(ch, partPos);
|
1199 |
+
if (bidiOther != null) val.other = getBidi(ch, bidiOther);
|
1200 |
+
return val;
|
1201 |
+
}
|
1202 |
+
|
1203 |
+
function PosWithInfo(line, ch, outside, xRel) {
|
1204 |
+
var pos = new Pos(line, ch);
|
1205 |
+
pos.xRel = xRel;
|
1206 |
+
if (outside) pos.outside = true;
|
1207 |
+
return pos;
|
1208 |
+
}
|
1209 |
+
|
1210 |
+
// Coords must be lineSpace-local
|
1211 |
+
function coordsChar(cm, x, y) {
|
1212 |
+
var doc = cm.doc;
|
1213 |
+
y += cm.display.viewOffset;
|
1214 |
+
if (y < 0) return PosWithInfo(doc.first, 0, true, -1);
|
1215 |
+
var lineNo = lineAtHeight(doc, y), last = doc.first + doc.size - 1;
|
1216 |
+
if (lineNo > last)
|
1217 |
+
return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1);
|
1218 |
+
if (x < 0) x = 0;
|
1219 |
+
|
1220 |
+
for (;;) {
|
1221 |
+
var lineObj = getLine(doc, lineNo);
|
1222 |
+
var found = coordsCharInner(cm, lineObj, lineNo, x, y);
|
1223 |
+
var merged = collapsedSpanAtEnd(lineObj);
|
1224 |
+
var mergedPos = merged && merged.find();
|
1225 |
+
if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0))
|
1226 |
+
lineNo = mergedPos.to.line;
|
1227 |
+
else
|
1228 |
+
return found;
|
1229 |
+
}
|
1230 |
+
}
|
1231 |
+
|
1232 |
+
function coordsCharInner(cm, lineObj, lineNo, x, y) {
|
1233 |
+
var innerOff = y - heightAtLine(cm, lineObj);
|
1234 |
+
var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth;
|
1235 |
+
var measurement = measureLine(cm, lineObj);
|
1236 |
+
|
1237 |
+
function getX(ch) {
|
1238 |
+
var sp = cursorCoords(cm, Pos(lineNo, ch), "line",
|
1239 |
+
lineObj, measurement);
|
1240 |
+
wrongLine = true;
|
1241 |
+
if (innerOff > sp.bottom) return sp.left - adjust;
|
1242 |
+
else if (innerOff < sp.top) return sp.left + adjust;
|
1243 |
+
else wrongLine = false;
|
1244 |
+
return sp.left;
|
1245 |
+
}
|
1246 |
+
|
1247 |
+
var bidi = getOrder(lineObj), dist = lineObj.text.length;
|
1248 |
+
var from = lineLeft(lineObj), to = lineRight(lineObj);
|
1249 |
+
var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine;
|
1250 |
+
|
1251 |
+
if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1);
|
1252 |
+
// Do a binary search between these bounds.
|
1253 |
+
for (;;) {
|
1254 |
+
if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) {
|
1255 |
+
var ch = x < fromX || x - fromX <= toX - x ? from : to;
|
1256 |
+
var xDiff = x - (ch == from ? fromX : toX);
|
1257 |
+
while (isExtendingChar.test(lineObj.text.charAt(ch))) ++ch;
|
1258 |
+
var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside,
|
1259 |
+
xDiff < 0 ? -1 : xDiff ? 1 : 0);
|
1260 |
+
return pos;
|
1261 |
+
}
|
1262 |
+
var step = Math.ceil(dist / 2), middle = from + step;
|
1263 |
+
if (bidi) {
|
1264 |
+
middle = from;
|
1265 |
+
for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1);
|
1266 |
+
}
|
1267 |
+
var middleX = getX(middle);
|
1268 |
+
if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;}
|
1269 |
+
else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;}
|
1270 |
+
}
|
1271 |
+
}
|
1272 |
+
|
1273 |
+
var measureText;
|
1274 |
+
function textHeight(display) {
|
1275 |
+
if (display.cachedTextHeight != null) return display.cachedTextHeight;
|
1276 |
+
if (measureText == null) {
|
1277 |
+
measureText = elt("pre");
|
1278 |
+
// Measure a bunch of lines, for browsers that compute
|
1279 |
+
// fractional heights.
|
1280 |
+
for (var i = 0; i < 49; ++i) {
|
1281 |
+
measureText.appendChild(document.createTextNode("x"));
|
1282 |
+
measureText.appendChild(elt("br"));
|
1283 |
+
}
|
1284 |
+
measureText.appendChild(document.createTextNode("x"));
|
1285 |
+
}
|
1286 |
+
removeChildrenAndAdd(display.measure, measureText);
|
1287 |
+
var height = measureText.offsetHeight / 50;
|
1288 |
+
if (height > 3) display.cachedTextHeight = height;
|
1289 |
+
removeChildren(display.measure);
|
1290 |
+
return height || 1;
|
1291 |
+
}
|
1292 |
+
|
1293 |
+
function charWidth(display) {
|
1294 |
+
if (display.cachedCharWidth != null) return display.cachedCharWidth;
|
1295 |
+
var anchor = elt("span", "x");
|
1296 |
+
var pre = elt("pre", [anchor]);
|
1297 |
+
removeChildrenAndAdd(display.measure, pre);
|
1298 |
+
var width = anchor.offsetWidth;
|
1299 |
+
if (width > 2) display.cachedCharWidth = width;
|
1300 |
+
return width || 10;
|
1301 |
+
}
|
1302 |
+
|
1303 |
+
// OPERATIONS
|
1304 |
+
|
1305 |
+
// Operations are used to wrap changes in such a way that each
|
1306 |
+
// change won't have to update the cursor and display (which would
|
1307 |
+
// be awkward, slow, and error-prone), but instead updates are
|
1308 |
+
// batched and then all combined and executed at once.
|
1309 |
+
|
1310 |
+
var nextOpId = 0;
|
1311 |
+
function startOperation(cm) {
|
1312 |
+
cm.curOp = {
|
1313 |
+
// An array of ranges of lines that have to be updated. See
|
1314 |
+
// updateDisplay.
|
1315 |
+
changes: [],
|
1316 |
+
forceUpdate: false,
|
1317 |
+
updateInput: null,
|
1318 |
+
userSelChange: null,
|
1319 |
+
textChanged: null,
|
1320 |
+
selectionChanged: false,
|
1321 |
+
cursorActivity: false,
|
1322 |
+
updateMaxLine: false,
|
1323 |
+
updateScrollPos: false,
|
1324 |
+
id: ++nextOpId
|
1325 |
+
};
|
1326 |
+
if (!delayedCallbackDepth++) delayedCallbacks = [];
|
1327 |
+
}
|
1328 |
+
|
1329 |
+
function endOperation(cm) {
|
1330 |
+
var op = cm.curOp, doc = cm.doc, display = cm.display;
|
1331 |
+
cm.curOp = null;
|
1332 |
+
|
1333 |
+
if (op.updateMaxLine) computeMaxLength(cm);
|
1334 |
+
if (display.maxLineChanged && !cm.options.lineWrapping && display.maxLine) {
|
1335 |
+
var width = measureLineWidth(cm, display.maxLine);
|
1336 |
+
display.sizer.style.minWidth = Math.max(0, width + 3 + scrollerCutOff) + "px";
|
1337 |
+
display.maxLineChanged = false;
|
1338 |
+
var maxScrollLeft = Math.max(0, display.sizer.offsetLeft + display.sizer.offsetWidth - display.scroller.clientWidth);
|
1339 |
+
if (maxScrollLeft < doc.scrollLeft && !op.updateScrollPos)
|
1340 |
+
setScrollLeft(cm, Math.min(display.scroller.scrollLeft, maxScrollLeft), true);
|
1341 |
+
}
|
1342 |
+
var newScrollPos, updated;
|
1343 |
+
if (op.updateScrollPos) {
|
1344 |
+
newScrollPos = op.updateScrollPos;
|
1345 |
+
} else if (op.selectionChanged && display.scroller.clientHeight) { // don't rescroll if not visible
|
1346 |
+
var coords = cursorCoords(cm, doc.sel.head);
|
1347 |
+
newScrollPos = calculateScrollPos(cm, coords.left, coords.top, coords.left, coords.bottom);
|
1348 |
+
}
|
1349 |
+
if (op.changes.length || op.forceUpdate || newScrollPos && newScrollPos.scrollTop != null) {
|
1350 |
+
updated = updateDisplay(cm, op.changes, newScrollPos && newScrollPos.scrollTop, op.forceUpdate);
|
1351 |
+
if (cm.display.scroller.offsetHeight) cm.doc.scrollTop = cm.display.scroller.scrollTop;
|
1352 |
+
}
|
1353 |
+
if (!updated && op.selectionChanged) updateSelection(cm);
|
1354 |
+
if (op.updateScrollPos) {
|
1355 |
+
display.scroller.scrollTop = display.scrollbarV.scrollTop = doc.scrollTop = newScrollPos.scrollTop;
|
1356 |
+
display.scroller.scrollLeft = display.scrollbarH.scrollLeft = doc.scrollLeft = newScrollPos.scrollLeft;
|
1357 |
+
alignHorizontally(cm);
|
1358 |
+
if (op.scrollToPos)
|
1359 |
+
scrollPosIntoView(cm, clipPos(cm.doc, op.scrollToPos), op.scrollToPosMargin);
|
1360 |
+
} else if (newScrollPos) {
|
1361 |
+
scrollCursorIntoView(cm);
|
1362 |
+
}
|
1363 |
+
if (op.selectionChanged) restartBlink(cm);
|
1364 |
+
|
1365 |
+
if (cm.state.focused && op.updateInput)
|
1366 |
+
resetInput(cm, op.userSelChange);
|
1367 |
+
|
1368 |
+
var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;
|
1369 |
+
if (hidden) for (var i = 0; i < hidden.length; ++i)
|
1370 |
+
if (!hidden[i].lines.length) signal(hidden[i], "hide");
|
1371 |
+
if (unhidden) for (var i = 0; i < unhidden.length; ++i)
|
1372 |
+
if (unhidden[i].lines.length) signal(unhidden[i], "unhide");
|
1373 |
+
|
1374 |
+
var delayed;
|
1375 |
+
if (!--delayedCallbackDepth) {
|
1376 |
+
delayed = delayedCallbacks;
|
1377 |
+
delayedCallbacks = null;
|
1378 |
+
}
|
1379 |
+
if (op.textChanged)
|
1380 |
+
signal(cm, "change", cm, op.textChanged);
|
1381 |
+
if (op.cursorActivity) signal(cm, "cursorActivity", cm);
|
1382 |
+
if (delayed) for (var i = 0; i < delayed.length; ++i) delayed[i]();
|
1383 |
+
}
|
1384 |
+
|
1385 |
+
// Wraps a function in an operation. Returns the wrapped function.
|
1386 |
+
function operation(cm1, f) {
|
1387 |
+
return function() {
|
1388 |
+
var cm = cm1 || this, withOp = !cm.curOp;
|
1389 |
+
if (withOp) startOperation(cm);
|
1390 |
+
try { var result = f.apply(cm, arguments); }
|
1391 |
+
finally { if (withOp) endOperation(cm); }
|
1392 |
+
return result;
|
1393 |
+
};
|
1394 |
+
}
|
1395 |
+
function docOperation(f) {
|
1396 |
+
return function() {
|
1397 |
+
var withOp = this.cm && !this.cm.curOp, result;
|
1398 |
+
if (withOp) startOperation(this.cm);
|
1399 |
+
try { result = f.apply(this, arguments); }
|
1400 |
+
finally { if (withOp) endOperation(this.cm); }
|
1401 |
+
return result;
|
1402 |
+
};
|
1403 |
+
}
|
1404 |
+
function runInOp(cm, f) {
|
1405 |
+
var withOp = !cm.curOp, result;
|
1406 |
+
if (withOp) startOperation(cm);
|
1407 |
+
try { result = f(); }
|
1408 |
+
finally { if (withOp) endOperation(cm); }
|
1409 |
+
return result;
|
1410 |
+
}
|
1411 |
+
|
1412 |
+
function regChange(cm, from, to, lendiff) {
|
1413 |
+
if (from == null) from = cm.doc.first;
|
1414 |
+
if (to == null) to = cm.doc.first + cm.doc.size;
|
1415 |
+
cm.curOp.changes.push({from: from, to: to, diff: lendiff});
|
1416 |
+
}
|
1417 |
+
|
1418 |
+
// INPUT HANDLING
|
1419 |
+
|
1420 |
+
function slowPoll(cm) {
|
1421 |
+
if (cm.display.pollingFast) return;
|
1422 |
+
cm.display.poll.set(cm.options.pollInterval, function() {
|
1423 |
+
readInput(cm);
|
1424 |
+
if (cm.state.focused) slowPoll(cm);
|
1425 |
+
});
|
1426 |
+
}
|
1427 |
+
|
1428 |
+
function fastPoll(cm) {
|
1429 |
+
var missed = false;
|
1430 |
+
cm.display.pollingFast = true;
|
1431 |
+
function p() {
|
1432 |
+
var changed = readInput(cm);
|
1433 |
+
if (!changed && !missed) {missed = true; cm.display.poll.set(60, p);}
|
1434 |
+
else {cm.display.pollingFast = false; slowPoll(cm);}
|
1435 |
+
}
|
1436 |
+
cm.display.poll.set(20, p);
|
1437 |
+
}
|
1438 |
+
|
1439 |
+
// prevInput is a hack to work with IME. If we reset the textarea
|
1440 |
+
// on every change, that breaks IME. So we look for changes
|
1441 |
+
// compared to the previous content instead. (Modern browsers have
|
1442 |
+
// events that indicate IME taking place, but these are not widely
|
1443 |
+
// supported or compatible enough yet to rely on.)
|
1444 |
+
function readInput(cm) {
|
1445 |
+
var input = cm.display.input, prevInput = cm.display.prevInput, doc = cm.doc, sel = doc.sel;
|
1446 |
+
if (!cm.state.focused || hasSelection(input) || isReadOnly(cm) || cm.state.disableInput) return false;
|
1447 |
+
var text = input.value;
|
1448 |
+
if (text == prevInput && posEq(sel.from, sel.to)) return false;
|
1449 |
+
if (ie && !ie_lt9 && cm.display.inputHasSelection === text) {
|
1450 |
+
resetInput(cm, true);
|
1451 |
+
return false;
|
1452 |
+
}
|
1453 |
+
|
1454 |
+
var withOp = !cm.curOp;
|
1455 |
+
if (withOp) startOperation(cm);
|
1456 |
+
sel.shift = false;
|
1457 |
+
var same = 0, l = Math.min(prevInput.length, text.length);
|
1458 |
+
while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same;
|
1459 |
+
var from = sel.from, to = sel.to;
|
1460 |
+
if (same < prevInput.length)
|
1461 |
+
from = Pos(from.line, from.ch - (prevInput.length - same));
|
1462 |
+
else if (cm.state.overwrite && posEq(from, to) && !cm.state.pasteIncoming)
|
1463 |
+
to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + (text.length - same)));
|
1464 |
+
|
1465 |
+
var updateInput = cm.curOp.updateInput;
|
1466 |
+
var changeEvent = {from: from, to: to, text: splitLines(text.slice(same)),
|
1467 |
+
origin: cm.state.pasteIncoming ? "paste" : "+input"};
|
1468 |
+
makeChange(cm.doc, changeEvent, "end");
|
1469 |
+
cm.curOp.updateInput = updateInput;
|
1470 |
+
signalLater(cm, "inputRead", cm, changeEvent);
|
1471 |
+
|
1472 |
+
if (text.length > 1000 || text.indexOf("\n") > -1) input.value = cm.display.prevInput = "";
|
1473 |
+
else cm.display.prevInput = text;
|
1474 |
+
if (withOp) endOperation(cm);
|
1475 |
+
cm.state.pasteIncoming = false;
|
1476 |
+
return true;
|
1477 |
+
}
|
1478 |
+
|
1479 |
+
function resetInput(cm, user) {
|
1480 |
+
var minimal, selected, doc = cm.doc;
|
1481 |
+
if (!posEq(doc.sel.from, doc.sel.to)) {
|
1482 |
+
cm.display.prevInput = "";
|
1483 |
+
minimal = hasCopyEvent &&
|
1484 |
+
(doc.sel.to.line - doc.sel.from.line > 100 || (selected = cm.getSelection()).length > 1000);
|
1485 |
+
var content = minimal ? "-" : selected || cm.getSelection();
|
1486 |
+
cm.display.input.value = content;
|
1487 |
+
if (cm.state.focused) selectInput(cm.display.input);
|
1488 |
+
if (ie && !ie_lt9) cm.display.inputHasSelection = content;
|
1489 |
+
} else if (user) {
|
1490 |
+
cm.display.prevInput = cm.display.input.value = "";
|
1491 |
+
if (ie && !ie_lt9) cm.display.inputHasSelection = null;
|
1492 |
+
}
|
1493 |
+
cm.display.inaccurateSelection = minimal;
|
1494 |
+
}
|
1495 |
+
|
1496 |
+
function focusInput(cm) {
|
1497 |
+
if (cm.options.readOnly != "nocursor" && (!mobile || document.activeElement != cm.display.input))
|
1498 |
+
cm.display.input.focus();
|
1499 |
+
}
|
1500 |
+
|
1501 |
+
function isReadOnly(cm) {
|
1502 |
+
return cm.options.readOnly || cm.doc.cantEdit;
|
1503 |
+
}
|
1504 |
+
|
1505 |
+
// EVENT HANDLERS
|
1506 |
+
|
1507 |
+
function registerEventHandlers(cm) {
|
1508 |
+
var d = cm.display;
|
1509 |
+
on(d.scroller, "mousedown", operation(cm, onMouseDown));
|
1510 |
+
if (ie)
|
1511 |
+
on(d.scroller, "dblclick", operation(cm, function(e) {
|
1512 |
+
if (signalDOMEvent(cm, e)) return;
|
1513 |
+
var pos = posFromMouse(cm, e);
|
1514 |
+
if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return;
|
1515 |
+
e_preventDefault(e);
|
1516 |
+
var word = findWordAt(getLine(cm.doc, pos.line).text, pos);
|
1517 |
+
extendSelection(cm.doc, word.from, word.to);
|
1518 |
+
}));
|
1519 |
+
else
|
1520 |
+
on(d.scroller, "dblclick", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); });
|
1521 |
+
on(d.lineSpace, "selectstart", function(e) {
|
1522 |
+
if (!eventInWidget(d, e)) e_preventDefault(e);
|
1523 |
+
});
|
1524 |
+
// Gecko browsers fire contextmenu *after* opening the menu, at
|
1525 |
+
// which point we can't mess with it anymore. Context menu is
|
1526 |
+
// handled in onMouseDown for Gecko.
|
1527 |
+
if (!captureMiddleClick) on(d.scroller, "contextmenu", function(e) {onContextMenu(cm, e);});
|
1528 |
+
|
1529 |
+
on(d.scroller, "scroll", function() {
|
1530 |
+
if (d.scroller.clientHeight) {
|
1531 |
+
setScrollTop(cm, d.scroller.scrollTop);
|
1532 |
+
setScrollLeft(cm, d.scroller.scrollLeft, true);
|
1533 |
+
signal(cm, "scroll", cm);
|
1534 |
+
}
|
1535 |
+
});
|
1536 |
+
on(d.scrollbarV, "scroll", function() {
|
1537 |
+
if (d.scroller.clientHeight) setScrollTop(cm, d.scrollbarV.scrollTop);
|
1538 |
+
});
|
1539 |
+
on(d.scrollbarH, "scroll", function() {
|
1540 |
+
if (d.scroller.clientHeight) setScrollLeft(cm, d.scrollbarH.scrollLeft);
|
1541 |
+
});
|
1542 |
+
|
1543 |
+
on(d.scroller, "mousewheel", function(e){onScrollWheel(cm, e);});
|
1544 |
+
on(d.scroller, "DOMMouseScroll", function(e){onScrollWheel(cm, e);});
|
1545 |
+
|
1546 |
+
function reFocus() { if (cm.state.focused) setTimeout(bind(focusInput, cm), 0); }
|
1547 |
+
on(d.scrollbarH, "mousedown", reFocus);
|
1548 |
+
on(d.scrollbarV, "mousedown", reFocus);
|
1549 |
+
// Prevent wrapper from ever scrolling
|
1550 |
+
on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });
|
1551 |
+
|
1552 |
+
var resizeTimer;
|
1553 |
+
function onResize() {
|
1554 |
+
if (resizeTimer == null) resizeTimer = setTimeout(function() {
|
1555 |
+
resizeTimer = null;
|
1556 |
+
// Might be a text scaling operation, clear size caches.
|
1557 |
+
d.cachedCharWidth = d.cachedTextHeight = knownScrollbarWidth = null;
|
1558 |
+
clearCaches(cm);
|
1559 |
+
runInOp(cm, bind(regChange, cm));
|
1560 |
+
}, 100);
|
1561 |
+
}
|
1562 |
+
on(window, "resize", onResize);
|
1563 |
+
// Above handler holds on to the editor and its data structures.
|
1564 |
+
// Here we poll to unregister it when the editor is no longer in
|
1565 |
+
// the document, so that it can be garbage-collected.
|
1566 |
+
function unregister() {
|
1567 |
+
for (var p = d.wrapper.parentNode; p && p != document.body; p = p.parentNode) {}
|
1568 |
+
if (p) setTimeout(unregister, 5000);
|
1569 |
+
else off(window, "resize", onResize);
|
1570 |
+
}
|
1571 |
+
setTimeout(unregister, 5000);
|
1572 |
+
|
1573 |
+
on(d.input, "keyup", operation(cm, function(e) {
|
1574 |
+
if (signalDOMEvent(cm, e) || cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return;
|
1575 |
+
if (e.keyCode == 16) cm.doc.sel.shift = false;
|
1576 |
+
}));
|
1577 |
+
on(d.input, "input", bind(fastPoll, cm));
|
1578 |
+
on(d.input, "keydown", operation(cm, onKeyDown));
|
1579 |
+
on(d.input, "keypress", operation(cm, onKeyPress));
|
1580 |
+
on(d.input, "focus", bind(onFocus, cm));
|
1581 |
+
on(d.input, "blur", bind(onBlur, cm));
|
1582 |
+
|
1583 |
+
function drag_(e) {
|
1584 |
+
if (signalDOMEvent(cm, e) || cm.options.onDragEvent && cm.options.onDragEvent(cm, addStop(e))) return;
|
1585 |
+
e_stop(e);
|
1586 |
+
}
|
1587 |
+
if (cm.options.dragDrop) {
|
1588 |
+
on(d.scroller, "dragstart", function(e){onDragStart(cm, e);});
|
1589 |
+
on(d.scroller, "dragenter", drag_);
|
1590 |
+
on(d.scroller, "dragover", drag_);
|
1591 |
+
on(d.scroller, "drop", operation(cm, onDrop));
|
1592 |
+
}
|
1593 |
+
on(d.scroller, "paste", function(e){
|
1594 |
+
if (eventInWidget(d, e)) return;
|
1595 |
+
focusInput(cm);
|
1596 |
+
fastPoll(cm);
|
1597 |
+
});
|
1598 |
+
on(d.input, "paste", function() {
|
1599 |
+
cm.state.pasteIncoming = true;
|
1600 |
+
fastPoll(cm);
|
1601 |
+
});
|
1602 |
+
|
1603 |
+
function prepareCopy() {
|
1604 |
+
if (d.inaccurateSelection) {
|
1605 |
+
d.prevInput = "";
|
1606 |
+
d.inaccurateSelection = false;
|
1607 |
+
d.input.value = cm.getSelection();
|
1608 |
+
selectInput(d.input);
|
1609 |
+
}
|
1610 |
+
}
|
1611 |
+
on(d.input, "cut", prepareCopy);
|
1612 |
+
on(d.input, "copy", prepareCopy);
|
1613 |
+
|
1614 |
+
// Needed to handle Tab key in KHTML
|
1615 |
+
if (khtml) on(d.sizer, "mouseup", function() {
|
1616 |
+
if (document.activeElement == d.input) d.input.blur();
|
1617 |
+
focusInput(cm);
|
1618 |
+
});
|
1619 |
+
}
|
1620 |
+
|
1621 |
+
function eventInWidget(display, e) {
|
1622 |
+
for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {
|
1623 |
+
if (!n || n.ignoreEvents || n.parentNode == display.sizer && n != display.mover) return true;
|
1624 |
+
}
|
1625 |
+
}
|
1626 |
+
|
1627 |
+
function posFromMouse(cm, e, liberal) {
|
1628 |
+
var display = cm.display;
|
1629 |
+
if (!liberal) {
|
1630 |
+
var target = e_target(e);
|
1631 |
+
if (target == display.scrollbarH || target == display.scrollbarH.firstChild ||
|
1632 |
+
target == display.scrollbarV || target == display.scrollbarV.firstChild ||
|
1633 |
+
target == display.scrollbarFiller || target == display.gutterFiller) return null;
|
1634 |
+
}
|
1635 |
+
var x, y, space = getRect(display.lineSpace);
|
1636 |
+
// Fails unpredictably on IE[67] when mouse is dragged around quickly.
|
1637 |
+
try { x = e.clientX; y = e.clientY; } catch (e) { return null; }
|
1638 |
+
return coordsChar(cm, x - space.left, y - space.top);
|
1639 |
+
}
|
1640 |
+
|
1641 |
+
var lastClick, lastDoubleClick;
|
1642 |
+
function onMouseDown(e) {
|
1643 |
+
if (signalDOMEvent(this, e)) return;
|
1644 |
+
var cm = this, display = cm.display, doc = cm.doc, sel = doc.sel;
|
1645 |
+
sel.shift = e.shiftKey;
|
1646 |
+
|
1647 |
+
if (eventInWidget(display, e)) {
|
1648 |
+
if (!webkit) {
|
1649 |
+
display.scroller.draggable = false;
|
1650 |
+
setTimeout(function(){display.scroller.draggable = true;}, 100);
|
1651 |
+
}
|
1652 |
+
return;
|
1653 |
+
}
|
1654 |
+
if (clickInGutter(cm, e)) return;
|
1655 |
+
var start = posFromMouse(cm, e);
|
1656 |
+
|
1657 |
+
switch (e_button(e)) {
|
1658 |
+
case 3:
|
1659 |
+
if (captureMiddleClick) onContextMenu.call(cm, cm, e);
|
1660 |
+
return;
|
1661 |
+
case 2:
|
1662 |
+
if (start) extendSelection(cm.doc, start);
|
1663 |
+
setTimeout(bind(focusInput, cm), 20);
|
1664 |
+
e_preventDefault(e);
|
1665 |
+
return;
|
1666 |
+
}
|
1667 |
+
// For button 1, if it was clicked inside the editor
|
1668 |
+
// (posFromMouse returning non-null), we have to adjust the
|
1669 |
+
// selection.
|
1670 |
+
if (!start) {if (e_target(e) == display.scroller) e_preventDefault(e); return;}
|
1671 |
+
|
1672 |
+
if (!cm.state.focused) onFocus(cm);
|
1673 |
+
|
1674 |
+
var now = +new Date, type = "single";
|
1675 |
+
if (lastDoubleClick && lastDoubleClick.time > now - 400 && posEq(lastDoubleClick.pos, start)) {
|
1676 |
+
type = "triple";
|
1677 |
+
e_preventDefault(e);
|
1678 |
+
setTimeout(bind(focusInput, cm), 20);
|
1679 |
+
selectLine(cm, start.line);
|
1680 |
+
} else if (lastClick && lastClick.time > now - 400 && posEq(lastClick.pos, start)) {
|
1681 |
+
type = "double";
|
1682 |
+
lastDoubleClick = {time: now, pos: start};
|
1683 |
+
e_preventDefault(e);
|
1684 |
+
var word = findWordAt(getLine(doc, start.line).text, start);
|
1685 |
+
extendSelection(cm.doc, word.from, word.to);
|
1686 |
+
} else { lastClick = {time: now, pos: start}; }
|
1687 |
+
|
1688 |
+
var last = start;
|
1689 |
+
if (cm.options.dragDrop && dragAndDrop && !isReadOnly(cm) && !posEq(sel.from, sel.to) &&
|
1690 |
+
!posLess(start, sel.from) && !posLess(sel.to, start) && type == "single") {
|
1691 |
+
var dragEnd = operation(cm, function(e2) {
|
1692 |
+
if (webkit) display.scroller.draggable = false;
|
1693 |
+
cm.state.draggingText = false;
|
1694 |
+
off(document, "mouseup", dragEnd);
|
1695 |
+
off(display.scroller, "drop", dragEnd);
|
1696 |
+
if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) {
|
1697 |
+
e_preventDefault(e2);
|
1698 |
+
extendSelection(cm.doc, start);
|
1699 |
+
focusInput(cm);
|
1700 |
+
}
|
1701 |
+
});
|
1702 |
+
// Let the drag handler handle this.
|
1703 |
+
if (webkit) display.scroller.draggable = true;
|
1704 |
+
cm.state.draggingText = dragEnd;
|
1705 |
+
// IE's approach to draggable
|
1706 |
+
if (display.scroller.dragDrop) display.scroller.dragDrop();
|
1707 |
+
on(document, "mouseup", dragEnd);
|
1708 |
+
on(display.scroller, "drop", dragEnd);
|
1709 |
+
return;
|
1710 |
+
}
|
1711 |
+
e_preventDefault(e);
|
1712 |
+
if (type == "single") extendSelection(cm.doc, clipPos(doc, start));
|
1713 |
+
|
1714 |
+
var startstart = sel.from, startend = sel.to, lastPos = start;
|
1715 |
+
|
1716 |
+
function doSelect(cur) {
|
1717 |
+
if (posEq(lastPos, cur)) return;
|
1718 |
+
lastPos = cur;
|
1719 |
+
|
1720 |
+
if (type == "single") {
|
1721 |
+
extendSelection(cm.doc, clipPos(doc, start), cur);
|
1722 |
+
return;
|
1723 |
+
}
|
1724 |
+
|
1725 |
+
startstart = clipPos(doc, startstart);
|
1726 |
+
startend = clipPos(doc, startend);
|
1727 |
+
if (type == "double") {
|
1728 |
+
var word = findWordAt(getLine(doc, cur.line).text, cur);
|
1729 |
+
if (posLess(cur, startstart)) extendSelection(cm.doc, word.from, startend);
|
1730 |
+
else extendSelection(cm.doc, startstart, word.to);
|
1731 |
+
} else if (type == "triple") {
|
1732 |
+
if (posLess(cur, startstart)) extendSelection(cm.doc, startend, clipPos(doc, Pos(cur.line, 0)));
|
1733 |
+
else extendSelection(cm.doc, startstart, clipPos(doc, Pos(cur.line + 1, 0)));
|
1734 |
+
}
|
1735 |
+
}
|
1736 |
+
|
1737 |
+
var editorSize = getRect(display.wrapper);
|
1738 |
+
// Used to ensure timeout re-tries don't fire when another extend
|
1739 |
+
// happened in the meantime (clearTimeout isn't reliable -- at
|
1740 |
+
// least on Chrome, the timeouts still happen even when cleared,
|
1741 |
+
// if the clear happens after their scheduled firing time).
|
1742 |
+
var counter = 0;
|
1743 |
+
|
1744 |
+
function extend(e) {
|
1745 |
+
var curCount = ++counter;
|
1746 |
+
var cur = posFromMouse(cm, e, true);
|
1747 |
+
if (!cur) return;
|
1748 |
+
if (!posEq(cur, last)) {
|
1749 |
+
if (!cm.state.focused) onFocus(cm);
|
1750 |
+
last = cur;
|
1751 |
+
doSelect(cur);
|
1752 |
+
var visible = visibleLines(display, doc);
|
1753 |
+
if (cur.line >= visible.to || cur.line < visible.from)
|
1754 |
+
setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150);
|
1755 |
+
} else {
|
1756 |
+
var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;
|
1757 |
+
if (outside) setTimeout(operation(cm, function() {
|
1758 |
+
if (counter != curCount) return;
|
1759 |
+
display.scroller.scrollTop += outside;
|
1760 |
+
extend(e);
|
1761 |
+
}), 50);
|
1762 |
+
}
|
1763 |
+
}
|
1764 |
+
|
1765 |
+
function done(e) {
|
1766 |
+
counter = Infinity;
|
1767 |
+
e_preventDefault(e);
|
1768 |
+
focusInput(cm);
|
1769 |
+
off(document, "mousemove", move);
|
1770 |
+
off(document, "mouseup", up);
|
1771 |
+
}
|
1772 |
+
|
1773 |
+
var move = operation(cm, function(e) {
|
1774 |
+
if (!ie && !e_button(e)) done(e);
|
1775 |
+
else extend(e);
|
1776 |
+
});
|
1777 |
+
var up = operation(cm, done);
|
1778 |
+
on(document, "mousemove", move);
|
1779 |
+
on(document, "mouseup", up);
|
1780 |
+
}
|
1781 |
+
|
1782 |
+
function clickInGutter(cm, e) {
|
1783 |
+
var display = cm.display;
|
1784 |
+
try { var mX = e.clientX, mY = e.clientY; }
|
1785 |
+
catch(e) { return false; }
|
1786 |
+
|
1787 |
+
if (mX >= Math.floor(getRect(display.gutters).right)) return false;
|
1788 |
+
e_preventDefault(e);
|
1789 |
+
if (!hasHandler(cm, "gutterClick")) return true;
|
1790 |
+
|
1791 |
+
var lineBox = getRect(display.lineDiv);
|
1792 |
+
if (mY > lineBox.bottom) return true;
|
1793 |
+
mY -= lineBox.top - display.viewOffset;
|
1794 |
+
|
1795 |
+
for (var i = 0; i < cm.options.gutters.length; ++i) {
|
1796 |
+
var g = display.gutters.childNodes[i];
|
1797 |
+
if (g && getRect(g).right >= mX) {
|
1798 |
+
var line = lineAtHeight(cm.doc, mY);
|
1799 |
+
var gutter = cm.options.gutters[i];
|
1800 |
+
signalLater(cm, "gutterClick", cm, line, gutter, e);
|
1801 |
+
break;
|
1802 |
+
}
|
1803 |
+
}
|
1804 |
+
return true;
|
1805 |
+
}
|
1806 |
+
|
1807 |
+
// Kludge to work around strange IE behavior where it'll sometimes
|
1808 |
+
// re-fire a series of drag-related events right after the drop (#1551)
|
1809 |
+
var lastDrop = 0;
|
1810 |
+
|
1811 |
+
function onDrop(e) {
|
1812 |
+
var cm = this;
|
1813 |
+
if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e) || (cm.options.onDragEvent && cm.options.onDragEvent(cm, addStop(e))))
|
1814 |
+
return;
|
1815 |
+
e_preventDefault(e);
|
1816 |
+
if (ie) lastDrop = +new Date;
|
1817 |
+
var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;
|
1818 |
+
if (!pos || isReadOnly(cm)) return;
|
1819 |
+
if (files && files.length && window.FileReader && window.File) {
|
1820 |
+
var n = files.length, text = Array(n), read = 0;
|
1821 |
+
var loadFile = function(file, i) {
|
1822 |
+
var reader = new FileReader;
|
1823 |
+
reader.onload = function() {
|
1824 |
+
text[i] = reader.result;
|
1825 |
+
if (++read == n) {
|
1826 |
+
pos = clipPos(cm.doc, pos);
|
1827 |
+
makeChange(cm.doc, {from: pos, to: pos, text: splitLines(text.join("\n")), origin: "paste"}, "around");
|
1828 |
+
}
|
1829 |
+
};
|
1830 |
+
reader.readAsText(file);
|
1831 |
+
};
|
1832 |
+
for (var i = 0; i < n; ++i) loadFile(files[i], i);
|
1833 |
+
} else {
|
1834 |
+
// Don't do a replace if the drop happened inside of the selected text.
|
1835 |
+
if (cm.state.draggingText && !(posLess(pos, cm.doc.sel.from) || posLess(cm.doc.sel.to, pos))) {
|
1836 |
+
cm.state.draggingText(e);
|
1837 |
+
// Ensure the editor is re-focused
|
1838 |
+
setTimeout(bind(focusInput, cm), 20);
|
1839 |
+
return;
|
1840 |
+
}
|
1841 |
+
try {
|
1842 |
+
var text = e.dataTransfer.getData("Text");
|
1843 |
+
if (text) {
|
1844 |
+
var curFrom = cm.doc.sel.from, curTo = cm.doc.sel.to;
|
1845 |
+
setSelection(cm.doc, pos, pos);
|
1846 |
+
if (cm.state.draggingText) replaceRange(cm.doc, "", curFrom, curTo, "paste");
|
1847 |
+
cm.replaceSelection(text, null, "paste");
|
1848 |
+
focusInput(cm);
|
1849 |
+
onFocus(cm);
|
1850 |
+
}
|
1851 |
+
}
|
1852 |
+
catch(e){}
|
1853 |
+
}
|
1854 |
+
}
|
1855 |
+
|
1856 |
+
function onDragStart(cm, e) {
|
1857 |
+
if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; }
|
1858 |
+
if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return;
|
1859 |
+
|
1860 |
+
var txt = cm.getSelection();
|
1861 |
+
e.dataTransfer.setData("Text", txt);
|
1862 |
+
|
1863 |
+
// Use dummy image instead of default browsers image.
|
1864 |
+
// Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.
|
1865 |
+
if (e.dataTransfer.setDragImage && !safari) {
|
1866 |
+
var img = elt("img", null, null, "position: fixed; left: 0; top: 0;");
|
1867 |
+
if (opera) {
|
1868 |
+
img.width = img.height = 1;
|
1869 |
+
cm.display.wrapper.appendChild(img);
|
1870 |
+
// Force a relayout, or Opera won't use our image for some obscure reason
|
1871 |
+
img._top = img.offsetTop;
|
1872 |
+
}
|
1873 |
+
e.dataTransfer.setDragImage(img, 0, 0);
|
1874 |
+
if (opera) img.parentNode.removeChild(img);
|
1875 |
+
}
|
1876 |
+
}
|
1877 |
+
|
1878 |
+
function setScrollTop(cm, val) {
|
1879 |
+
if (Math.abs(cm.doc.scrollTop - val) < 2) return;
|
1880 |
+
cm.doc.scrollTop = val;
|
1881 |
+
if (!gecko) updateDisplay(cm, [], val);
|
1882 |
+
if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val;
|
1883 |
+
if (cm.display.scrollbarV.scrollTop != val) cm.display.scrollbarV.scrollTop = val;
|
1884 |
+
if (gecko) updateDisplay(cm, []);
|
1885 |
+
startWorker(cm, 100);
|
1886 |
+
}
|
1887 |
+
function setScrollLeft(cm, val, isScroller) {
|
1888 |
+
if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return;
|
1889 |
+
val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth);
|
1890 |
+
cm.doc.scrollLeft = val;
|
1891 |
+
alignHorizontally(cm);
|
1892 |
+
if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val;
|
1893 |
+
if (cm.display.scrollbarH.scrollLeft != val) cm.display.scrollbarH.scrollLeft = val;
|
1894 |
+
}
|
1895 |
+
|
1896 |
+
// Since the delta values reported on mouse wheel events are
|
1897 |
+
// unstandardized between browsers and even browser versions, and
|
1898 |
+
// generally horribly unpredictable, this code starts by measuring
|
1899 |
+
// the scroll effect that the first few mouse wheel events have,
|
1900 |
+
// and, from that, detects the way it can convert deltas to pixel
|
1901 |
+
// offsets afterwards.
|
1902 |
+
//
|
1903 |
+
// The reason we want to know the amount a wheel event will scroll
|
1904 |
+
// is that it gives us a chance to update the display before the
|
1905 |
+
// actual scrolling happens, reducing flickering.
|
1906 |
+
|
1907 |
+
var wheelSamples = 0, wheelPixelsPerUnit = null;
|
1908 |
+
// Fill in a browser-detected starting value on browsers where we
|
1909 |
+
// know one. These don't have to be accurate -- the result of them
|
1910 |
+
// being wrong would just be a slight flicker on the first wheel
|
1911 |
+
// scroll (if it is large enough).
|
1912 |
+
if (ie) wheelPixelsPerUnit = -.53;
|
1913 |
+
else if (gecko) wheelPixelsPerUnit = 15;
|
1914 |
+
else if (chrome) wheelPixelsPerUnit = -.7;
|
1915 |
+
else if (safari) wheelPixelsPerUnit = -1/3;
|
1916 |
+
|
1917 |
+
function onScrollWheel(cm, e) {
|
1918 |
+
var dx = e.wheelDeltaX, dy = e.wheelDeltaY;
|
1919 |
+
if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail;
|
1920 |
+
if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail;
|
1921 |
+
else if (dy == null) dy = e.wheelDelta;
|
1922 |
+
|
1923 |
+
var display = cm.display, scroll = display.scroller;
|
1924 |
+
// Quit if there's nothing to scroll here
|
1925 |
+
if (!(dx && scroll.scrollWidth > scroll.clientWidth ||
|
1926 |
+
dy && scroll.scrollHeight > scroll.clientHeight)) return;
|
1927 |
+
|
1928 |
+
// Webkit browsers on OS X abort momentum scrolls when the target
|
1929 |
+
// of the scroll event is removed from the scrollable element.
|
1930 |
+
// This hack (see related code in patchDisplay) makes sure the
|
1931 |
+
// element is kept around.
|
1932 |
+
if (dy && mac && webkit) {
|
1933 |
+
for (var cur = e.target; cur != scroll; cur = cur.parentNode) {
|
1934 |
+
if (cur.lineObj) {
|
1935 |
+
cm.display.currentWheelTarget = cur;
|
1936 |
+
break;
|
1937 |
+
}
|
1938 |
+
}
|
1939 |
+
}
|
1940 |
+
|
1941 |
+
// On some browsers, horizontal scrolling will cause redraws to
|
1942 |
+
// happen before the gutter has been realigned, causing it to
|
1943 |
+
// wriggle around in a most unseemly way. When we have an
|
1944 |
+
// estimated pixels/delta value, we just handle horizontal
|
1945 |
+
// scrolling entirely here. It'll be slightly off from native, but
|
1946 |
+
// better than glitching out.
|
1947 |
+
if (dx && !gecko && !opera && wheelPixelsPerUnit != null) {
|
1948 |
+
if (dy)
|
1949 |
+
setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight)));
|
1950 |
+
setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth)));
|
1951 |
+
e_preventDefault(e);
|
1952 |
+
display.wheelStartX = null; // Abort measurement, if in progress
|
1953 |
+
return;
|
1954 |
+
}
|
1955 |
+
|
1956 |
+
if (dy && wheelPixelsPerUnit != null) {
|
1957 |
+
var pixels = dy * wheelPixelsPerUnit;
|
1958 |
+
var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;
|
1959 |
+
if (pixels < 0) top = Math.max(0, top + pixels - 50);
|
1960 |
+
else bot = Math.min(cm.doc.height, bot + pixels + 50);
|
1961 |
+
updateDisplay(cm, [], {top: top, bottom: bot});
|
1962 |
+
}
|
1963 |
+
|
1964 |
+
if (wheelSamples < 20) {
|
1965 |
+
if (display.wheelStartX == null) {
|
1966 |
+
display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;
|
1967 |
+
display.wheelDX = dx; display.wheelDY = dy;
|
1968 |
+
setTimeout(function() {
|
1969 |
+
if (display.wheelStartX == null) return;
|
1970 |
+
var movedX = scroll.scrollLeft - display.wheelStartX;
|
1971 |
+
var movedY = scroll.scrollTop - display.wheelStartY;
|
1972 |
+
var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||
|
1973 |
+
(movedX && display.wheelDX && movedX / display.wheelDX);
|
1974 |
+
display.wheelStartX = display.wheelStartY = null;
|
1975 |
+
if (!sample) return;
|
1976 |
+
wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);
|
1977 |
+
++wheelSamples;
|
1978 |
+
}, 200);
|
1979 |
+
} else {
|
1980 |
+
display.wheelDX += dx; display.wheelDY += dy;
|
1981 |
+
}
|
1982 |
+
}
|
1983 |
+
}
|
1984 |
+
|
1985 |
+
function doHandleBinding(cm, bound, dropShift) {
|
1986 |
+
if (typeof bound == "string") {
|
1987 |
+
bound = commands[bound];
|
1988 |
+
if (!bound) return false;
|
1989 |
+
}
|
1990 |
+
// Ensure previous input has been read, so that the handler sees a
|
1991 |
+
// consistent view of the document
|
1992 |
+
if (cm.display.pollingFast && readInput(cm)) cm.display.pollingFast = false;
|
1993 |
+
var doc = cm.doc, prevShift = doc.sel.shift, done = false;
|
1994 |
+
try {
|
1995 |
+
if (isReadOnly(cm)) cm.state.suppressEdits = true;
|
1996 |
+
if (dropShift) doc.sel.shift = false;
|
1997 |
+
done = bound(cm) != Pass;
|
1998 |
+
} finally {
|
1999 |
+
doc.sel.shift = prevShift;
|
2000 |
+
cm.state.suppressEdits = false;
|
2001 |
+
}
|
2002 |
+
return done;
|
2003 |
+
}
|
2004 |
+
|
2005 |
+
function allKeyMaps(cm) {
|
2006 |
+
var maps = cm.state.keyMaps.slice(0);
|
2007 |
+
if (cm.options.extraKeys) maps.push(cm.options.extraKeys);
|
2008 |
+
maps.push(cm.options.keyMap);
|
2009 |
+
return maps;
|
2010 |
+
}
|
2011 |
+
|
2012 |
+
var maybeTransition;
|
2013 |
+
function handleKeyBinding(cm, e) {
|
2014 |
+
// Handle auto keymap transitions
|
2015 |
+
var startMap = getKeyMap(cm.options.keyMap), next = startMap.auto;
|
2016 |
+
clearTimeout(maybeTransition);
|
2017 |
+
if (next && !isModifierKey(e)) maybeTransition = setTimeout(function() {
|
2018 |
+
if (getKeyMap(cm.options.keyMap) == startMap) {
|
2019 |
+
cm.options.keyMap = (next.call ? next.call(null, cm) : next);
|
2020 |
+
keyMapChanged(cm);
|
2021 |
+
}
|
2022 |
+
}, 50);
|
2023 |
+
|
2024 |
+
var name = keyName(e, true), handled = false;
|
2025 |
+
if (!name) return false;
|
2026 |
+
var keymaps = allKeyMaps(cm);
|
2027 |
+
|
2028 |
+
if (e.shiftKey) {
|
2029 |
+
// First try to resolve full name (including 'Shift-'). Failing
|
2030 |
+
// that, see if there is a cursor-motion command (starting with
|
2031 |
+
// 'go') bound to the keyname without 'Shift-'.
|
2032 |
+
handled = lookupKey("Shift-" + name, keymaps, function(b) {return doHandleBinding(cm, b, true);})
|
2033 |
+
|| lookupKey(name, keymaps, function(b) {
|
2034 |
+
if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion)
|
2035 |
+
return doHandleBinding(cm, b);
|
2036 |
+
});
|
2037 |
+
} else {
|
2038 |
+
handled = lookupKey(name, keymaps, function(b) { return doHandleBinding(cm, b); });
|
2039 |
+
}
|
2040 |
+
|
2041 |
+
if (handled) {
|
2042 |
+
e_preventDefault(e);
|
2043 |
+
restartBlink(cm);
|
2044 |
+
if (ie_lt9) { e.oldKeyCode = e.keyCode; e.keyCode = 0; }
|
2045 |
+
signalLater(cm, "keyHandled", cm, name, e);
|
2046 |
+
}
|
2047 |
+
return handled;
|
2048 |
+
}
|
2049 |
+
|
2050 |
+
function handleCharBinding(cm, e, ch) {
|
2051 |
+
var handled = lookupKey("'" + ch + "'", allKeyMaps(cm),
|
2052 |
+
function(b) { return doHandleBinding(cm, b, true); });
|
2053 |
+
if (handled) {
|
2054 |
+
e_preventDefault(e);
|
2055 |
+
restartBlink(cm);
|
2056 |
+
signalLater(cm, "keyHandled", cm, "'" + ch + "'", e);
|
2057 |
+
}
|
2058 |
+
return handled;
|
2059 |
+
}
|
2060 |
+
|
2061 |
+
var lastStoppedKey = null;
|
2062 |
+
function onKeyDown(e) {
|
2063 |
+
var cm = this;
|
2064 |
+
if (!cm.state.focused) onFocus(cm);
|
2065 |
+
if (ie && e.keyCode == 27) { e.returnValue = false; }
|
2066 |
+
if (signalDOMEvent(cm, e) || cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return;
|
2067 |
+
var code = e.keyCode;
|
2068 |
+
// IE does strange things with escape.
|
2069 |
+
cm.doc.sel.shift = code == 16 || e.shiftKey;
|
2070 |
+
// First give onKeyEvent option a chance to handle this.
|
2071 |
+
var handled = handleKeyBinding(cm, e);
|
2072 |
+
if (opera) {
|
2073 |
+
lastStoppedKey = handled ? code : null;
|
2074 |
+
// Opera has no cut event... we try to at least catch the key combo
|
2075 |
+
if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))
|
2076 |
+
cm.replaceSelection("");
|
2077 |
+
}
|
2078 |
+
}
|
2079 |
+
|
2080 |
+
function onKeyPress(e) {
|
2081 |
+
var cm = this;
|
2082 |
+
if (signalDOMEvent(cm, e) || cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return;
|
2083 |
+
var keyCode = e.keyCode, charCode = e.charCode;
|
2084 |
+
if (opera && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;}
|
2085 |
+
if (((opera && (!e.which || e.which < 10)) || khtml) && handleKeyBinding(cm, e)) return;
|
2086 |
+
var ch = String.fromCharCode(charCode == null ? keyCode : charCode);
|
2087 |
+
if (this.options.electricChars && this.doc.mode.electricChars &&
|
2088 |
+
this.options.smartIndent && !isReadOnly(this) &&
|
2089 |
+
this.doc.mode.electricChars.indexOf(ch) > -1)
|
2090 |
+
setTimeout(operation(cm, function() {indentLine(cm, cm.doc.sel.to.line, "smart");}), 75);
|
2091 |
+
if (handleCharBinding(cm, e, ch)) return;
|
2092 |
+
if (ie && !ie_lt9) cm.display.inputHasSelection = null;
|
2093 |
+
fastPoll(cm);
|
2094 |
+
}
|
2095 |
+
|
2096 |
+
function onFocus(cm) {
|
2097 |
+
if (cm.options.readOnly == "nocursor") return;
|
2098 |
+
if (!cm.state.focused) {
|
2099 |
+
signal(cm, "focus", cm);
|
2100 |
+
cm.state.focused = true;
|
2101 |
+
if (cm.display.wrapper.className.search(/\bCodeMirror-focused\b/) == -1)
|
2102 |
+
cm.display.wrapper.className += " CodeMirror-focused";
|
2103 |
+
resetInput(cm, true);
|
2104 |
+
}
|
2105 |
+
slowPoll(cm);
|
2106 |
+
restartBlink(cm);
|
2107 |
+
}
|
2108 |
+
function onBlur(cm) {
|
2109 |
+
if (cm.state.focused) {
|
2110 |
+
signal(cm, "blur", cm);
|
2111 |
+
cm.state.focused = false;
|
2112 |
+
cm.display.wrapper.className = cm.display.wrapper.className.replace(" CodeMirror-focused", "");
|
2113 |
+
}
|
2114 |
+
clearInterval(cm.display.blinker);
|
2115 |
+
setTimeout(function() {if (!cm.state.focused) cm.doc.sel.shift = false;}, 150);
|
2116 |
+
}
|
2117 |
+
|
2118 |
+
var detectingSelectAll;
|
2119 |
+
function onContextMenu(cm, e) {
|
2120 |
+
if (signalDOMEvent(cm, e, "contextmenu")) return;
|
2121 |
+
var display = cm.display, sel = cm.doc.sel;
|
2122 |
+
if (eventInWidget(display, e)) return;
|
2123 |
+
|
2124 |
+
var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;
|
2125 |
+
if (!pos || opera) return; // Opera is difficult.
|
2126 |
+
if (posEq(sel.from, sel.to) || posLess(pos, sel.from) || !posLess(pos, sel.to))
|
2127 |
+
operation(cm, setSelection)(cm.doc, pos, pos);
|
2128 |
+
|
2129 |
+
var oldCSS = display.input.style.cssText;
|
2130 |
+
display.inputDiv.style.position = "absolute";
|
2131 |
+
display.input.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (e.clientY - 5) +
|
2132 |
+
"px; left: " + (e.clientX - 5) + "px; z-index: 1000; background: white; outline: none;" +
|
2133 |
+
"border-width: 0; outline: none; overflow: hidden; opacity: .05; -ms-opacity: .05; filter: alpha(opacity=5);";
|
2134 |
+
focusInput(cm);
|
2135 |
+
resetInput(cm, true);
|
2136 |
+
// Adds "Select all" to context menu in FF
|
2137 |
+
if (posEq(sel.from, sel.to)) display.input.value = display.prevInput = " ";
|
2138 |
+
|
2139 |
+
function prepareSelectAllHack() {
|
2140 |
+
if (display.input.selectionStart != null) {
|
2141 |
+
var extval = display.input.value = " " + (posEq(sel.from, sel.to) ? "" : display.input.value);
|
2142 |
+
display.prevInput = " ";
|
2143 |
+
display.input.selectionStart = 1; display.input.selectionEnd = extval.length;
|
2144 |
+
}
|
2145 |
+
}
|
2146 |
+
function rehide() {
|
2147 |
+
display.inputDiv.style.position = "relative";
|
2148 |
+
display.input.style.cssText = oldCSS;
|
2149 |
+
if (ie_lt9) display.scrollbarV.scrollTop = display.scroller.scrollTop = scrollPos;
|
2150 |
+
slowPoll(cm);
|
2151 |
+
|
2152 |
+
// Try to detect the user choosing select-all
|
2153 |
+
if (display.input.selectionStart != null) {
|
2154 |
+
if (!ie || ie_lt9) prepareSelectAllHack();
|
2155 |
+
clearTimeout(detectingSelectAll);
|
2156 |
+
var i = 0, poll = function(){
|
2157 |
+
if (display.prevInput == " " && display.input.selectionStart == 0)
|
2158 |
+
operation(cm, commands.selectAll)(cm);
|
2159 |
+
else if (i++ < 10) detectingSelectAll = setTimeout(poll, 500);
|
2160 |
+
else resetInput(cm);
|
2161 |
+
};
|
2162 |
+
detectingSelectAll = setTimeout(poll, 200);
|
2163 |
+
}
|
2164 |
+
}
|
2165 |
+
|
2166 |
+
if (ie && !ie_lt9) prepareSelectAllHack();
|
2167 |
+
if (captureMiddleClick) {
|
2168 |
+
e_stop(e);
|
2169 |
+
var mouseup = function() {
|
2170 |
+
off(window, "mouseup", mouseup);
|
2171 |
+
setTimeout(rehide, 20);
|
2172 |
+
};
|
2173 |
+
on(window, "mouseup", mouseup);
|
2174 |
+
} else {
|
2175 |
+
setTimeout(rehide, 50);
|
2176 |
+
}
|
2177 |
+
}
|
2178 |
+
|
2179 |
+
// UPDATING
|
2180 |
+
|
2181 |
+
var changeEnd = CodeMirror.changeEnd = function(change) {
|
2182 |
+
if (!change.text) return change.to;
|
2183 |
+
return Pos(change.from.line + change.text.length - 1,
|
2184 |
+
lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0));
|
2185 |
+
};
|
2186 |
+
|
2187 |
+
// Make sure a position will be valid after the given change.
|
2188 |
+
function clipPostChange(doc, change, pos) {
|
2189 |
+
if (!posLess(change.from, pos)) return clipPos(doc, pos);
|
2190 |
+
var diff = (change.text.length - 1) - (change.to.line - change.from.line);
|
2191 |
+
if (pos.line > change.to.line + diff) {
|
2192 |
+
var preLine = pos.line - diff, lastLine = doc.first + doc.size - 1;
|
2193 |
+
if (preLine > lastLine) return Pos(lastLine, getLine(doc, lastLine).text.length);
|
2194 |
+
return clipToLen(pos, getLine(doc, preLine).text.length);
|
2195 |
+
}
|
2196 |
+
if (pos.line == change.to.line + diff)
|
2197 |
+
return clipToLen(pos, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0) +
|
2198 |
+
getLine(doc, change.to.line).text.length - change.to.ch);
|
2199 |
+
var inside = pos.line - change.from.line;
|
2200 |
+
return clipToLen(pos, change.text[inside].length + (inside ? 0 : change.from.ch));
|
2201 |
+
}
|
2202 |
+
|
2203 |
+
// Hint can be null|"end"|"start"|"around"|{anchor,head}
|
2204 |
+
function computeSelAfterChange(doc, change, hint) {
|
2205 |
+
if (hint && typeof hint == "object") // Assumed to be {anchor, head} object
|
2206 |
+
return {anchor: clipPostChange(doc, change, hint.anchor),
|
2207 |
+
head: clipPostChange(doc, change, hint.head)};
|
2208 |
+
|
2209 |
+
if (hint == "start") return {anchor: change.from, head: change.from};
|
2210 |
+
|
2211 |
+
var end = changeEnd(change);
|
2212 |
+
if (hint == "around") return {anchor: change.from, head: end};
|
2213 |
+
if (hint == "end") return {anchor: end, head: end};
|
2214 |
+
|
2215 |
+
// hint is null, leave the selection alone as much as possible
|
2216 |
+
var adjustPos = function(pos) {
|
2217 |
+
if (posLess(pos, change.from)) return pos;
|
2218 |
+
if (!posLess(change.to, pos)) return end;
|
2219 |
+
|
2220 |
+
var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;
|
2221 |
+
if (pos.line == change.to.line) ch += end.ch - change.to.ch;
|
2222 |
+
return Pos(line, ch);
|
2223 |
+
};
|
2224 |
+
return {anchor: adjustPos(doc.sel.anchor), head: adjustPos(doc.sel.head)};
|
2225 |
+
}
|
2226 |
+
|
2227 |
+
function filterChange(doc, change, update) {
|
2228 |
+
var obj = {
|
2229 |
+
canceled: false,
|
2230 |
+
from: change.from,
|
2231 |
+
to: change.to,
|
2232 |
+
text: change.text,
|
2233 |
+
origin: change.origin,
|
2234 |
+
cancel: function() { this.canceled = true; }
|
2235 |
+
};
|
2236 |
+
if (update) obj.update = function(from, to, text, origin) {
|
2237 |
+
if (from) this.from = clipPos(doc, from);
|
2238 |
+
if (to) this.to = clipPos(doc, to);
|
2239 |
+
if (text) this.text = text;
|
2240 |
+
if (origin !== undefined) this.origin = origin;
|
2241 |
+
};
|
2242 |
+
signal(doc, "beforeChange", doc, obj);
|
2243 |
+
if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj);
|
2244 |
+
|
2245 |
+
if (obj.canceled) return null;
|
2246 |
+
return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin};
|
2247 |
+
}
|
2248 |
+
|
2249 |
+
// Replace the range from from to to by the strings in replacement.
|
2250 |
+
// change is a {from, to, text [, origin]} object
|
2251 |
+
function makeChange(doc, change, selUpdate, ignoreReadOnly) {
|
2252 |
+
if (doc.cm) {
|
2253 |
+
if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, selUpdate, ignoreReadOnly);
|
2254 |
+
if (doc.cm.state.suppressEdits) return;
|
2255 |
+
}
|
2256 |
+
|
2257 |
+
if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) {
|
2258 |
+
change = filterChange(doc, change, true);
|
2259 |
+
if (!change) return;
|
2260 |
+
}
|
2261 |
+
|
2262 |
+
// Possibly split or suppress the update based on the presence
|
2263 |
+
// of read-only spans in its range.
|
2264 |
+
var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);
|
2265 |
+
if (split) {
|
2266 |
+
for (var i = split.length - 1; i >= 1; --i)
|
2267 |
+
makeChangeNoReadonly(doc, {from: split[i].from, to: split[i].to, text: [""]});
|
2268 |
+
if (split.length)
|
2269 |
+
makeChangeNoReadonly(doc, {from: split[0].from, to: split[0].to, text: change.text}, selUpdate);
|
2270 |
+
} else {
|
2271 |
+
makeChangeNoReadonly(doc, change, selUpdate);
|
2272 |
+
}
|
2273 |
+
}
|
2274 |
+
|
2275 |
+
function makeChangeNoReadonly(doc, change, selUpdate) {
|
2276 |
+
var selAfter = computeSelAfterChange(doc, change, selUpdate);
|
2277 |
+
addToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);
|
2278 |
+
|
2279 |
+
makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));
|
2280 |
+
var rebased = [];
|
2281 |
+
|
2282 |
+
linkedDocs(doc, function(doc, sharedHist) {
|
2283 |
+
if (!sharedHist && indexOf(rebased, doc.history) == -1) {
|
2284 |
+
rebaseHist(doc.history, change);
|
2285 |
+
rebased.push(doc.history);
|
2286 |
+
}
|
2287 |
+
makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));
|
2288 |
+
});
|
2289 |
+
}
|
2290 |
+
|
2291 |
+
function makeChangeFromHistory(doc, type) {
|
2292 |
+
if (doc.cm && doc.cm.state.suppressEdits) return;
|
2293 |
+
|
2294 |
+
var hist = doc.history;
|
2295 |
+
var event = (type == "undo" ? hist.done : hist.undone).pop();
|
2296 |
+
if (!event) return;
|
2297 |
+
|
2298 |
+
var anti = {changes: [], anchorBefore: event.anchorAfter, headBefore: event.headAfter,
|
2299 |
+
anchorAfter: event.anchorBefore, headAfter: event.headBefore,
|
2300 |
+
generation: hist.generation};
|
2301 |
+
(type == "undo" ? hist.undone : hist.done).push(anti);
|
2302 |
+
hist.generation = event.generation || ++hist.maxGeneration;
|
2303 |
+
|
2304 |
+
var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange");
|
2305 |
+
|
2306 |
+
for (var i = event.changes.length - 1; i >= 0; --i) {
|
2307 |
+
var change = event.changes[i];
|
2308 |
+
change.origin = type;
|
2309 |
+
if (filter && !filterChange(doc, change, false)) {
|
2310 |
+
(type == "undo" ? hist.done : hist.undone).length = 0;
|
2311 |
+
return;
|
2312 |
+
}
|
2313 |
+
|
2314 |
+
anti.changes.push(historyChangeFromChange(doc, change));
|
2315 |
+
|
2316 |
+
var after = i ? computeSelAfterChange(doc, change, null)
|
2317 |
+
: {anchor: event.anchorBefore, head: event.headBefore};
|
2318 |
+
makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));
|
2319 |
+
var rebased = [];
|
2320 |
+
|
2321 |
+
linkedDocs(doc, function(doc, sharedHist) {
|
2322 |
+
if (!sharedHist && indexOf(rebased, doc.history) == -1) {
|
2323 |
+
rebaseHist(doc.history, change);
|
2324 |
+
rebased.push(doc.history);
|
2325 |
+
}
|
2326 |
+
makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));
|
2327 |
+
});
|
2328 |
+
}
|
2329 |
+
}
|
2330 |
+
|
2331 |
+
function shiftDoc(doc, distance) {
|
2332 |
+
function shiftPos(pos) {return Pos(pos.line + distance, pos.ch);}
|
2333 |
+
doc.first += distance;
|
2334 |
+
if (doc.cm) regChange(doc.cm, doc.first, doc.first, distance);
|
2335 |
+
doc.sel.head = shiftPos(doc.sel.head); doc.sel.anchor = shiftPos(doc.sel.anchor);
|
2336 |
+
doc.sel.from = shiftPos(doc.sel.from); doc.sel.to = shiftPos(doc.sel.to);
|
2337 |
+
}
|
2338 |
+
|
2339 |
+
function makeChangeSingleDoc(doc, change, selAfter, spans) {
|
2340 |
+
if (doc.cm && !doc.cm.curOp)
|
2341 |
+
return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans);
|
2342 |
+
|
2343 |
+
if (change.to.line < doc.first) {
|
2344 |
+
shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));
|
2345 |
+
return;
|
2346 |
+
}
|
2347 |
+
if (change.from.line > doc.lastLine()) return;
|
2348 |
+
|
2349 |
+
// Clip the change to the size of this doc
|
2350 |
+
if (change.from.line < doc.first) {
|
2351 |
+
var shift = change.text.length - 1 - (doc.first - change.from.line);
|
2352 |
+
shiftDoc(doc, shift);
|
2353 |
+
change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),
|
2354 |
+
text: [lst(change.text)], origin: change.origin};
|
2355 |
+
}
|
2356 |
+
var last = doc.lastLine();
|
2357 |
+
if (change.to.line > last) {
|
2358 |
+
change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),
|
2359 |
+
text: [change.text[0]], origin: change.origin};
|
2360 |
+
}
|
2361 |
+
|
2362 |
+
change.removed = getBetween(doc, change.from, change.to);
|
2363 |
+
|
2364 |
+
if (!selAfter) selAfter = computeSelAfterChange(doc, change, null);
|
2365 |
+
if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans, selAfter);
|
2366 |
+
else updateDoc(doc, change, spans, selAfter);
|
2367 |
+
}
|
2368 |
+
|
2369 |
+
function makeChangeSingleDocInEditor(cm, change, spans, selAfter) {
|
2370 |
+
var doc = cm.doc, display = cm.display, from = change.from, to = change.to;
|
2371 |
+
|
2372 |
+
var recomputeMaxLength = false, checkWidthStart = from.line;
|
2373 |
+
if (!cm.options.lineWrapping) {
|
2374 |
+
checkWidthStart = lineNo(visualLine(doc, getLine(doc, from.line)));
|
2375 |
+
doc.iter(checkWidthStart, to.line + 1, function(line) {
|
2376 |
+
if (line == display.maxLine) {
|
2377 |
+
recomputeMaxLength = true;
|
2378 |
+
return true;
|
2379 |
+
}
|
2380 |
+
});
|
2381 |
+
}
|
2382 |
+
|
2383 |
+
if (!posLess(doc.sel.head, change.from) && !posLess(change.to, doc.sel.head))
|
2384 |
+
cm.curOp.cursorActivity = true;
|
2385 |
+
|
2386 |
+
updateDoc(doc, change, spans, selAfter, estimateHeight(cm));
|
2387 |
+
|
2388 |
+
if (!cm.options.lineWrapping) {
|
2389 |
+
doc.iter(checkWidthStart, from.line + change.text.length, function(line) {
|
2390 |
+
var len = lineLength(doc, line);
|
2391 |
+
if (len > display.maxLineLength) {
|
2392 |
+
display.maxLine = line;
|
2393 |
+
display.maxLineLength = len;
|
2394 |
+
display.maxLineChanged = true;
|
2395 |
+
recomputeMaxLength = false;
|
2396 |
+
}
|
2397 |
+
});
|
2398 |
+
if (recomputeMaxLength) cm.curOp.updateMaxLine = true;
|
2399 |
+
}
|
2400 |
+
|
2401 |
+
// Adjust frontier, schedule worker
|
2402 |
+
doc.frontier = Math.min(doc.frontier, from.line);
|
2403 |
+
startWorker(cm, 400);
|
2404 |
+
|
2405 |
+
var lendiff = change.text.length - (to.line - from.line) - 1;
|
2406 |
+
// Remember that these lines changed, for updating the display
|
2407 |
+
regChange(cm, from.line, to.line + 1, lendiff);
|
2408 |
+
|
2409 |
+
if (hasHandler(cm, "change")) {
|
2410 |
+
var changeObj = {from: from, to: to,
|
2411 |
+
text: change.text,
|
2412 |
+
removed: change.removed,
|
2413 |
+
origin: change.origin};
|
2414 |
+
if (cm.curOp.textChanged) {
|
2415 |
+
for (var cur = cm.curOp.textChanged; cur.next; cur = cur.next) {}
|
2416 |
+
cur.next = changeObj;
|
2417 |
+
} else cm.curOp.textChanged = changeObj;
|
2418 |
+
}
|
2419 |
+
}
|
2420 |
+
|
2421 |
+
function replaceRange(doc, code, from, to, origin) {
|
2422 |
+
if (!to) to = from;
|
2423 |
+
if (posLess(to, from)) { var tmp = to; to = from; from = tmp; }
|
2424 |
+
if (typeof code == "string") code = splitLines(code);
|
2425 |
+
makeChange(doc, {from: from, to: to, text: code, origin: origin}, null);
|
2426 |
+
}
|
2427 |
+
|
2428 |
+
// POSITION OBJECT
|
2429 |
+
|
2430 |
+
function Pos(line, ch) {
|
2431 |
+
if (!(this instanceof Pos)) return new Pos(line, ch);
|
2432 |
+
this.line = line; this.ch = ch;
|
2433 |
+
}
|
2434 |
+
CodeMirror.Pos = Pos;
|
2435 |
+
|
2436 |
+
function posEq(a, b) {return a.line == b.line && a.ch == b.ch;}
|
2437 |
+
function posLess(a, b) {return a.line < b.line || (a.line == b.line && a.ch < b.ch);}
|
2438 |
+
function copyPos(x) {return Pos(x.line, x.ch);}
|
2439 |
+
|
2440 |
+
// SELECTION
|
2441 |
+
|
2442 |
+
function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));}
|
2443 |
+
function clipPos(doc, pos) {
|
2444 |
+
if (pos.line < doc.first) return Pos(doc.first, 0);
|
2445 |
+
var last = doc.first + doc.size - 1;
|
2446 |
+
if (pos.line > last) return Pos(last, getLine(doc, last).text.length);
|
2447 |
+
return clipToLen(pos, getLine(doc, pos.line).text.length);
|
2448 |
+
}
|
2449 |
+
function clipToLen(pos, linelen) {
|
2450 |
+
var ch = pos.ch;
|
2451 |
+
if (ch == null || ch > linelen) return Pos(pos.line, linelen);
|
2452 |
+
else if (ch < 0) return Pos(pos.line, 0);
|
2453 |
+
else return pos;
|
2454 |
+
}
|
2455 |
+
function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;}
|
2456 |
+
|
2457 |
+
// If shift is held, this will move the selection anchor. Otherwise,
|
2458 |
+
// it'll set the whole selection.
|
2459 |
+
function extendSelection(doc, pos, other, bias) {
|
2460 |
+
if (doc.sel.shift || doc.sel.extend) {
|
2461 |
+
var anchor = doc.sel.anchor;
|
2462 |
+
if (other) {
|
2463 |
+
var posBefore = posLess(pos, anchor);
|
2464 |
+
if (posBefore != posLess(other, anchor)) {
|
2465 |
+
anchor = pos;
|
2466 |
+
pos = other;
|
2467 |
+
} else if (posBefore != posLess(pos, other)) {
|
2468 |
+
pos = other;
|
2469 |
+
}
|
2470 |
+
}
|
2471 |
+
setSelection(doc, anchor, pos, bias);
|
2472 |
+
} else {
|
2473 |
+
setSelection(doc, pos, other || pos, bias);
|
2474 |
+
}
|
2475 |
+
if (doc.cm) doc.cm.curOp.userSelChange = true;
|
2476 |
+
}
|
2477 |
+
|
2478 |
+
function filterSelectionChange(doc, anchor, head) {
|
2479 |
+
var obj = {anchor: anchor, head: head};
|
2480 |
+
signal(doc, "beforeSelectionChange", doc, obj);
|
2481 |
+
if (doc.cm) signal(doc.cm, "beforeSelectionChange", doc.cm, obj);
|
2482 |
+
obj.anchor = clipPos(doc, obj.anchor); obj.head = clipPos(doc, obj.head);
|
2483 |
+
return obj;
|
2484 |
+
}
|
2485 |
+
|
2486 |
+
// Update the selection. Last two args are only used by
|
2487 |
+
// updateDoc, since they have to be expressed in the line
|
2488 |
+
// numbers before the update.
|
2489 |
+
function setSelection(doc, anchor, head, bias, checkAtomic) {
|
2490 |
+
if (!checkAtomic && hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) {
|
2491 |
+
var filtered = filterSelectionChange(doc, anchor, head);
|
2492 |
+
head = filtered.head;
|
2493 |
+
anchor = filtered.anchor;
|
2494 |
+
}
|
2495 |
+
|
2496 |
+
var sel = doc.sel;
|
2497 |
+
sel.goalColumn = null;
|
2498 |
+
// Skip over atomic spans.
|
2499 |
+
if (checkAtomic || !posEq(anchor, sel.anchor))
|
2500 |
+
anchor = skipAtomic(doc, anchor, bias, checkAtomic != "push");
|
2501 |
+
if (checkAtomic || !posEq(head, sel.head))
|
2502 |
+
head = skipAtomic(doc, head, bias, checkAtomic != "push");
|
2503 |
+
|
2504 |
+
if (posEq(sel.anchor, anchor) && posEq(sel.head, head)) return;
|
2505 |
+
|
2506 |
+
sel.anchor = anchor; sel.head = head;
|
2507 |
+
var inv = posLess(head, anchor);
|
2508 |
+
sel.from = inv ? head : anchor;
|
2509 |
+
sel.to = inv ? anchor : head;
|
2510 |
+
|
2511 |
+
if (doc.cm)
|
2512 |
+
doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged =
|
2513 |
+
doc.cm.curOp.cursorActivity = true;
|
2514 |
+
|
2515 |
+
signalLater(doc, "cursorActivity", doc);
|
2516 |
+
}
|
2517 |
+
|
2518 |
+
function reCheckSelection(cm) {
|
2519 |
+
setSelection(cm.doc, cm.doc.sel.from, cm.doc.sel.to, null, "push");
|
2520 |
+
}
|
2521 |
+
|
2522 |
+
function skipAtomic(doc, pos, bias, mayClear) {
|
2523 |
+
var flipped = false, curPos = pos;
|
2524 |
+
var dir = bias || 1;
|
2525 |
+
doc.cantEdit = false;
|
2526 |
+
search: for (;;) {
|
2527 |
+
var line = getLine(doc, curPos.line);
|
2528 |
+
if (line.markedSpans) {
|
2529 |
+
for (var i = 0; i < line.markedSpans.length; ++i) {
|
2530 |
+
var sp = line.markedSpans[i], m = sp.marker;
|
2531 |
+
if ((sp.from == null || (m.inclusiveLeft ? sp.from <= curPos.ch : sp.from < curPos.ch)) &&
|
2532 |
+
(sp.to == null || (m.inclusiveRight ? sp.to >= curPos.ch : sp.to > curPos.ch))) {
|
2533 |
+
if (mayClear) {
|
2534 |
+
signal(m, "beforeCursorEnter");
|
2535 |
+
if (m.explicitlyCleared) {
|
2536 |
+
if (!line.markedSpans) break;
|
2537 |
+
else {--i; continue;}
|
2538 |
+
}
|
2539 |
+
}
|
2540 |
+
if (!m.atomic) continue;
|
2541 |
+
var newPos = m.find()[dir < 0 ? "from" : "to"];
|
2542 |
+
if (posEq(newPos, curPos)) {
|
2543 |
+
newPos.ch += dir;
|
2544 |
+
if (newPos.ch < 0) {
|
2545 |
+
if (newPos.line > doc.first) newPos = clipPos(doc, Pos(newPos.line - 1));
|
2546 |
+
else newPos = null;
|
2547 |
+
} else if (newPos.ch > line.text.length) {
|
2548 |
+
if (newPos.line < doc.first + doc.size - 1) newPos = Pos(newPos.line + 1, 0);
|
2549 |
+
else newPos = null;
|
2550 |
+
}
|
2551 |
+
if (!newPos) {
|
2552 |
+
if (flipped) {
|
2553 |
+
// Driven in a corner -- no valid cursor position found at all
|
2554 |
+
// -- try again *with* clearing, if we didn't already
|
2555 |
+
if (!mayClear) return skipAtomic(doc, pos, bias, true);
|
2556 |
+
// Otherwise, turn off editing until further notice, and return the start of the doc
|
2557 |
+
doc.cantEdit = true;
|
2558 |
+
return Pos(doc.first, 0);
|
2559 |
+
}
|
2560 |
+
flipped = true; newPos = pos; dir = -dir;
|
2561 |
+
}
|
2562 |
+
}
|
2563 |
+
curPos = newPos;
|
2564 |
+
continue search;
|
2565 |
+
}
|
2566 |
+
}
|
2567 |
+
}
|
2568 |
+
return curPos;
|
2569 |
+
}
|
2570 |
+
}
|
2571 |
+
|
2572 |
+
// SCROLLING
|
2573 |
+
|
2574 |
+
function scrollCursorIntoView(cm) {
|
2575 |
+
var coords = scrollPosIntoView(cm, cm.doc.sel.head, cm.options.cursorScrollMargin);
|
2576 |
+
if (!cm.state.focused) return;
|
2577 |
+
var display = cm.display, box = getRect(display.sizer), doScroll = null;
|
2578 |
+
if (coords.top + box.top < 0) doScroll = true;
|
2579 |
+
else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false;
|
2580 |
+
if (doScroll != null && !phantom) {
|
2581 |
+
var hidden = display.cursor.style.display == "none";
|
2582 |
+
if (hidden) {
|
2583 |
+
display.cursor.style.display = "";
|
2584 |
+
display.cursor.style.left = coords.left + "px";
|
2585 |
+
display.cursor.style.top = (coords.top - display.viewOffset) + "px";
|
2586 |
+
}
|
2587 |
+
display.cursor.scrollIntoView(doScroll);
|
2588 |
+
if (hidden) display.cursor.style.display = "none";
|
2589 |
+
}
|
2590 |
+
}
|
2591 |
+
|
2592 |
+
function scrollPosIntoView(cm, pos, margin) {
|
2593 |
+
if (margin == null) margin = 0;
|
2594 |
+
for (;;) {
|
2595 |
+
var changed = false, coords = cursorCoords(cm, pos);
|
2596 |
+
var scrollPos = calculateScrollPos(cm, coords.left, coords.top - margin, coords.left, coords.bottom + margin);
|
2597 |
+
var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;
|
2598 |
+
if (scrollPos.scrollTop != null) {
|
2599 |
+
setScrollTop(cm, scrollPos.scrollTop);
|
2600 |
+
if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true;
|
2601 |
+
}
|
2602 |
+
if (scrollPos.scrollLeft != null) {
|
2603 |
+
setScrollLeft(cm, scrollPos.scrollLeft);
|
2604 |
+
if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true;
|
2605 |
+
}
|
2606 |
+
if (!changed) return coords;
|
2607 |
+
}
|
2608 |
+
}
|
2609 |
+
|
2610 |
+
function scrollIntoView(cm, x1, y1, x2, y2) {
|
2611 |
+
var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2);
|
2612 |
+
if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop);
|
2613 |
+
if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft);
|
2614 |
+
}
|
2615 |
+
|
2616 |
+
function calculateScrollPos(cm, x1, y1, x2, y2) {
|
2617 |
+
var display = cm.display, snapMargin = textHeight(cm.display);
|
2618 |
+
if (y1 < 0) y1 = 0;
|
2619 |
+
var screen = display.scroller.clientHeight - scrollerCutOff, screentop = display.scroller.scrollTop, result = {};
|
2620 |
+
var docBottom = cm.doc.height + paddingVert(display);
|
2621 |
+
var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin;
|
2622 |
+
if (y1 < screentop) {
|
2623 |
+
result.scrollTop = atTop ? 0 : y1;
|
2624 |
+
} else if (y2 > screentop + screen) {
|
2625 |
+
var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen);
|
2626 |
+
if (newTop != screentop) result.scrollTop = newTop;
|
2627 |
+
}
|
2628 |
+
|
2629 |
+
var screenw = display.scroller.clientWidth - scrollerCutOff, screenleft = display.scroller.scrollLeft;
|
2630 |
+
x1 += display.gutters.offsetWidth; x2 += display.gutters.offsetWidth;
|
2631 |
+
var gutterw = display.gutters.offsetWidth;
|
2632 |
+
var atLeft = x1 < gutterw + 10;
|
2633 |
+
if (x1 < screenleft + gutterw || atLeft) {
|
2634 |
+
if (atLeft) x1 = 0;
|
2635 |
+
result.scrollLeft = Math.max(0, x1 - 10 - gutterw);
|
2636 |
+
} else if (x2 > screenw + screenleft - 3) {
|
2637 |
+
result.scrollLeft = x2 + 10 - screenw;
|
2638 |
+
}
|
2639 |
+
return result;
|
2640 |
+
}
|
2641 |
+
|
2642 |
+
function updateScrollPos(cm, left, top) {
|
2643 |
+
cm.curOp.updateScrollPos = {scrollLeft: left == null ? cm.doc.scrollLeft : left,
|
2644 |
+
scrollTop: top == null ? cm.doc.scrollTop : top};
|
2645 |
+
}
|
2646 |
+
|
2647 |
+
function addToScrollPos(cm, left, top) {
|
2648 |
+
var pos = cm.curOp.updateScrollPos || (cm.curOp.updateScrollPos = {scrollLeft: cm.doc.scrollLeft, scrollTop: cm.doc.scrollTop});
|
2649 |
+
var scroll = cm.display.scroller;
|
2650 |
+
pos.scrollTop = Math.max(0, Math.min(scroll.scrollHeight - scroll.clientHeight, pos.scrollTop + top));
|
2651 |
+
pos.scrollLeft = Math.max(0, Math.min(scroll.scrollWidth - scroll.clientWidth, pos.scrollLeft + left));
|
2652 |
+
}
|
2653 |
+
|
2654 |
+
// API UTILITIES
|
2655 |
+
|
2656 |
+
function indentLine(cm, n, how, aggressive) {
|
2657 |
+
var doc = cm.doc;
|
2658 |
+
if (how == null) how = "add";
|
2659 |
+
if (how == "smart") {
|
2660 |
+
if (!cm.doc.mode.indent) how = "prev";
|
2661 |
+
else var state = getStateBefore(cm, n);
|
2662 |
+
}
|
2663 |
+
|
2664 |
+
var tabSize = cm.options.tabSize;
|
2665 |
+
var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);
|
2666 |
+
var curSpaceString = line.text.match(/^\s*/)[0], indentation;
|
2667 |
+
if (how == "smart") {
|
2668 |
+
indentation = cm.doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);
|
2669 |
+
if (indentation == Pass) {
|
2670 |
+
if (!aggressive) return;
|
2671 |
+
how = "prev";
|
2672 |
+
}
|
2673 |
+
}
|
2674 |
+
if (how == "prev") {
|
2675 |
+
if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize);
|
2676 |
+
else indentation = 0;
|
2677 |
+
} else if (how == "add") {
|
2678 |
+
indentation = curSpace + cm.options.indentUnit;
|
2679 |
+
} else if (how == "subtract") {
|
2680 |
+
indentation = curSpace - cm.options.indentUnit;
|
2681 |
+
} else if (typeof how == "number") {
|
2682 |
+
indentation = curSpace + how;
|
2683 |
+
}
|
2684 |
+
indentation = Math.max(0, indentation);
|
2685 |
+
|
2686 |
+
var indentString = "", pos = 0;
|
2687 |
+
if (cm.options.indentWithTabs)
|
2688 |
+
for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";}
|
2689 |
+
if (pos < indentation) indentString += spaceStr(indentation - pos);
|
2690 |
+
|
2691 |
+
if (indentString != curSpaceString)
|
2692 |
+
replaceRange(cm.doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input");
|
2693 |
+
line.stateAfter = null;
|
2694 |
+
}
|
2695 |
+
|
2696 |
+
function changeLine(cm, handle, op) {
|
2697 |
+
var no = handle, line = handle, doc = cm.doc;
|
2698 |
+
if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle));
|
2699 |
+
else no = lineNo(handle);
|
2700 |
+
if (no == null) return null;
|
2701 |
+
if (op(line, no)) regChange(cm, no, no + 1);
|
2702 |
+
else return null;
|
2703 |
+
return line;
|
2704 |
+
}
|
2705 |
+
|
2706 |
+
function findPosH(doc, pos, dir, unit, visually) {
|
2707 |
+
var line = pos.line, ch = pos.ch, origDir = dir;
|
2708 |
+
var lineObj = getLine(doc, line);
|
2709 |
+
var possible = true;
|
2710 |
+
function findNextLine() {
|
2711 |
+
var l = line + dir;
|
2712 |
+
if (l < doc.first || l >= doc.first + doc.size) return (possible = false);
|
2713 |
+
line = l;
|
2714 |
+
return lineObj = getLine(doc, l);
|
2715 |
+
}
|
2716 |
+
function moveOnce(boundToLine) {
|
2717 |
+
var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true);
|
2718 |
+
if (next == null) {
|
2719 |
+
if (!boundToLine && findNextLine()) {
|
2720 |
+
if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj);
|
2721 |
+
else ch = dir < 0 ? lineObj.text.length : 0;
|
2722 |
+
} else return (possible = false);
|
2723 |
+
} else ch = next;
|
2724 |
+
return true;
|
2725 |
+
}
|
2726 |
+
|
2727 |
+
if (unit == "char") moveOnce();
|
2728 |
+
else if (unit == "column") moveOnce(true);
|
2729 |
+
else if (unit == "word" || unit == "group") {
|
2730 |
+
var sawType = null, group = unit == "group";
|
2731 |
+
for (var first = true;; first = false) {
|
2732 |
+
if (dir < 0 && !moveOnce(!first)) break;
|
2733 |
+
var cur = lineObj.text.charAt(ch) || "\n";
|
2734 |
+
var type = isWordChar(cur) ? "w"
|
2735 |
+
: !group ? null
|
2736 |
+
: /\s/.test(cur) ? null
|
2737 |
+
: "p";
|
2738 |
+
if (sawType && sawType != type) {
|
2739 |
+
if (dir < 0) {dir = 1; moveOnce();}
|
2740 |
+
break;
|
2741 |
+
}
|
2742 |
+
if (type) sawType = type;
|
2743 |
+
if (dir > 0 && !moveOnce(!first)) break;
|
2744 |
+
}
|
2745 |
+
}
|
2746 |
+
var result = skipAtomic(doc, Pos(line, ch), origDir, true);
|
2747 |
+
if (!possible) result.hitSide = true;
|
2748 |
+
return result;
|
2749 |
+
}
|
2750 |
+
|
2751 |
+
function findPosV(cm, pos, dir, unit) {
|
2752 |
+
var doc = cm.doc, x = pos.left, y;
|
2753 |
+
if (unit == "page") {
|
2754 |
+
var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);
|
2755 |
+
y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display));
|
2756 |
+
} else if (unit == "line") {
|
2757 |
+
y = dir > 0 ? pos.bottom + 3 : pos.top - 3;
|
2758 |
+
}
|
2759 |
+
for (;;) {
|
2760 |
+
var target = coordsChar(cm, x, y);
|
2761 |
+
if (!target.outside) break;
|
2762 |
+
if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; }
|
2763 |
+
y += dir * 5;
|
2764 |
+
}
|
2765 |
+
return target;
|
2766 |
+
}
|
2767 |
+
|
2768 |
+
function findWordAt(line, pos) {
|
2769 |
+
var start = pos.ch, end = pos.ch;
|
2770 |
+
if (line) {
|
2771 |
+
if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end;
|
2772 |
+
var startChar = line.charAt(start);
|
2773 |
+
var check = isWordChar(startChar) ? isWordChar
|
2774 |
+
: /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);}
|
2775 |
+
: function(ch) {return !/\s/.test(ch) && !isWordChar(ch);};
|
2776 |
+
while (start > 0 && check(line.charAt(start - 1))) --start;
|
2777 |
+
while (end < line.length && check(line.charAt(end))) ++end;
|
2778 |
+
}
|
2779 |
+
return {from: Pos(pos.line, start), to: Pos(pos.line, end)};
|
2780 |
+
}
|
2781 |
+
|
2782 |
+
function selectLine(cm, line) {
|
2783 |
+
extendSelection(cm.doc, Pos(line, 0), clipPos(cm.doc, Pos(line + 1, 0)));
|
2784 |
+
}
|
2785 |
+
|
2786 |
+
// PROTOTYPE
|
2787 |
+
|
2788 |
+
// The publicly visible API. Note that operation(null, f) means
|
2789 |
+
// 'wrap f in an operation, performed on its `this` parameter'
|
2790 |
+
|
2791 |
+
CodeMirror.prototype = {
|
2792 |
+
constructor: CodeMirror,
|
2793 |
+
focus: function(){window.focus(); focusInput(this); onFocus(this); fastPoll(this);},
|
2794 |
+
|
2795 |
+
setOption: function(option, value) {
|
2796 |
+
var options = this.options, old = options[option];
|
2797 |
+
if (options[option] == value && option != "mode") return;
|
2798 |
+
options[option] = value;
|
2799 |
+
if (optionHandlers.hasOwnProperty(option))
|
2800 |
+
operation(this, optionHandlers[option])(this, value, old);
|
2801 |
+
},
|
2802 |
+
|
2803 |
+
getOption: function(option) {return this.options[option];},
|
2804 |
+
getDoc: function() {return this.doc;},
|
2805 |
+
|
2806 |
+
addKeyMap: function(map, bottom) {
|
2807 |
+
this.state.keyMaps[bottom ? "push" : "unshift"](map);
|
2808 |
+
},
|
2809 |
+
removeKeyMap: function(map) {
|
2810 |
+
var maps = this.state.keyMaps;
|
2811 |
+
for (var i = 0; i < maps.length; ++i)
|
2812 |
+
if (maps[i] == map || (typeof maps[i] != "string" && maps[i].name == map)) {
|
2813 |
+
maps.splice(i, 1);
|
2814 |
+
return true;
|
2815 |
+
}
|
2816 |
+
},
|
2817 |
+
|
2818 |
+
addOverlay: operation(null, function(spec, options) {
|
2819 |
+
var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);
|
2820 |
+
if (mode.startState) throw new Error("Overlays may not be stateful.");
|
2821 |
+
this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque});
|
2822 |
+
this.state.modeGen++;
|
2823 |
+
regChange(this);
|
2824 |
+
}),
|
2825 |
+
removeOverlay: operation(null, function(spec) {
|
2826 |
+
var overlays = this.state.overlays;
|
2827 |
+
for (var i = 0; i < overlays.length; ++i) {
|
2828 |
+
var cur = overlays[i].modeSpec;
|
2829 |
+
if (cur == spec || typeof spec == "string" && cur.name == spec) {
|
2830 |
+
overlays.splice(i, 1);
|
2831 |
+
this.state.modeGen++;
|
2832 |
+
regChange(this);
|
2833 |
+
return;
|
2834 |
+
}
|
2835 |
+
}
|
2836 |
+
}),
|
2837 |
+
|
2838 |
+
indentLine: operation(null, function(n, dir, aggressive) {
|
2839 |
+
if (typeof dir != "string" && typeof dir != "number") {
|
2840 |
+
if (dir == null) dir = this.options.smartIndent ? "smart" : "prev";
|
2841 |
+
else dir = dir ? "add" : "subtract";
|
2842 |
+
}
|
2843 |
+
if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive);
|
2844 |
+
}),
|
2845 |
+
indentSelection: operation(null, function(how) {
|
2846 |
+
var sel = this.doc.sel;
|
2847 |
+
if (posEq(sel.from, sel.to)) return indentLine(this, sel.from.line, how);
|
2848 |
+
var e = sel.to.line - (sel.to.ch ? 0 : 1);
|
2849 |
+
for (var i = sel.from.line; i <= e; ++i) indentLine(this, i, how);
|
2850 |
+
}),
|
2851 |
+
|
2852 |
+
// Fetch the parser token for a given character. Useful for hacks
|
2853 |
+
// that want to inspect the mode state (say, for completion).
|
2854 |
+
getTokenAt: function(pos, precise) {
|
2855 |
+
var doc = this.doc;
|
2856 |
+
pos = clipPos(doc, pos);
|
2857 |
+
var state = getStateBefore(this, pos.line, precise), mode = this.doc.mode;
|
2858 |
+
var line = getLine(doc, pos.line);
|
2859 |
+
var stream = new StringStream(line.text, this.options.tabSize);
|
2860 |
+
while (stream.pos < pos.ch && !stream.eol()) {
|
2861 |
+
stream.start = stream.pos;
|
2862 |
+
var style = mode.token(stream, state);
|
2863 |
+
}
|
2864 |
+
return {start: stream.start,
|
2865 |
+
end: stream.pos,
|
2866 |
+
string: stream.current(),
|
2867 |
+
className: style || null, // Deprecated, use 'type' instead
|
2868 |
+
type: style || null,
|
2869 |
+
state: state};
|
2870 |
+
},
|
2871 |
+
|
2872 |
+
getTokenTypeAt: function(pos) {
|
2873 |
+
pos = clipPos(this.doc, pos);
|
2874 |
+
var styles = getLineStyles(this, getLine(this.doc, pos.line));
|
2875 |
+
var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;
|
2876 |
+
if (ch == 0) return styles[2];
|
2877 |
+
for (;;) {
|
2878 |
+
var mid = (before + after) >> 1;
|
2879 |
+
if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid;
|
2880 |
+
else if (styles[mid * 2 + 1] < ch) before = mid + 1;
|
2881 |
+
else return styles[mid * 2 + 2];
|
2882 |
+
}
|
2883 |
+
},
|
2884 |
+
|
2885 |
+
getModeAt: function(pos) {
|
2886 |
+
var mode = this.doc.mode;
|
2887 |
+
if (!mode.innerMode) return mode;
|
2888 |
+
return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode;
|
2889 |
+
},
|
2890 |
+
|
2891 |
+
getHelper: function(pos, type) {
|
2892 |
+
if (!helpers.hasOwnProperty(type)) return;
|
2893 |
+
var help = helpers[type], mode = this.getModeAt(pos);
|
2894 |
+
return mode[type] && help[mode[type]] ||
|
2895 |
+
mode.helperType && help[mode.helperType] ||
|
2896 |
+
help[mode.name];
|
2897 |
+
},
|
2898 |
+
|
2899 |
+
getStateAfter: function(line, precise) {
|
2900 |
+
var doc = this.doc;
|
2901 |
+
line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);
|
2902 |
+
return getStateBefore(this, line + 1, precise);
|
2903 |
+
},
|
2904 |
+
|
2905 |
+
cursorCoords: function(start, mode) {
|
2906 |
+
var pos, sel = this.doc.sel;
|
2907 |
+
if (start == null) pos = sel.head;
|
2908 |
+
else if (typeof start == "object") pos = clipPos(this.doc, start);
|
2909 |
+
else pos = start ? sel.from : sel.to;
|
2910 |
+
return cursorCoords(this, pos, mode || "page");
|
2911 |
+
},
|
2912 |
+
|
2913 |
+
charCoords: function(pos, mode) {
|
2914 |
+
return charCoords(this, clipPos(this.doc, pos), mode || "page");
|
2915 |
+
},
|
2916 |
+
|
2917 |
+
coordsChar: function(coords, mode) {
|
2918 |
+
coords = fromCoordSystem(this, coords, mode || "page");
|
2919 |
+
return coordsChar(this, coords.left, coords.top);
|
2920 |
+
},
|
2921 |
+
|
2922 |
+
lineAtHeight: function(height, mode) {
|
2923 |
+
height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top;
|
2924 |
+
return lineAtHeight(this.doc, height + this.display.viewOffset);
|
2925 |
+
},
|
2926 |
+
heightAtLine: function(line, mode) {
|
2927 |
+
var end = false, last = this.doc.first + this.doc.size - 1;
|
2928 |
+
if (line < this.doc.first) line = this.doc.first;
|
2929 |
+
else if (line > last) { line = last; end = true; }
|
2930 |
+
var lineObj = getLine(this.doc, line);
|
2931 |
+
return intoCoordSystem(this, getLine(this.doc, line), {top: 0, left: 0}, mode || "page").top +
|
2932 |
+
(end ? lineObj.height : 0);
|
2933 |
+
},
|
2934 |
+
|
2935 |
+
defaultTextHeight: function() { return textHeight(this.display); },
|
2936 |
+
defaultCharWidth: function() { return charWidth(this.display); },
|
2937 |
+
|
2938 |
+
setGutterMarker: operation(null, function(line, gutterID, value) {
|
2939 |
+
return changeLine(this, line, function(line) {
|
2940 |
+
var markers = line.gutterMarkers || (line.gutterMarkers = {});
|
2941 |
+
markers[gutterID] = value;
|
2942 |
+
if (!value && isEmpty(markers)) line.gutterMarkers = null;
|
2943 |
+
return true;
|
2944 |
+
});
|
2945 |
+
}),
|
2946 |
+
|
2947 |
+
clearGutter: operation(null, function(gutterID) {
|
2948 |
+
var cm = this, doc = cm.doc, i = doc.first;
|
2949 |
+
doc.iter(function(line) {
|
2950 |
+
if (line.gutterMarkers && line.gutterMarkers[gutterID]) {
|
2951 |
+
line.gutterMarkers[gutterID] = null;
|
2952 |
+
regChange(cm, i, i + 1);
|
2953 |
+
if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null;
|
2954 |
+
}
|
2955 |
+
++i;
|
2956 |
+
});
|
2957 |
+
}),
|
2958 |
+
|
2959 |
+
addLineClass: operation(null, function(handle, where, cls) {
|
2960 |
+
return changeLine(this, handle, function(line) {
|
2961 |
+
var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass";
|
2962 |
+
if (!line[prop]) line[prop] = cls;
|
2963 |
+
else if (new RegExp("(?:^|\\s)" + cls + "(?:$|\\s)").test(line[prop])) return false;
|
2964 |
+
else line[prop] += " " + cls;
|
2965 |
+
return true;
|
2966 |
+
});
|
2967 |
+
}),
|
2968 |
+
|
2969 |
+
removeLineClass: operation(null, function(handle, where, cls) {
|
2970 |
+
return changeLine(this, handle, function(line) {
|
2971 |
+
var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass";
|
2972 |
+
var cur = line[prop];
|
2973 |
+
if (!cur) return false;
|
2974 |
+
else if (cls == null) line[prop] = null;
|
2975 |
+
else {
|
2976 |
+
var found = cur.match(new RegExp("(?:^|\\s+)" + cls + "(?:$|\\s+)"));
|
2977 |
+
if (!found) return false;
|
2978 |
+
var end = found.index + found[0].length;
|
2979 |
+
line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null;
|
2980 |
+
}
|
2981 |
+
return true;
|
2982 |
+
});
|
2983 |
+
}),
|
2984 |
+
|
2985 |
+
addLineWidget: operation(null, function(handle, node, options) {
|
2986 |
+
return addLineWidget(this, handle, node, options);
|
2987 |
+
}),
|
2988 |
+
|
2989 |
+
removeLineWidget: function(widget) { widget.clear(); },
|
2990 |
+
|
2991 |
+
lineInfo: function(line) {
|
2992 |
+
if (typeof line == "number") {
|
2993 |
+
if (!isLine(this.doc, line)) return null;
|
2994 |
+
var n = line;
|
2995 |
+
line = getLine(this.doc, line);
|
2996 |
+
if (!line) return null;
|
2997 |
+
} else {
|
2998 |
+
var n = lineNo(line);
|
2999 |
+
if (n == null) return null;
|
3000 |
+
}
|
3001 |
+
return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,
|
3002 |
+
textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,
|
3003 |
+
widgets: line.widgets};
|
3004 |
+
},
|
3005 |
+
|
3006 |
+
getViewport: function() { return {from: this.display.showingFrom, to: this.display.showingTo};},
|
3007 |
+
|
3008 |
+
addWidget: function(pos, node, scroll, vert, horiz) {
|
3009 |
+
var display = this.display;
|
3010 |
+
pos = cursorCoords(this, clipPos(this.doc, pos));
|
3011 |
+
var top = pos.bottom, left = pos.left;
|
3012 |
+
node.style.position = "absolute";
|
3013 |
+
display.sizer.appendChild(node);
|
3014 |
+
if (vert == "over") {
|
3015 |
+
top = pos.top;
|
3016 |
+
} else if (vert == "above" || vert == "near") {
|
3017 |
+
var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),
|
3018 |
+
hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);
|
3019 |
+
// Default to positioning above (if specified and possible); otherwise default to positioning below
|
3020 |
+
if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)
|
3021 |
+
top = pos.top - node.offsetHeight;
|
3022 |
+
else if (pos.bottom + node.offsetHeight <= vspace)
|
3023 |
+
top = pos.bottom;
|
3024 |
+
if (left + node.offsetWidth > hspace)
|
3025 |
+
left = hspace - node.offsetWidth;
|
3026 |
+
}
|
3027 |
+
node.style.top = top + "px";
|
3028 |
+
node.style.left = node.style.right = "";
|
3029 |
+
if (horiz == "right") {
|
3030 |
+
left = display.sizer.clientWidth - node.offsetWidth;
|
3031 |
+
node.style.right = "0px";
|
3032 |
+
} else {
|
3033 |
+
if (horiz == "left") left = 0;
|
3034 |
+
else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2;
|
3035 |
+
node.style.left = left + "px";
|
3036 |
+
}
|
3037 |
+
if (scroll)
|
3038 |
+
scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight);
|
3039 |
+
},
|
3040 |
+
|
3041 |
+
triggerOnKeyDown: operation(null, onKeyDown),
|
3042 |
+
|
3043 |
+
execCommand: function(cmd) {return commands[cmd](this);},
|
3044 |
+
|
3045 |
+
findPosH: function(from, amount, unit, visually) {
|
3046 |
+
var dir = 1;
|
3047 |
+
if (amount < 0) { dir = -1; amount = -amount; }
|
3048 |
+
for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) {
|
3049 |
+
cur = findPosH(this.doc, cur, dir, unit, visually);
|
3050 |
+
if (cur.hitSide) break;
|
3051 |
+
}
|
3052 |
+
return cur;
|
3053 |
+
},
|
3054 |
+
|
3055 |
+
moveH: operation(null, function(dir, unit) {
|
3056 |
+
var sel = this.doc.sel, pos;
|
3057 |
+
if (sel.shift || sel.extend || posEq(sel.from, sel.to))
|
3058 |
+
pos = findPosH(this.doc, sel.head, dir, unit, this.options.rtlMoveVisually);
|
3059 |
+
else
|
3060 |
+
pos = dir < 0 ? sel.from : sel.to;
|
3061 |
+
extendSelection(this.doc, pos, pos, dir);
|
3062 |
+
}),
|
3063 |
+
|
3064 |
+
deleteH: operation(null, function(dir, unit) {
|
3065 |
+
var sel = this.doc.sel;
|
3066 |
+
if (!posEq(sel.from, sel.to)) replaceRange(this.doc, "", sel.from, sel.to, "+delete");
|
3067 |
+
else replaceRange(this.doc, "", sel.from, findPosH(this.doc, sel.head, dir, unit, false), "+delete");
|
3068 |
+
this.curOp.userSelChange = true;
|
3069 |
+
}),
|
3070 |
+
|
3071 |
+
findPosV: function(from, amount, unit, goalColumn) {
|
3072 |
+
var dir = 1, x = goalColumn;
|
3073 |
+
if (amount < 0) { dir = -1; amount = -amount; }
|
3074 |
+
for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) {
|
3075 |
+
var coords = cursorCoords(this, cur, "div");
|
3076 |
+
if (x == null) x = coords.left;
|
3077 |
+
else coords.left = x;
|
3078 |
+
cur = findPosV(this, coords, dir, unit);
|
3079 |
+
if (cur.hitSide) break;
|
3080 |
+
}
|
3081 |
+
return cur;
|
3082 |
+
},
|
3083 |
+
|
3084 |
+
moveV: operation(null, function(dir, unit) {
|
3085 |
+
var sel = this.doc.sel;
|
3086 |
+
var pos = cursorCoords(this, sel.head, "div");
|
3087 |
+
if (sel.goalColumn != null) pos.left = sel.goalColumn;
|
3088 |
+
var target = findPosV(this, pos, dir, unit);
|
3089 |
+
|
3090 |
+
if (unit == "page") addToScrollPos(this, 0, charCoords(this, target, "div").top - pos.top);
|
3091 |
+
extendSelection(this.doc, target, target, dir);
|
3092 |
+
sel.goalColumn = pos.left;
|
3093 |
+
}),
|
3094 |
+
|
3095 |
+
toggleOverwrite: function(value) {
|
3096 |
+
if (value != null && value == this.state.overwrite) return;
|
3097 |
+
if (this.state.overwrite = !this.state.overwrite)
|
3098 |
+
this.display.cursor.className += " CodeMirror-overwrite";
|
3099 |
+
else
|
3100 |
+
this.display.cursor.className = this.display.cursor.className.replace(" CodeMirror-overwrite", "");
|
3101 |
+
},
|
3102 |
+
hasFocus: function() { return this.state.focused; },
|
3103 |
+
|
3104 |
+
scrollTo: operation(null, function(x, y) {
|
3105 |
+
updateScrollPos(this, x, y);
|
3106 |
+
}),
|
3107 |
+
getScrollInfo: function() {
|
3108 |
+
var scroller = this.display.scroller, co = scrollerCutOff;
|
3109 |
+
return {left: scroller.scrollLeft, top: scroller.scrollTop,
|
3110 |
+
height: scroller.scrollHeight - co, width: scroller.scrollWidth - co,
|
3111 |
+
clientHeight: scroller.clientHeight - co, clientWidth: scroller.clientWidth - co};
|
3112 |
+
},
|
3113 |
+
|
3114 |
+
scrollIntoView: operation(null, function(pos, margin) {
|
3115 |
+
if (typeof pos == "number") pos = Pos(pos, 0);
|
3116 |
+
if (!margin) margin = 0;
|
3117 |
+
var coords = pos;
|
3118 |
+
|
3119 |
+
if (!pos || pos.line != null) {
|
3120 |
+
this.curOp.scrollToPos = pos ? clipPos(this.doc, pos) : this.doc.sel.head;
|
3121 |
+
this.curOp.scrollToPosMargin = margin;
|
3122 |
+
coords = cursorCoords(this, this.curOp.scrollToPos);
|
3123 |
+
}
|
3124 |
+
var sPos = calculateScrollPos(this, coords.left, coords.top - margin, coords.right, coords.bottom + margin);
|
3125 |
+
updateScrollPos(this, sPos.scrollLeft, sPos.scrollTop);
|
3126 |
+
}),
|
3127 |
+
|
3128 |
+
setSize: operation(null, function(width, height) {
|
3129 |
+
function interpret(val) {
|
3130 |
+
return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val;
|
3131 |
+
}
|
3132 |
+
if (width != null) this.display.wrapper.style.width = interpret(width);
|
3133 |
+
if (height != null) this.display.wrapper.style.height = interpret(height);
|
3134 |
+
if (this.options.lineWrapping)
|
3135 |
+
this.display.measureLineCache.length = this.display.measureLineCachePos = 0;
|
3136 |
+
this.curOp.forceUpdate = true;
|
3137 |
+
}),
|
3138 |
+
|
3139 |
+
operation: function(f){return runInOp(this, f);},
|
3140 |
+
|
3141 |
+
refresh: operation(null, function() {
|
3142 |
+
clearCaches(this);
|
3143 |
+
updateScrollPos(this, this.doc.scrollLeft, this.doc.scrollTop);
|
3144 |
+
regChange(this);
|
3145 |
+
}),
|
3146 |
+
|
3147 |
+
swapDoc: operation(null, function(doc) {
|
3148 |
+
var old = this.doc;
|
3149 |
+
old.cm = null;
|
3150 |
+
attachDoc(this, doc);
|
3151 |
+
clearCaches(this);
|
3152 |
+
resetInput(this, true);
|
3153 |
+
updateScrollPos(this, doc.scrollLeft, doc.scrollTop);
|
3154 |
+
return old;
|
3155 |
+
}),
|
3156 |
+
|
3157 |
+
getInputField: function(){return this.display.input;},
|
3158 |
+
getWrapperElement: function(){return this.display.wrapper;},
|
3159 |
+
getScrollerElement: function(){return this.display.scroller;},
|
3160 |
+
getGutterElement: function(){return this.display.gutters;}
|
3161 |
+
};
|
3162 |
+
eventMixin(CodeMirror);
|
3163 |
+
|
3164 |
+
// OPTION DEFAULTS
|
3165 |
+
|
3166 |
+
var optionHandlers = CodeMirror.optionHandlers = {};
|
3167 |
+
|
3168 |
+
// The default configuration options.
|
3169 |
+
var defaults = CodeMirror.defaults = {};
|
3170 |
+
|
3171 |
+
function option(name, deflt, handle, notOnInit) {
|
3172 |
+
CodeMirror.defaults[name] = deflt;
|
3173 |
+
if (handle) optionHandlers[name] =
|
3174 |
+
notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle;
|
3175 |
+
}
|
3176 |
+
|
3177 |
+
var Init = CodeMirror.Init = {toString: function(){return "CodeMirror.Init";}};
|
3178 |
+
|
3179 |
+
// These two are, on init, called from the constructor because they
|
3180 |
+
// have to be initialized before the editor can start at all.
|
3181 |
+
option("value", "", function(cm, val) {
|
3182 |
+
cm.setValue(val);
|
3183 |
+
}, true);
|
3184 |
+
option("mode", null, function(cm, val) {
|
3185 |
+
cm.doc.modeOption = val;
|
3186 |
+
loadMode(cm);
|
3187 |
+
}, true);
|
3188 |
+
|
3189 |
+
option("indentUnit", 2, loadMode, true);
|
3190 |
+
option("indentWithTabs", false);
|
3191 |
+
option("smartIndent", true);
|
3192 |
+
option("tabSize", 4, function(cm) {
|
3193 |
+
loadMode(cm);
|
3194 |
+
clearCaches(cm);
|
3195 |
+
regChange(cm);
|
3196 |
+
}, true);
|
3197 |
+
option("electricChars", true);
|
3198 |
+
option("rtlMoveVisually", !windows);
|
3199 |
+
|
3200 |
+
option("theme", "default", function(cm) {
|
3201 |
+
themeChanged(cm);
|
3202 |
+
guttersChanged(cm);
|
3203 |
+
}, true);
|
3204 |
+
option("keyMap", "default", keyMapChanged);
|
3205 |
+
option("extraKeys", null);
|
3206 |
+
|
3207 |
+
option("onKeyEvent", null);
|
3208 |
+
option("onDragEvent", null);
|
3209 |
+
|
3210 |
+
option("lineWrapping", false, wrappingChanged, true);
|
3211 |
+
option("gutters", [], function(cm) {
|
3212 |
+
setGuttersForLineNumbers(cm.options);
|
3213 |
+
guttersChanged(cm);
|
3214 |
+
}, true);
|
3215 |
+
option("fixedGutter", true, function(cm, val) {
|
3216 |
+
cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0";
|
3217 |
+
cm.refresh();
|
3218 |
+
}, true);
|
3219 |
+
option("coverGutterNextToScrollbar", false, updateScrollbars, true);
|
3220 |
+
option("lineNumbers", false, function(cm) {
|
3221 |
+
setGuttersForLineNumbers(cm.options);
|
3222 |
+
guttersChanged(cm);
|
3223 |
+
}, true);
|
3224 |
+
option("firstLineNumber", 1, guttersChanged, true);
|
3225 |
+
option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true);
|
3226 |
+
option("showCursorWhenSelecting", false, updateSelection, true);
|
3227 |
+
|
3228 |
+
option("readOnly", false, function(cm, val) {
|
3229 |
+
if (val == "nocursor") {onBlur(cm); cm.display.input.blur();}
|
3230 |
+
else if (!val) resetInput(cm, true);
|
3231 |
+
});
|
3232 |
+
option("dragDrop", true);
|
3233 |
+
|
3234 |
+
option("cursorBlinkRate", 530);
|
3235 |
+
option("cursorScrollMargin", 0);
|
3236 |
+
option("cursorHeight", 1);
|
3237 |
+
option("workTime", 100);
|
3238 |
+
option("workDelay", 100);
|
3239 |
+
option("flattenSpans", true);
|
3240 |
+
option("pollInterval", 100);
|
3241 |
+
option("undoDepth", 40, function(cm, val){cm.doc.history.undoDepth = val;});
|
3242 |
+
option("historyEventDelay", 500);
|
3243 |
+
option("viewportMargin", 10, function(cm){cm.refresh();}, true);
|
3244 |
+
option("maxHighlightLength", 10000, function(cm){loadMode(cm); cm.refresh();}, true);
|
3245 |
+
option("moveInputWithCursor", true, function(cm, val) {
|
3246 |
+
if (!val) cm.display.inputDiv.style.top = cm.display.inputDiv.style.left = 0;
|
3247 |
+
});
|
3248 |
+
|
3249 |
+
option("tabindex", null, function(cm, val) {
|
3250 |
+
cm.display.input.tabIndex = val || "";
|
3251 |
+
});
|
3252 |
+
option("autofocus", null);
|
3253 |
+
|
3254 |
+
// MODE DEFINITION AND QUERYING
|
3255 |
+
|
3256 |
+
// Known modes, by name and by MIME
|
3257 |
+
var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {};
|
3258 |
+
|
3259 |
+
CodeMirror.defineMode = function(name, mode) {
|
3260 |
+
if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name;
|
3261 |
+
if (arguments.length > 2) {
|
3262 |
+
mode.dependencies = [];
|
3263 |
+
for (var i = 2; i < arguments.length; ++i) mode.dependencies.push(arguments[i]);
|
3264 |
+
}
|
3265 |
+
modes[name] = mode;
|
3266 |
+
};
|
3267 |
+
|
3268 |
+
CodeMirror.defineMIME = function(mime, spec) {
|
3269 |
+
mimeModes[mime] = spec;
|
3270 |
+
};
|
3271 |
+
|
3272 |
+
CodeMirror.resolveMode = function(spec) {
|
3273 |
+
if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) {
|
3274 |
+
spec = mimeModes[spec];
|
3275 |
+
} else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) {
|
3276 |
+
var found = mimeModes[spec.name];
|
3277 |
+
spec = createObj(found, spec);
|
3278 |
+
spec.name = found.name;
|
3279 |
+
} else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) {
|
3280 |
+
return CodeMirror.resolveMode("application/xml");
|
3281 |
+
}
|
3282 |
+
if (typeof spec == "string") return {name: spec};
|
3283 |
+
else return spec || {name: "null"};
|
3284 |
+
};
|
3285 |
+
|
3286 |
+
CodeMirror.getMode = function(options, spec) {
|
3287 |
+
var spec = CodeMirror.resolveMode(spec);
|
3288 |
+
var mfactory = modes[spec.name];
|
3289 |
+
if (!mfactory) return CodeMirror.getMode(options, "text/plain");
|
3290 |
+
var modeObj = mfactory(options, spec);
|
3291 |
+
if (modeExtensions.hasOwnProperty(spec.name)) {
|
3292 |
+
var exts = modeExtensions[spec.name];
|
3293 |
+
for (var prop in exts) {
|
3294 |
+
if (!exts.hasOwnProperty(prop)) continue;
|
3295 |
+
if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop];
|
3296 |
+
modeObj[prop] = exts[prop];
|
3297 |
+
}
|
3298 |
+
}
|
3299 |
+
modeObj.name = spec.name;
|
3300 |
+
|
3301 |
+
return modeObj;
|
3302 |
+
};
|
3303 |
+
|
3304 |
+
CodeMirror.defineMode("null", function() {
|
3305 |
+
return {token: function(stream) {stream.skipToEnd();}};
|
3306 |
+
});
|
3307 |
+
CodeMirror.defineMIME("text/plain", "null");
|
3308 |
+
|
3309 |
+
var modeExtensions = CodeMirror.modeExtensions = {};
|
3310 |
+
CodeMirror.extendMode = function(mode, properties) {
|
3311 |
+
var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});
|
3312 |
+
copyObj(properties, exts);
|
3313 |
+
};
|
3314 |
+
|
3315 |
+
// EXTENSIONS
|
3316 |
+
|
3317 |
+
CodeMirror.defineExtension = function(name, func) {
|
3318 |
+
CodeMirror.prototype[name] = func;
|
3319 |
+
};
|
3320 |
+
CodeMirror.defineDocExtension = function(name, func) {
|
3321 |
+
Doc.prototype[name] = func;
|
3322 |
+
};
|
3323 |
+
CodeMirror.defineOption = option;
|
3324 |
+
|
3325 |
+
var initHooks = [];
|
3326 |
+
CodeMirror.defineInitHook = function(f) {initHooks.push(f);};
|
3327 |
+
|
3328 |
+
var helpers = CodeMirror.helpers = {};
|
3329 |
+
CodeMirror.registerHelper = function(type, name, value) {
|
3330 |
+
if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {};
|
3331 |
+
helpers[type][name] = value;
|
3332 |
+
};
|
3333 |
+
|
3334 |
+
// UTILITIES
|
3335 |
+
|
3336 |
+
CodeMirror.isWordChar = isWordChar;
|
3337 |
+
|
3338 |
+
// MODE STATE HANDLING
|
3339 |
+
|
3340 |
+
// Utility functions for working with state. Exported because modes
|
3341 |
+
// sometimes need to do this.
|
3342 |
+
function copyState(mode, state) {
|
3343 |
+
if (state === true) return state;
|
3344 |
+
if (mode.copyState) return mode.copyState(state);
|
3345 |
+
var nstate = {};
|
3346 |
+
for (var n in state) {
|
3347 |
+
var val = state[n];
|
3348 |
+
if (val instanceof Array) val = val.concat([]);
|
3349 |
+
nstate[n] = val;
|
3350 |
+
}
|
3351 |
+
return nstate;
|
3352 |
+
}
|
3353 |
+
CodeMirror.copyState = copyState;
|
3354 |
+
|
3355 |
+
function startState(mode, a1, a2) {
|
3356 |
+
return mode.startState ? mode.startState(a1, a2) : true;
|
3357 |
+
}
|
3358 |
+
CodeMirror.startState = startState;
|
3359 |
+
|
3360 |
+
CodeMirror.innerMode = function(mode, state) {
|
3361 |
+
while (mode.innerMode) {
|
3362 |
+
var info = mode.innerMode(state);
|
3363 |
+
if (!info || info.mode == mode) break;
|
3364 |
+
state = info.state;
|
3365 |
+
mode = info.mode;
|
3366 |
+
}
|
3367 |
+
return info || {mode: mode, state: state};
|
3368 |
+
};
|
3369 |
+
|
3370 |
+
// STANDARD COMMANDS
|
3371 |
+
|
3372 |
+
var commands = CodeMirror.commands = {
|
3373 |
+
selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()));},
|
3374 |
+
killLine: function(cm) {
|
3375 |
+
var from = cm.getCursor(true), to = cm.getCursor(false), sel = !posEq(from, to);
|
3376 |
+
if (!sel && cm.getLine(from.line).length == from.ch)
|
3377 |
+
cm.replaceRange("", from, Pos(from.line + 1, 0), "+delete");
|
3378 |
+
else cm.replaceRange("", from, sel ? to : Pos(from.line), "+delete");
|
3379 |
+
},
|
3380 |
+
deleteLine: function(cm) {
|
3381 |
+
var l = cm.getCursor().line;
|
3382 |
+
cm.replaceRange("", Pos(l, 0), Pos(l), "+delete");
|
3383 |
+
},
|
3384 |
+
delLineLeft: function(cm) {
|
3385 |
+
var cur = cm.getCursor();
|
3386 |
+
cm.replaceRange("", Pos(cur.line, 0), cur, "+delete");
|
3387 |
+
},
|
3388 |
+
undo: function(cm) {cm.undo();},
|
3389 |
+
redo: function(cm) {cm.redo();},
|
3390 |
+
goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));},
|
3391 |
+
goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));},
|
3392 |
+
goLineStart: function(cm) {
|
3393 |
+
cm.extendSelection(lineStart(cm, cm.getCursor().line));
|
3394 |
+
},
|
3395 |
+
goLineStartSmart: function(cm) {
|
3396 |
+
var cur = cm.getCursor(), start = lineStart(cm, cur.line);
|
3397 |
+
var line = cm.getLineHandle(start.line);
|
3398 |
+
var order = getOrder(line);
|
3399 |
+
if (!order || order[0].level == 0) {
|
3400 |
+
var firstNonWS = Math.max(0, line.text.search(/\S/));
|
3401 |
+
var inWS = cur.line == start.line && cur.ch <= firstNonWS && cur.ch;
|
3402 |
+
cm.extendSelection(Pos(start.line, inWS ? 0 : firstNonWS));
|
3403 |
+
} else cm.extendSelection(start);
|
3404 |
+
},
|
3405 |
+
goLineEnd: function(cm) {
|
3406 |
+
cm.extendSelection(lineEnd(cm, cm.getCursor().line));
|
3407 |
+
},
|
3408 |
+
goLineRight: function(cm) {
|
3409 |
+
var top = cm.charCoords(cm.getCursor(), "div").top + 5;
|
3410 |
+
cm.extendSelection(cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"));
|
3411 |
+
},
|
3412 |
+
goLineLeft: function(cm) {
|
3413 |
+
var top = cm.charCoords(cm.getCursor(), "div").top + 5;
|
3414 |
+
cm.extendSelection(cm.coordsChar({left: 0, top: top}, "div"));
|
3415 |
+
},
|
3416 |
+
goLineUp: function(cm) {cm.moveV(-1, "line");},
|
3417 |
+
goLineDown: function(cm) {cm.moveV(1, "line");},
|
3418 |
+
goPageUp: function(cm) {cm.moveV(-1, "page");},
|
3419 |
+
goPageDown: function(cm) {cm.moveV(1, "page");},
|
3420 |
+
goCharLeft: function(cm) {cm.moveH(-1, "char");},
|
3421 |
+
goCharRight: function(cm) {cm.moveH(1, "char");},
|
3422 |
+
goColumnLeft: function(cm) {cm.moveH(-1, "column");},
|
3423 |
+
goColumnRight: function(cm) {cm.moveH(1, "column");},
|
3424 |
+
goWordLeft: function(cm) {cm.moveH(-1, "word");},
|
3425 |
+
goGroupRight: function(cm) {cm.moveH(1, "group");},
|
3426 |
+
goGroupLeft: function(cm) {cm.moveH(-1, "group");},
|
3427 |
+
goWordRight: function(cm) {cm.moveH(1, "word");},
|
3428 |
+
delCharBefore: function(cm) {cm.deleteH(-1, "char");},
|
3429 |
+
delCharAfter: function(cm) {cm.deleteH(1, "char");},
|
3430 |
+
delWordBefore: function(cm) {cm.deleteH(-1, "word");},
|
3431 |
+
delWordAfter: function(cm) {cm.deleteH(1, "word");},
|
3432 |
+
delGroupBefore: function(cm) {cm.deleteH(-1, "group");},
|
3433 |
+
delGroupAfter: function(cm) {cm.deleteH(1, "group");},
|
3434 |
+
indentAuto: function(cm) {cm.indentSelection("smart");},
|
3435 |
+
indentMore: function(cm) {cm.indentSelection("add");},
|
3436 |
+
indentLess: function(cm) {cm.indentSelection("subtract");},
|
3437 |
+
insertTab: function(cm) {cm.replaceSelection("\t", "end", "+input");},
|
3438 |
+
defaultTab: function(cm) {
|
3439 |
+
if (cm.somethingSelected()) cm.indentSelection("add");
|
3440 |
+
else cm.replaceSelection("\t", "end", "+input");
|
3441 |
+
},
|
3442 |
+
transposeChars: function(cm) {
|
3443 |
+
var cur = cm.getCursor(), line = cm.getLine(cur.line);
|
3444 |
+
if (cur.ch > 0 && cur.ch < line.length - 1)
|
3445 |
+
cm.replaceRange(line.charAt(cur.ch) + line.charAt(cur.ch - 1),
|
3446 |
+
Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1));
|
3447 |
+
},
|
3448 |
+
newlineAndIndent: function(cm) {
|
3449 |
+
operation(cm, function() {
|
3450 |
+
cm.replaceSelection("\n", "end", "+input");
|
3451 |
+
cm.indentLine(cm.getCursor().line, null, true);
|
3452 |
+
})();
|
3453 |
+
},
|
3454 |
+
toggleOverwrite: function(cm) {cm.toggleOverwrite();}
|
3455 |
+
};
|
3456 |
+
|
3457 |
+
// STANDARD KEYMAPS
|
3458 |
+
|
3459 |
+
var keyMap = CodeMirror.keyMap = {};
|
3460 |
+
keyMap.basic = {
|
3461 |
+
"Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown",
|
3462 |
+
"End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown",
|
3463 |
+
"Delete": "delCharAfter", "Backspace": "delCharBefore", "Tab": "defaultTab", "Shift-Tab": "indentAuto",
|
3464 |
+
"Enter": "newlineAndIndent", "Insert": "toggleOverwrite"
|
3465 |
+
};
|
3466 |
+
// Note that the save and find-related commands aren't defined by
|
3467 |
+
// default. Unknown commands are simply ignored.
|
3468 |
+
keyMap.pcDefault = {
|
3469 |
+
"Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo",
|
3470 |
+
"Ctrl-Home": "goDocStart", "Alt-Up": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Down": "goDocEnd",
|
3471 |
+
"Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd",
|
3472 |
+
"Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find",
|
3473 |
+
"Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll",
|
3474 |
+
"Ctrl-[": "indentLess", "Ctrl-]": "indentMore",
|
3475 |
+
fallthrough: "basic"
|
3476 |
+
};
|
3477 |
+
keyMap.macDefault = {
|
3478 |
+
"Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo",
|
3479 |
+
"Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft",
|
3480 |
+
"Alt-Right": "goGroupRight", "Cmd-Left": "goLineStart", "Cmd-Right": "goLineEnd", "Alt-Backspace": "delGroupBefore",
|
3481 |
+
"Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find",
|
3482 |
+
"Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll",
|
3483 |
+
"Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delLineLeft",
|
3484 |
+
fallthrough: ["basic", "emacsy"]
|
3485 |
+
};
|
3486 |
+
keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault;
|
3487 |
+
keyMap.emacsy = {
|
3488 |
+
"Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
|
3489 |
+
"Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd",
|
3490 |
+
"Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore",
|
3491 |
+
"Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars"
|
3492 |
+
};
|
3493 |
+
|
3494 |
+
// KEYMAP DISPATCH
|
3495 |
+
|
3496 |
+
function getKeyMap(val) {
|
3497 |
+
if (typeof val == "string") return keyMap[val];
|
3498 |
+
else return val;
|
3499 |
+
}
|
3500 |
+
|
3501 |
+
function lookupKey(name, maps, handle) {
|
3502 |
+
function lookup(map) {
|
3503 |
+
map = getKeyMap(map);
|
3504 |
+
var found = map[name];
|
3505 |
+
if (found === false) return "stop";
|
3506 |
+
if (found != null && handle(found)) return true;
|
3507 |
+
if (map.nofallthrough) return "stop";
|
3508 |
+
|
3509 |
+
var fallthrough = map.fallthrough;
|
3510 |
+
if (fallthrough == null) return false;
|
3511 |
+
if (Object.prototype.toString.call(fallthrough) != "[object Array]")
|
3512 |
+
return lookup(fallthrough);
|
3513 |
+
for (var i = 0, e = fallthrough.length; i < e; ++i) {
|
3514 |
+
var done = lookup(fallthrough[i]);
|
3515 |
+
if (done) return done;
|
3516 |
+
}
|
3517 |
+
return false;
|
3518 |
+
}
|
3519 |
+
|
3520 |
+
for (var i = 0; i < maps.length; ++i) {
|
3521 |
+
var done = lookup(maps[i]);
|
3522 |
+
if (done) return done != "stop";
|
3523 |
+
}
|
3524 |
+
}
|
3525 |
+
function isModifierKey(event) {
|
3526 |
+
var name = keyNames[event.keyCode];
|
3527 |
+
return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod";
|
3528 |
+
}
|
3529 |
+
function keyName(event, noShift) {
|
3530 |
+
if (opera && event.keyCode == 34 && event["char"]) return false;
|
3531 |
+
var name = keyNames[event.keyCode];
|
3532 |
+
if (name == null || event.altGraphKey) return false;
|
3533 |
+
if (event.altKey) name = "Alt-" + name;
|
3534 |
+
if (flipCtrlCmd ? event.metaKey : event.ctrlKey) name = "Ctrl-" + name;
|
3535 |
+
if (flipCtrlCmd ? event.ctrlKey : event.metaKey) name = "Cmd-" + name;
|
3536 |
+
if (!noShift && event.shiftKey) name = "Shift-" + name;
|
3537 |
+
return name;
|
3538 |
+
}
|
3539 |
+
CodeMirror.lookupKey = lookupKey;
|
3540 |
+
CodeMirror.isModifierKey = isModifierKey;
|
3541 |
+
CodeMirror.keyName = keyName;
|
3542 |
+
|
3543 |
+
// FROMTEXTAREA
|
3544 |
+
|
3545 |
+
CodeMirror.fromTextArea = function(textarea, options) {
|
3546 |
+
if (!options) options = {};
|
3547 |
+
options.value = textarea.value;
|
3548 |
+
if (!options.tabindex && textarea.tabindex)
|
3549 |
+
options.tabindex = textarea.tabindex;
|
3550 |
+
if (!options.placeholder && textarea.placeholder)
|
3551 |
+
options.placeholder = textarea.placeholder;
|
3552 |
+
// Set autofocus to true if this textarea is focused, or if it has
|
3553 |
+
// autofocus and no other element is focused.
|
3554 |
+
if (options.autofocus == null) {
|
3555 |
+
var hasFocus = document.body;
|
3556 |
+
// doc.activeElement occasionally throws on IE
|
3557 |
+
try { hasFocus = document.activeElement; } catch(e) {}
|
3558 |
+
options.autofocus = hasFocus == textarea ||
|
3559 |
+
textarea.getAttribute("autofocus") != null && hasFocus == document.body;
|
3560 |
+
}
|
3561 |
+
|
3562 |
+
function save() {textarea.value = cm.getValue();}
|
3563 |
+
if (textarea.form) {
|
3564 |
+
on(textarea.form, "submit", save);
|
3565 |
+
// Deplorable hack to make the submit method do the right thing.
|
3566 |
+
if (!options.leaveSubmitMethodAlone) {
|
3567 |
+
var form = textarea.form, realSubmit = form.submit;
|
3568 |
+
try {
|
3569 |
+
var wrappedSubmit = form.submit = function() {
|
3570 |
+
save();
|
3571 |
+
form.submit = realSubmit;
|
3572 |
+
form.submit();
|
3573 |
+
form.submit = wrappedSubmit;
|
3574 |
+
};
|
3575 |
+
} catch(e) {}
|
3576 |
+
}
|
3577 |
+
}
|
3578 |
+
|
3579 |
+
textarea.style.display = "none";
|
3580 |
+
var cm = CodeMirror(function(node) {
|
3581 |
+
textarea.parentNode.insertBefore(node, textarea.nextSibling);
|
3582 |
+
}, options);
|
3583 |
+
cm.save = save;
|
3584 |
+
cm.getTextArea = function() { return textarea; };
|
3585 |
+
cm.toTextArea = function() {
|
3586 |
+
save();
|
3587 |
+
textarea.parentNode.removeChild(cm.getWrapperElement());
|
3588 |
+
textarea.style.display = "";
|
3589 |
+
if (textarea.form) {
|
3590 |
+
off(textarea.form, "submit", save);
|
3591 |
+
if (typeof textarea.form.submit == "function")
|
3592 |
+
textarea.form.submit = realSubmit;
|
3593 |
+
}
|
3594 |
+
};
|
3595 |
+
return cm;
|
3596 |
+
};
|
3597 |
+
|
3598 |
+
// STRING STREAM
|
3599 |
+
|
3600 |
+
// Fed to the mode parsers, provides helper functions to make
|
3601 |
+
// parsers more succinct.
|
3602 |
+
|
3603 |
+
// The character stream used by a mode's parser.
|
3604 |
+
function StringStream(string, tabSize) {
|
3605 |
+
this.pos = this.start = 0;
|
3606 |
+
this.string = string;
|
3607 |
+
this.tabSize = tabSize || 8;
|
3608 |
+
this.lastColumnPos = this.lastColumnValue = 0;
|
3609 |
+
}
|
3610 |
+
|
3611 |
+
StringStream.prototype = {
|
3612 |
+
eol: function() {return this.pos >= this.string.length;},
|
3613 |
+
sol: function() {return this.pos == 0;},
|
3614 |
+
peek: function() {return this.string.charAt(this.pos) || undefined;},
|
3615 |
+
next: function() {
|
3616 |
+
if (this.pos < this.string.length)
|
3617 |
+
return this.string.charAt(this.pos++);
|
3618 |
+
},
|
3619 |
+
eat: function(match) {
|
3620 |
+
var ch = this.string.charAt(this.pos);
|
3621 |
+
if (typeof match == "string") var ok = ch == match;
|
3622 |
+
else var ok = ch && (match.test ? match.test(ch) : match(ch));
|
3623 |
+
if (ok) {++this.pos; return ch;}
|
3624 |
+
},
|
3625 |
+
eatWhile: function(match) {
|
3626 |
+
var start = this.pos;
|
3627 |
+
while (this.eat(match)){}
|
3628 |
+
return this.pos > start;
|
3629 |
+
},
|
3630 |
+
eatSpace: function() {
|
3631 |
+
var start = this.pos;
|
3632 |
+
while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;
|
3633 |
+
return this.pos > start;
|
3634 |
+
},
|
3635 |
+
skipToEnd: function() {this.pos = this.string.length;},
|
3636 |
+
skipTo: function(ch) {
|
3637 |
+
var found = this.string.indexOf(ch, this.pos);
|
3638 |
+
if (found > -1) {this.pos = found; return true;}
|
3639 |
+
},
|
3640 |
+
backUp: function(n) {this.pos -= n;},
|
3641 |
+
column: function() {
|
3642 |
+
if (this.lastColumnPos < this.start) {
|
3643 |
+
this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);
|
3644 |
+
this.lastColumnPos = this.start;
|
3645 |
+
}
|
3646 |
+
return this.lastColumnValue;
|
3647 |
+
},
|
3648 |
+
indentation: function() {return countColumn(this.string, null, this.tabSize);},
|
3649 |
+
match: function(pattern, consume, caseInsensitive) {
|
3650 |
+
if (typeof pattern == "string") {
|
3651 |
+
var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};
|
3652 |
+
var substr = this.string.substr(this.pos, pattern.length);
|
3653 |
+
if (cased(substr) == cased(pattern)) {
|
3654 |
+
if (consume !== false) this.pos += pattern.length;
|
3655 |
+
return true;
|
3656 |
+
}
|
3657 |
+
} else {
|
3658 |
+
var match = this.string.slice(this.pos).match(pattern);
|
3659 |
+
if (match && match.index > 0) return null;
|
3660 |
+
if (match && consume !== false) this.pos += match[0].length;
|
3661 |
+
return match;
|
3662 |
+
}
|
3663 |
+
},
|
3664 |
+
current: function(){return this.string.slice(this.start, this.pos);}
|
3665 |
+
};
|
3666 |
+
CodeMirror.StringStream = StringStream;
|
3667 |
+
|
3668 |
+
// TEXTMARKERS
|
3669 |
+
|
3670 |
+
function TextMarker(doc, type) {
|
3671 |
+
this.lines = [];
|
3672 |
+
this.type = type;
|
3673 |
+
this.doc = doc;
|
3674 |
+
}
|
3675 |
+
CodeMirror.TextMarker = TextMarker;
|
3676 |
+
eventMixin(TextMarker);
|
3677 |
+
|
3678 |
+
TextMarker.prototype.clear = function() {
|
3679 |
+
if (this.explicitlyCleared) return;
|
3680 |
+
var cm = this.doc.cm, withOp = cm && !cm.curOp;
|
3681 |
+
if (withOp) startOperation(cm);
|
3682 |
+
if (hasHandler(this, "clear")) {
|
3683 |
+
var found = this.find();
|
3684 |
+
if (found) signalLater(this, "clear", found.from, found.to);
|
3685 |
+
}
|
3686 |
+
var min = null, max = null;
|
3687 |
+
for (var i = 0; i < this.lines.length; ++i) {
|
3688 |
+
var line = this.lines[i];
|
3689 |
+
var span = getMarkedSpanFor(line.markedSpans, this);
|
3690 |
+
if (span.to != null) max = lineNo(line);
|
3691 |
+
line.markedSpans = removeMarkedSpan(line.markedSpans, span);
|
3692 |
+
if (span.from != null)
|
3693 |
+
min = lineNo(line);
|
3694 |
+
else if (this.collapsed && !lineIsHidden(this.doc, line) && cm)
|
3695 |
+
updateLineHeight(line, textHeight(cm.display));
|
3696 |
+
}
|
3697 |
+
if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) {
|
3698 |
+
var visual = visualLine(cm.doc, this.lines[i]), len = lineLength(cm.doc, visual);
|
3699 |
+
if (len > cm.display.maxLineLength) {
|
3700 |
+
cm.display.maxLine = visual;
|
3701 |
+
cm.display.maxLineLength = len;
|
3702 |
+
cm.display.maxLineChanged = true;
|
3703 |
+
}
|
3704 |
+
}
|
3705 |
+
|
3706 |
+
if (min != null && cm) regChange(cm, min, max + 1);
|
3707 |
+
this.lines.length = 0;
|
3708 |
+
this.explicitlyCleared = true;
|
3709 |
+
if (this.atomic && this.doc.cantEdit) {
|
3710 |
+
this.doc.cantEdit = false;
|
3711 |
+
if (cm) reCheckSelection(cm);
|
3712 |
+
}
|
3713 |
+
if (withOp) endOperation(cm);
|
3714 |
+
};
|
3715 |
+
|
3716 |
+
TextMarker.prototype.find = function() {
|
3717 |
+
var from, to;
|
3718 |
+
for (var i = 0; i < this.lines.length; ++i) {
|
3719 |
+
var line = this.lines[i];
|
3720 |
+
var span = getMarkedSpanFor(line.markedSpans, this);
|
3721 |
+
if (span.from != null || span.to != null) {
|
3722 |
+
var found = lineNo(line);
|
3723 |
+
if (span.from != null) from = Pos(found, span.from);
|
3724 |
+
if (span.to != null) to = Pos(found, span.to);
|
3725 |
+
}
|
3726 |
+
}
|
3727 |
+
if (this.type == "bookmark") return from;
|
3728 |
+
return from && {from: from, to: to};
|
3729 |
+
};
|
3730 |
+
|
3731 |
+
TextMarker.prototype.changed = function() {
|
3732 |
+
var pos = this.find(), cm = this.doc.cm;
|
3733 |
+
if (!pos || !cm) return;
|
3734 |
+
var line = getLine(this.doc, pos.from.line);
|
3735 |
+
clearCachedMeasurement(cm, line);
|
3736 |
+
if (pos.from.line >= cm.display.showingFrom && pos.from.line < cm.display.showingTo) {
|
3737 |
+
for (var node = cm.display.lineDiv.firstChild; node; node = node.nextSibling) if (node.lineObj == line) {
|
3738 |
+
if (node.offsetHeight != line.height) updateLineHeight(line, node.offsetHeight);
|
3739 |
+
break;
|
3740 |
+
}
|
3741 |
+
runInOp(cm, function() {
|
3742 |
+
cm.curOp.selectionChanged = cm.curOp.forceUpdate = cm.curOp.updateMaxLine = true;
|
3743 |
+
});
|
3744 |
+
}
|
3745 |
+
};
|
3746 |
+
|
3747 |
+
TextMarker.prototype.attachLine = function(line) {
|
3748 |
+
if (!this.lines.length && this.doc.cm) {
|
3749 |
+
var op = this.doc.cm.curOp;
|
3750 |
+
if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)
|
3751 |
+
(op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this);
|
3752 |
+
}
|
3753 |
+
this.lines.push(line);
|
3754 |
+
};
|
3755 |
+
TextMarker.prototype.detachLine = function(line) {
|
3756 |
+
this.lines.splice(indexOf(this.lines, line), 1);
|
3757 |
+
if (!this.lines.length && this.doc.cm) {
|
3758 |
+
var op = this.doc.cm.curOp;
|
3759 |
+
(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);
|
3760 |
+
}
|
3761 |
+
};
|
3762 |
+
|
3763 |
+
function markText(doc, from, to, options, type) {
|
3764 |
+
if (options && options.shared) return markTextShared(doc, from, to, options, type);
|
3765 |
+
if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type);
|
3766 |
+
|
3767 |
+
var marker = new TextMarker(doc, type);
|
3768 |
+
if (type == "range" && !posLess(from, to)) return marker;
|
3769 |
+
if (options) copyObj(options, marker);
|
3770 |
+
if (marker.replacedWith) {
|
3771 |
+
marker.collapsed = true;
|
3772 |
+
marker.replacedWith = elt("span", [marker.replacedWith], "CodeMirror-widget");
|
3773 |
+
if (!options.handleMouseEvents) marker.replacedWith.ignoreEvents = true;
|
3774 |
+
}
|
3775 |
+
if (marker.collapsed) sawCollapsedSpans = true;
|
3776 |
+
|
3777 |
+
if (marker.addToHistory)
|
3778 |
+
addToHistory(doc, {from: from, to: to, origin: "markText"},
|
3779 |
+
{head: doc.sel.head, anchor: doc.sel.anchor}, NaN);
|
3780 |
+
|
3781 |
+
var curLine = from.line, size = 0, collapsedAtStart, collapsedAtEnd, cm = doc.cm, updateMaxLine;
|
3782 |
+
doc.iter(curLine, to.line + 1, function(line) {
|
3783 |
+
if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(doc, line) == cm.display.maxLine)
|
3784 |
+
updateMaxLine = true;
|
3785 |
+
var span = {from: null, to: null, marker: marker};
|
3786 |
+
size += line.text.length;
|
3787 |
+
if (curLine == from.line) {span.from = from.ch; size -= from.ch;}
|
3788 |
+
if (curLine == to.line) {span.to = to.ch; size -= line.text.length - to.ch;}
|
3789 |
+
if (marker.collapsed) {
|
3790 |
+
if (curLine == to.line) collapsedAtEnd = collapsedSpanAt(line, to.ch);
|
3791 |
+
if (curLine == from.line) collapsedAtStart = collapsedSpanAt(line, from.ch);
|
3792 |
+
else updateLineHeight(line, 0);
|
3793 |
+
}
|
3794 |
+
addMarkedSpan(line, span);
|
3795 |
+
++curLine;
|
3796 |
+
});
|
3797 |
+
if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) {
|
3798 |
+
if (lineIsHidden(doc, line)) updateLineHeight(line, 0);
|
3799 |
+
});
|
3800 |
+
|
3801 |
+
if (marker.clearOnEnter) on(marker, "beforeCursorEnter", function() { marker.clear(); });
|
3802 |
+
|
3803 |
+
if (marker.readOnly) {
|
3804 |
+
sawReadOnlySpans = true;
|
3805 |
+
if (doc.history.done.length || doc.history.undone.length)
|
3806 |
+
doc.clearHistory();
|
3807 |
+
}
|
3808 |
+
if (marker.collapsed) {
|
3809 |
+
if (collapsedAtStart != collapsedAtEnd)
|
3810 |
+
throw new Error("Inserting collapsed marker overlapping an existing one");
|
3811 |
+
marker.size = size;
|
3812 |
+
marker.atomic = true;
|
3813 |
+
}
|
3814 |
+
if (cm) {
|
3815 |
+
if (updateMaxLine) cm.curOp.updateMaxLine = true;
|
3816 |
+
if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.collapsed)
|
3817 |
+
regChange(cm, from.line, to.line + 1);
|
3818 |
+
if (marker.atomic) reCheckSelection(cm);
|
3819 |
+
}
|
3820 |
+
return marker;
|
3821 |
+
}
|
3822 |
+
|
3823 |
+
// SHARED TEXTMARKERS
|
3824 |
+
|
3825 |
+
function SharedTextMarker(markers, primary) {
|
3826 |
+
this.markers = markers;
|
3827 |
+
this.primary = primary;
|
3828 |
+
for (var i = 0, me = this; i < markers.length; ++i) {
|
3829 |
+
markers[i].parent = this;
|
3830 |
+
on(markers[i], "clear", function(){me.clear();});
|
3831 |
+
}
|
3832 |
+
}
|
3833 |
+
CodeMirror.SharedTextMarker = SharedTextMarker;
|
3834 |
+
eventMixin(SharedTextMarker);
|
3835 |
+
|
3836 |
+
SharedTextMarker.prototype.clear = function() {
|
3837 |
+
if (this.explicitlyCleared) return;
|
3838 |
+
this.explicitlyCleared = true;
|
3839 |
+
for (var i = 0; i < this.markers.length; ++i)
|
3840 |
+
this.markers[i].clear();
|
3841 |
+
signalLater(this, "clear");
|
3842 |
+
};
|
3843 |
+
SharedTextMarker.prototype.find = function() {
|
3844 |
+
return this.primary.find();
|
3845 |
+
};
|
3846 |
+
|
3847 |
+
function markTextShared(doc, from, to, options, type) {
|
3848 |
+
options = copyObj(options);
|
3849 |
+
options.shared = false;
|
3850 |
+
var markers = [markText(doc, from, to, options, type)], primary = markers[0];
|
3851 |
+
var widget = options.replacedWith;
|
3852 |
+
linkedDocs(doc, function(doc) {
|
3853 |
+
if (widget) options.replacedWith = widget.cloneNode(true);
|
3854 |
+
markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));
|
3855 |
+
for (var i = 0; i < doc.linked.length; ++i)
|
3856 |
+
if (doc.linked[i].isParent) return;
|
3857 |
+
primary = lst(markers);
|
3858 |
+
});
|
3859 |
+
return new SharedTextMarker(markers, primary);
|
3860 |
+
}
|
3861 |
+
|
3862 |
+
// TEXTMARKER SPANS
|
3863 |
+
|
3864 |
+
function getMarkedSpanFor(spans, marker) {
|
3865 |
+
if (spans) for (var i = 0; i < spans.length; ++i) {
|
3866 |
+
var span = spans[i];
|
3867 |
+
if (span.marker == marker) return span;
|
3868 |
+
}
|
3869 |
+
}
|
3870 |
+
function removeMarkedSpan(spans, span) {
|
3871 |
+
for (var r, i = 0; i < spans.length; ++i)
|
3872 |
+
if (spans[i] != span) (r || (r = [])).push(spans[i]);
|
3873 |
+
return r;
|
3874 |
+
}
|
3875 |
+
function addMarkedSpan(line, span) {
|
3876 |
+
line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];
|
3877 |
+
span.marker.attachLine(line);
|
3878 |
+
}
|
3879 |
+
|
3880 |
+
function markedSpansBefore(old, startCh, isInsert) {
|
3881 |
+
if (old) for (var i = 0, nw; i < old.length; ++i) {
|
3882 |
+
var span = old[i], marker = span.marker;
|
3883 |
+
var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);
|
3884 |
+
if (startsBefore || marker.type == "bookmark" && span.from == startCh && (!isInsert || !span.marker.insertLeft)) {
|
3885 |
+
var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);
|
3886 |
+
(nw || (nw = [])).push({from: span.from,
|
3887 |
+
to: endsAfter ? null : span.to,
|
3888 |
+
marker: marker});
|
3889 |
+
}
|
3890 |
+
}
|
3891 |
+
return nw;
|
3892 |
+
}
|
3893 |
+
|
3894 |
+
function markedSpansAfter(old, endCh, isInsert) {
|
3895 |
+
if (old) for (var i = 0, nw; i < old.length; ++i) {
|
3896 |
+
var span = old[i], marker = span.marker;
|
3897 |
+
var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);
|
3898 |
+
if (endsAfter || marker.type == "bookmark" && span.from == endCh && (!isInsert || span.marker.insertLeft)) {
|
3899 |
+
var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);
|
3900 |
+
(nw || (nw = [])).push({from: startsBefore ? null : span.from - endCh,
|
3901 |
+
to: span.to == null ? null : span.to - endCh,
|
3902 |
+
marker: marker});
|
3903 |
+
}
|
3904 |
+
}
|
3905 |
+
return nw;
|
3906 |
+
}
|
3907 |
+
|
3908 |
+
function stretchSpansOverChange(doc, change) {
|
3909 |
+
var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;
|
3910 |
+
var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;
|
3911 |
+
if (!oldFirst && !oldLast) return null;
|
3912 |
+
|
3913 |
+
var startCh = change.from.ch, endCh = change.to.ch, isInsert = posEq(change.from, change.to);
|
3914 |
+
// Get the spans that 'stick out' on both sides
|
3915 |
+
var first = markedSpansBefore(oldFirst, startCh, isInsert);
|
3916 |
+
var last = markedSpansAfter(oldLast, endCh, isInsert);
|
3917 |
+
|
3918 |
+
// Next, merge those two ends
|
3919 |
+
var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);
|
3920 |
+
if (first) {
|
3921 |
+
// Fix up .to properties of first
|
3922 |
+
for (var i = 0; i < first.length; ++i) {
|
3923 |
+
var span = first[i];
|
3924 |
+
if (span.to == null) {
|
3925 |
+
var found = getMarkedSpanFor(last, span.marker);
|
3926 |
+
if (!found) span.to = startCh;
|
3927 |
+
else if (sameLine) span.to = found.to == null ? null : found.to + offset;
|
3928 |
+
}
|
3929 |
+
}
|
3930 |
+
}
|
3931 |
+
if (last) {
|
3932 |
+
// Fix up .from in last (or move them into first in case of sameLine)
|
3933 |
+
for (var i = 0; i < last.length; ++i) {
|
3934 |
+
var span = last[i];
|
3935 |
+
if (span.to != null) span.to += offset;
|
3936 |
+
if (span.from == null) {
|
3937 |
+
var found = getMarkedSpanFor(first, span.marker);
|
3938 |
+
if (!found) {
|
3939 |
+
span.from = offset;
|
3940 |
+
if (sameLine) (first || (first = [])).push(span);
|
3941 |
+
}
|
3942 |
+
} else {
|
3943 |
+
span.from += offset;
|
3944 |
+
if (sameLine) (first || (first = [])).push(span);
|
3945 |
+
}
|
3946 |
+
}
|
3947 |
+
}
|
3948 |
+
if (sameLine && first) {
|
3949 |
+
// Make sure we didn't create any zero-length spans
|
3950 |
+
for (var i = 0; i < first.length; ++i)
|
3951 |
+
if (first[i].from != null && first[i].from == first[i].to && first[i].marker.type != "bookmark")
|
3952 |
+
first.splice(i--, 1);
|
3953 |
+
if (!first.length) first = null;
|
3954 |
+
}
|
3955 |
+
|
3956 |
+
var newMarkers = [first];
|
3957 |
+
if (!sameLine) {
|
3958 |
+
// Fill gap with whole-line-spans
|
3959 |
+
var gap = change.text.length - 2, gapMarkers;
|
3960 |
+
if (gap > 0 && first)
|
3961 |
+
for (var i = 0; i < first.length; ++i)
|
3962 |
+
if (first[i].to == null)
|
3963 |
+
(gapMarkers || (gapMarkers = [])).push({from: null, to: null, marker: first[i].marker});
|
3964 |
+
for (var i = 0; i < gap; ++i)
|
3965 |
+
newMarkers.push(gapMarkers);
|
3966 |
+
newMarkers.push(last);
|
3967 |
+
}
|
3968 |
+
return newMarkers;
|
3969 |
+
}
|
3970 |
+
|
3971 |
+
function mergeOldSpans(doc, change) {
|
3972 |
+
var old = getOldSpans(doc, change);
|
3973 |
+
var stretched = stretchSpansOverChange(doc, change);
|
3974 |
+
if (!old) return stretched;
|
3975 |
+
if (!stretched) return old;
|
3976 |
+
|
3977 |
+
for (var i = 0; i < old.length; ++i) {
|
3978 |
+
var oldCur = old[i], stretchCur = stretched[i];
|
3979 |
+
if (oldCur && stretchCur) {
|
3980 |
+
spans: for (var j = 0; j < stretchCur.length; ++j) {
|
3981 |
+
var span = stretchCur[j];
|
3982 |
+
for (var k = 0; k < oldCur.length; ++k)
|
3983 |
+
if (oldCur[k].marker == span.marker) continue spans;
|
3984 |
+
oldCur.push(span);
|
3985 |
+
}
|
3986 |
+
} else if (stretchCur) {
|
3987 |
+
old[i] = stretchCur;
|
3988 |
+
}
|
3989 |
+
}
|
3990 |
+
return old;
|
3991 |
+
}
|
3992 |
+
|
3993 |
+
function removeReadOnlyRanges(doc, from, to) {
|
3994 |
+
var markers = null;
|
3995 |
+
doc.iter(from.line, to.line + 1, function(line) {
|
3996 |
+
if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) {
|
3997 |
+
var mark = line.markedSpans[i].marker;
|
3998 |
+
if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))
|
3999 |
+
(markers || (markers = [])).push(mark);
|
4000 |
+
}
|
4001 |
+
});
|
4002 |
+
if (!markers) return null;
|
4003 |
+
var parts = [{from: from, to: to}];
|
4004 |
+
for (var i = 0; i < markers.length; ++i) {
|
4005 |
+
var mk = markers[i], m = mk.find();
|
4006 |
+
for (var j = 0; j < parts.length; ++j) {
|
4007 |
+
var p = parts[j];
|
4008 |
+
if (posLess(p.to, m.from) || posLess(m.to, p.from)) continue;
|
4009 |
+
var newParts = [j, 1];
|
4010 |
+
if (posLess(p.from, m.from) || !mk.inclusiveLeft && posEq(p.from, m.from))
|
4011 |
+
newParts.push({from: p.from, to: m.from});
|
4012 |
+
if (posLess(m.to, p.to) || !mk.inclusiveRight && posEq(p.to, m.to))
|
4013 |
+
newParts.push({from: m.to, to: p.to});
|
4014 |
+
parts.splice.apply(parts, newParts);
|
4015 |
+
j += newParts.length - 1;
|
4016 |
+
}
|
4017 |
+
}
|
4018 |
+
return parts;
|
4019 |
+
}
|
4020 |
+
|
4021 |
+
function collapsedSpanAt(line, ch) {
|
4022 |
+
var sps = sawCollapsedSpans && line.markedSpans, found;
|
4023 |
+
if (sps) for (var sp, i = 0; i < sps.length; ++i) {
|
4024 |
+
sp = sps[i];
|
4025 |
+
if (!sp.marker.collapsed) continue;
|
4026 |
+
if ((sp.from == null || sp.from < ch) &&
|
4027 |
+
(sp.to == null || sp.to > ch) &&
|
4028 |
+
(!found || found.width < sp.marker.width))
|
4029 |
+
found = sp.marker;
|
4030 |
+
}
|
4031 |
+
return found;
|
4032 |
+
}
|
4033 |
+
function collapsedSpanAtStart(line) { return collapsedSpanAt(line, -1); }
|
4034 |
+
function collapsedSpanAtEnd(line) { return collapsedSpanAt(line, line.text.length + 1); }
|
4035 |
+
|
4036 |
+
function visualLine(doc, line) {
|
4037 |
+
var merged;
|
4038 |
+
while (merged = collapsedSpanAtStart(line))
|
4039 |
+
line = getLine(doc, merged.find().from.line);
|
4040 |
+
return line;
|
4041 |
+
}
|
4042 |
+
|
4043 |
+
function lineIsHidden(doc, line) {
|
4044 |
+
var sps = sawCollapsedSpans && line.markedSpans;
|
4045 |
+
if (sps) for (var sp, i = 0; i < sps.length; ++i) {
|
4046 |
+
sp = sps[i];
|
4047 |
+
if (!sp.marker.collapsed) continue;
|
4048 |
+
if (sp.from == null) return true;
|
4049 |
+
if (sp.marker.replacedWith) continue;
|
4050 |
+
if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))
|
4051 |
+
return true;
|
4052 |
+
}
|
4053 |
+
}
|
4054 |
+
function lineIsHiddenInner(doc, line, span) {
|
4055 |
+
if (span.to == null) {
|
4056 |
+
var end = span.marker.find().to, endLine = getLine(doc, end.line);
|
4057 |
+
return lineIsHiddenInner(doc, endLine, getMarkedSpanFor(endLine.markedSpans, span.marker));
|
4058 |
+
}
|
4059 |
+
if (span.marker.inclusiveRight && span.to == line.text.length)
|
4060 |
+
return true;
|
4061 |
+
for (var sp, i = 0; i < line.markedSpans.length; ++i) {
|
4062 |
+
sp = line.markedSpans[i];
|
4063 |
+
if (sp.marker.collapsed && !sp.marker.replacedWith && sp.from == span.to &&
|
4064 |
+
(sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&
|
4065 |
+
lineIsHiddenInner(doc, line, sp)) return true;
|
4066 |
+
}
|
4067 |
+
}
|
4068 |
+
|
4069 |
+
function detachMarkedSpans(line) {
|
4070 |
+
var spans = line.markedSpans;
|
4071 |
+
if (!spans) return;
|
4072 |
+
for (var i = 0; i < spans.length; ++i)
|
4073 |
+
spans[i].marker.detachLine(line);
|
4074 |
+
line.markedSpans = null;
|
4075 |
+
}
|
4076 |
+
|
4077 |
+
function attachMarkedSpans(line, spans) {
|
4078 |
+
if (!spans) return;
|
4079 |
+
for (var i = 0; i < spans.length; ++i)
|
4080 |
+
spans[i].marker.attachLine(line);
|
4081 |
+
line.markedSpans = spans;
|
4082 |
+
}
|
4083 |
+
|
4084 |
+
// LINE WIDGETS
|
4085 |
+
|
4086 |
+
var LineWidget = CodeMirror.LineWidget = function(cm, node, options) {
|
4087 |
+
if (options) for (var opt in options) if (options.hasOwnProperty(opt))
|
4088 |
+
this[opt] = options[opt];
|
4089 |
+
this.cm = cm;
|
4090 |
+
this.node = node;
|
4091 |
+
};
|
4092 |
+
eventMixin(LineWidget);
|
4093 |
+
function widgetOperation(f) {
|
4094 |
+
return function() {
|
4095 |
+
var withOp = !this.cm.curOp;
|
4096 |
+
if (withOp) startOperation(this.cm);
|
4097 |
+
try {var result = f.apply(this, arguments);}
|
4098 |
+
finally {if (withOp) endOperation(this.cm);}
|
4099 |
+
return result;
|
4100 |
+
};
|
4101 |
+
}
|
4102 |
+
LineWidget.prototype.clear = widgetOperation(function() {
|
4103 |
+
var ws = this.line.widgets, no = lineNo(this.line);
|
4104 |
+
if (no == null || !ws) return;
|
4105 |
+
for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1);
|
4106 |
+
if (!ws.length) this.line.widgets = null;
|
4107 |
+
var aboveVisible = heightAtLine(this.cm, this.line) < this.cm.doc.scrollTop;
|
4108 |
+
updateLineHeight(this.line, Math.max(0, this.line.height - widgetHeight(this)));
|
4109 |
+
if (aboveVisible) addToScrollPos(this.cm, 0, -this.height);
|
4110 |
+
regChange(this.cm, no, no + 1);
|
4111 |
+
});
|
4112 |
+
LineWidget.prototype.changed = widgetOperation(function() {
|
4113 |
+
var oldH = this.height;
|
4114 |
+
this.height = null;
|
4115 |
+
var diff = widgetHeight(this) - oldH;
|
4116 |
+
if (!diff) return;
|
4117 |
+
updateLineHeight(this.line, this.line.height + diff);
|
4118 |
+
var no = lineNo(this.line);
|
4119 |
+
regChange(this.cm, no, no + 1);
|
4120 |
+
});
|
4121 |
+
|
4122 |
+
function widgetHeight(widget) {
|
4123 |
+
if (widget.height != null) return widget.height;
|
4124 |
+
if (!widget.node.parentNode || widget.node.parentNode.nodeType != 1)
|
4125 |
+
removeChildrenAndAdd(widget.cm.display.measure, elt("div", [widget.node], null, "position: relative"));
|
4126 |
+
return widget.height = widget.node.offsetHeight;
|
4127 |
+
}
|
4128 |
+
|
4129 |
+
function addLineWidget(cm, handle, node, options) {
|
4130 |
+
var widget = new LineWidget(cm, node, options);
|
4131 |
+
if (widget.noHScroll) cm.display.alignWidgets = true;
|
4132 |
+
changeLine(cm, handle, function(line) {
|
4133 |
+
var widgets = line.widgets || (line.widgets = []);
|
4134 |
+
if (widget.insertAt == null) widgets.push(widget);
|
4135 |
+
else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget);
|
4136 |
+
widget.line = line;
|
4137 |
+
if (!lineIsHidden(cm.doc, line) || widget.showIfHidden) {
|
4138 |
+
var aboveVisible = heightAtLine(cm, line) < cm.doc.scrollTop;
|
4139 |
+
updateLineHeight(line, line.height + widgetHeight(widget));
|
4140 |
+
if (aboveVisible) addToScrollPos(cm, 0, widget.height);
|
4141 |
+
}
|
4142 |
+
return true;
|
4143 |
+
});
|
4144 |
+
return widget;
|
4145 |
+
}
|
4146 |
+
|
4147 |
+
// LINE DATA STRUCTURE
|
4148 |
+
|
4149 |
+
// Line objects. These hold state related to a line, including
|
4150 |
+
// highlighting info (the styles array).
|
4151 |
+
var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) {
|
4152 |
+
this.text = text;
|
4153 |
+
attachMarkedSpans(this, markedSpans);
|
4154 |
+
this.height = estimateHeight ? estimateHeight(this) : 1;
|
4155 |
+
};
|
4156 |
+
eventMixin(Line);
|
4157 |
+
|
4158 |
+
function updateLine(line, text, markedSpans, estimateHeight) {
|
4159 |
+
line.text = text;
|
4160 |
+
if (line.stateAfter) line.stateAfter = null;
|
4161 |
+
if (line.styles) line.styles = null;
|
4162 |
+
if (line.order != null) line.order = null;
|
4163 |
+
detachMarkedSpans(line);
|
4164 |
+
attachMarkedSpans(line, markedSpans);
|
4165 |
+
var estHeight = estimateHeight ? estimateHeight(line) : 1;
|
4166 |
+
if (estHeight != line.height) updateLineHeight(line, estHeight);
|
4167 |
+
}
|
4168 |
+
|
4169 |
+
function cleanUpLine(line) {
|
4170 |
+
line.parent = null;
|
4171 |
+
detachMarkedSpans(line);
|
4172 |
+
}
|
4173 |
+
|
4174 |
+
// Run the given mode's parser over a line, update the styles
|
4175 |
+
// array, which contains alternating fragments of text and CSS
|
4176 |
+
// classes.
|
4177 |
+
function runMode(cm, text, mode, state, f) {
|
4178 |
+
var flattenSpans = mode.flattenSpans;
|
4179 |
+
if (flattenSpans == null) flattenSpans = cm.options.flattenSpans;
|
4180 |
+
var curStart = 0, curStyle = null;
|
4181 |
+
var stream = new StringStream(text, cm.options.tabSize), style;
|
4182 |
+
if (text == "" && mode.blankLine) mode.blankLine(state);
|
4183 |
+
while (!stream.eol()) {
|
4184 |
+
if (stream.pos > cm.options.maxHighlightLength) {
|
4185 |
+
flattenSpans = false;
|
4186 |
+
// Webkit seems to refuse to render text nodes longer than 57444 characters
|
4187 |
+
stream.pos = Math.min(text.length, stream.start + 50000);
|
4188 |
+
style = null;
|
4189 |
+
} else {
|
4190 |
+
style = mode.token(stream, state);
|
4191 |
+
}
|
4192 |
+
if (!flattenSpans || curStyle != style) {
|
4193 |
+
if (curStart < stream.start) f(stream.start, curStyle);
|
4194 |
+
curStart = stream.start; curStyle = style;
|
4195 |
+
}
|
4196 |
+
stream.start = stream.pos;
|
4197 |
+
}
|
4198 |
+
if (curStart < stream.pos) f(stream.pos, curStyle);
|
4199 |
+
}
|
4200 |
+
|
4201 |
+
function highlightLine(cm, line, state) {
|
4202 |
+
// A styles array always starts with a number identifying the
|
4203 |
+
// mode/overlays that it is based on (for easy invalidation).
|
4204 |
+
var st = [cm.state.modeGen];
|
4205 |
+
// Compute the base array of styles
|
4206 |
+
runMode(cm, line.text, cm.doc.mode, state, function(end, style) {st.push(end, style);});
|
4207 |
+
|
4208 |
+
// Run overlays, adjust style array.
|
4209 |
+
for (var o = 0; o < cm.state.overlays.length; ++o) {
|
4210 |
+
var overlay = cm.state.overlays[o], i = 1, at = 0;
|
4211 |
+
runMode(cm, line.text, overlay.mode, true, function(end, style) {
|
4212 |
+
var start = i;
|
4213 |
+
// Ensure there's a token end at the current position, and that i points at it
|
4214 |
+
while (at < end) {
|
4215 |
+
var i_end = st[i];
|
4216 |
+
if (i_end > end)
|
4217 |
+
st.splice(i, 1, end, st[i+1], i_end);
|
4218 |
+
i += 2;
|
4219 |
+
at = Math.min(end, i_end);
|
4220 |
+
}
|
4221 |
+
if (!style) return;
|
4222 |
+
if (overlay.opaque) {
|
4223 |
+
st.splice(start, i - start, end, style);
|
4224 |
+
i = start + 2;
|
4225 |
+
} else {
|
4226 |
+
for (; start < i; start += 2) {
|
4227 |
+
var cur = st[start+1];
|
4228 |
+
st[start+1] = cur ? cur + " " + style : style;
|
4229 |
+
}
|
4230 |
+
}
|
4231 |
+
});
|
4232 |
+
}
|
4233 |
+
|
4234 |
+
return st;
|
4235 |
+
}
|
4236 |
+
|
4237 |
+
function getLineStyles(cm, line) {
|
4238 |
+
if (!line.styles || line.styles[0] != cm.state.modeGen)
|
4239 |
+
line.styles = highlightLine(cm, line, line.stateAfter = getStateBefore(cm, lineNo(line)));
|
4240 |
+
return line.styles;
|
4241 |
+
}
|
4242 |
+
|
4243 |
+
// Lightweight form of highlight -- proceed over this line and
|
4244 |
+
// update state, but don't save a style array.
|
4245 |
+
function processLine(cm, line, state) {
|
4246 |
+
var mode = cm.doc.mode;
|
4247 |
+
var stream = new StringStream(line.text, cm.options.tabSize);
|
4248 |
+
if (line.text == "" && mode.blankLine) mode.blankLine(state);
|
4249 |
+
while (!stream.eol() && stream.pos <= cm.options.maxHighlightLength) {
|
4250 |
+
mode.token(stream, state);
|
4251 |
+
stream.start = stream.pos;
|
4252 |
+
}
|
4253 |
+
}
|
4254 |
+
|
4255 |
+
var styleToClassCache = {};
|
4256 |
+
function styleToClass(style) {
|
4257 |
+
if (!style) return null;
|
4258 |
+
return styleToClassCache[style] ||
|
4259 |
+
(styleToClassCache[style] = "cm-" + style.replace(/ +/g, " cm-"));
|
4260 |
+
}
|
4261 |
+
|
4262 |
+
function lineContent(cm, realLine, measure, copyWidgets) {
|
4263 |
+
var merged, line = realLine, empty = true;
|
4264 |
+
while (merged = collapsedSpanAtStart(line))
|
4265 |
+
line = getLine(cm.doc, merged.find().from.line);
|
4266 |
+
|
4267 |
+
var builder = {pre: elt("pre"), col: 0, pos: 0,
|
4268 |
+
measure: null, measuredSomething: false, cm: cm,
|
4269 |
+
copyWidgets: copyWidgets};
|
4270 |
+
if (line.textClass) builder.pre.className = line.textClass;
|
4271 |
+
|
4272 |
+
do {
|
4273 |
+
if (line.text) empty = false;
|
4274 |
+
builder.measure = line == realLine && measure;
|
4275 |
+
builder.pos = 0;
|
4276 |
+
builder.addToken = builder.measure ? buildTokenMeasure : buildToken;
|
4277 |
+
if ((ie || webkit) && cm.getOption("lineWrapping"))
|
4278 |
+
builder.addToken = buildTokenSplitSpaces(builder.addToken);
|
4279 |
+
var next = insertLineContent(line, builder, getLineStyles(cm, line));
|
4280 |
+
if (measure && line == realLine && !builder.measuredSomething) {
|
4281 |
+
measure[0] = builder.pre.appendChild(zeroWidthElement(cm.display.measure));
|
4282 |
+
builder.measuredSomething = true;
|
4283 |
+
}
|
4284 |
+
if (next) line = getLine(cm.doc, next.to.line);
|
4285 |
+
} while (next);
|
4286 |
+
|
4287 |
+
if (measure && !builder.measuredSomething && !measure[0])
|
4288 |
+
measure[0] = builder.pre.appendChild(empty ? elt("span", "\u00a0") : zeroWidthElement(cm.display.measure));
|
4289 |
+
if (!builder.pre.firstChild && !lineIsHidden(cm.doc, realLine))
|
4290 |
+
builder.pre.appendChild(document.createTextNode("\u00a0"));
|
4291 |
+
|
4292 |
+
var order;
|
4293 |
+
// Work around problem with the reported dimensions of single-char
|
4294 |
+
// direction spans on IE (issue #1129). See also the comment in
|
4295 |
+
// cursorCoords.
|
4296 |
+
if (measure && ie && (order = getOrder(line))) {
|
4297 |
+
var l = order.length - 1;
|
4298 |
+
if (order[l].from == order[l].to) --l;
|
4299 |
+
var last = order[l], prev = order[l - 1];
|
4300 |
+
if (last.from + 1 == last.to && prev && last.level < prev.level) {
|
4301 |
+
var span = measure[builder.pos - 1];
|
4302 |
+
if (span) span.parentNode.insertBefore(span.measureRight = zeroWidthElement(cm.display.measure),
|
4303 |
+
span.nextSibling);
|
4304 |
+
}
|
4305 |
+
}
|
4306 |
+
|
4307 |
+
signal(cm, "renderLine", cm, realLine, builder.pre);
|
4308 |
+
return builder.pre;
|
4309 |
+
}
|
4310 |
+
|
4311 |
+
var tokenSpecialChars = /[\t\u0000-\u0019\u00ad\u200b\u2028\u2029\uFEFF]/g;
|
4312 |
+
function buildToken(builder, text, style, startStyle, endStyle, title) {
|
4313 |
+
if (!text) return;
|
4314 |
+
if (!tokenSpecialChars.test(text)) {
|
4315 |
+
builder.col += text.length;
|
4316 |
+
var content = document.createTextNode(text);
|
4317 |
+
} else {
|
4318 |
+
var content = document.createDocumentFragment(), pos = 0;
|
4319 |
+
while (true) {
|
4320 |
+
tokenSpecialChars.lastIndex = pos;
|
4321 |
+
var m = tokenSpecialChars.exec(text);
|
4322 |
+
var skipped = m ? m.index - pos : text.length - pos;
|
4323 |
+
if (skipped) {
|
4324 |
+
content.appendChild(document.createTextNode(text.slice(pos, pos + skipped)));
|
4325 |
+
builder.col += skipped;
|
4326 |
+
}
|
4327 |
+
if (!m) break;
|
4328 |
+
pos += skipped + 1;
|
4329 |
+
if (m[0] == "\t") {
|
4330 |
+
var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;
|
4331 |
+
content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab"));
|
4332 |
+
builder.col += tabWidth;
|
4333 |
+
} else {
|
4334 |
+
var token = elt("span", "\u2022", "cm-invalidchar");
|
4335 |
+
token.title = "\\u" + m[0].charCodeAt(0).toString(16);
|
4336 |
+
content.appendChild(token);
|
4337 |
+
builder.col += 1;
|
4338 |
+
}
|
4339 |
+
}
|
4340 |
+
}
|
4341 |
+
if (style || startStyle || endStyle || builder.measure) {
|
4342 |
+
var fullStyle = style || "";
|
4343 |
+
if (startStyle) fullStyle += startStyle;
|
4344 |
+
if (endStyle) fullStyle += endStyle;
|
4345 |
+
var token = elt("span", [content], fullStyle);
|
4346 |
+
if (title) token.title = title;
|
4347 |
+
return builder.pre.appendChild(token);
|
4348 |
+
}
|
4349 |
+
builder.pre.appendChild(content);
|
4350 |
+
}
|
4351 |
+
|
4352 |
+
function buildTokenMeasure(builder, text, style, startStyle, endStyle) {
|
4353 |
+
var wrapping = builder.cm.options.lineWrapping;
|
4354 |
+
for (var i = 0; i < text.length; ++i) {
|
4355 |
+
var ch = text.charAt(i), start = i == 0;
|
4356 |
+
if (ch >= "\ud800" && ch < "\udbff" && i < text.length - 1) {
|
4357 |
+
ch = text.slice(i, i + 2);
|
4358 |
+
++i;
|
4359 |
+
} else if (i && wrapping && spanAffectsWrapping(text, i)) {
|
4360 |
+
builder.pre.appendChild(elt("wbr"));
|
4361 |
+
}
|
4362 |
+
var old = builder.measure[builder.pos];
|
4363 |
+
var span = builder.measure[builder.pos] =
|
4364 |
+
buildToken(builder, ch, style,
|
4365 |
+
start && startStyle, i == text.length - 1 && endStyle);
|
4366 |
+
if (old) span.leftSide = old.leftSide || old;
|
4367 |
+
// In IE single-space nodes wrap differently than spaces
|
4368 |
+
// embedded in larger text nodes, except when set to
|
4369 |
+
// white-space: normal (issue #1268).
|
4370 |
+
if (ie && wrapping && ch == " " && i && !/\s/.test(text.charAt(i - 1)) &&
|
4371 |
+
i < text.length - 1 && !/\s/.test(text.charAt(i + 1)))
|
4372 |
+
span.style.whiteSpace = "normal";
|
4373 |
+
builder.pos += ch.length;
|
4374 |
+
}
|
4375 |
+
if (text.length) builder.measuredSomething = true;
|
4376 |
+
}
|
4377 |
+
|
4378 |
+
function buildTokenSplitSpaces(inner) {
|
4379 |
+
function split(old) {
|
4380 |
+
var out = " ";
|
4381 |
+
for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? " " : "\u00a0";
|
4382 |
+
out += " ";
|
4383 |
+
return out;
|
4384 |
+
}
|
4385 |
+
return function(builder, text, style, startStyle, endStyle, title) {
|
4386 |
+
return inner(builder, text.replace(/ {3,}/, split), style, startStyle, endStyle, title);
|
4387 |
+
};
|
4388 |
+
}
|
4389 |
+
|
4390 |
+
function buildCollapsedSpan(builder, size, marker, ignoreWidget) {
|
4391 |
+
var widget = !ignoreWidget && marker.replacedWith;
|
4392 |
+
if (widget) {
|
4393 |
+
if (builder.copyWidgets) widget = widget.cloneNode(true);
|
4394 |
+
builder.pre.appendChild(widget);
|
4395 |
+
if (builder.measure) {
|
4396 |
+
if (size) {
|
4397 |
+
builder.measure[builder.pos] = widget;
|
4398 |
+
} else {
|
4399 |
+
var elt = builder.measure[builder.pos] = zeroWidthElement(builder.cm.display.measure);
|
4400 |
+
if (marker.type != "bookmark" || marker.insertLeft)
|
4401 |
+
builder.pre.insertBefore(elt, widget);
|
4402 |
+
else
|
4403 |
+
builder.pre.appendChild(elt);
|
4404 |
+
}
|
4405 |
+
builder.measuredSomething = true;
|
4406 |
+
}
|
4407 |
+
}
|
4408 |
+
builder.pos += size;
|
4409 |
+
}
|
4410 |
+
|
4411 |
+
// Outputs a number of spans to make up a line, taking highlighting
|
4412 |
+
// and marked text into account.
|
4413 |
+
function insertLineContent(line, builder, styles) {
|
4414 |
+
var spans = line.markedSpans, allText = line.text, at = 0;
|
4415 |
+
if (!spans) {
|
4416 |
+
for (var i = 1; i < styles.length; i+=2)
|
4417 |
+
builder.addToken(builder, allText.slice(at, at = styles[i]), styleToClass(styles[i+1]));
|
4418 |
+
return;
|
4419 |
+
}
|
4420 |
+
|
4421 |
+
var len = allText.length, pos = 0, i = 1, text = "", style;
|
4422 |
+
var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed;
|
4423 |
+
for (;;) {
|
4424 |
+
if (nextChange == pos) { // Update current marker set
|
4425 |
+
spanStyle = spanEndStyle = spanStartStyle = title = "";
|
4426 |
+
collapsed = null; nextChange = Infinity;
|
4427 |
+
var foundBookmark = null;
|
4428 |
+
for (var j = 0; j < spans.length; ++j) {
|
4429 |
+
var sp = spans[j], m = sp.marker;
|
4430 |
+
if (sp.from <= pos && (sp.to == null || sp.to > pos)) {
|
4431 |
+
if (sp.to != null && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; }
|
4432 |
+
if (m.className) spanStyle += " " + m.className;
|
4433 |
+
if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle;
|
4434 |
+
if (m.endStyle && sp.to == nextChange) spanEndStyle += " " + m.endStyle;
|
4435 |
+
if (m.title && !title) title = m.title;
|
4436 |
+
if (m.collapsed && (!collapsed || collapsed.marker.size < m.size))
|
4437 |
+
collapsed = sp;
|
4438 |
+
} else if (sp.from > pos && nextChange > sp.from) {
|
4439 |
+
nextChange = sp.from;
|
4440 |
+
}
|
4441 |
+
if (m.type == "bookmark" && sp.from == pos && m.replacedWith) foundBookmark = m;
|
4442 |
+
}
|
4443 |
+
if (collapsed && (collapsed.from || 0) == pos) {
|
4444 |
+
buildCollapsedSpan(builder, (collapsed.to == null ? len : collapsed.to) - pos,
|
4445 |
+
collapsed.marker, collapsed.from == null);
|
4446 |
+
if (collapsed.to == null) return collapsed.marker.find();
|
4447 |
+
}
|
4448 |
+
if (foundBookmark && !collapsed) buildCollapsedSpan(builder, 0, foundBookmark);
|
4449 |
+
}
|
4450 |
+
if (pos >= len) break;
|
4451 |
+
|
4452 |
+
var upto = Math.min(len, nextChange);
|
4453 |
+
while (true) {
|
4454 |
+
if (text) {
|
4455 |
+
var end = pos + text.length;
|
4456 |
+
if (!collapsed) {
|
4457 |
+
var tokenText = end > upto ? text.slice(0, upto - pos) : text;
|
4458 |
+
builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,
|
4459 |
+
spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title);
|
4460 |
+
}
|
4461 |
+
if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;}
|
4462 |
+
pos = end;
|
4463 |
+
spanStartStyle = "";
|
4464 |
+
}
|
4465 |
+
text = allText.slice(at, at = styles[i++]);
|
4466 |
+
style = styleToClass(styles[i++]);
|
4467 |
+
}
|
4468 |
+
}
|
4469 |
+
}
|
4470 |
+
|
4471 |
+
// DOCUMENT DATA STRUCTURE
|
4472 |
+
|
4473 |
+
function updateDoc(doc, change, markedSpans, selAfter, estimateHeight) {
|
4474 |
+
function spansFor(n) {return markedSpans ? markedSpans[n] : null;}
|
4475 |
+
function update(line, text, spans) {
|
4476 |
+
updateLine(line, text, spans, estimateHeight);
|
4477 |
+
signalLater(line, "change", line, change);
|
4478 |
+
}
|
4479 |
+
|
4480 |
+
var from = change.from, to = change.to, text = change.text;
|
4481 |
+
var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);
|
4482 |
+
var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;
|
4483 |
+
|
4484 |
+
// First adjust the line structure
|
4485 |
+
if (from.ch == 0 && to.ch == 0 && lastText == "") {
|
4486 |
+
// This is a whole-line replace. Treated specially to make
|
4487 |
+
// sure line objects move the way they are supposed to.
|
4488 |
+
for (var i = 0, e = text.length - 1, added = []; i < e; ++i)
|
4489 |
+
added.push(new Line(text[i], spansFor(i), estimateHeight));
|
4490 |
+
update(lastLine, lastLine.text, lastSpans);
|
4491 |
+
if (nlines) doc.remove(from.line, nlines);
|
4492 |
+
if (added.length) doc.insert(from.line, added);
|
4493 |
+
} else if (firstLine == lastLine) {
|
4494 |
+
if (text.length == 1) {
|
4495 |
+
update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);
|
4496 |
+
} else {
|
4497 |
+
for (var added = [], i = 1, e = text.length - 1; i < e; ++i)
|
4498 |
+
added.push(new Line(text[i], spansFor(i), estimateHeight));
|
4499 |
+
added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));
|
4500 |
+
update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
|
4501 |
+
doc.insert(from.line + 1, added);
|
4502 |
+
}
|
4503 |
+
} else if (text.length == 1) {
|
4504 |
+
update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));
|
4505 |
+
doc.remove(from.line + 1, nlines);
|
4506 |
+
} else {
|
4507 |
+
update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
|
4508 |
+
update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);
|
4509 |
+
for (var i = 1, e = text.length - 1, added = []; i < e; ++i)
|
4510 |
+
added.push(new Line(text[i], spansFor(i), estimateHeight));
|
4511 |
+
if (nlines > 1) doc.remove(from.line + 1, nlines - 1);
|
4512 |
+
doc.insert(from.line + 1, added);
|
4513 |
+
}
|
4514 |
+
|
4515 |
+
signalLater(doc, "change", doc, change);
|
4516 |
+
setSelection(doc, selAfter.anchor, selAfter.head, null, true);
|
4517 |
+
}
|
4518 |
+
|
4519 |
+
function LeafChunk(lines) {
|
4520 |
+
this.lines = lines;
|
4521 |
+
this.parent = null;
|
4522 |
+
for (var i = 0, e = lines.length, height = 0; i < e; ++i) {
|
4523 |
+
lines[i].parent = this;
|
4524 |
+
height += lines[i].height;
|
4525 |
+
}
|
4526 |
+
this.height = height;
|
4527 |
+
}
|
4528 |
+
|
4529 |
+
LeafChunk.prototype = {
|
4530 |
+
chunkSize: function() { return this.lines.length; },
|
4531 |
+
removeInner: function(at, n) {
|
4532 |
+
for (var i = at, e = at + n; i < e; ++i) {
|
4533 |
+
var line = this.lines[i];
|
4534 |
+
this.height -= line.height;
|
4535 |
+
cleanUpLine(line);
|
4536 |
+
signalLater(line, "delete");
|
4537 |
+
}
|
4538 |
+
this.lines.splice(at, n);
|
4539 |
+
},
|
4540 |
+
collapse: function(lines) {
|
4541 |
+
lines.splice.apply(lines, [lines.length, 0].concat(this.lines));
|
4542 |
+
},
|
4543 |
+
insertInner: function(at, lines, height) {
|
4544 |
+
this.height += height;
|
4545 |
+
this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));
|
4546 |
+
for (var i = 0, e = lines.length; i < e; ++i) lines[i].parent = this;
|
4547 |
+
},
|
4548 |
+
iterN: function(at, n, op) {
|
4549 |
+
for (var e = at + n; at < e; ++at)
|
4550 |
+
if (op(this.lines[at])) return true;
|
4551 |
+
}
|
4552 |
+
};
|
4553 |
+
|
4554 |
+
function BranchChunk(children) {
|
4555 |
+
this.children = children;
|
4556 |
+
var size = 0, height = 0;
|
4557 |
+
for (var i = 0, e = children.length; i < e; ++i) {
|
4558 |
+
var ch = children[i];
|
4559 |
+
size += ch.chunkSize(); height += ch.height;
|
4560 |
+
ch.parent = this;
|
4561 |
+
}
|
4562 |
+
this.size = size;
|
4563 |
+
this.height = height;
|
4564 |
+
this.parent = null;
|
4565 |
+
}
|
4566 |
+
|
4567 |
+
BranchChunk.prototype = {
|
4568 |
+
chunkSize: function() { return this.size; },
|
4569 |
+
removeInner: function(at, n) {
|
4570 |
+
this.size -= n;
|
4571 |
+
for (var i = 0; i < this.children.length; ++i) {
|
4572 |
+
var child = this.children[i], sz = child.chunkSize();
|
4573 |
+
if (at < sz) {
|
4574 |
+
var rm = Math.min(n, sz - at), oldHeight = child.height;
|
4575 |
+
child.removeInner(at, rm);
|
4576 |
+
this.height -= oldHeight - child.height;
|
4577 |
+
if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }
|
4578 |
+
if ((n -= rm) == 0) break;
|
4579 |
+
at = 0;
|
4580 |
+
} else at -= sz;
|
4581 |
+
}
|
4582 |
+
if (this.size - n < 25) {
|
4583 |
+
var lines = [];
|
4584 |
+
this.collapse(lines);
|
4585 |
+
this.children = [new LeafChunk(lines)];
|
4586 |
+
this.children[0].parent = this;
|
4587 |
+
}
|
4588 |
+
},
|
4589 |
+
collapse: function(lines) {
|
4590 |
+
for (var i = 0, e = this.children.length; i < e; ++i) this.children[i].collapse(lines);
|
4591 |
+
},
|
4592 |
+
insertInner: function(at, lines, height) {
|
4593 |
+
this.size += lines.length;
|
4594 |
+
this.height += height;
|
4595 |
+
for (var i = 0, e = this.children.length; i < e; ++i) {
|
4596 |
+
var child = this.children[i], sz = child.chunkSize();
|
4597 |
+
if (at <= sz) {
|
4598 |
+
child.insertInner(at, lines, height);
|
4599 |
+
if (child.lines && child.lines.length > 50) {
|
4600 |
+
while (child.lines.length > 50) {
|
4601 |
+
var spilled = child.lines.splice(child.lines.length - 25, 25);
|
4602 |
+
var newleaf = new LeafChunk(spilled);
|
4603 |
+
child.height -= newleaf.height;
|
4604 |
+
this.children.splice(i + 1, 0, newleaf);
|
4605 |
+
newleaf.parent = this;
|
4606 |
+
}
|
4607 |
+
this.maybeSpill();
|
4608 |
+
}
|
4609 |
+
break;
|
4610 |
+
}
|
4611 |
+
at -= sz;
|
4612 |
+
}
|
4613 |
+
},
|
4614 |
+
maybeSpill: function() {
|
4615 |
+
if (this.children.length <= 10) return;
|
4616 |
+
var me = this;
|
4617 |
+
do {
|
4618 |
+
var spilled = me.children.splice(me.children.length - 5, 5);
|
4619 |
+
var sibling = new BranchChunk(spilled);
|
4620 |
+
if (!me.parent) { // Become the parent node
|
4621 |
+
var copy = new BranchChunk(me.children);
|
4622 |
+
copy.parent = me;
|
4623 |
+
me.children = [copy, sibling];
|
4624 |
+
me = copy;
|
4625 |
+
} else {
|
4626 |
+
me.size -= sibling.size;
|
4627 |
+
me.height -= sibling.height;
|
4628 |
+
var myIndex = indexOf(me.parent.children, me);
|
4629 |
+
me.parent.children.splice(myIndex + 1, 0, sibling);
|
4630 |
+
}
|
4631 |
+
sibling.parent = me.parent;
|
4632 |
+
} while (me.children.length > 10);
|
4633 |
+
me.parent.maybeSpill();
|
4634 |
+
},
|
4635 |
+
iterN: function(at, n, op) {
|
4636 |
+
for (var i = 0, e = this.children.length; i < e; ++i) {
|
4637 |
+
var child = this.children[i], sz = child.chunkSize();
|
4638 |
+
if (at < sz) {
|
4639 |
+
var used = Math.min(n, sz - at);
|
4640 |
+
if (child.iterN(at, used, op)) return true;
|
4641 |
+
if ((n -= used) == 0) break;
|
4642 |
+
at = 0;
|
4643 |
+
} else at -= sz;
|
4644 |
+
}
|
4645 |
+
}
|
4646 |
+
};
|
4647 |
+
|
4648 |
+
var nextDocId = 0;
|
4649 |
+
var Doc = CodeMirror.Doc = function(text, mode, firstLine) {
|
4650 |
+
if (!(this instanceof Doc)) return new Doc(text, mode, firstLine);
|
4651 |
+
if (firstLine == null) firstLine = 0;
|
4652 |
+
|
4653 |
+
BranchChunk.call(this, [new LeafChunk([new Line("", null)])]);
|
4654 |
+
this.first = firstLine;
|
4655 |
+
this.scrollTop = this.scrollLeft = 0;
|
4656 |
+
this.cantEdit = false;
|
4657 |
+
this.history = makeHistory();
|
4658 |
+
this.cleanGeneration = 1;
|
4659 |
+
this.frontier = firstLine;
|
4660 |
+
var start = Pos(firstLine, 0);
|
4661 |
+
this.sel = {from: start, to: start, head: start, anchor: start, shift: false, extend: false, goalColumn: null};
|
4662 |
+
this.id = ++nextDocId;
|
4663 |
+
this.modeOption = mode;
|
4664 |
+
|
4665 |
+
if (typeof text == "string") text = splitLines(text);
|
4666 |
+
updateDoc(this, {from: start, to: start, text: text}, null, {head: start, anchor: start});
|
4667 |
+
};
|
4668 |
+
|
4669 |
+
Doc.prototype = createObj(BranchChunk.prototype, {
|
4670 |
+
constructor: Doc,
|
4671 |
+
iter: function(from, to, op) {
|
4672 |
+
if (op) this.iterN(from - this.first, to - from, op);
|
4673 |
+
else this.iterN(this.first, this.first + this.size, from);
|
4674 |
+
},
|
4675 |
+
|
4676 |
+
insert: function(at, lines) {
|
4677 |
+
var height = 0;
|
4678 |
+
for (var i = 0, e = lines.length; i < e; ++i) height += lines[i].height;
|
4679 |
+
this.insertInner(at - this.first, lines, height);
|
4680 |
+
},
|
4681 |
+
remove: function(at, n) { this.removeInner(at - this.first, n); },
|
4682 |
+
|
4683 |
+
getValue: function(lineSep) {
|
4684 |
+
var lines = getLines(this, this.first, this.first + this.size);
|
4685 |
+
if (lineSep === false) return lines;
|
4686 |
+
return lines.join(lineSep || "\n");
|
4687 |
+
},
|
4688 |
+
setValue: function(code) {
|
4689 |
+
var top = Pos(this.first, 0), last = this.first + this.size - 1;
|
4690 |
+
makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),
|
4691 |
+
text: splitLines(code), origin: "setValue"},
|
4692 |
+
{head: top, anchor: top}, true);
|
4693 |
+
},
|
4694 |
+
replaceRange: function(code, from, to, origin) {
|
4695 |
+
from = clipPos(this, from);
|
4696 |
+
to = to ? clipPos(this, to) : from;
|
4697 |
+
replaceRange(this, code, from, to, origin);
|
4698 |
+
},
|
4699 |
+
getRange: function(from, to, lineSep) {
|
4700 |
+
var lines = getBetween(this, clipPos(this, from), clipPos(this, to));
|
4701 |
+
if (lineSep === false) return lines;
|
4702 |
+
return lines.join(lineSep || "\n");
|
4703 |
+
},
|
4704 |
+
|
4705 |
+
getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;},
|
4706 |
+
setLine: function(line, text) {
|
4707 |
+
if (isLine(this, line))
|
4708 |
+
replaceRange(this, text, Pos(line, 0), clipPos(this, Pos(line)));
|
4709 |
+
},
|
4710 |
+
removeLine: function(line) {
|
4711 |
+
if (line) replaceRange(this, "", clipPos(this, Pos(line - 1)), clipPos(this, Pos(line)));
|
4712 |
+
else replaceRange(this, "", Pos(0, 0), clipPos(this, Pos(1, 0)));
|
4713 |
+
},
|
4714 |
+
|
4715 |
+
getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);},
|
4716 |
+
getLineNumber: function(line) {return lineNo(line);},
|
4717 |
+
|
4718 |
+
getLineHandleVisualStart: function(line) {
|
4719 |
+
if (typeof line == "number") line = getLine(this, line);
|
4720 |
+
return visualLine(this, line);
|
4721 |
+
},
|
4722 |
+
|
4723 |
+
lineCount: function() {return this.size;},
|
4724 |
+
firstLine: function() {return this.first;},
|
4725 |
+
lastLine: function() {return this.first + this.size - 1;},
|
4726 |
+
|
4727 |
+
clipPos: function(pos) {return clipPos(this, pos);},
|
4728 |
+
|
4729 |
+
getCursor: function(start) {
|
4730 |
+
var sel = this.sel, pos;
|
4731 |
+
if (start == null || start == "head") pos = sel.head;
|
4732 |
+
else if (start == "anchor") pos = sel.anchor;
|
4733 |
+
else if (start == "end" || start === false) pos = sel.to;
|
4734 |
+
else pos = sel.from;
|
4735 |
+
return copyPos(pos);
|
4736 |
+
},
|
4737 |
+
somethingSelected: function() {return !posEq(this.sel.head, this.sel.anchor);},
|
4738 |
+
|
4739 |
+
setCursor: docOperation(function(line, ch, extend) {
|
4740 |
+
var pos = clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line);
|
4741 |
+
if (extend) extendSelection(this, pos);
|
4742 |
+
else setSelection(this, pos, pos);
|
4743 |
+
}),
|
4744 |
+
setSelection: docOperation(function(anchor, head) {
|
4745 |
+
setSelection(this, clipPos(this, anchor), clipPos(this, head || anchor));
|
4746 |
+
}),
|
4747 |
+
extendSelection: docOperation(function(from, to) {
|
4748 |
+
extendSelection(this, clipPos(this, from), to && clipPos(this, to));
|
4749 |
+
}),
|
4750 |
+
|
4751 |
+
getSelection: function(lineSep) {return this.getRange(this.sel.from, this.sel.to, lineSep);},
|
4752 |
+
replaceSelection: function(code, collapse, origin) {
|
4753 |
+
makeChange(this, {from: this.sel.from, to: this.sel.to, text: splitLines(code), origin: origin}, collapse || "around");
|
4754 |
+
},
|
4755 |
+
undo: docOperation(function() {makeChangeFromHistory(this, "undo");}),
|
4756 |
+
redo: docOperation(function() {makeChangeFromHistory(this, "redo");}),
|
4757 |
+
|
4758 |
+
setExtending: function(val) {this.sel.extend = val;},
|
4759 |
+
|
4760 |
+
historySize: function() {
|
4761 |
+
var hist = this.history;
|
4762 |
+
return {undo: hist.done.length, redo: hist.undone.length};
|
4763 |
+
},
|
4764 |
+
clearHistory: function() {this.history = makeHistory(this.history.maxGeneration);},
|
4765 |
+
|
4766 |
+
markClean: function() {
|
4767 |
+
this.cleanGeneration = this.changeGeneration();
|
4768 |
+
},
|
4769 |
+
changeGeneration: function() {
|
4770 |
+
this.history.lastOp = this.history.lastOrigin = null;
|
4771 |
+
return this.history.generation;
|
4772 |
+
},
|
4773 |
+
isClean: function (gen) {
|
4774 |
+
return this.history.generation == (gen || this.cleanGeneration);
|
4775 |
+
},
|
4776 |
+
|
4777 |
+
getHistory: function() {
|
4778 |
+
return {done: copyHistoryArray(this.history.done),
|
4779 |
+
undone: copyHistoryArray(this.history.undone)};
|
4780 |
+
},
|
4781 |
+
setHistory: function(histData) {
|
4782 |
+
var hist = this.history = makeHistory(this.history.maxGeneration);
|
4783 |
+
hist.done = histData.done.slice(0);
|
4784 |
+
his
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|