Version Notes
Started
Download this release
Release Info
Developer | Magento Core Team |
Extension | Dexxtz_Product_Zoom |
Version | 1.0.0 |
Comparing to | |
See all releases |
Version 1.0.0
- app/code/community/Dexxtz/Productzoom/Helper/Data.php +365 -0
- app/code/community/Dexxtz/Productzoom/Model/System/Config/Source/Description/Position.php +20 -0
- app/code/community/Dexxtz/Productzoom/Model/System/Config/Source/Thumbnails/Position.php +22 -0
- app/code/community/Dexxtz/Productzoom/Model/System/Config/Source/Thumbnails/Qty.php +28 -0
- app/code/community/Dexxtz/Productzoom/etc/config.xml +179 -0
- app/code/community/Dexxtz/Productzoom/etc/system.xml +446 -0
- app/code/community/Dexxtz/Productzoom/sql/dexxtz_productzoom_setup/mysql4-install-1.0.0.php +39 -0
- app/design/adminhtml/default/default/layout/dexxtz/productzoom.xml +33 -0
- app/design/frontend/base/default/layout/dexxtz/productzoom.xml +54 -0
- app/design/frontend/base/default/template/dexxtz/productzoom/media.phtml +37 -0
- app/design/frontend/base/default/template/dexxtz/productzoom/modal.phtml +27 -0
- app/etc/modules/Dexxtz_Productzoom.xml +18 -0
- app/locale/en_US/Dexxtz_Productzoom.csv +83 -0
- app/locale/pt_BR/Dexxtz_Productzoom.csv +83 -0
- package.xml +21 -0
- skin/adminhtml/default/default/dexxtz/productzoom/images/arrow.gif +0 -0
- skin/adminhtml/default/default/dexxtz/productzoom/images/cross.gif +0 -0
- skin/adminhtml/default/default/dexxtz/productzoom/images/hs.png +0 -0
- skin/adminhtml/default/default/dexxtz/productzoom/images/hv.png +0 -0
- skin/adminhtml/default/default/dexxtz/productzoom/js/color.js +995 -0
- skin/frontend/base/default/dexxtz/productzoom/css/dexxtz.css +18 -0
- skin/frontend/base/default/dexxtz/productzoom/css/etalage.css +113 -0
- skin/frontend/base/default/dexxtz/productzoom/images/close.png +0 -0
- skin/frontend/base/default/dexxtz/productzoom/images/loading.gif +0 -0
- skin/frontend/base/default/dexxtz/productzoom/images/play.jpg +0 -0
- skin/frontend/base/default/dexxtz/productzoom/images/zoom.png +0 -0
- skin/frontend/base/default/dexxtz/productzoom/js/dexxtz-modal.js +40 -0
- skin/frontend/base/default/dexxtz/productzoom/js/jquery-2.1.1.js +4 -0
- skin/frontend/base/default/dexxtz/productzoom/js/jquery.etalage.min.js +37 -0
app/code/community/Dexxtz/Productzoom/Helper/Data.php
ADDED
@@ -0,0 +1,365 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Copyright [2015] [Dexxtz]
|
5 |
+
*
|
6 |
+
* @package Dexxtz_Productzoom
|
7 |
+
* @author Dexxtz
|
8 |
+
* @license http://www.apache.org/licenses/LICENSE-2.0
|
9 |
+
*/
|
10 |
+
|
11 |
+
class Dexxtz_Productzoom_Helper_Data extends Mage_Core_Helper_Abstract
|
12 |
+
{
|
13 |
+
public function getActive()
|
14 |
+
{
|
15 |
+
$active = Mage::getStoreConfig('dexxtz_productzoom/general/active');
|
16 |
+
|
17 |
+
return $active;
|
18 |
+
}
|
19 |
+
|
20 |
+
private function getAutoplay()
|
21 |
+
{
|
22 |
+
$value = Mage::getStoreConfig('dexxtz_productzoom/general/autoplay');
|
23 |
+
$autoplay = ($value == true) ? 'true' : 'false';
|
24 |
+
|
25 |
+
return $autoplay;
|
26 |
+
}
|
27 |
+
|
28 |
+
private function getAutoplayInterval()
|
29 |
+
{
|
30 |
+
$value = Mage::getStoreConfig('dexxtz_productzoom/general/autoplay_interval');
|
31 |
+
$autoplayInterval = ($value) ? $value : 6000;
|
32 |
+
|
33 |
+
return $autoplayInterval;
|
34 |
+
}
|
35 |
+
|
36 |
+
private function getFadeInterval()
|
37 |
+
{
|
38 |
+
$value = Mage::getStoreConfig('dexxtz_productzoom/general/fadein_interval');
|
39 |
+
$fadeInterval = ($value) ? $value : 0;
|
40 |
+
|
41 |
+
return $fadeInterval;
|
42 |
+
}
|
43 |
+
|
44 |
+
private function getShowIcon()
|
45 |
+
{
|
46 |
+
$value = Mage::getStoreConfig('dexxtz_productzoom/general/magnifier_icon');
|
47 |
+
$magnifierIcon = ($value == true) ? 'true' : 'false';
|
48 |
+
|
49 |
+
return $magnifierIcon;
|
50 |
+
}
|
51 |
+
|
52 |
+
private function getFeaturedWidth()
|
53 |
+
{
|
54 |
+
$value = Mage::getStoreConfig('dexxtz_productzoom/featured_settings/featured_width');
|
55 |
+
$featuredWidth = ($value) ? $value : '300';
|
56 |
+
|
57 |
+
return $featuredWidth;
|
58 |
+
}
|
59 |
+
|
60 |
+
private function getFeaturedHeight()
|
61 |
+
{
|
62 |
+
$value = Mage::getStoreConfig('dexxtz_productzoom/featured_settings/featured_height');
|
63 |
+
$featuredHeight = ($value) ? $value : '300';
|
64 |
+
|
65 |
+
return $featuredHeight;
|
66 |
+
}
|
67 |
+
|
68 |
+
private function getThubnailsQty()
|
69 |
+
{
|
70 |
+
$qty = Mage::getStoreConfig('dexxtz_productzoom/thumbnails_settings/thumbnails_qty');
|
71 |
+
$qty = ($this->getVideoActive() == 1) ? $qty + 1: $qty;
|
72 |
+
|
73 |
+
return $qty;
|
74 |
+
}
|
75 |
+
|
76 |
+
private function getThubnailsPosition()
|
77 |
+
{
|
78 |
+
$position = Mage::getStoreConfig('dexxtz_productzoom/thumbnails_settings/thumbnails_position');
|
79 |
+
|
80 |
+
return $position;
|
81 |
+
}
|
82 |
+
|
83 |
+
private function getImageZoomWidth()
|
84 |
+
{
|
85 |
+
$value = Mage::getStoreConfig('dexxtz_productzoom/zoom_settings/zoom_image_width');
|
86 |
+
$zoomWidth = ($value) ? $value : 300;
|
87 |
+
|
88 |
+
return $zoomWidth;
|
89 |
+
}
|
90 |
+
|
91 |
+
private function getImageZoomHeight()
|
92 |
+
{
|
93 |
+
$value = Mage::getStoreConfig('dexxtz_productzoom/zoom_settings/zoom_image_height');
|
94 |
+
$zoomHeight = ($value) ? $value : 300;
|
95 |
+
|
96 |
+
return $zoomHeight;
|
97 |
+
}
|
98 |
+
|
99 |
+
private function getZoomAreaWidth()
|
100 |
+
{
|
101 |
+
$value = Mage::getStoreConfig('dexxtz_productzoom/zoom_settings/zoom_area_width');
|
102 |
+
$areaWidth = ($value) ? $value : 500;
|
103 |
+
|
104 |
+
return $areaWidth;
|
105 |
+
}
|
106 |
+
|
107 |
+
private function getZoomAreaHeight()
|
108 |
+
{
|
109 |
+
$value = Mage::getStoreConfig('dexxtz_productzoom/zoom_settings/zoom_area_height');
|
110 |
+
$areaHeight = ($value) ? $value : null;
|
111 |
+
|
112 |
+
return $areaHeight;
|
113 |
+
}
|
114 |
+
|
115 |
+
private function getDescriptionActive()
|
116 |
+
{
|
117 |
+
$active = Mage::getStoreConfig('dexxtz_productzoom/zoom_settings/description_active');
|
118 |
+
if ($active == 0) {
|
119 |
+
$js = ' show_descriptions: false,';
|
120 |
+
}
|
121 |
+
|
122 |
+
return $js;
|
123 |
+
}
|
124 |
+
|
125 |
+
private function getDescriptionPosition()
|
126 |
+
{
|
127 |
+
$position = Mage::getStoreConfig('dexxtz_productzoom/zoom_settings/description_position');
|
128 |
+
|
129 |
+
return $position;
|
130 |
+
}
|
131 |
+
|
132 |
+
private function getDescriptionOpacity()
|
133 |
+
{
|
134 |
+
$opacity = Mage::getStoreConfig('dexxtz_productzoom/zoom_settings/description_opacity');
|
135 |
+
|
136 |
+
return $opacity;
|
137 |
+
}
|
138 |
+
|
139 |
+
private function getOpacityInative()
|
140 |
+
{
|
141 |
+
$value = Mage::getStoreConfig('dexxtz_productzoom/css_settings/opacity_inative');
|
142 |
+
$opacityInative = ($value) ? $value : '0.3';
|
143 |
+
|
144 |
+
return $opacityInative;
|
145 |
+
}
|
146 |
+
|
147 |
+
private function getOpacityMagnifier()
|
148 |
+
{
|
149 |
+
$value = Mage::getStoreConfig('dexxtz_productzoom/css_settings/opacity_magnifier');
|
150 |
+
$opacityMagnifier = ($value) ? $value : '0.5';
|
151 |
+
|
152 |
+
return $opacityMagnifier;
|
153 |
+
}
|
154 |
+
|
155 |
+
public function getCss()
|
156 |
+
{
|
157 |
+
$border = Mage::getStoreConfig('dexxtz_productzoom/css_settings/border');
|
158 |
+
$box = Mage::getStoreConfig('dexxtz_productzoom/css_settings/box_shadow');
|
159 |
+
|
160 |
+
$css = '<style type="text/css" media="all">' . "\r";
|
161 |
+
|
162 |
+
if ($border || $box) {
|
163 |
+
|
164 |
+
$cssBorder = ($border) ? 'border: ' . $border . '; ' : '';
|
165 |
+
$cssBox = ($box) ? 'box-shadow: ' . $box . '; ' : '';
|
166 |
+
|
167 |
+
$css .= ' #etalage .etalage_magnifier, ';
|
168 |
+
$css .= "\r" . ' #etalage .etalage_thumb, ';
|
169 |
+
$css .= "\r" . ' #etalage .etalage_small_thumbs li, ';
|
170 |
+
$css .= "\r" . ' #etalage .etalage_zoom_area { ' . $cssBorder . $cssBox . '}' . "\r";
|
171 |
+
}
|
172 |
+
|
173 |
+
$css .= $this->getDescriptionCss() . "\r";
|
174 |
+
$css .= ' .dexxtz_video img { opacity: ' . $this->getOpacityMagnifier() . '; }' . "\r";
|
175 |
+
$css .= ' .product-view .product-img-box { width: ' . $this->getFeaturedWidth() . 'px; }' . "\r";
|
176 |
+
$css .= '</style>' . "\r";
|
177 |
+
|
178 |
+
echo $css;
|
179 |
+
}
|
180 |
+
|
181 |
+
public function getJs()
|
182 |
+
{
|
183 |
+
$js = '<script type="text/javascript">' . "\r";
|
184 |
+
$js .= ' var jQuery = jQuery.noConflict();' . "\r";
|
185 |
+
$js .= ' jQuery(document).ready(function(jQuery){' . "\r";
|
186 |
+
$js .= ' jQuery("#etalage").etalage({' . "\r";
|
187 |
+
$js .= ' thumb_image_width: ' . $this->getFeaturedWidth() . ',' . "\r";
|
188 |
+
$js .= ' thumb_image_height: ' . $this->getFeaturedHeight() . ',' . "\r";
|
189 |
+
$js .= ' source_image_width: ' . $this->getImageZoomWidth() . ',' . "\r";
|
190 |
+
$js .= ' source_image_height: ' . $this->getImageZoomHeight() . ',' . "\r";
|
191 |
+
$js .= ' zoom_area_width: ' . $this->getZoomAreaWidth() . ',' . "\r";
|
192 |
+
$js .= ($hz = $this->getZoomAreaHeight()) ? ' zoom_area_height: ' . $hz . ',' . "\r" : null;
|
193 |
+
$js .= $this->getDescriptionActive(). "\r";
|
194 |
+
$js .= ' description_location: \'' . $this->getDescriptionPosition() . '\',' . "\r";
|
195 |
+
$js .= ' description_opacity: ' . $this->getDescriptionOpacity() . ',' . "\r";
|
196 |
+
$js .= ' small_thumbs: ' . $this->getThubnailsQty() . ',' . "\r";
|
197 |
+
$js .= ' smallthumb_inactive_opacity: ' . $this->getOpacityInative() . ',' . "\r";
|
198 |
+
$js .= ' smallthumbs_position: "' . $this->getThubnailsPosition() . '",' . "\r";
|
199 |
+
$js .= ' magnifier_opacity: ' . $this->getOpacityMagnifier() . ',' . "\r";
|
200 |
+
$js .= ' show_icon: ' . $this->getShowIcon() . ',' . "\r";
|
201 |
+
$js .= ' speed: ' . $this->getFadeInterval() . ',' . "\r";
|
202 |
+
$js .= ' autoplay: ' . $this->getAutoplay() . ',' . "\r";
|
203 |
+
$js .= ' autoplay_interval: ' . $this->getAutoplayInterval() . ',' . "\r";
|
204 |
+
$js .= ' });' . "\r\r";
|
205 |
+
|
206 |
+
$images = count(Mage::registry('current_product')->getMediaGalleryImages());
|
207 |
+
|
208 |
+
if ($this->getVideoActive() == 1 && $images > 1) {
|
209 |
+
$js .= $this->getVideoJs();
|
210 |
+
}
|
211 |
+
|
212 |
+
$js .= ' });' . "\r";
|
213 |
+
$js .= '</script>' . "\r";
|
214 |
+
|
215 |
+
echo $js;
|
216 |
+
}
|
217 |
+
|
218 |
+
private function getVideoActive()
|
219 |
+
{
|
220 |
+
$active = Mage::getStoreConfig('dexxtz_productzoom/video/active');
|
221 |
+
|
222 |
+
return $active;
|
223 |
+
}
|
224 |
+
|
225 |
+
public function getTabName()
|
226 |
+
{
|
227 |
+
$groupCollection = Mage::getModel('eav/entity_attribute_group')->getResourceCollection();
|
228 |
+
$groups = $groupCollection->addFilter('attribute_group_name', 'Video')->addFilter('attribute_set_id', 4);
|
229 |
+
|
230 |
+
if ($groups) {
|
231 |
+
$group = current($groups->getData());
|
232 |
+
if ($id = $group['attribute_group_id'])
|
233 |
+
$groupTabName = 'group_' . $id;
|
234 |
+
|
235 |
+
if ($this->getVideoActive() == 0) {
|
236 |
+
return $groupTabName;
|
237 |
+
} else {
|
238 |
+
if ($this->getActive() == 0) {
|
239 |
+
return $groupTabName;
|
240 |
+
}
|
241 |
+
}
|
242 |
+
}
|
243 |
+
}
|
244 |
+
|
245 |
+
private function getVideoJs()
|
246 |
+
{
|
247 |
+
$video = (Mage::registry('current_product')->getDexxtzVideo()) ? true : false;
|
248 |
+
$media = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA);
|
249 |
+
$imgValue = Mage::getStoreConfig('dexxtz_productzoom/video/image_upload');
|
250 |
+
$imgDefault = Mage::getBaseUrl('skin') . 'frontend/base/default/dexxtz/productzoom/images/play.jpg';
|
251 |
+
$img = ($imgValue) ? $media . 'dexxtz/productzoom/images/' .$imgValue : $imgDefault;
|
252 |
+
|
253 |
+
$js .= ' var video = "' . $video . '";' . "\r";
|
254 |
+
$js .= ' var position = "' . $this->getThubnailsPosition() . '";' . "\r";
|
255 |
+
$js .= ' var styleLi = \'style="\' + jQuery(\'.etalage_small_thumbs\').attr(\'style\') + \'"\';' . "\r";
|
256 |
+
$js .= ' var styleImg = \'style="\' + jQuery(\'.etalage_small_thumb\').attr(\'style\') + \'"\';' . "\r";
|
257 |
+
$js .= ' var imgTag = \'<img class="etalage_thumb_image" onclick="DexxtzModal(this)"\' + styleImg + \'src="' . $img .'" />\'' . "\r\r";
|
258 |
+
$js .= ' if (jQuery(\'.etalage_smallthumb_active\').length && video == true){' . "\r";
|
259 |
+
$js .= ' jQuery("ul#etalage").append(\'<li class="etalage_small_thumbs dexxtz_video"\' + styleLi + \'><ul><li>\' + imgTag + \'</li></ul></li>\');' . "\r\r";
|
260 |
+
$js .= ' }' . "\r";
|
261 |
+
$js .= ' var li = jQuery(".etalage_small_thumbs");' . "\r";
|
262 |
+
$js .= ' var img = jQuery(".dexxtz_video");' . "\r\r";
|
263 |
+
$js .= ' var newWidth = li.width() - img.width();' . "\r";
|
264 |
+
$js .= ' var newHeight = li.height() - img.height();' . "\r\r";
|
265 |
+
$js .= ' if (position == "top" || position == "bottom") {' . "\r";
|
266 |
+
$js .= ' jQuery("li.etalage_small_thumbs").css("width", newWidth + "px");' . "\r";
|
267 |
+
$js .= ' jQuery(".dexxtz_video").attr("style", position + ": 0; right: 0;");' . "\r";
|
268 |
+
$js .= ' } else {' . "\r";
|
269 |
+
$js .= ' jQuery("li.etalage_small_thumbs").css("height", newHeight + "px");' . "\r";
|
270 |
+
$js .= ' jQuery(".dexxtz_video").attr("style", position + ": 0; bottom: 0;");' . "\r";
|
271 |
+
$js .= ' }' . "\r";
|
272 |
+
|
273 |
+
return $js;
|
274 |
+
}
|
275 |
+
|
276 |
+
private function getDescriptionCss()
|
277 |
+
{
|
278 |
+
$bg = Mage::getStoreConfig('dexxtz_productzoom/zoom_settings/background_color');
|
279 |
+
$color = Mage::getStoreConfig('dexxtz_productzoom/zoom_settings/description_color');
|
280 |
+
|
281 |
+
$css .= ($bg) ? ' background-color: ' . $bg . ';' : '';
|
282 |
+
$css .= ($color) ? ' color: ' . $color . ';' : '';
|
283 |
+
$css = ($bg || $color) ? ' #etalage .etalage_description { ' . $css . ' }' : '';
|
284 |
+
|
285 |
+
return $css;
|
286 |
+
}
|
287 |
+
|
288 |
+
public function getVideoCss()
|
289 |
+
{
|
290 |
+
$bg = Mage::getStoreConfig('dexxtz_productzoom/video/background_color');
|
291 |
+
$op = Mage::getStoreConfig('dexxtz_productzoom/video/background_opacity');
|
292 |
+
$border = Mage::getStoreConfig('dexxtz_productzoom/video/border');
|
293 |
+
$box = Mage::getStoreConfig('dexxtz_productzoom/video/box_shadow');
|
294 |
+
$bgContent = Mage::getStoreConfig('dexxtz_productzoom/video/background_content');
|
295 |
+
|
296 |
+
$css = '<style type="text/css" media="all">' . "\r";
|
297 |
+
|
298 |
+
if ($bg || $op) {
|
299 |
+
$cssBg = ($bg) ? 'background-color: ' . $bg . '; ' : '';
|
300 |
+
$cssOp = ($op) ? 'opacity: ' . $op . '; ' : '';
|
301 |
+
$css .= ' .dexxtz-bg-modal { ' . $cssBg . $cssOp . '}' . "\r";
|
302 |
+
}
|
303 |
+
|
304 |
+
if ($border || $box || $bgContent) {
|
305 |
+
$cssBorder = ($border) ? 'border: ' . $border . '; ' : '';
|
306 |
+
$cssBox = ($box) ? 'box-shadow: ' . $box . '; ' : '';
|
307 |
+
$cssBgContent = ($bgContent) ? 'background-color: ' . $bgContent . '; ' : '';
|
308 |
+
$css .= ' .dexxtz-modal-content div { ' . $cssBorder . $cssBox . $cssBgContent . '}' . "\r";
|
309 |
+
}
|
310 |
+
|
311 |
+
$css .= '</style>' . "\r";
|
312 |
+
|
313 |
+
echo $css;
|
314 |
+
}
|
315 |
+
|
316 |
+
private function getImageResize()
|
317 |
+
{
|
318 |
+
$resize = Mage::getStoreConfig('dexxtz_productzoom/featured_settings/resize');
|
319 |
+
|
320 |
+
return $resize;
|
321 |
+
}
|
322 |
+
|
323 |
+
private function getImageBg()
|
324 |
+
{
|
325 |
+
$bg = Mage::getStoreConfig('dexxtz_productzoom/featured_settings/background_color');
|
326 |
+
|
327 |
+
return $bg;
|
328 |
+
}
|
329 |
+
|
330 |
+
public function getImageFeatured($img, $zoom = false)
|
331 |
+
{
|
332 |
+
$w = $this->getFeaturedWidth();
|
333 |
+
$h = $this->getFeaturedHeight();
|
334 |
+
$wz = $this->getImageZoomWidth();
|
335 |
+
$hz = $this->getImageZoomHeight();
|
336 |
+
$resize = $this->getImageResize();
|
337 |
+
$bg = $this->getImageBg();
|
338 |
+
$imgFeatured = null;
|
339 |
+
|
340 |
+
if ($resize) {
|
341 |
+
if ($bg) {
|
342 |
+
$hex = str_replace("#", "", $bg);
|
343 |
+
|
344 |
+
if(strlen($hex) == 3) {
|
345 |
+
$r = hexdec(substr($hex,0,1).substr($hex,0,1));
|
346 |
+
$g = hexdec(substr($hex,1,1).substr($hex,1,1));
|
347 |
+
$b = hexdec(substr($hex,2,1).substr($hex,2,1));
|
348 |
+
} else {
|
349 |
+
$r = hexdec(substr($hex,0,2));
|
350 |
+
$g = hexdec(substr($hex,2,2));
|
351 |
+
$b = hexdec(substr($hex,4,2));
|
352 |
+
}
|
353 |
+
|
354 |
+
$image = $img->backgroundColor($r, $g, $b);
|
355 |
+
}
|
356 |
+
|
357 |
+
$imgFeatured = ($zoom == true) ? $image->resize($wz, $hz) : $image->resize($w, $h);
|
358 |
+
|
359 |
+
} else {
|
360 |
+
$imgFeatured = ($zoom == true) ? $img->keepFrame(false)->resize($wz, $hz) : $img->keepFrame(false)->resize($w, $h) ;
|
361 |
+
}
|
362 |
+
|
363 |
+
return $imgFeatured;
|
364 |
+
}
|
365 |
+
}
|
app/code/community/Dexxtz/Productzoom/Model/System/Config/Source/Description/Position.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Copyright [2015] [Dexxtz]
|
5 |
+
*
|
6 |
+
* @package Dexxtz_Productzoom
|
7 |
+
* @author Dexxtz
|
8 |
+
* @license http://www.apache.org/licenses/LICENSE-2.0
|
9 |
+
*/
|
10 |
+
|
11 |
+
class Dexxtz_Productzoom_Model_System_Config_Source_Description_Position
|
12 |
+
{
|
13 |
+
public function toOptionArray()
|
14 |
+
{
|
15 |
+
$helper = Mage::helper('productzoom');
|
16 |
+
return array(array("value" => "top" , "label" => $helper->__("Top")),
|
17 |
+
array("value" => "bottom" , "label" => $helper->__("Bottom")),
|
18 |
+
);
|
19 |
+
}
|
20 |
+
}
|
app/code/community/Dexxtz/Productzoom/Model/System/Config/Source/Thumbnails/Position.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Copyright [2015] [Dexxtz]
|
5 |
+
*
|
6 |
+
* @package Dexxtz_Productzoom
|
7 |
+
* @author Dexxtz
|
8 |
+
* @license http://www.apache.org/licenses/LICENSE-2.0
|
9 |
+
*/
|
10 |
+
|
11 |
+
class Dexxtz_Productzoom_Model_System_Config_Source_Thumbnails_Position
|
12 |
+
{
|
13 |
+
public function toOptionArray()
|
14 |
+
{
|
15 |
+
$helper = Mage::helper('productzoom');
|
16 |
+
return array(array("value" => "top" , "label" => $helper->__("Top")),
|
17 |
+
array("value" => "right" , "label" => $helper->__("Right")),
|
18 |
+
array("value" => "bottom" , "label" => $helper->__("Bottom")),
|
19 |
+
array("value" => "left" , "label" => $helper->__("Left"))
|
20 |
+
);
|
21 |
+
}
|
22 |
+
}
|
app/code/community/Dexxtz/Productzoom/Model/System/Config/Source/Thumbnails/Qty.php
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Copyright [2015] [Dexxtz]
|
5 |
+
*
|
6 |
+
* @package Dexxtz_Productzoom
|
7 |
+
* @author Dexxtz
|
8 |
+
* @license http://www.apache.org/licenses/LICENSE-2.0
|
9 |
+
*/
|
10 |
+
|
11 |
+
class Dexxtz_Productzoom_Model_System_Config_Source_Thumbnails_Qty
|
12 |
+
{
|
13 |
+
public function toOptionArray()
|
14 |
+
{
|
15 |
+
$helper = Mage::helper('productzoom');
|
16 |
+
return array(array("value" => "1" , "label" => $helper->__("%s fixed thumbnail", 1)),
|
17 |
+
array("value" => "2" , "label" => $helper->__("%s fixed thumbnails", 2)),
|
18 |
+
array("value" => "3" , "label" => $helper->__("%s fixed thumbnails", 3)),
|
19 |
+
array("value" => "4" , "label" => $helper->__("%s fixed thumbnails", 4)),
|
20 |
+
array("value" => "5" , "label" => $helper->__("%s fixed thumbnails", 5)),
|
21 |
+
array("value" => "6" , "label" => $helper->__("%s fixed thumbnails", 6)),
|
22 |
+
array("value" => "7" , "label" => $helper->__("%s fixed thumbnails", 7)),
|
23 |
+
array("value" => "8" , "label" => $helper->__("%s fixed thumbnails", 8)),
|
24 |
+
array("value" => "9" , "label" => $helper->__("%s fixed thumbnails", 9)),
|
25 |
+
array("value" => "10" , "label" => $helper->__("%s fixed thumbnails", 10))
|
26 |
+
);
|
27 |
+
}
|
28 |
+
}
|
app/code/community/Dexxtz/Productzoom/etc/config.xml
ADDED
@@ -0,0 +1,179 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="utf-8"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Copyright [2015] [Dexxtz]
|
5 |
+
*
|
6 |
+
* @package Dexxtz_Productzoom
|
7 |
+
* @author Dexxtz
|
8 |
+
* @license http://www.apache.org/licenses/LICENSE-2.0
|
9 |
+
*/
|
10 |
+
-->
|
11 |
+
<config>
|
12 |
+
<modules>
|
13 |
+
<Dexxtz_Productzoom>
|
14 |
+
<version>1.0.0</version>
|
15 |
+
</Dexxtz_Productzoom>
|
16 |
+
</modules>
|
17 |
+
<frontend>
|
18 |
+
<routers>
|
19 |
+
<productzoom>
|
20 |
+
<use>standard</use>
|
21 |
+
<args>
|
22 |
+
<module>Dexxtz_Productzoom</module>
|
23 |
+
<frontName>productzoom</frontName>
|
24 |
+
</args>
|
25 |
+
</productzoom>
|
26 |
+
</routers>
|
27 |
+
<translate>
|
28 |
+
<modules>
|
29 |
+
<Dexxtz_Productzoom>
|
30 |
+
<files>
|
31 |
+
<default>Dexxtz_Productzoom.csv</default>
|
32 |
+
</files>
|
33 |
+
</Dexxtz_Productzoom>
|
34 |
+
</modules>
|
35 |
+
</translate>
|
36 |
+
<layout>
|
37 |
+
<updates>
|
38 |
+
<productzoom>
|
39 |
+
<file>dexxtz/productzoom.xml</file>
|
40 |
+
</productzoom>
|
41 |
+
</updates>
|
42 |
+
</layout>
|
43 |
+
</frontend>
|
44 |
+
<admin>
|
45 |
+
<routers>
|
46 |
+
<productzoom>
|
47 |
+
<use>admin</use>
|
48 |
+
<args>
|
49 |
+
<module>Dexxtz_Productzoom</module>
|
50 |
+
<frontName>productzoom</frontName>
|
51 |
+
</args>
|
52 |
+
</productzoom>
|
53 |
+
<adminhtml>
|
54 |
+
<args>
|
55 |
+
<modules>
|
56 |
+
<productzoom before="Mage_Adminhtml">Dexxtz_Productzoom</productzoom>
|
57 |
+
</modules>
|
58 |
+
</args>
|
59 |
+
</adminhtml>
|
60 |
+
</routers>
|
61 |
+
</admin>
|
62 |
+
<adminhtml>
|
63 |
+
<acl>
|
64 |
+
<resources>
|
65 |
+
<admin>
|
66 |
+
<children>
|
67 |
+
<system>
|
68 |
+
<children>
|
69 |
+
<config>
|
70 |
+
<children>
|
71 |
+
<dexxtz_productzoom translate="title" module="productzoom">
|
72 |
+
<title>Config CloudZoom</title>
|
73 |
+
<sort_order>50</sort_order>
|
74 |
+
</dexxtz_productzoom>
|
75 |
+
</children>
|
76 |
+
</config>
|
77 |
+
</children>
|
78 |
+
</system>
|
79 |
+
</children>
|
80 |
+
</admin>
|
81 |
+
</resources>
|
82 |
+
</acl>
|
83 |
+
<translate>
|
84 |
+
<modules>
|
85 |
+
<Dexxtz_Productzoom>
|
86 |
+
<files>
|
87 |
+
<default>Dexxtz_Productzoom.csv</default>
|
88 |
+
</files>
|
89 |
+
</Dexxtz_Productzoom>
|
90 |
+
</modules>
|
91 |
+
</translate>
|
92 |
+
<layout>
|
93 |
+
<updates>
|
94 |
+
<productzoom>
|
95 |
+
<file>dexxtz/productzoom.xml</file>
|
96 |
+
</productzoom>
|
97 |
+
</updates>
|
98 |
+
</layout>
|
99 |
+
</adminhtml>
|
100 |
+
<global>
|
101 |
+
<resources>
|
102 |
+
<dexxtz_productzoom_setup>
|
103 |
+
<setup>
|
104 |
+
<module>Dexxtz_Productzoom</module>
|
105 |
+
</setup>
|
106 |
+
<connection>
|
107 |
+
<use>core_setup</use>
|
108 |
+
</connection>
|
109 |
+
</dexxtz_productzoom_setup>
|
110 |
+
<productzoom_write>
|
111 |
+
<connection>
|
112 |
+
<use>core_write</use>
|
113 |
+
</connection>
|
114 |
+
</productzoom_write>
|
115 |
+
<productzoom_read>
|
116 |
+
<connection>
|
117 |
+
<use>core_read</use>
|
118 |
+
</connection>
|
119 |
+
</productzoom_read>
|
120 |
+
</resources>
|
121 |
+
<blocks>
|
122 |
+
<dexxtz_productzoom>
|
123 |
+
<class>Dexxtz_Productzoom_Block</class>
|
124 |
+
</dexxtz_productzoom>
|
125 |
+
</blocks>
|
126 |
+
<models>
|
127 |
+
<dexxtz_productzoom>
|
128 |
+
<class>Dexxtz_Productzoom_Model</class>
|
129 |
+
</dexxtz_productzoom>
|
130 |
+
</models>
|
131 |
+
<helpers>
|
132 |
+
<productzoom>
|
133 |
+
<class>Dexxtz_Productzoom_Helper</class>
|
134 |
+
</productzoom>
|
135 |
+
</helpers>
|
136 |
+
</global>
|
137 |
+
<default>
|
138 |
+
<dexxtz_productzoom>
|
139 |
+
<general>
|
140 |
+
<autoplay>1</autoplay>
|
141 |
+
<autoplay_interval>6000</autoplay_interval>
|
142 |
+
<fadein_interval>600</fadein_interval>
|
143 |
+
<magnifier_icon>1</magnifier_icon>
|
144 |
+
</general>
|
145 |
+
<featured_settings>
|
146 |
+
<featured_width>300</featured_width>
|
147 |
+
<featured_height>300</featured_height>
|
148 |
+
</featured_settings>
|
149 |
+
<thumbnails_settings>
|
150 |
+
<thumbnails_qty>3</thumbnails_qty>
|
151 |
+
<thumbnails_position>bottom</thumbnails_position>
|
152 |
+
</thumbnails_settings>
|
153 |
+
<zoom_settings>
|
154 |
+
<zoom_image_width>1200</zoom_image_width>
|
155 |
+
<zoom_image_height>1200</zoom_image_height>
|
156 |
+
<zoom_area_width>500</zoom_area_width>
|
157 |
+
<zoom_area_height>500</zoom_area_height>
|
158 |
+
<description_active>1</description_active>
|
159 |
+
<description_position>bottom</description_position>
|
160 |
+
<description_opacity>0.7</description_opacity>
|
161 |
+
<background_color>#FFFFFF</background_color>
|
162 |
+
<description_color>#000000</description_color>
|
163 |
+
</zoom_settings>
|
164 |
+
<css_settings>
|
165 |
+
<border>1px solid #DDDDDD</border>
|
166 |
+
<box_shadow>0 0 10px #DDDDDD</box_shadow>
|
167 |
+
<opacity_inative>0.3</opacity_inative>
|
168 |
+
<opacity_magnifier>0.5</opacity_magnifier>
|
169 |
+
</css_settings>
|
170 |
+
<video>
|
171 |
+
<background_color>#000000</background_color>
|
172 |
+
<background_opacity>0.7</background_opacity>
|
173 |
+
<border>1px solid #DDDDDD</border>
|
174 |
+
<box_shadow>0 0 10px #DDDDDD</box_shadow>
|
175 |
+
<background_content>#FFFFFF</background_content>
|
176 |
+
</video>
|
177 |
+
</dexxtz_productzoom>
|
178 |
+
</default>
|
179 |
+
</config>
|
app/code/community/Dexxtz/Productzoom/etc/system.xml
ADDED
@@ -0,0 +1,446 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Copyright [2015] [Dexxtz]
|
5 |
+
*
|
6 |
+
* @package Dexxtz_Productzoom
|
7 |
+
* @author Dexxtz
|
8 |
+
* @license http://www.apache.org/licenses/LICENSE-2.0
|
9 |
+
*/
|
10 |
+
-->
|
11 |
+
<config>
|
12 |
+
<tabs>
|
13 |
+
<dexxtz translate="label">
|
14 |
+
<label>Dexxtz</label>
|
15 |
+
<sort_order>150</sort_order>
|
16 |
+
</dexxtz>
|
17 |
+
</tabs>
|
18 |
+
<sections>
|
19 |
+
<dexxtz_productzoom translate="label" module="productzoom">
|
20 |
+
<label>Product Image Zoom</label>
|
21 |
+
<tab>dexxtz</tab>
|
22 |
+
<frontend_type>text</frontend_type>
|
23 |
+
<sort_order>70</sort_order>
|
24 |
+
<show_in_default>1</show_in_default>
|
25 |
+
<show_in_website>1</show_in_website>
|
26 |
+
<show_in_store>1</show_in_store>
|
27 |
+
<groups>
|
28 |
+
<general translate="label">
|
29 |
+
<label>General Settings</label>
|
30 |
+
<frontend_type>text</frontend_type>
|
31 |
+
<sort_order>10</sort_order>
|
32 |
+
<show_in_default>1</show_in_default>
|
33 |
+
<show_in_website>1</show_in_website>
|
34 |
+
<show_in_store>1</show_in_store>
|
35 |
+
<fields>
|
36 |
+
<active>
|
37 |
+
<label>Active</label>
|
38 |
+
<comment>Enables or disables customization on product page.</comment>
|
39 |
+
<frontend_type>select</frontend_type>
|
40 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
41 |
+
<sort_order>10</sort_order>
|
42 |
+
<show_in_default>1</show_in_default>
|
43 |
+
<show_in_website>1</show_in_website>
|
44 |
+
<show_in_store>1</show_in_store>
|
45 |
+
</active>
|
46 |
+
<autoplay>
|
47 |
+
<label>Autoplay</label>
|
48 |
+
<comment>Enables or disables the automatic image change.</comment>
|
49 |
+
<frontend_type>select</frontend_type>
|
50 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
51 |
+
<sort_order>20</sort_order>
|
52 |
+
<show_in_default>1</show_in_default>
|
53 |
+
<show_in_website>1</show_in_website>
|
54 |
+
<show_in_store>1</show_in_store>
|
55 |
+
</autoplay>
|
56 |
+
<autoplay_interval>
|
57 |
+
<comment>Example: (6000), only integer is valid.</comment>
|
58 |
+
<tooltip>Speed of interval of Image change.</tooltip>
|
59 |
+
<label>Autoplay interval time</label>
|
60 |
+
<validate>validate-digits</validate>
|
61 |
+
<frontend_type>text</frontend_type>
|
62 |
+
<sort_order>30</sort_order>
|
63 |
+
<show_in_default>1</show_in_default>
|
64 |
+
<show_in_website>1</show_in_website>
|
65 |
+
<show_in_store>1</show_in_store>
|
66 |
+
<depends>
|
67 |
+
<autoplay>1</autoplay>
|
68 |
+
</depends>
|
69 |
+
</autoplay_interval>
|
70 |
+
<fadein_interval>
|
71 |
+
<label>Fade in interval</label>
|
72 |
+
<comment>Example: (600), only integer is valid.</comment>
|
73 |
+
<tooltip>It is the image transition effect, how much most the transition is slower.</tooltip>
|
74 |
+
<validate>validate-digits</validate>
|
75 |
+
<frontend_type>text</frontend_type>
|
76 |
+
<sort_order>40</sort_order>
|
77 |
+
<show_in_default>1</show_in_default>
|
78 |
+
<show_in_website>1</show_in_website>
|
79 |
+
<show_in_store>1</show_in_store>
|
80 |
+
</fadein_interval>
|
81 |
+
<magnifier_icon>
|
82 |
+
<label>Show magnifier icon</label>
|
83 |
+
<comment>Display magnifying glass icon on the main image.</comment>
|
84 |
+
<frontend_type>select</frontend_type>
|
85 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
86 |
+
<sort_order>50</sort_order>
|
87 |
+
<show_in_default>1</show_in_default>
|
88 |
+
<show_in_website>1</show_in_website>
|
89 |
+
<show_in_store>1</show_in_store>
|
90 |
+
</magnifier_icon>
|
91 |
+
</fields>
|
92 |
+
</general>
|
93 |
+
<featured_settings translate="label">
|
94 |
+
<label>Featured Picture Settings</label>
|
95 |
+
<frontend_type>text</frontend_type>
|
96 |
+
<sort_order>20</sort_order>
|
97 |
+
<show_in_default>1</show_in_default>
|
98 |
+
<show_in_website>1</show_in_website>
|
99 |
+
<show_in_store>1</show_in_store>
|
100 |
+
<fields>
|
101 |
+
<featured_width>
|
102 |
+
<label>Width</label>
|
103 |
+
<comment>Main image width, example: (260), enter only integer.</comment>
|
104 |
+
<validate>validate-digits</validate>
|
105 |
+
<frontend_type>text</frontend_type>
|
106 |
+
<sort_order>10</sort_order>
|
107 |
+
<show_in_default>1</show_in_default>
|
108 |
+
<show_in_website>1</show_in_website>
|
109 |
+
<show_in_store>1</show_in_store>
|
110 |
+
</featured_width>
|
111 |
+
<featured_height>
|
112 |
+
<label>Height</label>
|
113 |
+
<comment>Main image height, example: (260), enter only integer.</comment>
|
114 |
+
<validate>validate-digits</validate>
|
115 |
+
<frontend_type>text</frontend_type>
|
116 |
+
<sort_order>20</sort_order>
|
117 |
+
<show_in_default>1</show_in_default>
|
118 |
+
<show_in_website>1</show_in_website>
|
119 |
+
<show_in_store>1</show_in_store>
|
120 |
+
</featured_height>
|
121 |
+
<resize>
|
122 |
+
<label>Resize image in scale</label>
|
123 |
+
<comment>Keep the image in original aspect ratio.</comment>
|
124 |
+
<tooltip>If the image does not reaches minimum the in proportion size is added a frame maintaining the scale.</tooltip>
|
125 |
+
<frontend_type>select</frontend_type>
|
126 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
127 |
+
<sort_order>30</sort_order>
|
128 |
+
<show_in_default>1</show_in_default>
|
129 |
+
<show_in_website>1</show_in_website>
|
130 |
+
<show_in_store>1</show_in_store>
|
131 |
+
</resize>
|
132 |
+
<background_color>
|
133 |
+
<label>Background color of resize</label>
|
134 |
+
<comment>Change the background color of frame if necessary.</comment>
|
135 |
+
<tooltip>After resizing the image, is added a frame if the image does not reach minimum proportion, the color selected in the field changes the background color of this frame.</tooltip>
|
136 |
+
<validate>color-switch</validate>
|
137 |
+
<frontend_type>text</frontend_type>
|
138 |
+
<sort_order>40</sort_order>
|
139 |
+
<show_in_default>1</show_in_default>
|
140 |
+
<show_in_website>1</show_in_website>
|
141 |
+
<show_in_store>1</show_in_store>
|
142 |
+
<depends>
|
143 |
+
<resize>1</resize>
|
144 |
+
</depends>
|
145 |
+
</background_color>
|
146 |
+
</fields>
|
147 |
+
</featured_settings>
|
148 |
+
<thumbnails_settings translate="label">
|
149 |
+
<label>Thumbnails Settings</label>
|
150 |
+
<frontend_type>text</frontend_type>
|
151 |
+
<sort_order>30</sort_order>
|
152 |
+
<show_in_default>1</show_in_default>
|
153 |
+
<show_in_website>1</show_in_website>
|
154 |
+
<show_in_store>1</show_in_store>
|
155 |
+
<fields>
|
156 |
+
<thumbnails_qty>
|
157 |
+
<label>Show</label>
|
158 |
+
<comment>Fixed amount of thumbnails shown.</comment>
|
159 |
+
<frontend_type>select</frontend_type>
|
160 |
+
<source_model>dexxtz_productzoom/system_config_source_thumbnails_qty</source_model>
|
161 |
+
<sort_order>10</sort_order>
|
162 |
+
<show_in_default>1</show_in_default>
|
163 |
+
<show_in_website>1</show_in_website>
|
164 |
+
<show_in_store>1</show_in_store>
|
165 |
+
</thumbnails_qty>
|
166 |
+
<thumbnails_position>
|
167 |
+
<label>Position of thumbnails</label>
|
168 |
+
<comment>Position of where it will be displayed thumbnails.</comment>
|
169 |
+
<tooltip>The position of the thumbnails is based in the main picture, ie the thumbnails will positioned in the chosen side (top, right, bottom and left) of the main image.</tooltip>
|
170 |
+
<frontend_type>select</frontend_type>
|
171 |
+
<source_model>dexxtz_productzoom/system_config_source_thumbnails_position</source_model>
|
172 |
+
<sort_order>20</sort_order>
|
173 |
+
<show_in_default>1</show_in_default>
|
174 |
+
<show_in_website>1</show_in_website>
|
175 |
+
<show_in_store>1</show_in_store>
|
176 |
+
</thumbnails_position>
|
177 |
+
</fields>
|
178 |
+
</thumbnails_settings>
|
179 |
+
<zoom_settings translate="label">
|
180 |
+
<label>Zoom Settings</label>
|
181 |
+
<frontend_type>text</frontend_type>
|
182 |
+
<sort_order>40</sort_order>
|
183 |
+
<show_in_default>1</show_in_default>
|
184 |
+
<show_in_website>1</show_in_website>
|
185 |
+
<show_in_store>1</show_in_store>
|
186 |
+
<fields>
|
187 |
+
<zoom_image_width>
|
188 |
+
<label>Width image of zoom</label>
|
189 |
+
<comment>Example: (800), enter only integer</comment>
|
190 |
+
<validate>validate-digits</validate>
|
191 |
+
<frontend_type>text</frontend_type>
|
192 |
+
<sort_order>10</sort_order>
|
193 |
+
<show_in_default>1</show_in_default>
|
194 |
+
<show_in_website>1</show_in_website>
|
195 |
+
<show_in_store>1</show_in_store>
|
196 |
+
</zoom_image_width>
|
197 |
+
<zoom_image_height>
|
198 |
+
<label>Height image of zoom</label>
|
199 |
+
<comment>Example: (800), enter only integer</comment>
|
200 |
+
<validate>validate-digits</validate>
|
201 |
+
<frontend_type>text</frontend_type>
|
202 |
+
<sort_order>20</sort_order>
|
203 |
+
<show_in_default>1</show_in_default>
|
204 |
+
<show_in_website>1</show_in_website>
|
205 |
+
<show_in_store>1</show_in_store>
|
206 |
+
</zoom_image_height>
|
207 |
+
<zoom_area_width>
|
208 |
+
<label>Zoom area width</label>
|
209 |
+
<comment>Example: (500), enter only integer</comment>
|
210 |
+
<validate>validate-digits</validate>
|
211 |
+
<frontend_type>text</frontend_type>
|
212 |
+
<sort_order>30</sort_order>
|
213 |
+
<show_in_default>1</show_in_default>
|
214 |
+
<show_in_website>1</show_in_website>
|
215 |
+
<show_in_store>1</show_in_store>
|
216 |
+
</zoom_area_width>
|
217 |
+
<zoom_area_height>
|
218 |
+
<label>Zoom area height</label>
|
219 |
+
<comment>Example: (500) or blank = automatic, enter only integer.</comment>
|
220 |
+
<validate>validate-digits</validate>
|
221 |
+
<tooltip>If you want the height is automatic with the content of the images, leave this field blank.</tooltip>
|
222 |
+
<frontend_type>text</frontend_type>
|
223 |
+
<sort_order>40</sort_order>
|
224 |
+
<show_in_default>1</show_in_default>
|
225 |
+
<show_in_website>1</show_in_website>
|
226 |
+
<show_in_store>1</show_in_store>
|
227 |
+
</zoom_area_height>
|
228 |
+
<description_active>
|
229 |
+
<label>Show description</label>
|
230 |
+
<comment>Shown description of the image, on image of zoom.</comment>
|
231 |
+
<frontend_type>select</frontend_type>
|
232 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
233 |
+
<sort_order>50</sort_order>
|
234 |
+
<show_in_default>1</show_in_default>
|
235 |
+
<show_in_website>1</show_in_website>
|
236 |
+
<show_in_store>1</show_in_store>
|
237 |
+
</description_active>
|
238 |
+
<description_position>
|
239 |
+
<label>Position of description</label>
|
240 |
+
<comment>Position of description of image of zoom.</comment>
|
241 |
+
<frontend_type>select</frontend_type>
|
242 |
+
<source_model>dexxtz_productzoom/system_config_source_description_position</source_model>
|
243 |
+
<sort_order>60</sort_order>
|
244 |
+
<show_in_default>1</show_in_default>
|
245 |
+
<show_in_website>1</show_in_website>
|
246 |
+
<show_in_store>1</show_in_store>
|
247 |
+
<depends>
|
248 |
+
<description_active>1</description_active>
|
249 |
+
</depends>
|
250 |
+
</description_position>
|
251 |
+
<description_opacity>
|
252 |
+
<label>Opacity of description</label>
|
253 |
+
<comment>Example: (0.7), default of css.</comment>
|
254 |
+
<validate>validate-number-range number-range-0-1</validate>
|
255 |
+
<frontend_type>text</frontend_type>
|
256 |
+
<sort_order>70</sort_order>
|
257 |
+
<show_in_default>1</show_in_default>
|
258 |
+
<show_in_website>1</show_in_website>
|
259 |
+
<show_in_store>1</show_in_store>
|
260 |
+
<depends>
|
261 |
+
<description_active>1</description_active>
|
262 |
+
</depends>
|
263 |
+
</description_opacity>
|
264 |
+
<background_color>
|
265 |
+
<label>Background color of description</label>
|
266 |
+
<comment>Example: (#FFFFF).</comment>
|
267 |
+
<validate>color-switch</validate>
|
268 |
+
<frontend_type>text</frontend_type>
|
269 |
+
<sort_order>80</sort_order>
|
270 |
+
<show_in_default>1</show_in_default>
|
271 |
+
<show_in_website>1</show_in_website>
|
272 |
+
<show_in_store>1</show_in_store>
|
273 |
+
<depends>
|
274 |
+
<description_active>1</description_active>
|
275 |
+
</depends>
|
276 |
+
</background_color>
|
277 |
+
<description_color>
|
278 |
+
<label>Color of description</label>
|
279 |
+
<comment>Example: (#000000).</comment>
|
280 |
+
<validate>color-switch</validate>
|
281 |
+
<frontend_type>text</frontend_type>
|
282 |
+
<sort_order>90</sort_order>
|
283 |
+
<show_in_default>1</show_in_default>
|
284 |
+
<show_in_website>1</show_in_website>
|
285 |
+
<show_in_store>1</show_in_store>
|
286 |
+
<depends>
|
287 |
+
<description_active>1</description_active>
|
288 |
+
</depends>
|
289 |
+
</description_color>
|
290 |
+
</fields>
|
291 |
+
</zoom_settings>
|
292 |
+
<css_settings translate="label">
|
293 |
+
<label>Css Settings</label>
|
294 |
+
<frontend_type>text</frontend_type>
|
295 |
+
<sort_order>50</sort_order>
|
296 |
+
<show_in_default>1</show_in_default>
|
297 |
+
<show_in_website>1</show_in_website>
|
298 |
+
<show_in_store>1</show_in_store>
|
299 |
+
<fields>
|
300 |
+
<border>
|
301 |
+
<label>Border</label>
|
302 |
+
<comment>Example: (1px solid #DDDDDD), default of css.</comment>
|
303 |
+
<tooltip>Customizes the edge of images with thickness and color.</tooltip>
|
304 |
+
<frontend_type>text</frontend_type>
|
305 |
+
<sort_order>10</sort_order>
|
306 |
+
<show_in_default>1</show_in_default>
|
307 |
+
<show_in_website>1</show_in_website>
|
308 |
+
<show_in_store>1</show_in_store>
|
309 |
+
</border>
|
310 |
+
<box_shadow>
|
311 |
+
<label>Box shadow</label>
|
312 |
+
<comment>Example: (0 0 10px #DDDDDD), default of css.</comment>
|
313 |
+
<tooltip>Customize the shadows of the images, and can increase the shadow height and give color to it.</tooltip>
|
314 |
+
<frontend_type>text</frontend_type>
|
315 |
+
<sort_order>20</sort_order>
|
316 |
+
<show_in_default>1</show_in_default>
|
317 |
+
<show_in_website>1</show_in_website>
|
318 |
+
<show_in_store>1</show_in_store>
|
319 |
+
</box_shadow>
|
320 |
+
<opacity_inative>
|
321 |
+
<label>Opacity inactive thumbnails</label>
|
322 |
+
<comment>Example: (0.3), default of css.</comment>
|
323 |
+
<tooltip>Transparency of the thumbnails that were not selected.</tooltip>
|
324 |
+
<validate>validate-number-range number-range-0-1</validate>
|
325 |
+
<frontend_type>text</frontend_type>
|
326 |
+
<sort_order>30</sort_order>
|
327 |
+
<show_in_default>1</show_in_default>
|
328 |
+
<show_in_website>1</show_in_website>
|
329 |
+
<show_in_store>1</show_in_store>
|
330 |
+
</opacity_inative>
|
331 |
+
<opacity_magnifier>
|
332 |
+
<label>Opacity image in magnifier</label>
|
333 |
+
<comment>Example: (0.5), default of css.</comment>
|
334 |
+
<tooltip>Transparency of the main image when passes mouse.</tooltip>
|
335 |
+
<validate>validate-number-range number-range-0-1</validate>
|
336 |
+
<frontend_type>text</frontend_type>
|
337 |
+
<sort_order>40</sort_order>
|
338 |
+
<show_in_default>1</show_in_default>
|
339 |
+
<show_in_website>1</show_in_website>
|
340 |
+
<show_in_store>1</show_in_store>
|
341 |
+
</opacity_magnifier>
|
342 |
+
</fields>
|
343 |
+
</css_settings>
|
344 |
+
<video translate="label">
|
345 |
+
<label>Video Settings</label>
|
346 |
+
<frontend_type>text</frontend_type>
|
347 |
+
<sort_order>60</sort_order>
|
348 |
+
<show_in_default>1</show_in_default>
|
349 |
+
<show_in_website>1</show_in_website>
|
350 |
+
<show_in_store>1</show_in_store>
|
351 |
+
<fields>
|
352 |
+
<active>
|
353 |
+
<label>Active</label>
|
354 |
+
<comment>Enables or disables video display.</comment>
|
355 |
+
<tooltip>If 'Yes', enables a tab on new/edit product next to images tab, with a field to add the video embed. On the front-end displays an icon next to the thumbnails, which when clicked displays the video.</tooltip>
|
356 |
+
<frontend_type>select</frontend_type>
|
357 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
358 |
+
<sort_order>10</sort_order>
|
359 |
+
<show_in_default>1</show_in_default>
|
360 |
+
<show_in_website>1</show_in_website>
|
361 |
+
<show_in_store>1</show_in_store>
|
362 |
+
</active>
|
363 |
+
<image_upload translate="label comment">
|
364 |
+
<label>Video icon</label>
|
365 |
+
<tooltip>Select an image as the video icon. If you do not select any icon, a default will be displayed, after clicking on icon the video displayed.</tooltip>
|
366 |
+
<frontend_type>image</frontend_type>
|
367 |
+
<sort_order>20</sort_order>
|
368 |
+
<backend_model>adminhtml/system_config_backend_image</backend_model>
|
369 |
+
<upload_dir config="system/filesystem/media" scope_info="0">dexxtz/productzoom/images</upload_dir>
|
370 |
+
<base_url type="media" scope_info="0">dexxtz/productzoom/images</base_url>
|
371 |
+
<show_in_default>1</show_in_default>
|
372 |
+
<show_in_website>1</show_in_website>
|
373 |
+
<show_in_store>1</show_in_store>
|
374 |
+
<depends>
|
375 |
+
<active>1</active>
|
376 |
+
</depends>
|
377 |
+
</image_upload>
|
378 |
+
<background_color>
|
379 |
+
<label>Background color of modal</label>
|
380 |
+
<comment>Select a background color of modal.</comment>
|
381 |
+
<validate>color-switch</validate>
|
382 |
+
<frontend_type>text</frontend_type>
|
383 |
+
<sort_order>30</sort_order>
|
384 |
+
<show_in_default>1</show_in_default>
|
385 |
+
<show_in_website>1</show_in_website>
|
386 |
+
<show_in_store>1</show_in_store>
|
387 |
+
<depends>
|
388 |
+
<active>1</active>
|
389 |
+
</depends>
|
390 |
+
</background_color>
|
391 |
+
<background_opacity>
|
392 |
+
<label>Opacity of background</label>
|
393 |
+
<comment>Example: (0.7), default of css.</comment>
|
394 |
+
<validate>validate-number-range number-range-0-1</validate>
|
395 |
+
<frontend_type>text</frontend_type>
|
396 |
+
<sort_order>40</sort_order>
|
397 |
+
<show_in_default>1</show_in_default>
|
398 |
+
<show_in_website>1</show_in_website>
|
399 |
+
<show_in_store>1</show_in_store>
|
400 |
+
<depends>
|
401 |
+
<active>1</active>
|
402 |
+
</depends>
|
403 |
+
</background_opacity>
|
404 |
+
<border>
|
405 |
+
<label>Border of content</label>
|
406 |
+
<comment>Example: (1px solid #DDDDDD), default of css.</comment>
|
407 |
+
<frontend_type>text</frontend_type>
|
408 |
+
<sort_order>50</sort_order>
|
409 |
+
<show_in_default>1</show_in_default>
|
410 |
+
<show_in_website>1</show_in_website>
|
411 |
+
<show_in_store>1</show_in_store>
|
412 |
+
<depends>
|
413 |
+
<active>1</active>
|
414 |
+
</depends>
|
415 |
+
</border>
|
416 |
+
<box_shadow>
|
417 |
+
<label>Box shadow of content</label>
|
418 |
+
<comment>Example: (0 0 10px #DDDDDD), default of css.</comment>
|
419 |
+
<frontend_type>text</frontend_type>
|
420 |
+
<sort_order>60</sort_order>
|
421 |
+
<show_in_default>1</show_in_default>
|
422 |
+
<show_in_website>1</show_in_website>
|
423 |
+
<show_in_store>1</show_in_store>
|
424 |
+
<depends>
|
425 |
+
<active>1</active>
|
426 |
+
</depends>
|
427 |
+
</box_shadow>
|
428 |
+
<background_content>
|
429 |
+
<label>Background color of content</label>
|
430 |
+
<comment>Select a background color of content.</comment>
|
431 |
+
<validate>color-switch</validate>
|
432 |
+
<frontend_type>text</frontend_type>
|
433 |
+
<sort_order>70</sort_order>
|
434 |
+
<show_in_default>1</show_in_default>
|
435 |
+
<show_in_website>1</show_in_website>
|
436 |
+
<show_in_store>1</show_in_store>
|
437 |
+
<depends>
|
438 |
+
<active>1</active>
|
439 |
+
</depends>
|
440 |
+
</background_content>
|
441 |
+
</fields>
|
442 |
+
</video>
|
443 |
+
</groups>
|
444 |
+
</dexxtz_productzoom>
|
445 |
+
</sections>
|
446 |
+
</config>
|
app/code/community/Dexxtz/Productzoom/sql/dexxtz_productzoom_setup/mysql4-install-1.0.0.php
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Copyright [2015] [Dexxtz]
|
5 |
+
*
|
6 |
+
* @package Dexxtz_Productzoom
|
7 |
+
* @author Dexxtz
|
8 |
+
* @license http://www.apache.org/licenses/LICENSE-2.0
|
9 |
+
*/
|
10 |
+
|
11 |
+
$installer = $this;
|
12 |
+
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
|
13 |
+
$installer->startSetup();
|
14 |
+
|
15 |
+
$setup->addAttributeGroup('catalog_product', 'Default', 'Video', 4);
|
16 |
+
|
17 |
+
$setup->addAttribute('catalog_product', 'dexxtz_video', array(
|
18 |
+
'group' => 'Video',
|
19 |
+
'input' => 'textarea',
|
20 |
+
'type' => 'text',
|
21 |
+
'label' => 'Video (embed)',
|
22 |
+
'default' => '',
|
23 |
+
'class' => '',
|
24 |
+
'backend' => '',
|
25 |
+
'frontend' => '',
|
26 |
+
'source' => '',
|
27 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
28 |
+
'visible' => true,
|
29 |
+
'required' => false,
|
30 |
+
'user_defined' => false,
|
31 |
+
'searchable' => false,
|
32 |
+
'filterable' => false,
|
33 |
+
'comparable' => false,
|
34 |
+
'visible_on_front' => true,
|
35 |
+
'visible_in_advanced_search' => false,
|
36 |
+
'unique' => false
|
37 |
+
));
|
38 |
+
|
39 |
+
$installer->endSetup();
|
app/design/adminhtml/default/default/layout/dexxtz/productzoom.xml
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Copyright [2015] [Dexxtz]
|
5 |
+
*
|
6 |
+
* @package Dexxtz_Productzoom
|
7 |
+
* @author Dexxtz
|
8 |
+
* @license http://www.apache.org/licenses/LICENSE-2.0
|
9 |
+
*/
|
10 |
+
-->
|
11 |
+
<layout>
|
12 |
+
<default>
|
13 |
+
<reference name="head">
|
14 |
+
<action method="addItem"><type>skin_js</type><name>dexxtz/productzoom/js/color.js</name><params/><if/></action>
|
15 |
+
</reference>
|
16 |
+
</default>
|
17 |
+
|
18 |
+
<adminhtml_catalog_product_new>
|
19 |
+
<reference name="product_tabs">
|
20 |
+
<action method="removeTab">
|
21 |
+
<name helper="productzoom/getTabName" />
|
22 |
+
</action>
|
23 |
+
</reference>
|
24 |
+
</adminhtml_catalog_product_new>
|
25 |
+
|
26 |
+
<adminhtml_catalog_product_edit>
|
27 |
+
<reference name="product_tabs">
|
28 |
+
<action method="removeTab">
|
29 |
+
<name helper="productzoom/getTabName" />
|
30 |
+
</action>
|
31 |
+
</reference>
|
32 |
+
</adminhtml_catalog_product_edit>
|
33 |
+
</layout>
|
app/design/frontend/base/default/layout/dexxtz/productzoom.xml
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Copyright [2015] [Dexxtz]
|
5 |
+
*
|
6 |
+
* @package Dexxtz_Productzoom
|
7 |
+
* @author Dexxtz
|
8 |
+
* @license http://www.apache.org/licenses/LICENSE-2.0
|
9 |
+
*/
|
10 |
+
-->
|
11 |
+
<layout>
|
12 |
+
<catalog_product_view>
|
13 |
+
<reference name="head">
|
14 |
+
<action method="addCss"><stylesheet>dexxtz/productzoom/css/etalage.css</stylesheet></action>
|
15 |
+
<action method="addCss"><stylesheet>dexxtz/productzoom/css/dexxtz.css</stylesheet></action>
|
16 |
+
<action method="addItem"><type>skin_js</type><name>dexxtz/productzoom/js/jquery-2.1.1.js</name><params/><if/></action>
|
17 |
+
<action method="addItem"><type>skin_js</type><name>dexxtz/productzoom/js/jquery.etalage.min.js</name><params/><if/></action>
|
18 |
+
</reference>
|
19 |
+
|
20 |
+
<reference name="product.info.media">
|
21 |
+
<action method="setTemplate" ifconfig="dexxtz_productzoom/general/active"><template>dexxtz/productzoom/media.phtml</template></action>
|
22 |
+
</reference>
|
23 |
+
|
24 |
+
<reference name="before_body_end">
|
25 |
+
<block type="core/template" name="modal">
|
26 |
+
<action method="setTemplate" ifconfig="dexxtz_productzoom/video/active">
|
27 |
+
<template>dexxtz/productzoom/modal.phtml</template>
|
28 |
+
</action>
|
29 |
+
</block>
|
30 |
+
</reference>
|
31 |
+
</catalog_product_view>
|
32 |
+
|
33 |
+
<review_product_list>
|
34 |
+
<reference name="head">
|
35 |
+
<action method="addCss"><stylesheet>dexxtz/productzoom/css/etalage.css</stylesheet></action>
|
36 |
+
<action method="addCss"><stylesheet>dexxtz/productzoom/css/dexxtz.css</stylesheet></action>
|
37 |
+
<action method="addItem"><type>skin_js</type><name>dexxtz/productzoom/js/jquery-2.1.1.js</name><params/><if/></action>
|
38 |
+
<action method="addItem"><type>skin_js</type><name>dexxtz/productzoom/js/jquery.etalage.min.js</name><params/><if/></action>
|
39 |
+
</reference>
|
40 |
+
|
41 |
+
<reference name="product.info.media">
|
42 |
+
<action method="setTemplate" ifconfig="dexxtz_productzoom/general/active"><template>dexxtz/productzoom/media.phtml</template></action>
|
43 |
+
<!--<action method="setTemplate" ifconfig="dexxtz_productzoom/general/active"><template>catalog/product/gallery.phtml</template></action>-->
|
44 |
+
</reference>
|
45 |
+
|
46 |
+
<reference name="before_body_end">
|
47 |
+
<block type="core/template" name="modal">
|
48 |
+
<action method="setTemplate" ifconfig="dexxtz_productzoom/video/active">
|
49 |
+
<template>dexxtz/productzoom/modal.phtml</template>
|
50 |
+
</action>
|
51 |
+
</block>
|
52 |
+
</reference>
|
53 |
+
</review_product_list>
|
54 |
+
</layout>
|
app/design/frontend/base/default/template/dexxtz/productzoom/media.phtml
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Copyright [2015] [Dexxtz]
|
5 |
+
*
|
6 |
+
* @package Dexxtz_Productzoom
|
7 |
+
* @author Dexxtz
|
8 |
+
* @license http://www.apache.org/licenses/LICENSE-2.0
|
9 |
+
*/
|
10 |
+
|
11 |
+
?>
|
12 |
+
<?php
|
13 |
+
$_product = $this->getProduct();
|
14 |
+
$_helper = $this->helper('catalog/output');
|
15 |
+
$dexxtz = Mage::helper('productzoom');
|
16 |
+
|
17 |
+
$dexxtz->getCss();
|
18 |
+
$dexxtz->getJs();
|
19 |
+
?>
|
20 |
+
|
21 |
+
<ul id="etalage">
|
22 |
+
<li>
|
23 |
+
<img class="etalage_thumb_image" src="<?php echo $dexxtz->getImageFeatured($this->helper('catalog/image')->init($_product, 'image')); ?>" />
|
24 |
+
<img class="etalage_source_image" title="<?php echo $_product->getImageLabel(); ?>" src="<?php echo $dexxtz->getImageFeatured($this->helper('catalog/image')->init($_product, 'image'), true); ?>" />
|
25 |
+
</li>
|
26 |
+
<?php
|
27 |
+
foreach ($this->getGalleryImages() as $_image) {
|
28 |
+
if(Mage::registry('current_product')->getImage() != $_image->getFile()) { ?>
|
29 |
+
<li>
|
30 |
+
<img class="etalage_thumb_image" src="<?php echo $dexxtz->getImageFeatured($this->helper('catalog/image')->init($this->getProduct(), 'image', $_image->getFile())); ?>" />
|
31 |
+
<img class="etalage_source_image" title="<?php echo $_image->getLabel(); ?>" src="<?php echo $dexxtz->getImageFeatured($this->helper('catalog/image')->init($this->getProduct(), 'image', $_image->getFile()), true); ?>" />
|
32 |
+
</li>
|
33 |
+
<?php
|
34 |
+
}
|
35 |
+
}
|
36 |
+
?>
|
37 |
+
</ul>
|
app/design/frontend/base/default/template/dexxtz/productzoom/modal.phtml
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Copyright [2015] [Dexxtz]
|
5 |
+
*
|
6 |
+
* @package Dexxtz_Productzoom
|
7 |
+
* @author Dexxtz
|
8 |
+
* @license http://www.apache.org/licenses/LICENSE-2.0
|
9 |
+
*/
|
10 |
+
|
11 |
+
?>
|
12 |
+
<?php
|
13 |
+
$product = Mage::registry('current_product');
|
14 |
+
Mage::helper('productzoom')->getVideoCss();
|
15 |
+
$img = $this->getSkinUrl('dexxtz/productzoom/images/close.png');
|
16 |
+
$js = $this->getSkinUrl('dexxtz/productzoom/js/dexxtz-modal.js');
|
17 |
+
|
18 |
+
if ($video = $product->getDexxtzVideo()) { ?>
|
19 |
+
<div class="dexxtz-bg-modal" onclick="DexxtzModalClose(this);"></div>
|
20 |
+
<div class="dexxtz-modal-content">
|
21 |
+
<div>
|
22 |
+
<img class="dexxtz-close-modal" onclick="DexxtzModalClose(this);" src="<?php echo $img; ?>" />
|
23 |
+
<?php echo $video; ?>
|
24 |
+
</div>
|
25 |
+
</div>
|
26 |
+
<script type="text/javascript" src="<?php echo $js; ?>"></script>
|
27 |
+
<?php } ?>
|
app/etc/modules/Dexxtz_Productzoom.xml
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Copyright [2015] [Dexxtz]
|
5 |
+
*
|
6 |
+
* @package Dexxtz_Productzoom
|
7 |
+
* @author Dexxtz
|
8 |
+
* @license http://www.apache.org/licenses/LICENSE-2.0
|
9 |
+
*/
|
10 |
+
-->
|
11 |
+
<config>
|
12 |
+
<modules>
|
13 |
+
<Dexxtz_Productzoom>
|
14 |
+
<active>true</active>
|
15 |
+
<codePool>community</codePool>
|
16 |
+
</Dexxtz_Productzoom>
|
17 |
+
</modules>
|
18 |
+
</config>
|
app/locale/en_US/Dexxtz_Productzoom.csv
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"Product Image Zoom","Product Image Zoom"
|
2 |
+
"General Settings","General Settings"
|
3 |
+
"Active","Active"
|
4 |
+
"No","No"
|
5 |
+
"Enables or disables customization on product page.","Enables or disables customization on product page."
|
6 |
+
"Autoplay","Autoplay"
|
7 |
+
"Enables or disables the automatic image change.","Enables or disables the automatic image change."
|
8 |
+
"Autoplay interval time","Autoplay interval time"
|
9 |
+
"Example: (6000), only integer is valid.","Example: (6000), only integer is valid."
|
10 |
+
"Speed of interval of Image change.","Speed of interval of Image change."
|
11 |
+
"Fade in interval","Fade in interval"
|
12 |
+
"Example: (600), only integer is valid.","Example: (600), only integer is valid."
|
13 |
+
"It is the image transition effect, how much most the transition is slower.","It is the image transition effect, how much most the transition is slower."
|
14 |
+
"Show magnifier icon","Show magnifier icon"
|
15 |
+
"Display magnifying glass icon on the main image.","Display magnifying glass icon on the main image."
|
16 |
+
"Featured Picture Settings","Featured Picture Settings"
|
17 |
+
"Width","Width"
|
18 |
+
"Main image width, example: (260), enter only integer.","Main image width, example: (260), enter only integer."
|
19 |
+
"Height","Height"
|
20 |
+
"Main image height, example: (260), enter only integer.","Main image height, example: (260), enter only integer."
|
21 |
+
"Resize image in scale","Resize image in scale"
|
22 |
+
"Keep the image in original aspect ratio.","Keep the image in original aspect ratio."
|
23 |
+
"If the image does not reaches minimum the in proportion size is added a frame maintaining the scale.","If the image does not reaches minimum the in proportion size is added a frame maintaining the scale."
|
24 |
+
"Background color of resize","Background color of resize"
|
25 |
+
"Change the background color of frame if necessary.","Change the background color of frame if necessary."
|
26 |
+
"After resizing the image, is added a frame if the image does not reach minimum proportion, the color selected in the field changes the background color of this frame.","After resizing the image, is added a frame if the image does not reach minimum proportion, the color selected in the field changes the background color of this frame."
|
27 |
+
"Thumbnails Settings","Thumbnails Settings"
|
28 |
+
"Show","Show"
|
29 |
+
"%s fixed thumbnail","%s fixed thumbnail"
|
30 |
+
"%s fixed thumbnails","%s fixed thumbnails"
|
31 |
+
"Fixed amount of thumbnails shown.","Fixed amount of thumbnails shown."
|
32 |
+
"Position of thumbnails","Position of thumbnails"
|
33 |
+
"Top","Top"
|
34 |
+
"Right","Right"
|
35 |
+
"Bottom","Bottom"
|
36 |
+
"Left","Left"
|
37 |
+
"Position of where it will be displayed thumbnails.","Position of where it will be displayed thumbnails."
|
38 |
+
"The position of the thumbnails is based in the main picture, ie the thumbnails will positioned in the chosen side (top, right, bottom and left) of the main image.","The position of the thumbnails is based in the main picture, ie the thumbnails will positioned in the chosen side (top, right, bottom and left) of the main image."
|
39 |
+
"Zoom Settings","Zoom Settings"
|
40 |
+
"Width image of zoom","Width image of zoom"
|
41 |
+
"Example: (800), enter only integer","Example: (800), enter only integer"
|
42 |
+
"Height image of zoom","Height image of zoom"
|
43 |
+
"Zoom area width","Zoom area width"
|
44 |
+
"Example: (500), enter only integer","Example: (500), enter only integer"
|
45 |
+
"Zoom area height","Zoom area height"
|
46 |
+
"Example: (500) or blank = automatic, enter only integer.","Example: (500) or blank = automatic, enter only integer."
|
47 |
+
"If you want the height is automatic with the content of the images, leave this field blank.","If you want the height is automatic with the content of the images, leave this field blank."
|
48 |
+
"Show description","Show description"
|
49 |
+
"Shown description of the image, on image of zoom.","Shown description of the image, on image of zoom."
|
50 |
+
"Position of description","Position of description"
|
51 |
+
"Position of description of image of zoom.","Position of description of image of zoom."
|
52 |
+
"Opacity of description","Opacity of description"
|
53 |
+
"Example: (0.7), default of css.","Example: (0.7), default of css."
|
54 |
+
"Background color of description","Background color of description"
|
55 |
+
"Example: (#FFFFF).","Example: (#FFFFF)."
|
56 |
+
"Color of description","Color of description"
|
57 |
+
"Example: (#000000).","Example: (#000000)."
|
58 |
+
"Css Settings","Css Settings"
|
59 |
+
"Border","Border"
|
60 |
+
"Example: (1px solid #DDDDDD), default of css.","Example: (1px solid #DDDDDD), default of css."
|
61 |
+
"Customizes the edge of images with thickness and color.","Customizes the edge of images with thickness and color."
|
62 |
+
"Box shadow","Box shadow"
|
63 |
+
"Example: (0 0 10px #DDDDDD), default of css.","Example: (0 0 10px #DDDDDD), default of css."
|
64 |
+
"Customize the shadows of the images, and can increase the shadow height and give color to it.","Customize the shadows of the images, and can increase the shadow height and give color to it."
|
65 |
+
"Opacity inactive thumbnails","Opacity inactive thumbnails"
|
66 |
+
"Example: (0.3), default of css.","Example: (0.3), default of css."
|
67 |
+
"Transparency of the thumbnails that were not selected.","Transparency of the thumbnails that were not selected."
|
68 |
+
"Opacity image in magnifier","Opacity image in magnifier"
|
69 |
+
"Example: (0.5), default of css.","Example: (0.5), default of css."
|
70 |
+
"Transparency of the main image when passes mouse.","Transparency of the main image when passes mouse."
|
71 |
+
"Video Settings","Video Settings"
|
72 |
+
"Enables or disables video display.","Enables or disables video display."
|
73 |
+
"If 'Yes', enables a tab on new/edit product next to images tab, with a field to add the video embed. On the front-end displays an icon next to the thumbnails, which when clicked displays the video.","If 'Yes', enables a tab on new/edit product next to images tab, with a field to add the video embed. On the front-end displays an icon next to the thumbnails, which when clicked displays the video."
|
74 |
+
"Video icon","Video icon"
|
75 |
+
"Delete Image","Delete Image"
|
76 |
+
"Select an image as the video icon. If you do not select any icon, a default will be displayed, after clicking on icon the video displayed.","Select an image as the video icon. If you do not select any icon, a default will be displayed, after clicking on icon the video displayed."
|
77 |
+
"Background color of modal","Background color of modal"
|
78 |
+
"Select a background color of modal.","Select a background color of modal."
|
79 |
+
"Opacity of background","Opacity of background"
|
80 |
+
"Border of content","Border of content"
|
81 |
+
"Box shadow of content","Box shadow of content"
|
82 |
+
"Background color of content","Background color of content"
|
83 |
+
"Select a background color of content.","Select a background color of content."
|
app/locale/pt_BR/Dexxtz_Productzoom.csv
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"Product Image Zoom","Imagem do Produto (Zoom)"
|
2 |
+
"General Settings","Configurações Gerais"
|
3 |
+
"Active","Ativar"
|
4 |
+
"No","N�o"
|
5 |
+
"Enables or disables customization on product page.","Ativa ou desativa a personaliação de imagens."
|
6 |
+
"Autoplay","Mudança automatica"
|
7 |
+
"Enables or disables the automatic image change.","Ativa ou desativa a mudança automatica da imagem."
|
8 |
+
"Autoplay interval time","Intervalo de tempo da mudança"
|
9 |
+
"Example: (6000), only integer is valid.","Exemplo (6000), permitido apenas números inteiros."
|
10 |
+
"Speed of interval of Image change.","Tempo da troca de imagem, 6000 = 6 segundos."
|
11 |
+
"Fade in interval","Efeito no intervalo"
|
12 |
+
"Example: (600), only integer is valid.","Exemplo (600), permitido apenas números inteiros."
|
13 |
+
"It is the image transition effect, how much most the transition is slower.","É o efeito de transição de imagem, quanto maior, mais tempo dura o efeito."
|
14 |
+
"Show magnifier icon","Mostrar ícone de lupa"
|
15 |
+
"Display magnifying glass icon on the main image.","Exibe ícone de lupa na imagem principal."
|
16 |
+
"Featured Picture Settings","Configuração da Imagem Principal"
|
17 |
+
"Width","Comprimento da imagem"
|
18 |
+
"Main image width, example: (260), enter only integer.","Exemplo: (260), permitido apenas números inteiros."
|
19 |
+
"Height","Altura da imagem"
|
20 |
+
"Main image height, example: (260), enter only integer.","Exemplo: (260), permitido apenas números inteiros."
|
21 |
+
"Resize image in scale","Redimensionar em escala"
|
22 |
+
"Keep the image in original aspect ratio.","Mantem a imagem na proporção original."
|
23 |
+
"If the image does not reaches minimum the in proportion size is added a frame maintaining the scale.","Se a imagem não atingir o tamanho mínimo em proporção, é adicionado um quadro, mantendo a escala da imagem."
|
24 |
+
"Background color of resize","Cor do redimensionamento"
|
25 |
+
"Change the background color of frame if necessary.","Alterar a cor de fundo do quadro, se necessário."
|
26 |
+
"After resizing the image, is added a frame if the image does not reach minimum proportion, the color selected in the field changes the background color of this frame.","Após redimensionar a imagem, é adicionado um quadro, se a imagem não obtiver proporção mínima, a cor selecionada no campo, será a cor desse quadro."
|
27 |
+
"Thumbnails Settings","Configuração das Miniaturas"
|
28 |
+
"Show","Mostrar"
|
29 |
+
"%s fixed thumbnail","%s miniatura fixa"
|
30 |
+
"%s fixed thumbnails","%s miniaturas fixa"
|
31 |
+
"Fixed amount of thumbnails shown.","Quantia fixa de miniaturas na página do produto."
|
32 |
+
"Position of thumbnails","Posição das miniaturas"
|
33 |
+
"Top","Topo"
|
34 |
+
"Right","Direita"
|
35 |
+
"Bottom","Embaixo"
|
36 |
+
"Left","Esquerda"
|
37 |
+
"Position of where it will be displayed thumbnails.","Posição de onde será exibidas miniaturas."
|
38 |
+
"The position of the thumbnails is based in the main picture, ie the thumbnails will positioned in the chosen side (top, right, bottom and left) of the main image.","A posição das miniaturas é baseada na imagem principal, ou seja, as miniaturas será posicionadas no lado escolhido (topo, direita, embaixo e esquerda) da imagem principal."
|
39 |
+
"Zoom Settings","Configuração do Zoom"
|
40 |
+
"Width image of zoom","Comprimento da imagem"
|
41 |
+
"Example: (800), enter only integer","Exemplo: (800), permitido apenas números inteiros."
|
42 |
+
"Height image of zoom","Altura da imagem"
|
43 |
+
"Zoom area width","Comprimento da área do zoom"
|
44 |
+
"Example: (500), enter only integer","Exemplo: (500), permitido apenas números inteiros."
|
45 |
+
"Zoom area height","Altura da área do zoom"
|
46 |
+
"Example: (500) or blank = automatic, enter only integer.","Exemplo: (500) ou 'em branco' = automática."
|
47 |
+
"If you want the height is automatic with the content of the images, leave this field blank.","Caso queira que a altura da área do zoom seja automática com o conteúdo das imagens, deixe este campo em branco."
|
48 |
+
"Show description","Exibir descrição da imagem"
|
49 |
+
"Shown description of the image, on image of zoom.","Exibe a descrição da imagem, na imagem de zoom."
|
50 |
+
"Position of description","Posição da descrição"
|
51 |
+
"Position of description of image of zoom.","Posição da descrição da imagem de zoom."
|
52 |
+
"Opacity of description","Opacidade da descrição"
|
53 |
+
"Example: (0.7), default of css.","Exemplo: (0.7), padrão de css."
|
54 |
+
"Background color of description","Cor de fundo da descrição"
|
55 |
+
"Example: (#FFFFF).","Exemplo: (#FFFFF)."
|
56 |
+
"Color of description","Cor da fonte da descrição"
|
57 |
+
"Example: (#000000).","Exemplo: (#000000)."
|
58 |
+
"Css Settings","Configuração de CSS"
|
59 |
+
"Border","Borda"
|
60 |
+
"Example: (1px solid #DDDDDD), default of css.","Exemplo: (1px solid #DDDDDD), padrão de css."
|
61 |
+
"Customizes the edge of images with thickness and color.","Personaliza a borda das imagens com espessura e cor."
|
62 |
+
"Box shadow","Box shadow"
|
63 |
+
"Example: (0 0 10px #DDDDDD), default of css.","Exemplo: (0 0 10px #DDDDDD), padrão de css."
|
64 |
+
"Customize the shadows of the images, and can increase the shadow height and give color to it.","Personaliza as sombras das imagens, podendo aumentar a altura da sombra e dar cor a ela."
|
65 |
+
"Opacity inactive thumbnails","Opacidade das miniaturas"
|
66 |
+
"Example: (0.3), default of css.","Exemplo: (0.3), padrão de css."
|
67 |
+
"Transparency of the thumbnails that were not selected.","Transparência das miniaturas que não estão selecionadas."
|
68 |
+
"Opacity image in magnifier","Opacidade da imagem principal"
|
69 |
+
"Example: (0.5), default of css.","Exemplo: (0.5), padrão de css."
|
70 |
+
"Transparency of the main image when passes mouse.","Transparência da imagem principal quando se passa o mouse."
|
71 |
+
"Video Settings","Configuração de Vídeo"
|
72 |
+
"Enables or disables video display.","Ativa ou desativa a exibição de vídeo."
|
73 |
+
"If 'Yes', enables a tab on new/edit product next to images tab, with a field to add the video embed. On the front-end displays an icon next to the thumbnails, which when clicked displays the video.","Se 'Sim', um nova aba estará disponível em novo/editar do produto próximo a aba de imagens, com um campo para adicionar o vídeo 'embed'. No front-end exibe um ícone ao lado das miniaturas, que quando clicado exibe o vídeo."
|
74 |
+
"Video icon","Icone da chamada do vídeo"
|
75 |
+
"Delete Image","Excluir imagem"
|
76 |
+
"Select an image as the video icon. If you do not select any icon, a default will be displayed, after clicking on icon the video displayed.","Selecione uma imagem para ser o ícone da chamada do vídeo. Se não for selecionado qualquer ícone, um ícone padrão será exibido, após clicar no ícone, o vídeo será exibido."
|
77 |
+
"Background color of modal","Cor de fundo do modal"
|
78 |
+
"Select a background color of modal.","Selecione uma cor de fundo para o modal."
|
79 |
+
"Opacity of background","Opacidade do fundo do modal"
|
80 |
+
"Border of content","Borda do conteúdo"
|
81 |
+
"Box shadow of content","Box shadow do conteúdo"
|
82 |
+
"Background color of content","Cor de fundo do conteúdo"
|
83 |
+
"Select a background color of content.","Selecione uma cor de fundo para o conteúdo"
|
package.xml
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<package>
|
3 |
+
<name>Dexxtz_Product_Zoom</name>
|
4 |
+
<version>1.0.0</version>
|
5 |
+
<stability>stable</stability>
|
6 |
+
<license uri="http://opensource.org/licenses/apachepl.php">Apache Software License</license>
|
7 |
+
<channel>community</channel>
|
8 |
+
<extends/>
|
9 |
+
<summary>Modifies the way that the image is displayed on the product page, giving several options, including adding video.</summary>
|
10 |
+
<description>Modifies display of images on the product page.
|
11 |
+
Creates carousel with thumbnails.
|
12 |
+
Personalization included.
|
13 |
+
Video option included.</description>
|
14 |
+
<notes>Started</notes>
|
15 |
+
<authors><author><name>Décio Mattos</name><user>auto-converted</user><email>dexxtz@gmail.com</email></author></authors>
|
16 |
+
<date>2015-02-16</date>
|
17 |
+
<time>14:19:29</time>
|
18 |
+
<contents><target name="magecommunity"><dir name="Dexxtz"><dir name="Productzoom"><dir name="Helper"><file name="Data.php" hash="c2e02a069ac07385343c35a999c4895f"/></dir><dir name="Model"><dir name="System"><dir name="Config"><dir name="Source"><dir name="Description"><file name="Position.php" hash="2ad9cce70d7a77cd88b496ff3301520e"/></dir><dir name="Thumbnails"><file name="Position.php" hash="a27c34a996c97a781de3bd31eeaf1eb5"/><file name="Qty.php" hash="db63a393e145db13204ac8089374eb87"/></dir></dir></dir></dir></dir><dir name="etc"><file name="config.xml" hash="e45d92bff8149e97bfb300a5aa2baf42"/><file name="system.xml" hash="8684c17cd57c2fa8817dccdabb27faa7"/></dir><dir name="sql"><dir name="dexxtz_productzoom_setup"><file name="mysql4-install-1.0.0.php" hash="f6d7f1c0dbd01086d5cdf6481d083aaf"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Dexxtz_Productzoom.xml" hash="5d9c2ed84588353716f21fb63e3873e2"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="dexxtz"><file name="productzoom.xml" hash="752aac6e7e9a80ac2d67da51d3bfae9d"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="dexxtz"><file name="productzoom.xml" hash="df25120a4cde055a20b1be052a8b2fe9"/></dir></dir><dir name="template"><dir name="dexxtz"><dir name="productzoom"><file name="media.phtml" hash="2530345cffeb25dcda2e9741a2a86076"/><file name="modal.phtml" hash="4d8ec794b377baef70645d16779824b7"/></dir></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="pt_BR"><file name="Dexxtz_Productzoom.csv" hash="49055ba3c0b544b55be701628a4cdafa"/></dir><dir name="en_US"><file name="Dexxtz_Productzoom.csv" hash="b234f3fbeebdb5ad19f8d92b0aa135ad"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="dexxtz"><dir name="productzoom"><dir name="css"><file name="dexxtz.css" hash="807f76f8b7f31584dda61d1973f493a1"/><file name="etalage.css" hash="bf3bcb6498fe59d1db82dac182d5074f"/></dir><dir name="images"><file name="close.png" hash="6e2879a324a76e9972ebc98201aae1d8"/><file name="loading.gif" hash="8375992489b0fc8a1b3619d16fdc96d5"/><file name="play.jpg" hash="96a5a16648f502b915434bd70c250a22"/><file name="zoom.png" hash="086a93c5d63c2e3753094c0e7c83863f"/></dir><dir name="js"><file name="dexxtz-modal.js" hash="a3e2dd5044ddfb60cc81e5b8115987b3"/><file name="jquery-2.1.1.js" hash="9a094379d98c6458d480ad5a51c4aa27"/><file name="jquery.etalage.min.js" hash="a2a454981646a789f3f97052259ff1a2"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="dexxtz"><dir name="productzoom"><dir name="images"><file name="arrow.gif" hash="5034704a76cd55c1cbcbc58ea6bf523f"/><file name="cross.gif" hash="ba9a274b9323753cd95bc3b1eb2f4e5f"/><file name="hs.png" hash="fefa1a03d92ebad25c88dca94a0b63db"/><file name="hv.png" hash="990d71cada17da100653636cf8490884"/></dir><dir name="js"><file name="color.js" hash="1434cd958b6b0e16f4bda8ee524a1f07"/></dir></dir></dir></dir></dir></dir></target></contents>
|
19 |
+
<compatible/>
|
20 |
+
<dependencies/>
|
21 |
+
</package>
|
skin/adminhtml/default/default/dexxtz/productzoom/images/arrow.gif
ADDED
Binary file
|
skin/adminhtml/default/default/dexxtz/productzoom/images/cross.gif
ADDED
Binary file
|
skin/adminhtml/default/default/dexxtz/productzoom/images/hs.png
ADDED
Binary file
|
skin/adminhtml/default/default/dexxtz/productzoom/images/hv.png
ADDED
Binary file
|
skin/adminhtml/default/default/dexxtz/productzoom/js/color.js
ADDED
@@ -0,0 +1,995 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* jscolor, JavaScript Color Picker
|
3 |
+
*
|
4 |
+
* @version 1.4.3
|
5 |
+
* @license GNU Lesser General Public License, http://www.gnu.org/copyleft/lesser.html
|
6 |
+
* @author Jan Odvarko, http://odvarko.cz
|
7 |
+
* @created 2008-06-15
|
8 |
+
* @updated 2014-07-16
|
9 |
+
* @link http://jscolor.com
|
10 |
+
*/
|
11 |
+
|
12 |
+
var jscolor = {
|
13 |
+
|
14 |
+
dir : SKIN_URL + 'dexxtz/productzoom/js/', // location of jscolor directory (leave empty to autodetect)
|
15 |
+
bindClass : 'color-switch', // class name
|
16 |
+
binding : true, // automatic binding via <input class="...">
|
17 |
+
preloading : true, // use image preloading?
|
18 |
+
|
19 |
+
|
20 |
+
install : function() {
|
21 |
+
jscolor.addEvent(window, 'load', jscolor.init);
|
22 |
+
},
|
23 |
+
|
24 |
+
|
25 |
+
init : function() {
|
26 |
+
if(jscolor.binding) {
|
27 |
+
jscolor.bind();
|
28 |
+
}
|
29 |
+
if(jscolor.preloading) {
|
30 |
+
jscolor.preload();
|
31 |
+
}
|
32 |
+
},
|
33 |
+
|
34 |
+
|
35 |
+
getDir : function() {
|
36 |
+
if(!jscolor.dir) {
|
37 |
+
var detected = jscolor.detectDir();
|
38 |
+
jscolor.dir = detected!==false ? detected : 'jscolor/';
|
39 |
+
}
|
40 |
+
return jscolor.dir
|
41 |
+
},
|
42 |
+
|
43 |
+
|
44 |
+
detectDir : function() {
|
45 |
+
var base = location.href;
|
46 |
+
|
47 |
+
var e = document.getElementsByTagName('base');
|
48 |
+
for(var i=0; i<e.length; i+=1) {
|
49 |
+
if(e[i].href) { base = e[i].href; }
|
50 |
+
}
|
51 |
+
|
52 |
+
var e = document.getElementsByTagName('script');
|
53 |
+
for(var i=0; i<e.length; i+=1) {
|
54 |
+
if(e[i].src && /(^|\/)jscolor\.js([?#].*)?$/i.test(e[i].src)) {
|
55 |
+
var src = new jscolor.URI(e[i].src);
|
56 |
+
var srcAbs = src.toAbsolute(base);
|
57 |
+
srcAbs.path = srcAbs.path.replace(/[^\/]+$/, ''); // remove filename
|
58 |
+
srcAbs.query = null;
|
59 |
+
srcAbs.fragment = null;
|
60 |
+
return srcAbs.toString();
|
61 |
+
}
|
62 |
+
}
|
63 |
+
return false;
|
64 |
+
},
|
65 |
+
|
66 |
+
|
67 |
+
bind : function() {
|
68 |
+
var matchClass = new RegExp('(^|\\s)('+jscolor.bindClass+')(\\s*(\\{[^}]*\\})|\\s|$)', 'i');
|
69 |
+
var e = document.getElementsByTagName('input');
|
70 |
+
for(var i=0; i<e.length; i+=1) {
|
71 |
+
var m;
|
72 |
+
if(!e[i].color && e[i].className && (m = e[i].className.match(matchClass))) {
|
73 |
+
var prop = {};
|
74 |
+
if(m[4]) {
|
75 |
+
try {
|
76 |
+
prop = (new Function ('return (' + m[4] + ')'))();
|
77 |
+
} catch(eInvalidProp) {}
|
78 |
+
}
|
79 |
+
e[i].color = new jscolor.color(e[i], prop);
|
80 |
+
}
|
81 |
+
}
|
82 |
+
},
|
83 |
+
|
84 |
+
|
85 |
+
preload : function() {
|
86 |
+
for(var fn in jscolor.imgRequire) {
|
87 |
+
if(jscolor.imgRequire.hasOwnProperty(fn)) {
|
88 |
+
jscolor.loadImage(fn);
|
89 |
+
}
|
90 |
+
}
|
91 |
+
},
|
92 |
+
|
93 |
+
|
94 |
+
images : {
|
95 |
+
pad : [ 181, 101 ],
|
96 |
+
sld : [ 16, 101 ],
|
97 |
+
cross : [ 15, 15 ],
|
98 |
+
arrow : [ 7, 11 ]
|
99 |
+
},
|
100 |
+
|
101 |
+
|
102 |
+
imgRequire : {},
|
103 |
+
imgLoaded : {},
|
104 |
+
|
105 |
+
|
106 |
+
requireImage : function(filename) {
|
107 |
+
jscolor.imgRequire[filename] = true;
|
108 |
+
},
|
109 |
+
|
110 |
+
|
111 |
+
loadImage : function(filename) {
|
112 |
+
if(!jscolor.imgLoaded[filename]) {
|
113 |
+
jscolor.imgLoaded[filename] = new Image();
|
114 |
+
jscolor.imgLoaded[filename].src = jscolor.getDir()+filename;
|
115 |
+
}
|
116 |
+
},
|
117 |
+
|
118 |
+
|
119 |
+
fetchElement : function(mixed) {
|
120 |
+
return typeof mixed === 'string' ? document.getElementById(mixed) : mixed;
|
121 |
+
},
|
122 |
+
|
123 |
+
|
124 |
+
addEvent : function(el, evnt, func) {
|
125 |
+
if(el.addEventListener) {
|
126 |
+
el.addEventListener(evnt, func, false);
|
127 |
+
} else if(el.attachEvent) {
|
128 |
+
el.attachEvent('on'+evnt, func);
|
129 |
+
}
|
130 |
+
},
|
131 |
+
|
132 |
+
|
133 |
+
fireEvent : function(el, evnt) {
|
134 |
+
if(!el) {
|
135 |
+
return;
|
136 |
+
}
|
137 |
+
if(document.createEvent) {
|
138 |
+
var ev = document.createEvent('HTMLEvents');
|
139 |
+
ev.initEvent(evnt, true, true);
|
140 |
+
el.dispatchEvent(ev);
|
141 |
+
} else if(document.createEventObject) {
|
142 |
+
var ev = document.createEventObject();
|
143 |
+
el.fireEvent('on'+evnt, ev);
|
144 |
+
} else if(el['on'+evnt]) { // alternatively use the traditional event model (IE5)
|
145 |
+
el['on'+evnt]();
|
146 |
+
}
|
147 |
+
},
|
148 |
+
|
149 |
+
|
150 |
+
getElementPos : function(e) {
|
151 |
+
var e1=e, e2=e;
|
152 |
+
var x=0, y=0;
|
153 |
+
if(e1.offsetParent) {
|
154 |
+
do {
|
155 |
+
x += e1.offsetLeft;
|
156 |
+
y += e1.offsetTop;
|
157 |
+
} while(e1 = e1.offsetParent);
|
158 |
+
}
|
159 |
+
while((e2 = e2.parentNode) && e2.nodeName.toUpperCase() !== 'BODY') {
|
160 |
+
x -= e2.scrollLeft;
|
161 |
+
y -= e2.scrollTop;
|
162 |
+
}
|
163 |
+
return [x, y];
|
164 |
+
},
|
165 |
+
|
166 |
+
|
167 |
+
getElementSize : function(e) {
|
168 |
+
return [e.offsetWidth, e.offsetHeight];
|
169 |
+
},
|
170 |
+
|
171 |
+
|
172 |
+
getRelMousePos : function(e) {
|
173 |
+
var x = 0, y = 0;
|
174 |
+
if (!e) { e = window.event; }
|
175 |
+
if (typeof e.offsetX === 'number') {
|
176 |
+
x = e.offsetX;
|
177 |
+
y = e.offsetY;
|
178 |
+
} else if (typeof e.layerX === 'number') {
|
179 |
+
x = e.layerX;
|
180 |
+
y = e.layerY;
|
181 |
+
}
|
182 |
+
return { x: x, y: y };
|
183 |
+
},
|
184 |
+
|
185 |
+
|
186 |
+
getViewPos : function() {
|
187 |
+
if(typeof window.pageYOffset === 'number') {
|
188 |
+
return [window.pageXOffset, window.pageYOffset];
|
189 |
+
} else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) {
|
190 |
+
return [document.body.scrollLeft, document.body.scrollTop];
|
191 |
+
} else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
|
192 |
+
return [document.documentElement.scrollLeft, document.documentElement.scrollTop];
|
193 |
+
} else {
|
194 |
+
return [0, 0];
|
195 |
+
}
|
196 |
+
},
|
197 |
+
|
198 |
+
|
199 |
+
getViewSize : function() {
|
200 |
+
if(typeof window.innerWidth === 'number') {
|
201 |
+
return [window.innerWidth, window.innerHeight];
|
202 |
+
} else if(document.body && (document.body.clientWidth || document.body.clientHeight)) {
|
203 |
+
return [document.body.clientWidth, document.body.clientHeight];
|
204 |
+
} else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
|
205 |
+
return [document.documentElement.clientWidth, document.documentElement.clientHeight];
|
206 |
+
} else {
|
207 |
+
return [0, 0];
|
208 |
+
}
|
209 |
+
},
|
210 |
+
|
211 |
+
|
212 |
+
URI : function(uri) { // See RFC3986
|
213 |
+
|
214 |
+
this.scheme = null;
|
215 |
+
this.authority = null;
|
216 |
+
this.path = '';
|
217 |
+
this.query = null;
|
218 |
+
this.fragment = null;
|
219 |
+
|
220 |
+
this.parse = function(uri) {
|
221 |
+
var m = uri.match(/^(([A-Za-z][0-9A-Za-z+.-]*)(:))?((\/\/)([^\/?#]*))?([^?#]*)((\?)([^#]*))?((#)(.*))?/);
|
222 |
+
this.scheme = m[3] ? m[2] : null;
|
223 |
+
this.authority = m[5] ? m[6] : null;
|
224 |
+
this.path = m[7];
|
225 |
+
this.query = m[9] ? m[10] : null;
|
226 |
+
this.fragment = m[12] ? m[13] : null;
|
227 |
+
return this;
|
228 |
+
};
|
229 |
+
|
230 |
+
this.toString = function() {
|
231 |
+
var result = '';
|
232 |
+
if(this.scheme !== null) { result = result + this.scheme + ':'; }
|
233 |
+
if(this.authority !== null) { result = result + '//' + this.authority; }
|
234 |
+
if(this.path !== null) { result = result + this.path; }
|
235 |
+
if(this.query !== null) { result = result + '?' + this.query; }
|
236 |
+
if(this.fragment !== null) { result = result + '#' + this.fragment; }
|
237 |
+
return result;
|
238 |
+
};
|
239 |
+
|
240 |
+
this.toAbsolute = function(base) {
|
241 |
+
var base = new jscolor.URI(base);
|
242 |
+
var r = this;
|
243 |
+
var t = new jscolor.URI;
|
244 |
+
|
245 |
+
if(base.scheme === null) { return false; }
|
246 |
+
|
247 |
+
if(r.scheme !== null && r.scheme.toLowerCase() === base.scheme.toLowerCase()) {
|
248 |
+
r.scheme = null;
|
249 |
+
}
|
250 |
+
|
251 |
+
if(r.scheme !== null) {
|
252 |
+
t.scheme = r.scheme;
|
253 |
+
t.authority = r.authority;
|
254 |
+
t.path = removeDotSegments(r.path);
|
255 |
+
t.query = r.query;
|
256 |
+
} else {
|
257 |
+
if(r.authority !== null) {
|
258 |
+
t.authority = r.authority;
|
259 |
+
t.path = removeDotSegments(r.path);
|
260 |
+
t.query = r.query;
|
261 |
+
} else {
|
262 |
+
if(r.path === '') {
|
263 |
+
t.path = base.path;
|
264 |
+
if(r.query !== null) {
|
265 |
+
t.query = r.query;
|
266 |
+
} else {
|
267 |
+
t.query = base.query;
|
268 |
+
}
|
269 |
+
} else {
|
270 |
+
if(r.path.substr(0,1) === '/') {
|
271 |
+
t.path = removeDotSegments(r.path);
|
272 |
+
} else {
|
273 |
+
if(base.authority !== null && base.path === '') {
|
274 |
+
t.path = '/'+r.path;
|
275 |
+
} else {
|
276 |
+
t.path = base.path.replace(/[^\/]+$/,'')+r.path;
|
277 |
+
}
|
278 |
+
t.path = removeDotSegments(t.path);
|
279 |
+
}
|
280 |
+
t.query = r.query;
|
281 |
+
}
|
282 |
+
t.authority = base.authority;
|
283 |
+
}
|
284 |
+
t.scheme = base.scheme;
|
285 |
+
}
|
286 |
+
t.fragment = r.fragment;
|
287 |
+
|
288 |
+
return t;
|
289 |
+
};
|
290 |
+
|
291 |
+
function removeDotSegments(path) {
|
292 |
+
var out = '';
|
293 |
+
while(path) {
|
294 |
+
if(path.substr(0,3)==='../' || path.substr(0,2)==='./') {
|
295 |
+
path = path.replace(/^\.+/,'').substr(1);
|
296 |
+
} else if(path.substr(0,3)==='/./' || path==='/.') {
|
297 |
+
path = '/'+path.substr(3);
|
298 |
+
} else if(path.substr(0,4)==='/../' || path==='/..') {
|
299 |
+
path = '/'+path.substr(4);
|
300 |
+
out = out.replace(/\/?[^\/]*$/, '');
|
301 |
+
} else if(path==='.' || path==='..') {
|
302 |
+
path = '';
|
303 |
+
} else {
|
304 |
+
var rm = path.match(/^\/?[^\/]*/)[0];
|
305 |
+
path = path.substr(rm.length);
|
306 |
+
out = out + rm;
|
307 |
+
}
|
308 |
+
}
|
309 |
+
return out;
|
310 |
+
}
|
311 |
+
|
312 |
+
if(uri) {
|
313 |
+
this.parse(uri);
|
314 |
+
}
|
315 |
+
|
316 |
+
},
|
317 |
+
|
318 |
+
|
319 |
+
//
|
320 |
+
// Usage example:
|
321 |
+
// var myColor = new jscolor.color(myInputElement)
|
322 |
+
//
|
323 |
+
|
324 |
+
color : function(target, prop) {
|
325 |
+
|
326 |
+
|
327 |
+
this.required = true; // refuse empty values?
|
328 |
+
this.adjust = true; // adjust value to uniform notation?
|
329 |
+
this.hash = true; // prefix color with # symbol?
|
330 |
+
this.caps = true; // uppercase?
|
331 |
+
this.slider = true; // show the value/saturation slider?
|
332 |
+
this.valueElement = target; // value holder
|
333 |
+
this.styleElement = target; // where to reflect current color
|
334 |
+
this.onImmediateChange = null; // onchange callback (can be either string or function)
|
335 |
+
this.hsv = [0, 0, 1]; // read-only 0-6, 0-1, 0-1
|
336 |
+
this.rgb = [1, 1, 1]; // read-only 0-1, 0-1, 0-1
|
337 |
+
this.minH = 0; // read-only 0-6
|
338 |
+
this.maxH = 6; // read-only 0-6
|
339 |
+
this.minS = 0; // read-only 0-1
|
340 |
+
this.maxS = 1; // read-only 0-1
|
341 |
+
this.minV = 0; // read-only 0-1
|
342 |
+
this.maxV = 1; // read-only 0-1
|
343 |
+
|
344 |
+
this.pickerOnfocus = true; // display picker on focus?
|
345 |
+
this.pickerMode = 'HSV'; // HSV | HVS
|
346 |
+
this.pickerPosition = 'bottom'; // left | right | top | bottom
|
347 |
+
this.pickerSmartPosition = true; // automatically adjust picker position when necessary
|
348 |
+
this.pickerButtonHeight = 20; // px
|
349 |
+
this.pickerClosable = false;
|
350 |
+
this.pickerCloseText = 'Close';
|
351 |
+
this.pickerButtonColor = 'ButtonText'; // px
|
352 |
+
this.pickerFace = 10; // px
|
353 |
+
this.pickerFaceColor = 'ThreeDFace'; // CSS color
|
354 |
+
this.pickerBorder = 1; // px
|
355 |
+
this.pickerBorderColor = 'ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight'; // CSS color
|
356 |
+
this.pickerInset = 1; // px
|
357 |
+
this.pickerInsetColor = 'ThreeDShadow ThreeDHighlight ThreeDHighlight ThreeDShadow'; // CSS color
|
358 |
+
this.pickerZIndex = 10000;
|
359 |
+
|
360 |
+
|
361 |
+
for(var p in prop) {
|
362 |
+
if(prop.hasOwnProperty(p)) {
|
363 |
+
this[p] = prop[p];
|
364 |
+
}
|
365 |
+
}
|
366 |
+
|
367 |
+
|
368 |
+
this.hidePicker = function() {
|
369 |
+
if(isPickerOwner()) {
|
370 |
+
removePicker();
|
371 |
+
}
|
372 |
+
};
|
373 |
+
|
374 |
+
|
375 |
+
this.showPicker = function() {
|
376 |
+
if(!isPickerOwner()) {
|
377 |
+
var tp = jscolor.getElementPos(target); // target pos
|
378 |
+
var ts = jscolor.getElementSize(target); // target size
|
379 |
+
var vp = jscolor.getViewPos(); // view pos
|
380 |
+
var vs = jscolor.getViewSize(); // view size
|
381 |
+
var ps = getPickerDims(this); // picker size
|
382 |
+
var a, b, c;
|
383 |
+
switch(this.pickerPosition.toLowerCase()) {
|
384 |
+
case 'left': a=1; b=0; c=-1; break;
|
385 |
+
case 'right':a=1; b=0; c=1; break;
|
386 |
+
case 'top': a=0; b=1; c=-1; break;
|
387 |
+
default: a=0; b=1; c=1; break;
|
388 |
+
}
|
389 |
+
var l = (ts[b]+ps[b])/2;
|
390 |
+
|
391 |
+
// picker pos
|
392 |
+
if (!this.pickerSmartPosition) {
|
393 |
+
var pp = [
|
394 |
+
tp[a],
|
395 |
+
tp[b]+ts[b]-l+l*c
|
396 |
+
];
|
397 |
+
} else {
|
398 |
+
var pp = [
|
399 |
+
-vp[a]+tp[a]+ps[a] > vs[a] ?
|
400 |
+
(-vp[a]+tp[a]+ts[a]/2 > vs[a]/2 && tp[a]+ts[a]-ps[a] >= 0 ? tp[a]+ts[a]-ps[a] : tp[a]) :
|
401 |
+
tp[a],
|
402 |
+
-vp[b]+tp[b]+ts[b]+ps[b]-l+l*c > vs[b] ?
|
403 |
+
(-vp[b]+tp[b]+ts[b]/2 > vs[b]/2 && tp[b]+ts[b]-l-l*c >= 0 ? tp[b]+ts[b]-l-l*c : tp[b]+ts[b]-l+l*c) :
|
404 |
+
(tp[b]+ts[b]-l+l*c >= 0 ? tp[b]+ts[b]-l+l*c : tp[b]+ts[b]-l-l*c)
|
405 |
+
];
|
406 |
+
}
|
407 |
+
drawPicker(pp[a], pp[b]);
|
408 |
+
}
|
409 |
+
};
|
410 |
+
|
411 |
+
|
412 |
+
this.importColor = function() {
|
413 |
+
if(!valueElement) {
|
414 |
+
this.exportColor();
|
415 |
+
} else {
|
416 |
+
if(!this.adjust) {
|
417 |
+
if(!this.fromString(valueElement.value, leaveValue)) {
|
418 |
+
styleElement.style.backgroundImage = styleElement.jscStyle.backgroundImage;
|
419 |
+
styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor;
|
420 |
+
styleElement.style.color = styleElement.jscStyle.color;
|
421 |
+
this.exportColor(leaveValue | leaveStyle);
|
422 |
+
}
|
423 |
+
} else if(!this.required && /^\s*$/.test(valueElement.value)) {
|
424 |
+
valueElement.value = '';
|
425 |
+
styleElement.style.backgroundImage = styleElement.jscStyle.backgroundImage;
|
426 |
+
styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor;
|
427 |
+
styleElement.style.color = styleElement.jscStyle.color;
|
428 |
+
this.exportColor(leaveValue | leaveStyle);
|
429 |
+
|
430 |
+
} else if(this.fromString(valueElement.value)) {
|
431 |
+
// OK
|
432 |
+
} else {
|
433 |
+
this.exportColor();
|
434 |
+
}
|
435 |
+
}
|
436 |
+
};
|
437 |
+
|
438 |
+
|
439 |
+
this.exportColor = function(flags) {
|
440 |
+
if(!(flags & leaveValue) && valueElement) {
|
441 |
+
var value = this.toString();
|
442 |
+
if(this.caps) { value = value.toUpperCase(); }
|
443 |
+
if(this.hash) { value = '#'+value; }
|
444 |
+
valueElement.value = value;
|
445 |
+
}
|
446 |
+
if(!(flags & leaveStyle) && styleElement) {
|
447 |
+
styleElement.style.backgroundImage = "none";
|
448 |
+
styleElement.style.backgroundColor =
|
449 |
+
'#'+this.toString();
|
450 |
+
styleElement.style.color =
|
451 |
+
0.213 * this.rgb[0] +
|
452 |
+
0.715 * this.rgb[1] +
|
453 |
+
0.072 * this.rgb[2]
|
454 |
+
< 0.5 ? '#FFF' : '#000';
|
455 |
+
}
|
456 |
+
if(!(flags & leavePad) && isPickerOwner()) {
|
457 |
+
redrawPad();
|
458 |
+
}
|
459 |
+
if(!(flags & leaveSld) && isPickerOwner()) {
|
460 |
+
redrawSld();
|
461 |
+
}
|
462 |
+
};
|
463 |
+
|
464 |
+
|
465 |
+
this.fromHSV = function(h, s, v, flags) { // null = don't change
|
466 |
+
if(h !== null) { h = Math.max(0.0, this.minH, Math.min(6.0, this.maxH, h)); }
|
467 |
+
if(s !== null) { s = Math.max(0.0, this.minS, Math.min(1.0, this.maxS, s)); }
|
468 |
+
if(v !== null) { v = Math.max(0.0, this.minV, Math.min(1.0, this.maxV, v)); }
|
469 |
+
|
470 |
+
this.rgb = HSV_RGB(
|
471 |
+
h===null ? this.hsv[0] : (this.hsv[0]=h),
|
472 |
+
s===null ? this.hsv[1] : (this.hsv[1]=s),
|
473 |
+
v===null ? this.hsv[2] : (this.hsv[2]=v)
|
474 |
+
);
|
475 |
+
|
476 |
+
this.exportColor(flags);
|
477 |
+
};
|
478 |
+
|
479 |
+
|
480 |
+
this.fromRGB = function(r, g, b, flags) { // null = don't change
|
481 |
+
if(r !== null) { r = Math.max(0.0, Math.min(1.0, r)); }
|
482 |
+
if(g !== null) { g = Math.max(0.0, Math.min(1.0, g)); }
|
483 |
+
if(b !== null) { b = Math.max(0.0, Math.min(1.0, b)); }
|
484 |
+
|
485 |
+
var hsv = RGB_HSV(
|
486 |
+
r===null ? this.rgb[0] : r,
|
487 |
+
g===null ? this.rgb[1] : g,
|
488 |
+
b===null ? this.rgb[2] : b
|
489 |
+
);
|
490 |
+
if(hsv[0] !== null) {
|
491 |
+
this.hsv[0] = Math.max(0.0, this.minH, Math.min(6.0, this.maxH, hsv[0]));
|
492 |
+
}
|
493 |
+
if(hsv[2] !== 0) {
|
494 |
+
this.hsv[1] = hsv[1]===null ? null : Math.max(0.0, this.minS, Math.min(1.0, this.maxS, hsv[1]));
|
495 |
+
}
|
496 |
+
this.hsv[2] = hsv[2]===null ? null : Math.max(0.0, this.minV, Math.min(1.0, this.maxV, hsv[2]));
|
497 |
+
|
498 |
+
// update RGB according to final HSV, as some values might be trimmed
|
499 |
+
var rgb = HSV_RGB(this.hsv[0], this.hsv[1], this.hsv[2]);
|
500 |
+
this.rgb[0] = rgb[0];
|
501 |
+
this.rgb[1] = rgb[1];
|
502 |
+
this.rgb[2] = rgb[2];
|
503 |
+
|
504 |
+
this.exportColor(flags);
|
505 |
+
};
|
506 |
+
|
507 |
+
|
508 |
+
this.fromString = function(hex, flags) {
|
509 |
+
var m = hex.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i);
|
510 |
+
if(!m) {
|
511 |
+
return false;
|
512 |
+
} else {
|
513 |
+
if(m[1].length === 6) { // 6-char notation
|
514 |
+
this.fromRGB(
|
515 |
+
parseInt(m[1].substr(0,2),16) / 255,
|
516 |
+
parseInt(m[1].substr(2,2),16) / 255,
|
517 |
+
parseInt(m[1].substr(4,2),16) / 255,
|
518 |
+
flags
|
519 |
+
);
|
520 |
+
} else { // 3-char notation
|
521 |
+
this.fromRGB(
|
522 |
+
parseInt(m[1].charAt(0)+m[1].charAt(0),16) / 255,
|
523 |
+
parseInt(m[1].charAt(1)+m[1].charAt(1),16) / 255,
|
524 |
+
parseInt(m[1].charAt(2)+m[1].charAt(2),16) / 255,
|
525 |
+
flags
|
526 |
+
);
|
527 |
+
}
|
528 |
+
return true;
|
529 |
+
}
|
530 |
+
};
|
531 |
+
|
532 |
+
|
533 |
+
this.toString = function() {
|
534 |
+
return (
|
535 |
+
(0x100 | Math.round(255*this.rgb[0])).toString(16).substr(1) +
|
536 |
+
(0x100 | Math.round(255*this.rgb[1])).toString(16).substr(1) +
|
537 |
+
(0x100 | Math.round(255*this.rgb[2])).toString(16).substr(1)
|
538 |
+
);
|
539 |
+
};
|
540 |
+
|
541 |
+
|
542 |
+
function RGB_HSV(r, g, b) {
|
543 |
+
var n = Math.min(Math.min(r,g),b);
|
544 |
+
var v = Math.max(Math.max(r,g),b);
|
545 |
+
var m = v - n;
|
546 |
+
if(m === 0) { return [ null, 0, v ]; }
|
547 |
+
var h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m);
|
548 |
+
return [ h===6?0:h, m/v, v ];
|
549 |
+
}
|
550 |
+
|
551 |
+
|
552 |
+
function HSV_RGB(h, s, v) {
|
553 |
+
if(h === null) { return [ v, v, v ]; }
|
554 |
+
var i = Math.floor(h);
|
555 |
+
var f = i%2 ? h-i : 1-(h-i);
|
556 |
+
var m = v * (1 - s);
|
557 |
+
var n = v * (1 - s*f);
|
558 |
+
switch(i) {
|
559 |
+
case 6:
|
560 |
+
case 0: return [v,n,m];
|
561 |
+
case 1: return [n,v,m];
|
562 |
+
case 2: return [m,v,n];
|
563 |
+
case 3: return [m,n,v];
|
564 |
+
case 4: return [n,m,v];
|
565 |
+
case 5: return [v,m,n];
|
566 |
+
}
|
567 |
+
}
|
568 |
+
|
569 |
+
|
570 |
+
function removePicker() {
|
571 |
+
delete jscolor.picker.owner;
|
572 |
+
document.getElementsByTagName('body')[0].removeChild(jscolor.picker.boxB);
|
573 |
+
}
|
574 |
+
|
575 |
+
|
576 |
+
function drawPicker(x, y) {
|
577 |
+
if(!jscolor.picker) {
|
578 |
+
jscolor.picker = {
|
579 |
+
box : document.createElement('div'),
|
580 |
+
boxB : document.createElement('div'),
|
581 |
+
pad : document.createElement('div'),
|
582 |
+
padB : document.createElement('div'),
|
583 |
+
padM : document.createElement('div'),
|
584 |
+
sld : document.createElement('div'),
|
585 |
+
sldB : document.createElement('div'),
|
586 |
+
sldM : document.createElement('div'),
|
587 |
+
btn : document.createElement('div'),
|
588 |
+
btnS : document.createElement('span'),
|
589 |
+
btnT : document.createTextNode(THIS.pickerCloseText)
|
590 |
+
};
|
591 |
+
for(var i=0,segSize=4; i<jscolor.images.sld[1]; i+=segSize) {
|
592 |
+
var seg = document.createElement('div');
|
593 |
+
seg.style.height = segSize+'px';
|
594 |
+
seg.style.fontSize = '1px';
|
595 |
+
seg.style.lineHeight = '0';
|
596 |
+
jscolor.picker.sld.appendChild(seg);
|
597 |
+
}
|
598 |
+
jscolor.picker.sldB.appendChild(jscolor.picker.sld);
|
599 |
+
jscolor.picker.box.appendChild(jscolor.picker.sldB);
|
600 |
+
jscolor.picker.box.appendChild(jscolor.picker.sldM);
|
601 |
+
jscolor.picker.padB.appendChild(jscolor.picker.pad);
|
602 |
+
jscolor.picker.box.appendChild(jscolor.picker.padB);
|
603 |
+
jscolor.picker.box.appendChild(jscolor.picker.padM);
|
604 |
+
jscolor.picker.btnS.appendChild(jscolor.picker.btnT);
|
605 |
+
jscolor.picker.btn.appendChild(jscolor.picker.btnS);
|
606 |
+
jscolor.picker.box.appendChild(jscolor.picker.btn);
|
607 |
+
jscolor.picker.boxB.appendChild(jscolor.picker.box);
|
608 |
+
}
|
609 |
+
|
610 |
+
var p = jscolor.picker;
|
611 |
+
|
612 |
+
// controls interaction
|
613 |
+
p.box.onmouseup =
|
614 |
+
p.box.onmouseout = function() { target.focus(); };
|
615 |
+
p.box.onmousedown = function() { abortBlur=true; };
|
616 |
+
p.box.onmousemove = function(e) {
|
617 |
+
if (holdPad || holdSld) {
|
618 |
+
holdPad && setPad(e);
|
619 |
+
holdSld && setSld(e);
|
620 |
+
if (document.selection) {
|
621 |
+
document.selection.empty();
|
622 |
+
} else if (window.getSelection) {
|
623 |
+
window.getSelection().removeAllRanges();
|
624 |
+
}
|
625 |
+
dispatchImmediateChange();
|
626 |
+
}
|
627 |
+
};
|
628 |
+
if('ontouchstart' in window) { // if touch device
|
629 |
+
var handle_touchmove = function(e) {
|
630 |
+
var event={
|
631 |
+
'offsetX': e.touches[0].pageX-touchOffset.X,
|
632 |
+
'offsetY': e.touches[0].pageY-touchOffset.Y
|
633 |
+
};
|
634 |
+
if (holdPad || holdSld) {
|
635 |
+
holdPad && setPad(event);
|
636 |
+
holdSld && setSld(event);
|
637 |
+
dispatchImmediateChange();
|
638 |
+
}
|
639 |
+
e.stopPropagation(); // prevent move "view" on broswer
|
640 |
+
e.preventDefault(); // prevent Default - Android Fix (else android generated only 1-2 touchmove events)
|
641 |
+
};
|
642 |
+
p.box.removeEventListener('touchmove', handle_touchmove, false)
|
643 |
+
p.box.addEventListener('touchmove', handle_touchmove, false)
|
644 |
+
}
|
645 |
+
p.padM.onmouseup =
|
646 |
+
p.padM.onmouseout = function() { if(holdPad) { holdPad=false; jscolor.fireEvent(valueElement,'change'); } };
|
647 |
+
p.padM.onmousedown = function(e) {
|
648 |
+
// if the slider is at the bottom, move it up
|
649 |
+
switch(modeID) {
|
650 |
+
case 0: if (THIS.hsv[2] === 0) { THIS.fromHSV(null, null, 1.0); }; break;
|
651 |
+
case 1: if (THIS.hsv[1] === 0) { THIS.fromHSV(null, 1.0, null); }; break;
|
652 |
+
}
|
653 |
+
holdSld=false;
|
654 |
+
holdPad=true;
|
655 |
+
setPad(e);
|
656 |
+
dispatchImmediateChange();
|
657 |
+
};
|
658 |
+
if('ontouchstart' in window) {
|
659 |
+
p.padM.addEventListener('touchstart', function(e) {
|
660 |
+
touchOffset={
|
661 |
+
'X': e.target.offsetParent.offsetLeft,
|
662 |
+
'Y': e.target.offsetParent.offsetTop
|
663 |
+
};
|
664 |
+
this.onmousedown({
|
665 |
+
'offsetX':e.touches[0].pageX-touchOffset.X,
|
666 |
+
'offsetY':e.touches[0].pageY-touchOffset.Y
|
667 |
+
});
|
668 |
+
});
|
669 |
+
}
|
670 |
+
p.sldM.onmouseup =
|
671 |
+
p.sldM.onmouseout = function() { if(holdSld) { holdSld=false; jscolor.fireEvent(valueElement,'change'); } };
|
672 |
+
p.sldM.onmousedown = function(e) {
|
673 |
+
holdPad=false;
|
674 |
+
holdSld=true;
|
675 |
+
setSld(e);
|
676 |
+
dispatchImmediateChange();
|
677 |
+
};
|
678 |
+
if('ontouchstart' in window) {
|
679 |
+
p.sldM.addEventListener('touchstart', function(e) {
|
680 |
+
touchOffset={
|
681 |
+
'X': e.target.offsetParent.offsetLeft,
|
682 |
+
'Y': e.target.offsetParent.offsetTop
|
683 |
+
};
|
684 |
+
this.onmousedown({
|
685 |
+
'offsetX':e.touches[0].pageX-touchOffset.X,
|
686 |
+
'offsetY':e.touches[0].pageY-touchOffset.Y
|
687 |
+
});
|
688 |
+
});
|
689 |
+
}
|
690 |
+
|
691 |
+
// picker
|
692 |
+
var dims = getPickerDims(THIS);
|
693 |
+
p.box.style.width = dims[0] + 'px';
|
694 |
+
p.box.style.height = dims[1] + 'px';
|
695 |
+
|
696 |
+
// picker border
|
697 |
+
p.boxB.style.position = 'absolute';
|
698 |
+
p.boxB.style.clear = 'both';
|
699 |
+
p.boxB.style.left = x+'px';
|
700 |
+
p.boxB.style.top = y+'px';
|
701 |
+
p.boxB.style.zIndex = THIS.pickerZIndex;
|
702 |
+
p.boxB.style.border = THIS.pickerBorder+'px solid';
|
703 |
+
p.boxB.style.borderColor = THIS.pickerBorderColor;
|
704 |
+
p.boxB.style.background = THIS.pickerFaceColor;
|
705 |
+
|
706 |
+
// pad image
|
707 |
+
p.pad.style.width = jscolor.images.pad[0]+'px';
|
708 |
+
p.pad.style.height = jscolor.images.pad[1]+'px';
|
709 |
+
|
710 |
+
// pad border
|
711 |
+
p.padB.style.position = 'absolute';
|
712 |
+
p.padB.style.left = THIS.pickerFace+'px';
|
713 |
+
p.padB.style.top = THIS.pickerFace+'px';
|
714 |
+
p.padB.style.border = THIS.pickerInset+'px solid';
|
715 |
+
p.padB.style.borderColor = THIS.pickerInsetColor;
|
716 |
+
|
717 |
+
// pad mouse area
|
718 |
+
p.padM.style.position = 'absolute';
|
719 |
+
p.padM.style.left = '0';
|
720 |
+
p.padM.style.top = '0';
|
721 |
+
p.padM.style.width = THIS.pickerFace + 2*THIS.pickerInset + jscolor.images.pad[0] + jscolor.images.arrow[0] + 'px';
|
722 |
+
p.padM.style.height = p.box.style.height;
|
723 |
+
p.padM.style.cursor = 'crosshair';
|
724 |
+
|
725 |
+
// slider image
|
726 |
+
p.sld.style.overflow = 'hidden';
|
727 |
+
p.sld.style.width = jscolor.images.sld[0]+'px';
|
728 |
+
p.sld.style.height = jscolor.images.sld[1]+'px';
|
729 |
+
|
730 |
+
// slider border
|
731 |
+
p.sldB.style.display = THIS.slider ? 'block' : 'none';
|
732 |
+
p.sldB.style.position = 'absolute';
|
733 |
+
p.sldB.style.right = THIS.pickerFace+'px';
|
734 |
+
p.sldB.style.top = THIS.pickerFace+'px';
|
735 |
+
p.sldB.style.border = THIS.pickerInset+'px solid';
|
736 |
+
p.sldB.style.borderColor = THIS.pickerInsetColor;
|
737 |
+
|
738 |
+
// slider mouse area
|
739 |
+
p.sldM.style.display = THIS.slider ? 'block' : 'none';
|
740 |
+
p.sldM.style.position = 'absolute';
|
741 |
+
p.sldM.style.right = '0';
|
742 |
+
p.sldM.style.top = '0';
|
743 |
+
p.sldM.style.width = jscolor.images.sld[0] + jscolor.images.arrow[0] + THIS.pickerFace + 2*THIS.pickerInset + 'px';
|
744 |
+
p.sldM.style.height = p.box.style.height;
|
745 |
+
try {
|
746 |
+
p.sldM.style.cursor = 'pointer';
|
747 |
+
} catch(eOldIE) {
|
748 |
+
p.sldM.style.cursor = 'hand';
|
749 |
+
}
|
750 |
+
|
751 |
+
// "close" button
|
752 |
+
function setBtnBorder() {
|
753 |
+
var insetColors = THIS.pickerInsetColor.split(/\s+/);
|
754 |
+
var pickerOutsetColor = insetColors.length < 2 ? insetColors[0] : insetColors[1] + ' ' + insetColors[0] + ' ' + insetColors[0] + ' ' + insetColors[1];
|
755 |
+
p.btn.style.borderColor = pickerOutsetColor;
|
756 |
+
}
|
757 |
+
p.btn.style.display = THIS.pickerClosable ? 'block' : 'none';
|
758 |
+
p.btn.style.position = 'absolute';
|
759 |
+
p.btn.style.left = THIS.pickerFace + 'px';
|
760 |
+
p.btn.style.bottom = THIS.pickerFace + 'px';
|
761 |
+
p.btn.style.padding = '0 15px';
|
762 |
+
p.btn.style.height = '18px';
|
763 |
+
p.btn.style.border = THIS.pickerInset + 'px solid';
|
764 |
+
setBtnBorder();
|
765 |
+
p.btn.style.color = THIS.pickerButtonColor;
|
766 |
+
p.btn.style.font = '12px sans-serif';
|
767 |
+
p.btn.style.textAlign = 'center';
|
768 |
+
try {
|
769 |
+
p.btn.style.cursor = 'pointer';
|
770 |
+
} catch(eOldIE) {
|
771 |
+
p.btn.style.cursor = 'hand';
|
772 |
+
}
|
773 |
+
p.btn.onmousedown = function () {
|
774 |
+
THIS.hidePicker();
|
775 |
+
};
|
776 |
+
p.btnS.style.lineHeight = p.btn.style.height;
|
777 |
+
|
778 |
+
// load images in optimal order
|
779 |
+
switch(modeID) {
|
780 |
+
case 0: var padImg = '../images/hs.png'; break;
|
781 |
+
case 1: var padImg = '../images/hv.png'; break;
|
782 |
+
}
|
783 |
+
p.padM.style.backgroundImage = "url('"+jscolor.getDir()+"../images/cross.gif')";
|
784 |
+
p.padM.style.backgroundRepeat = "no-repeat";
|
785 |
+
p.sldM.style.backgroundImage = "url('"+jscolor.getDir()+"../images/arrow.gif')";
|
786 |
+
p.sldM.style.backgroundRepeat = "no-repeat";
|
787 |
+
p.pad.style.backgroundImage = "url('"+jscolor.getDir()+padImg+"')";
|
788 |
+
p.pad.style.backgroundRepeat = "no-repeat";
|
789 |
+
p.pad.style.backgroundPosition = "0 0";
|
790 |
+
|
791 |
+
// place pointers
|
792 |
+
redrawPad();
|
793 |
+
redrawSld();
|
794 |
+
|
795 |
+
jscolor.picker.owner = THIS;
|
796 |
+
document.getElementsByTagName('body')[0].appendChild(p.boxB);
|
797 |
+
}
|
798 |
+
|
799 |
+
|
800 |
+
function getPickerDims(o) {
|
801 |
+
var dims = [
|
802 |
+
2*o.pickerInset + 2*o.pickerFace + jscolor.images.pad[0] +
|
803 |
+
(o.slider ? 2*o.pickerInset + 2*jscolor.images.arrow[0] + jscolor.images.sld[0] : 0),
|
804 |
+
o.pickerClosable ?
|
805 |
+
4*o.pickerInset + 3*o.pickerFace + jscolor.images.pad[1] + o.pickerButtonHeight :
|
806 |
+
2*o.pickerInset + 2*o.pickerFace + jscolor.images.pad[1]
|
807 |
+
];
|
808 |
+
return dims;
|
809 |
+
}
|
810 |
+
|
811 |
+
|
812 |
+
function redrawPad() {
|
813 |
+
// redraw the pad pointer
|
814 |
+
switch(modeID) {
|
815 |
+
case 0: var yComponent = 1; break;
|
816 |
+
case 1: var yComponent = 2; break;
|
817 |
+
}
|
818 |
+
var x = Math.round((THIS.hsv[0]/6) * (jscolor.images.pad[0]-1));
|
819 |
+
var y = Math.round((1-THIS.hsv[yComponent]) * (jscolor.images.pad[1]-1));
|
820 |
+
jscolor.picker.padM.style.backgroundPosition =
|
821 |
+
(THIS.pickerFace+THIS.pickerInset+x - Math.floor(jscolor.images.cross[0]/2)) + 'px ' +
|
822 |
+
(THIS.pickerFace+THIS.pickerInset+y - Math.floor(jscolor.images.cross[1]/2)) + 'px';
|
823 |
+
|
824 |
+
// redraw the slider image
|
825 |
+
var seg = jscolor.picker.sld.childNodes;
|
826 |
+
|
827 |
+
switch(modeID) {
|
828 |
+
case 0:
|
829 |
+
var rgb = HSV_RGB(THIS.hsv[0], THIS.hsv[1], 1);
|
830 |
+
for(var i=0; i<seg.length; i+=1) {
|
831 |
+
seg[i].style.backgroundColor = 'rgb('+
|
832 |
+
(rgb[0]*(1-i/seg.length)*100)+'%,'+
|
833 |
+
(rgb[1]*(1-i/seg.length)*100)+'%,'+
|
834 |
+
(rgb[2]*(1-i/seg.length)*100)+'%)';
|
835 |
+
}
|
836 |
+
break;
|
837 |
+
case 1:
|
838 |
+
var rgb, s, c = [ THIS.hsv[2], 0, 0 ];
|
839 |
+
var i = Math.floor(THIS.hsv[0]);
|
840 |
+
var f = i%2 ? THIS.hsv[0]-i : 1-(THIS.hsv[0]-i);
|
841 |
+
switch(i) {
|
842 |
+
case 6:
|
843 |
+
case 0: rgb=[0,1,2]; break;
|
844 |
+
case 1: rgb=[1,0,2]; break;
|
845 |
+
case 2: rgb=[2,0,1]; break;
|
846 |
+
case 3: rgb=[2,1,0]; break;
|
847 |
+
case 4: rgb=[1,2,0]; break;
|
848 |
+
case 5: rgb=[0,2,1]; break;
|
849 |
+
}
|
850 |
+
for(var i=0; i<seg.length; i+=1) {
|
851 |
+
s = 1 - 1/(seg.length-1)*i;
|
852 |
+
c[1] = c[0] * (1 - s*f);
|
853 |
+
c[2] = c[0] * (1 - s);
|
854 |
+
seg[i].style.backgroundColor = 'rgb('+
|
855 |
+
(c[rgb[0]]*100)+'%,'+
|
856 |
+
(c[rgb[1]]*100)+'%,'+
|
857 |
+
(c[rgb[2]]*100)+'%)';
|
858 |
+
}
|
859 |
+
break;
|
860 |
+
}
|
861 |
+
}
|
862 |
+
|
863 |
+
|
864 |
+
function redrawSld() {
|
865 |
+
// redraw the slider pointer
|
866 |
+
switch(modeID) {
|
867 |
+
case 0: var yComponent = 2; break;
|
868 |
+
case 1: var yComponent = 1; break;
|
869 |
+
}
|
870 |
+
var y = Math.round((1-THIS.hsv[yComponent]) * (jscolor.images.sld[1]-1));
|
871 |
+
jscolor.picker.sldM.style.backgroundPosition =
|
872 |
+
'0 ' + (THIS.pickerFace+THIS.pickerInset+y - Math.floor(jscolor.images.arrow[1]/2)) + 'px';
|
873 |
+
}
|
874 |
+
|
875 |
+
|
876 |
+
function isPickerOwner() {
|
877 |
+
return jscolor.picker && jscolor.picker.owner === THIS;
|
878 |
+
}
|
879 |
+
|
880 |
+
|
881 |
+
function blurTarget() {
|
882 |
+
if(valueElement === target) {
|
883 |
+
THIS.importColor();
|
884 |
+
}
|
885 |
+
if(THIS.pickerOnfocus) {
|
886 |
+
THIS.hidePicker();
|
887 |
+
}
|
888 |
+
}
|
889 |
+
|
890 |
+
|
891 |
+
function blurValue() {
|
892 |
+
if(valueElement !== target) {
|
893 |
+
THIS.importColor();
|
894 |
+
}
|
895 |
+
}
|
896 |
+
|
897 |
+
|
898 |
+
function setPad(e) {
|
899 |
+
var mpos = jscolor.getRelMousePos(e);
|
900 |
+
var x = mpos.x - THIS.pickerFace - THIS.pickerInset;
|
901 |
+
var y = mpos.y - THIS.pickerFace - THIS.pickerInset;
|
902 |
+
switch(modeID) {
|
903 |
+
case 0: THIS.fromHSV(x*(6/(jscolor.images.pad[0]-1)), 1 - y/(jscolor.images.pad[1]-1), null, leaveSld); break;
|
904 |
+
case 1: THIS.fromHSV(x*(6/(jscolor.images.pad[0]-1)), null, 1 - y/(jscolor.images.pad[1]-1), leaveSld); break;
|
905 |
+
}
|
906 |
+
}
|
907 |
+
|
908 |
+
|
909 |
+
function setSld(e) {
|
910 |
+
var mpos = jscolor.getRelMousePos(e);
|
911 |
+
var y = mpos.y - THIS.pickerFace - THIS.pickerInset;
|
912 |
+
switch(modeID) {
|
913 |
+
case 0: THIS.fromHSV(null, null, 1 - y/(jscolor.images.sld[1]-1), leavePad); break;
|
914 |
+
case 1: THIS.fromHSV(null, 1 - y/(jscolor.images.sld[1]-1), null, leavePad); break;
|
915 |
+
}
|
916 |
+
}
|
917 |
+
|
918 |
+
|
919 |
+
function dispatchImmediateChange() {
|
920 |
+
if (THIS.onImmediateChange) {
|
921 |
+
var callback;
|
922 |
+
if (typeof THIS.onImmediateChange === 'string') {
|
923 |
+
callback = new Function (THIS.onImmediateChange);
|
924 |
+
} else {
|
925 |
+
callback = THIS.onImmediateChange;
|
926 |
+
}
|
927 |
+
callback.call(THIS);
|
928 |
+
}
|
929 |
+
}
|
930 |
+
|
931 |
+
|
932 |
+
var THIS = this;
|
933 |
+
var modeID = this.pickerMode.toLowerCase()==='hvs' ? 1 : 0;
|
934 |
+
var abortBlur = false;
|
935 |
+
var
|
936 |
+
valueElement = jscolor.fetchElement(this.valueElement),
|
937 |
+
styleElement = jscolor.fetchElement(this.styleElement);
|
938 |
+
var
|
939 |
+
holdPad = false,
|
940 |
+
holdSld = false,
|
941 |
+
touchOffset = {};
|
942 |
+
var
|
943 |
+
leaveValue = 1<<0,
|
944 |
+
leaveStyle = 1<<1,
|
945 |
+
leavePad = 1<<2,
|
946 |
+
leaveSld = 1<<3;
|
947 |
+
|
948 |
+
// target
|
949 |
+
jscolor.addEvent(target, 'focus', function() {
|
950 |
+
if(THIS.pickerOnfocus) { THIS.showPicker(); }
|
951 |
+
});
|
952 |
+
jscolor.addEvent(target, 'blur', function() {
|
953 |
+
if(!abortBlur) {
|
954 |
+
window.setTimeout(function(){ abortBlur || blurTarget(); abortBlur=false; }, 0);
|
955 |
+
} else {
|
956 |
+
abortBlur = false;
|
957 |
+
}
|
958 |
+
});
|
959 |
+
|
960 |
+
// valueElement
|
961 |
+
if(valueElement) {
|
962 |
+
var updateField = function() {
|
963 |
+
THIS.fromString(valueElement.value, leaveValue);
|
964 |
+
dispatchImmediateChange();
|
965 |
+
};
|
966 |
+
jscolor.addEvent(valueElement, 'keyup', updateField);
|
967 |
+
jscolor.addEvent(valueElement, 'input', updateField);
|
968 |
+
jscolor.addEvent(valueElement, 'blur', blurValue);
|
969 |
+
valueElement.setAttribute('autocomplete', 'off');
|
970 |
+
}
|
971 |
+
|
972 |
+
// styleElement
|
973 |
+
if(styleElement) {
|
974 |
+
styleElement.jscStyle = {
|
975 |
+
backgroundImage : styleElement.style.backgroundImage,
|
976 |
+
backgroundColor : styleElement.style.backgroundColor,
|
977 |
+
color : styleElement.style.color
|
978 |
+
};
|
979 |
+
}
|
980 |
+
|
981 |
+
// require images
|
982 |
+
switch(modeID) {
|
983 |
+
case 0: jscolor.requireImage('../images/hs.png'); break;
|
984 |
+
case 1: jscolor.requireImage('../images/hv.png'); break;
|
985 |
+
}
|
986 |
+
jscolor.requireImage('../images/cross.gif');
|
987 |
+
jscolor.requireImage('../images/arrow.gif');
|
988 |
+
|
989 |
+
this.importColor();
|
990 |
+
}
|
991 |
+
|
992 |
+
};
|
993 |
+
|
994 |
+
|
995 |
+
jscolor.install();
|
skin/frontend/base/default/dexxtz/productzoom/css/dexxtz.css
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
/**
|
3 |
+
* Copyright [2015] [Dexxtz]
|
4 |
+
*
|
5 |
+
* @package Dexxtz_Productzoom
|
6 |
+
* @author Dexxtz
|
7 |
+
* @license http://www.apache.org/licenses/LICENSE-2.0
|
8 |
+
*/
|
9 |
+
|
10 |
+
.dexxtz_video { width: auto !important; height: auto !important;}
|
11 |
+
.dexxtz_video li { margin: 0 !important; }
|
12 |
+
.dexxtz_video img { display: block; cursor: pointer; }
|
13 |
+
.dexxtz_video img:hover { opacity: 1.0 }
|
14 |
+
.dexxtz-bg-modal { position:fixed; top: 0; left: 0; width:100%; height:100%; z-index: 9998; background: #000; opacity: 0.7; display: none; }
|
15 |
+
.dexxtz-modal-content { position: fixed; z-index: 9999; display:none; }
|
16 |
+
.dexxtz-modal-content div { display: inline-flex; background: #FFF; padding:10px; border-radius: 8px; -moz-border-radius: 8px; -webkit-border-radius: 8px; border: 1px solid #ddd; box-shadow: 0 0 10px #ddd; }
|
17 |
+
.dexxtz-close-modal { cursor: pointer; position: absolute; top: -15px; right: -15px; }
|
18 |
+
.dexxtz-modal-content iframe { border-radius: 8px; -moz-border-radius: 8px; -webkit-border-radius: 8px; }
|
skin/frontend/base/default/dexxtz/productzoom/css/etalage.css
ADDED
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* Title: jQuery Etalage plugin CSS
|
3 |
+
* Author: Berend de Jong, Frique
|
4 |
+
* Author URI: http://www.frique.me/
|
5 |
+
* Version: 1.3.1 (20120705.1)
|
6 |
+
*
|
7 |
+
* ------------------------------------ STYLE ------------------------------------
|
8 |
+
* Edit this section to style your thumbnails, zoom area, magnifier etc.
|
9 |
+
* If the id of your Etalage instance is different, do a find/replace on #etalage.
|
10 |
+
* -------------------------------------------------------------------------------
|
11 |
+
*/
|
12 |
+
|
13 |
+
/* Etalage container (large thumb + small thumbs): */
|
14 |
+
#etalage{
|
15 |
+
display: none;
|
16 |
+
margin-bottom: 50px;
|
17 |
+
}
|
18 |
+
|
19 |
+
/* Large thumbnail: */
|
20 |
+
#etalage .etalage_thumb{
|
21 |
+
background: white url(../images/loading.gif) center no-repeat;
|
22 |
+
border: 1px solid #ddd;
|
23 |
+
padding: 6px;
|
24 |
+
-webkit-box-shadow: 0 0 10px #ddd;
|
25 |
+
-moz-box-shadow: 0 0 10px #ddd;
|
26 |
+
box-shadow: 0 0 10px #ddd;
|
27 |
+
}
|
28 |
+
/* Large thumbnail - image (in case you want to add a border around the image within the frame) */
|
29 |
+
#etalage .etalage_thumb_image{ }
|
30 |
+
|
31 |
+
/* Small thumbnails: */
|
32 |
+
#etalage .etalage_small_thumbs li{
|
33 |
+
background: white;
|
34 |
+
border: 1px solid #ddd;
|
35 |
+
margin: 10px;
|
36 |
+
padding: 3px;
|
37 |
+
}
|
38 |
+
/* The one on the left that makes them slide */
|
39 |
+
#etalage ul li.etalage_smallthumb_first{ }
|
40 |
+
/* The one on the right that makes them slide */
|
41 |
+
#etalage ul li.etalage_smallthumb_last{ }
|
42 |
+
/* The currently active one */
|
43 |
+
#etalage ul li.etalage_smallthumb_active{
|
44 |
+
-webkit-box-shadow: 0 0 10px #ddd;
|
45 |
+
-moz-box-shadow: 0 0 10px #ddd;
|
46 |
+
box-shadow: 0 0 10px #ddd;
|
47 |
+
}
|
48 |
+
|
49 |
+
/* Zoomed image area: */
|
50 |
+
#etalage .etalage_zoom_area,
|
51 |
+
.etalage_zoom_area{
|
52 |
+
background: white url(../images/loading.gif) center no-repeat;
|
53 |
+
border: 1px solid #ddd;
|
54 |
+
padding: 6px;
|
55 |
+
-webkit-box-shadow: 0 0 10px #ddd;
|
56 |
+
-moz-box-shadow: 0 0 10px #ddd;
|
57 |
+
box-shadow: 0 0 10px #ddd;
|
58 |
+
}
|
59 |
+
|
60 |
+
/* Magnifier area (thumbnail hovering rectangle): */
|
61 |
+
#etalage .etalage_magnifier{
|
62 |
+
background: white;
|
63 |
+
border: 1px solid #bbb;
|
64 |
+
}
|
65 |
+
|
66 |
+
/* Icon that will apear at the left bottom of the large thumbnail (optional): */
|
67 |
+
#etalage .etalage_icon{
|
68 |
+
background: url(../images/zoom.png) no-repeat;
|
69 |
+
width: 14px;
|
70 |
+
height: 14px;
|
71 |
+
}
|
72 |
+
|
73 |
+
/* Hint that will apear at the top right of the large thumbnail (optional): */
|
74 |
+
#etalage .etalage_hint{
|
75 |
+
/*background: url(../images/hint.gif) no-repeat;*/
|
76 |
+
width: 130px;
|
77 |
+
height: 57px;
|
78 |
+
}
|
79 |
+
|
80 |
+
/* Description area (optional) */
|
81 |
+
#etalage .etalage_description{
|
82 |
+
background: white;
|
83 |
+
font-style: italic;
|
84 |
+
margin: 10px;
|
85 |
+
padding: 6px 10px;
|
86 |
+
}
|
87 |
+
|
88 |
+
/*
|
89 |
+
* ------------------------------------ FUNCTIONALITY --------------------------------------
|
90 |
+
* The following CSS serves to make Etalage function properly. Don't edit or edit carefully.
|
91 |
+
* -----------------------------------------------------------------------------------------
|
92 |
+
*/
|
93 |
+
|
94 |
+
.etalage, .etalage_thumb, .etalage_thumb_image, .etalage_source_image, .etalage_zoom_preview, .etalage_icon, .etalage_hint{ display:none }
|
95 |
+
.etalage, .etalage ul, .etalage li, .etalage img, .etalage_hint, .etalage_icon, .etalage_description{ margin:0; padding:0; border:0; list-style:none }
|
96 |
+
.etalage, .etalage_magnifier div, .etalage_magnifier div img, .etalage_small_thumbs ul, ul .etalage_small_thumbs li, .etalage_zoom_area div, .etalage_zoom_img{ position:relative }
|
97 |
+
.etalage img, .etalage li{ -webkit-user-select:none; -khtml-user-select:none; -moz-user-select:none; -o-user-select:none; user-select:none; -webkit-user-drag:none; -moz-user-drag:none; user-drag:none }
|
98 |
+
.etalage, .etalage_small_thumbs li{ float:left }
|
99 |
+
.etalage_right{ float:right }
|
100 |
+
.etalage li{ position:absolute }
|
101 |
+
.etalage img{ vertical-align:bottom; max-width:none }
|
102 |
+
.etalage_magnifier{ cursor:default }
|
103 |
+
.etalage_magnifier div, .etalage_small_thumbs{ overflow:hidden }
|
104 |
+
.etalage_magnifier div img{ display:none }
|
105 |
+
.etalage_icon, .etalage_hint{ cursor:default; width:0; height:0; overflow:hidden }
|
106 |
+
.etalage_small_thumbs li.vertical{ float:none }
|
107 |
+
.etalage_zoom_area{ z-index:996 }
|
108 |
+
.etalage_zoom_area div{ overflow:hidden; z-index:997 }
|
109 |
+
.etalage_zoom_preview{ position:absolute; z-index:998 }
|
110 |
+
.etalage_zoom_img, .etalage_hint{ z-index:999 }
|
111 |
+
.etalage{ direction:ltr }
|
112 |
+
div.etalage_description{ position:absolute; bottom:0; left:0; z-index:999 }
|
113 |
+
div.etalage_description.rtl{ direction:rtl; text-align:right }
|
skin/frontend/base/default/dexxtz/productzoom/images/close.png
ADDED
Binary file
|
skin/frontend/base/default/dexxtz/productzoom/images/loading.gif
ADDED
Binary file
|
skin/frontend/base/default/dexxtz/productzoom/images/play.jpg
ADDED
Binary file
|
skin/frontend/base/default/dexxtz/productzoom/images/zoom.png
ADDED
Binary file
|
skin/frontend/base/default/dexxtz/productzoom/js/dexxtz-modal.js
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
/**
|
3 |
+
* Copyright [2015] [Dexxtz]
|
4 |
+
*
|
5 |
+
* @package Dexxtz_Productzoom
|
6 |
+
* @author Dexxtz
|
7 |
+
* @license http://www.apache.org/licenses/LICENSE-2.0
|
8 |
+
*/
|
9 |
+
|
10 |
+
var jQuery = jQuery.noConflict();
|
11 |
+
var b, c, w, h, t, l;
|
12 |
+
|
13 |
+
b = jQuery('.dexxtz-bg-modal');
|
14 |
+
c = jQuery('.dexxtz-modal-content');
|
15 |
+
w = (jQuery('body').innerWidth() / 2);
|
16 |
+
h = (window.innerHeight / 2);
|
17 |
+
t = ((h - (c.height() / 2)) < 15) ? '15px' : h - (c.height() / 2) + 'px';
|
18 |
+
l = ((w - (c.width() / 2)) > 0) ? w - (c.width() / 2) + 'px' : 0;
|
19 |
+
|
20 |
+
jQuery(window).resize(function() {
|
21 |
+
w = (jQuery('body').innerWidth() / 2);
|
22 |
+
h = (window.innerHeight / 2);
|
23 |
+
t = ((h - (c.height() / 2)) < 15) ? '15px' : h - (c.height() / 2) + 'px';
|
24 |
+
l = ((w - (c.width() / 2)) > 0) ? w - (c.width() / 2) + 'px' : 0;
|
25 |
+
|
26 |
+
c.css('top', t)
|
27 |
+
c.css('left', l);
|
28 |
+
});
|
29 |
+
|
30 |
+
function DexxtzModal() {
|
31 |
+
c.css('top', t)
|
32 |
+
c.css('left', l);
|
33 |
+
b.fadeIn('slow');
|
34 |
+
c.fadeIn('slow');
|
35 |
+
}
|
36 |
+
|
37 |
+
function DexxtzModalClose() {
|
38 |
+
b.fadeOut('slow');
|
39 |
+
c.fadeOut('slow');
|
40 |
+
}
|
skin/frontend/base/default/dexxtz/productzoom/js/jquery-2.1.1.js
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
|
2 |
+
!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)
|
3 |
+
},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))
|
4 |
+
},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=l.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Dc)Dc[a]()}),k.cors=!!Fc&&"withCredentials"in Fc,k.ajax=Fc=!!Fc,n.ajaxTransport(function(a){var b;return k.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n});
|
skin/frontend/base/default/dexxtz/productzoom/js/jquery.etalage.min.js
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* Title: jQuery Etalage plugin
|
3 |
+
* Author: Berend de Jong, Frique
|
4 |
+
* Author URI: http://www.frique.me/
|
5 |
+
* Version: 1.3.4 (20130622.1)
|
6 |
+
*/
|
7 |
+
|
8 |
+
(function(a){jQuery.noConflict();a.fn.etalage=function(b){var c=a.extend({align:"left",thumb_image_width:300,thumb_image_height:400,source_image_width:900,source_image_height:1200,zoom_area_width:600,zoom_area_height:"justify",zoom_area_distance:10,zoom_easing:true,click_to_zoom:false,zoom_element:"auto",show_descriptions:true,description_location:"bottom",description_opacity:0.7,small_thumbs:3,smallthumb_inactive_opacity:0.4,smallthumb_hide_single:true,smallthumb_select_on_hover:false,smallthumbs_position:"bottom",show_begin_end_smallthumb:true,magnifier_opacity:0.5,magnifier_invert:true,show_icon:true,icon_offset:20,hide_cursor:false,show_hint:false,hint_offset:15,speed:600,autoplay:true,autoplay_interval:6000,keyboard:true,right_to_left:false,click_callback:function(){return true
|
9 |
+
},change_callback:function(){return true}},b);a.each(this,function(){var aG=a(this);if(aG.is("ul")&&aG.children("li").length&&aG.find("img.etalage_source_image").length){var ad,ab,Q,I,aq,t,f,aS,aL,aw,aR=aG.attr("id"),aZ=Math.floor(c.speed*0.7),aC=Math.round(c.speed/100),ai=false,z=0,e=false,ao=true,A=false,x=0,al=0,ak=0,Y=0,X=0,aF="hori";if(typeof aR==="undefined"||!aR){aR="[no id]"}if(c.smallthumbs_position==="left"||c.smallthumbs_position==="right"){aF="vert"}if(typeof a.browser==="object"&&a.browser.msie){if(a.browser.version<9){ao=false;
|
10 |
+
if(a.browser.version<7){e=true}}}aG.addClass("etalage").show();var w=aG.children("li").addClass("etalage_thumb");w.first().show().addClass("etalage_thumb_active");var q=w.length,aJ=c.autoplay;if(q<2){aJ=false}if(c.align==="right"){aG.addClass("etalage_right")}a.each(w,function(a1){a1+=1;var a4=a(this),j=a4.find(".etalage_thumb_image").removeAttr("alt").show(),a3=a4.find(".etalage_source_image"),a2=a4.find("a");a4.data("id",a1).addClass("thumb_"+a1);if(!j.length&&a3.length){a4.prepend('<img class="etalage_thumb_image" src="'+a3.attr("src")+'" />')
|
11 |
+
}else{if(!j.length&&!a3.length){a4.remove()}}if(a2.length){a4.find(".etalage_thumb_image").data("anchor",a2.attr("href"))}});var av=w.find(".etalage_thumb_image").css({width:c.thumb_image_width,height:c.thumb_image_height}).show();a.each(av,function(){a(this).data("src",this.src)});var aO=a('<li class="etalage_magnifier"><div><img /></div></li>').appendTo(aG),aa=aO.children("div"),h=aa.children("img");var E=a('<li class="etalage_icon"> </li>').appendTo(aG);if(c.show_icon){E.show()}var r;if(c.show_hint){r=a('<li class="etalage_hint"> </li>').appendTo(aG).show()
|
12 |
+
}var K,s=c.zoom_element;if(s!=="auto"&&s&&a(s).length){K=a(s).addClass("etalage_zoom_area").html('<div><img class="etalage_zoom_img" /></div>')}else{s="auto";K=a('<li class="etalage_zoom_area"><div><img class="etalage_zoom_img" /></div></li>').appendTo(aG)}var W=K.children("div"),an;if(ao){an=a('<img class="etalage_zoom_preview" />').css({width:c.source_image_width,height:c.source_image_height,opacity:0.3}).prependTo(W).show()}var aB=W.children(".etalage_zoom_img").css({width:c.source_image_width,height:c.source_image_height});
|
13 |
+
var az;if(c.show_descriptions){az=a('<div class="etalage_description'+((c.right_to_left)?" rtl":"")+'"></div>').prependTo(K)}var aQ,l,aV,u,y,aj=c.small_thumbs;if(q>1||!c.smallthumb_hide_single){aQ=a('<li class="etalage_small_thumbs"><ul></ul></li>').appendTo(aG);l=aQ.children("ul");a.each(av,function(){var i=a(this);Q=i.data("src");I=i.parents(".etalage_thumb").data("id");a('<li><img class="etalage_small_thumb" src="'+Q+'" /></li>').data("thumb_id",I).appendTo(l)});aV=l.children("li").css({opacity:c.smallthumb_inactive_opacity});
|
14 |
+
if(aj<3){aj=3}if(q>aj){if(c.show_begin_end_smallthumb){Q=av.eq(q-1).data("src");I=w.eq(q-1).data("id");a('<li class="etalage_smallthumb_first etalage_smallthumb_navtoend"><img class="etalage_small_thumb" src="'+Q+'" /></li>').data("src",Q).data("thumb_id",I).css({opacity:c.smallthumb_inactive_opacity}).prependTo(l);Q=av.eq(0).data("src");I=w.eq(0).data("id");a('<li class="etalage_smallthumb_navtostart"><img class="etalage_small_thumb" src="'+Q+'" /></li>').data("src",Q).data("thumb_id",I).css({opacity:c.smallthumb_inactive_opacity}).appendTo(l);
|
15 |
+
aV=l.children("li");aV.eq(1).addClass("etalage_smallthumb_active").css({opacity:1})}else{aV.eq(0).addClass("etalage_smallthumb_first etalage_smallthumb_active").css({opacity:1})}aV.eq(aj-1).addClass("etalage_smallthumb_last")}else{aV.eq(0).addClass("etalage_smallthumb_active").css({opacity:1})}a.each(aV,function(j){a(this).data("id",(j+1))});u=aV.children("img");y=aV.length;if(aF==="vert"){aV.addClass("vertical")}}if(c.magnifier_invert){aq=1}else{aq=c.magnifier_opacity}var aN=parseInt(w.css("borderLeftWidth"),10)+parseInt(w.css("borderRightWidth"),10)+parseInt(av.css("borderLeftWidth"),10)+parseInt(av.css("borderRightWidth"),10),Z=parseInt(w.css("marginLeft"),10)+parseInt(w.css("marginRight"),10),B=parseInt(w.css("paddingLeft"),10)+parseInt(w.css("paddingRight"),10)+parseInt(av.css("marginLeft"),10)+parseInt(av.css("marginRight"),10)+parseInt(av.css("paddingLeft"),10)+parseInt(av.css("paddingRight"),10),N=c.thumb_image_width+aN+Z+B,O=c.thumb_image_height+aN+Z+B,aE=0,P=0,ax=0,ag=0,aD=0,o=0,aH=0;
|
16 |
+
if(q>1||!c.smallthumb_hide_single){aE=parseInt(aV.css("borderLeftWidth"),10)+parseInt(aV.css("borderRightWidth"),10)+parseInt(u.css("borderLeftWidth"),10)+parseInt(u.css("borderRightWidth"),10);P=parseInt(aV.css("marginTop"),10);ax=parseInt(aV.css("paddingLeft"),10)+parseInt(aV.css("paddingRight"),10)+parseInt(u.css("marginLeft"),10)+parseInt(u.css("marginRight"),10)+parseInt(u.css("paddingLeft"),10)+parseInt(u.css("paddingRight"),10);if(aF==="vert"){aD=Math.round((O-((aj-1)*P))/aj)-(aE+ax);ag=Math.round((c.thumb_image_width*aD)/c.thumb_image_height);
|
17 |
+
o=ag+aE+ax;aH=aD+aE+ax}else{ag=Math.round((N-((aj-1)*P))/aj)-(aE+ax);aD=Math.round((c.thumb_image_height*ag)/c.thumb_image_width);o=ag+aE+ax;aH=aD+aE+ax}}var d=parseInt(K.css("borderTopWidth"),10),aA=parseInt(c.zoom_area_distance,10),J=parseInt(K.css("paddingTop"),10),T,a0;if((c.zoom_area_width-(d*2)-(J*2))>c.source_image_width){T=c.source_image_width}else{T=c.zoom_area_width-(d*2)-(J*2)}if(c.zoom_area_height==="justify"){a0=(O+P+aH)-(d*2)-(J*2)}else{a0=c.zoom_area_height-(d*2)-(J*2)}if(a0>c.source_image_height){a0=c.source_image_height
|
18 |
+
}var aX,at,v,ar;if(c.show_descriptions){aX=parseInt(az.css("borderLeftWidth"),10)+parseInt(az.css("borderRightWidth"),10);at=parseInt(az.css("marginLeft"),10)+parseInt(az.css("marginRight"),10);v=parseInt(az.css("paddingLeft"),10)+parseInt(az.css("paddingRight"),10);ar=T-aX-at-v}var aM;if(e){aM=a('<iframe marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="javascript:\'<html></html>\'"></iframe>').css({position:"absolute",zIndex:1}).prependTo(K)}var S=parseInt(aO.css("borderTopWidth"),10),aK=parseInt(w.css("borderTopWidth"),10)+parseInt(w.css("marginTop"),10)+parseInt(w.css("paddingTop"),10)+parseInt(av.css("borderTopWidth"),10)+parseInt(av.css("marginTop"),10)-S,am=av.offset().left-aG.offset().left-S;
|
19 |
+
if(c.smallthumbs_position==="left"){am=am+o+P}else{if(c.smallthumbs_position==="top"){aK=aK+aH+P}}var V=Math.round(T*(c.thumb_image_width/c.source_image_width)),R=Math.round(a0*(c.thumb_image_height/c.source_image_height)),M=aK+c.thumb_image_height-R,p=am+c.thumb_image_width-V,af=Math.round(V/2),ae=Math.round(R/2),H,C;if(c.show_hint){H=parseInt(c.hint_offset,10)+parseInt(r.css("marginTop"),10);C=parseInt(c.hint_offset,10)+parseInt(r.css("marginRight"),10);if(c.smallthumbs_position==="right"){C=C-o-P
|
20 |
+
}}if(aF==="vert"){aS=N+P+o;aG.css({width:aS,height:O})}else{aS=N;aG.css({width:aS,height:O+P+aH})}if(c.show_icon){aw={top:O-E.outerHeight(true)-parseInt(c.icon_offset,10),left:parseInt(c.icon_offset,10)};if(c.smallthumbs_position==="left"){aw.left=o+P+parseInt(c.icon_offset,10)}else{if(c.smallthumbs_position==="top"){aw.top+=aH+P}}E.css(aw)}if(c.show_hint){r.css({margin:0,top:-H,right:-C})}h.css({margin:0,padding:0,width:c.thumb_image_width,height:c.thumb_image_height});aa.css({margin:0,padding:0,width:V,height:R});
|
21 |
+
aw={margin:0,padding:0,left:(p-am)/2,top:(M-aK)/2};if(c.smallthumbs_position==="left"){aw.left="+="+o+P}else{if(c.smallthumbs_position==="top"){aw.top="+="+aH+P}}aO.css(aw).hide();W.css({width:T,height:a0});aw={margin:0,opacity:0};if(c.align==="right"&&s==="auto"){aw.left=-(T+(d*2)+(J*2)+aA)}else{if(s==="auto"){aw.left=aS+aA}}K.css(aw).hide();if(c.show_descriptions){aw={width:ar,bottom:J,left:J,opacity:c.description_opacity};if(c.description_location==="top"){aw.top=J;aw.bottom="auto"}az.css(aw).hide()
|
22 |
+
}if(q>1||!c.smallthumb_hide_single){if(aF==="vert"){aw={top:0,height:O};if(c.smallthumbs_position==="left"){w.css({left:o+P})}else{aw.marginLeft=N+P}aQ.css(aw);l.css({height:(aH*y)+(y*P)+100});u.css({width:ag,height:aD}).attr("height",aD);aV.css({margin:0,marginBottom:P})}else{aw={width:N};if(c.smallthumbs_position==="top"){w.css({top:aH+P})}else{aw.top=O+P}aQ.css(aw);l.css({width:(o*y)+(y*P)+100});u.css({width:ag,height:aD}).attr("width",ag);aV.css({margin:0,marginRight:P})}if(aF==="vert"){aL=((aH*aj)+((aj-1)*P))-O
|
23 |
+
}else{aL=((o*aj)+((aj-1)*P))-N}if(aL>0){for(ad=1;ad<=(y-1);ad=ad+(aj-1)){ab=1;for(ab;ab<=aL;ab+=1){if(aF==="vert"){aV.eq(ad+ab-1).css({marginBottom:(P-1)})}else{aV.eq(ad+ab-1).css({marginRight:(P-1)})}}}}else{if(aL<0){for(ad=1;ad<=(y-1);ad=ad+(aj-1)){ab=1;for(ab;ab<=(-aL);ab+=1){if(aF==="vert"){aV.eq(ad+ab-1).css({marginBottom:(P+1)});l.css({height:parseInt(l.css("height"),10)+1})}else{aV.eq(ad+ab-1).css({marginRight:(P+1)});l.css({width:parseInt(l.css("width"),10)+1})}}}}}}if(c.show_icon&&!c.magnifier_invert){aO.css({background:aO.css("background-color")+" "+E.css("background-image")+" center no-repeat"})
|
24 |
+
}if(c.hide_cursor){aO.add(E).css({cursor:"none"})}if(e){aM.css({width:W.css("width"),height:W.css("height")})}var ay=w.first().find(".etalage_thumb_image"),ap=w.first().find(".etalage_source_image");if(c.magnifier_invert){h.attr("src",ay.data("src")).show()}if(ao){an.attr("src",ay.data("src"))}aB.attr("src",ap.attr("src"));if(c.show_descriptions){f=ap.attr("title");if(f){az.html(f).show()}}var D=function(){if(t){clearInterval(t);t=false}};var k=function(){if(t){D()}t=setInterval(function(){au()},c.autoplay_interval)
|
25 |
+
};var U=function(){aO.stop().fadeTo(aZ,aq);E.stop().animate({opacity:0},aZ);K.stop().show().animate({opacity:1},aZ);if(c.magnifier_invert){ay.stop().animate({opacity:c.magnifier_opacity},aZ)}if(aJ){D()}};var aW=function(){aO.stop().fadeOut(c.speed);E.stop().animate({opacity:1},c.speed);K.stop().animate({opacity:0},c.speed,function(){a(this).hide()});if(c.magnifier_invert){ay.stop().animate({opacity:1},c.speed,function(){if(c.click_to_zoom){A=false}})}clearTimeout(x);if(aJ){k()}};var g=function(a3,a1){var j,a2,i=aG.find(".etalage_smallthumb_active").removeClass("etalage_smallthumb_active");
|
26 |
+
a3.addClass("etalage_smallthumb_active");aO.stop().hide();K.stop().hide();if(!a1){ai=true;i.stop(true,true).animate({opacity:c.smallthumb_inactive_opacity},aZ);a3.stop(true,true).animate({opacity:1},aZ,function(){ai=false})}aG.find(".etalage_thumb_active").removeClass("etalage_thumb_active").stop().animate({opacity:0},c.speed,function(){a(this).hide()});j=w.filter(".thumb_"+a3.data("thumb_id")).addClass("etalage_thumb_active").show().stop().css({opacity:0}).animate({opacity:1},c.speed);ay=j.find(".etalage_thumb_image");
|
27 |
+
ap=j.find(".etalage_source_image");if(c.magnifier_invert){h.attr("src",ay.data("src"))}if(ao){an.attr("src",ay.data("src"))}aB.attr("src",ap.attr("src"));if(c.show_descriptions){f=ap.attr("title");if(f){az.html(f).show()}else{az.hide()}}if(aJ){D();k()}a2=a3.data("id");if(q>=aj){a2--}ah(a2)};var G=function(a2,j,i,a1){a.each(aV,function(){var a4=a(this),a3={opacity:c.smallthumb_inactive_opacity};if(a4.data("id")===a1.data("id")){a3.opacity=1}if(aF==="vert"){a3.top="-="+a2}else{a3.left="-="+a2}a4.animate(a3,aZ,"swing",function(){if(ai){a1.addClass("etalage_smallthumb_active");
|
28 |
+
ai=false}})});g(a1,true)};var aY=function(){var a2=Y-al,a1=X-ak,j=-a2/aC,i=-a1/aC;al=al-j;ak=ak-i;if(a2<1&&a2>-1){al=Y}if(a1<1&&a1>-1){ak=X}aB.css({left:al,top:ak});if(ao){an.css({left:al,top:ak})}if(a2>1||a1>1||a2<1||a1<1){x=setTimeout(function(){aY()},25)}};var L=function(){var i;if(c.magnifier_invert){aG.find(".etalage_thumb_active").mouseleave()}if(!c.right_to_left){i=aG.find(".etalage_smallthumb_active").prev();if(!i.length){if(q>aj){F()}else{aV.last().trigger("click")}return true}}else{i=aG.find(".etalage_smallthumb_active").next();
|
29 |
+
if(!i.length){if(q>aj){ac()}else{aV.first().trigger("click")}return true}}i.trigger("click")};var au=function(){var i;if(c.magnifier_invert){aG.find(".etalage_thumb_active").mouseleave()}if(!c.right_to_left){i=aG.find(".etalage_smallthumb_active").next();if(!i.length){if(q>aj){ac()}else{aV.first().trigger("click")}return true}}else{i=aG.find(".etalage_smallthumb_active").prev();if(!i.length){if(q>aj){F()}else{aV.last().trigger("click")}return true}}i.trigger("click")};var n=function(a2){if(q<=aj||!c.show_begin_end_smallthumb){a2=a2-1
|
30 |
+
}var a6=aV.eq(a2);if(a6.length&&!ai){var a5=aG.find(".etalage_smallthumb_active"),a1=a5.data("id")-1,j;if(a1>a2){z=a1-a2;var a3=aG.find(".etalage_smallthumb_first"),a7=a3.data("id");if(a2<a7){j=a1-a7;z=z-j;a3.trigger("click")}else{g(a6,false)}}else{if(a1<a2){z=a2-a1;var a4=aG.find(".etalage_smallthumb_last"),i=a4.data("id")-1;if(a2>=i){j=i-a1-1;z=z-j;a4.trigger("click")}else{g(a6,false)}}}}};window[aR+"_previous"]=function(){L()};window[aR+"_next"]=function(){au()};window[aR+"_show"]=function(i){n(i)
|
31 |
+
};var aI=function(i){if(!c.click_callback(i,aR)){return false}if(typeof etalage_click_callback==="function"){etalage_click_callback(i,aR);return false}return true};var ah=function(i){if(c.change_callback(i,aR)){if(typeof etalage_change_callback==="function"){etalage_change_callback(i,aR)}}};w.add(aO).add(E).mouseenter(function(){if(c.show_hint){r.hide()}if(!c.click_to_zoom||A){U()}}).mouseleave(function(){aW()});var aU=-(c.source_image_width-T),aT=-(c.source_image_height-a0);w.add(aO).add(E).mousemove(function(a5){var j=Math.round(a5.pageX-ay.offset().left+am),i=Math.round(a5.pageY-ay.offset().top+aK);
|
32 |
+
var a4=(j-af),a3=(i-ae);if(a4<am){a4=am}if(a4>p){a4=p}if(a3<aK){a3=aK}if(a3>M){a3=M}aO.css({left:a4,top:a3});if(c.magnifier_invert){var a2=a4-am,a1=a3-aK;h.css({left:-a2,top:-a1})}Y=-((a4-am)*(1/(c.thumb_image_width/c.source_image_width)));X=-((a3-aK)*(1/(c.thumb_image_height/c.source_image_height)));if(Y<aU){Y=aU}if(X<aT){X=aT}if(c.zoom_easing){clearTimeout(x);aY()}else{if(ao){an.css({left:Y,top:X})}aB.css({left:Y,top:X})}});function aP(a2){z=(z)?z-1:0;ai=true;var a1=aG.find(".etalage_smallthumb_first").removeClass("etalage_smallthumb_first");
|
33 |
+
var i=aG.find(".etalage_smallthumb_last").removeClass("etalage_smallthumb_last");var a3,j,a5,a4;if(a2==="left"){a3=a1.prev().addClass("etalage_smallthumb_first");j=i.prev().addClass("etalage_smallthumb_last");a5=a1}else{a3=a1.next().addClass("etalage_smallthumb_first");j=i.next().addClass("etalage_smallthumb_last");a5=i}if(z){if(a2==="left"){a3.trigger("click")}else{j.trigger("click")}}else{a4=(aF==="vert")?a3.position().top:a3.position().left;G(a4,a3,j,a5)}}function m(a5){ai=true;var a1=aG.find(".etalage_smallthumb_first").removeClass("etalage_smallthumb_first");
|
34 |
+
var i=aG.find(".etalage_smallthumb_last").removeClass("etalage_smallthumb_last");var a2,j,a4;if(a5==="end"){a2=aV.eq(y-aj).addClass("etalage_smallthumb_first");j=aV.eq(y-1).addClass("etalage_smallthumb_last");a4=j;if(j.hasClass("etalage_smallthumb_navtostart")){a4=j.prev()}}else{a2=aV.eq(0).addClass("etalage_smallthumb_first");j=aV.eq(aj-1).addClass("etalage_smallthumb_last");a4=a2;if(a2.hasClass("etalage_smallthumb_navtoend")){a4=a2.next()}}var a3=(aF==="vert")?a2.position().top:a2.position().left;
|
35 |
+
G(a3,a2,j,a4)}function ac(){m("start")}function F(){m("end")}if(q>1||!c.smallthumb_hide_single){aV.click(function(){var a7=a(this),a3,j=0,a5=false,a2,a8,a4,a6,a1;if(!a7.hasClass("etalage_smallthumb_active")&&(!ai||z)){if(a7.hasClass("etalage_smallthumb_first")&&a7.prev().length){aP("left")}else{if(a7.hasClass("etalage_smallthumb_navtoend")){F()}else{if(a7.hasClass("etalage_smallthumb_last")&&a7.next().length){aP("right")}else{if(a7.hasClass("etalage_smallthumb_navtostart")){ac()}else{if(z&&!a(this).next().length){F();
|
36 |
+
return true}else{if(z&&!a(this).prev().length){ac();return true}}g(a7,false)}}}}}});if(c.smallthumb_select_on_hover){aV.mouseenter(function(){a(this).trigger("click")})}}if(c.click_to_zoom){w.click(function(){A=true;U()})}else{aO.click(function(){var i=ay.data("anchor");if(i){if(aI(i)){window.location=i}}})}if(q>1&&c.keyboard){a(document).keydown(function(i){if(i.keyCode===39||i.keyCode==="39"){if(!c.right_to_left){au()}else{L()}}if(i.keyCode===37||i.keyCode==="37"){if(!c.right_to_left){L()}else{au()
|
37 |
+
}}})}a(window).bind("load",function(){w.css({"background-image":"none"});K.css({"background-image":"none"});if(ao){ao=false;an.remove()}});if(aJ){k()}}});return this}})(jQuery);
|