Version Notes
Technologies used to build the module: php, jquery, html, css, Bootstrap, modules compatible with Magento version 1.7 onward
Download this release
Release Info
Developer | Jefferson Batista Porto |
Extension | Jefferson_Clickview |
Version | 0.1.0 |
Comparing to | |
See all releases |
Version 0.1.0
- app/code/community/Jefferson/Clickview/Block/Clickviewbestsellerbycategoryblock.php +110 -0
- app/code/community/Jefferson/Clickview/Block/Clickviewbestsellersblock.php +32 -0
- app/code/community/Jefferson/Clickview/Block/Clickviewblock.php +71 -0
- app/code/community/Jefferson/Clickview/Block/Clickviewmostviewedblock.php +65 -0
- app/code/community/Jefferson/Clickview/Block/Clickviewmostviewedbycategoryblock.php +104 -0
- app/code/community/Jefferson/Clickview/Block/Clickviewnewsproductsblock.php +241 -0
- app/code/community/Jefferson/Clickview/Block/Clickviewproductspromotionblock.php +212 -0
- app/code/community/Jefferson/Clickview/Block/Clickviewrecents.php +13 -0
- app/code/community/Jefferson/Clickview/Helper/Data.php +34 -0
- app/code/community/Jefferson/Clickview/Model/Clickviewbestsellerbycategorymodel.php +56 -0
- app/code/community/Jefferson/Clickview/Model/Clickviewbestsellersmodel.php +48 -0
- app/code/community/Jefferson/Clickview/Model/Clickviewmodel.php +139 -0
- app/code/community/Jefferson/Clickview/Model/Clickviewmostviewedbycategorymodel.php +59 -0
- app/code/community/Jefferson/Clickview/Model/Clickviewmostviewedmodel.php +48 -0
- app/code/community/Jefferson/Clickview/Model/Observer.php +49 -0
- app/code/community/Jefferson/Clickview/Model/System/Config/Source/Category.php +53 -0
- app/code/community/Jefferson/Clickview/Model/System/Config/Source/Categoryallowed.php +62 -0
- app/code/community/Jefferson/Clickview/Model/System/Config/Source/Categorybestsellerbycategory.php +62 -0
- app/code/community/Jefferson/Clickview/Model/System/Config/Source/Categorynewsproducts.php +62 -0
- app/code/community/Jefferson/Clickview/Model/System/Config/Source/Categorypromotionproducts.php +62 -0
- app/code/community/Jefferson/Clickview/Model/System/Config/Source/Mode.php +31 -0
- app/code/community/Jefferson/Clickview/controllers/IndexController.php +439 -0
- app/code/community/Jefferson/Clickview/etc/config.xml +299 -0
- app/code/community/Jefferson/Clickview/etc/system.xml +842 -0
- app/code/community/Jefferson/Clickview/sql/jefferson_clickview_setup/install-0.1.0.php +28 -0
- app/design/frontend/base/default/layout/jefferson/jefferson_clickview.xml +120 -0
- app/design/frontend/base/default/template/jefferson/clickview/bestseller.phtml +96 -0
- app/design/frontend/base/default/template/jefferson/clickview/bestsellerbycategory.phtml +75 -0
- app/design/frontend/base/default/template/jefferson/clickview/clickview_template.phtml +201 -0
- app/design/frontend/base/default/template/jefferson/clickview/mostviewed.phtml +92 -0
- app/design/frontend/base/default/template/jefferson/clickview/mostviewedbycategory.phtml +76 -0
- app/design/frontend/base/default/template/jefferson/clickview/newsproducts.phtml +86 -0
- app/design/frontend/base/default/template/jefferson/clickview/products_all_promotion.phtml +78 -0
- app/design/frontend/base/default/template/jefferson/clickview/products_discount.phtml +80 -0
- app/design/frontend/base/default/template/jefferson/clickview/products_new_by_category.phtml +77 -0
- app/design/frontend/base/default/template/jefferson/clickview/recents.phtml +101 -0
- app/design/frontend/base/default/template/jefferson/clickview/union.phtml +41 -0
- app/etc/modules/Jefferson_Clickview.xml +10 -0
- app/locale/pt_BR/jefferson_clickview.csv +31 -0
- package.xml +18 -0
- skin/frontend/base/default/jefferson/Clickview/css/bxslider.css +297 -0
- skin/frontend/base/default/jefferson/Clickview/css/style.css +31 -0
- skin/frontend/base/default/jefferson/Clickview/image/loading.gif +0 -0
- skin/frontend/base/default/jefferson/Clickview/js/bxslider.js +1348 -0
- skin/frontend/base/default/jefferson/Clickview/js/jquery.js +6 -0
- skin/frontend/base/default/jefferson/Clickview/js/script.js +40 -0
app/code/community/Jefferson/Clickview/Block/Clickviewbestsellerbycategoryblock.php
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
/**
|
5 |
+
* @category Jefferson
|
6 |
+
* @package Jefferson_Clickview
|
7 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
8 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
9 |
+
*
|
10 |
+
*/
|
11 |
+
|
12 |
+
class Jefferson_Clickview_Block_Clickviewbestsellerbycategoryblock extends Mage_Catalog_Block_Product_List {
|
13 |
+
|
14 |
+
protected $cat = null;
|
15 |
+
protected $html = null;
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Get category allowed bests seller
|
19 |
+
*
|
20 |
+
*/
|
21 |
+
public function getCategoryBestSeller(){
|
22 |
+
|
23 |
+
$storeId = Mage::app()->getStore()->getId();
|
24 |
+
|
25 |
+
$catAllowed = self::getCategoryAllowed();
|
26 |
+
|
27 |
+
$catDefault = self::getCatDefault();
|
28 |
+
|
29 |
+
$this->cat = Mage::getSingleton('catalog/category')
|
30 |
+
->getCollection()
|
31 |
+
->addAttributeToSelect('*')
|
32 |
+
->setStoreId($storeId)
|
33 |
+
->addAttributeToFilter('entity_id', array('in' => $catAllowed));
|
34 |
+
|
35 |
+
foreach($this->cat as $i){
|
36 |
+
if($i->getId() == $catDefault){
|
37 |
+
$this->html .= "<option value='".$i->getId()."' selected='selected' >".$i->getName()."</option>";
|
38 |
+
}else{
|
39 |
+
$this->html .= "<option value='".$i->getId()."'>".$i->getName()."</option>";
|
40 |
+
}
|
41 |
+
}
|
42 |
+
|
43 |
+
return $this->html;
|
44 |
+
}
|
45 |
+
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Get the products by category
|
49 |
+
*
|
50 |
+
*/
|
51 |
+
public function getBestsellerProductsByCategory($num,$cat){
|
52 |
+
return Mage::getSingleton('clickview/clickviewbestsellerbycategorymodel')->getBestsellerProductsByCategory($num,$cat);
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Get url controller
|
57 |
+
*/
|
58 |
+
public function getUrlControllerBestSellerByCategory(){
|
59 |
+
echo Mage::getUrl()."clickview/index/getbestsellerbycategory";
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Get the best selling function settings
|
64 |
+
*
|
65 |
+
*/
|
66 |
+
|
67 |
+
public function getCategoryAllowed(){
|
68 |
+
$cat = explode(',', Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_category_allowed'));
|
69 |
+
return $cat;
|
70 |
+
}
|
71 |
+
public function getCatDefault(){
|
72 |
+
return $catDefault = Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_category_default');
|
73 |
+
return $catDefault;
|
74 |
+
}
|
75 |
+
|
76 |
+
public function getMinSlides(){
|
77 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_category_minslider'));
|
78 |
+
}
|
79 |
+
|
80 |
+
public function getMaxSlides(){
|
81 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_category_maxslider'));
|
82 |
+
}
|
83 |
+
|
84 |
+
public function getSlideWidth(){
|
85 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_category_slidewidth'));
|
86 |
+
}
|
87 |
+
|
88 |
+
public function getSlideMargin(){
|
89 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_category_slidewidth'));
|
90 |
+
}
|
91 |
+
|
92 |
+
public function getBestSellerByCatImgSize(){
|
93 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_img_size'));
|
94 |
+
}
|
95 |
+
|
96 |
+
public function getBestSellerByCatRow(){
|
97 |
+
return Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_click_number_rows');
|
98 |
+
}
|
99 |
+
|
100 |
+
public function getBestSellerByCatMode(){
|
101 |
+
return Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_slide_mode');
|
102 |
+
}
|
103 |
+
|
104 |
+
public function getBestSellerByCatEnabled(){
|
105 |
+
return Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_click_enabled');
|
106 |
+
}
|
107 |
+
|
108 |
+
}
|
109 |
+
|
110 |
+
?>
|
app/code/community/Jefferson/Clickview/Block/Clickviewbestsellersblock.php
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
/**
|
5 |
+
* @category Jefferson
|
6 |
+
* @package Jefferson_Clickview
|
7 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
8 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
9 |
+
*
|
10 |
+
*/
|
11 |
+
|
12 |
+
class Jefferson_Clickview_Block_Clickviewbestsellersblock extends Mage_Catalog_Block_Product_List {
|
13 |
+
|
14 |
+
public function getBestsellerProducts($num){
|
15 |
+
return Mage::getSingleton('clickview/clickviewbestsellersmodel')->getBestsellerProducts($num);
|
16 |
+
}
|
17 |
+
|
18 |
+
public function getClickCountRows(){
|
19 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_best_seller/clickview_best_seller_general/clickview_click_number_rows'));
|
20 |
+
}
|
21 |
+
|
22 |
+
public function getClickEnabled(){
|
23 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_best_seller/clickview_best_seller_general/clickview_click_enabled'));
|
24 |
+
}
|
25 |
+
|
26 |
+
public function getClickImgSize(){
|
27 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_best_seller/clickview_best_seller_general/clickview_img_size'));
|
28 |
+
}
|
29 |
+
|
30 |
+
}
|
31 |
+
|
32 |
+
?>
|
app/code/community/Jefferson/Clickview/Block/Clickviewblock.php
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
/**
|
5 |
+
* @category Jefferson
|
6 |
+
* @package Jefferson_Clickview
|
7 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
8 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
9 |
+
*
|
10 |
+
*/
|
11 |
+
|
12 |
+
class Jefferson_Clickview_Block_Clickviewblock extends Mage_Catalog_Block_Product_List {
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Take the methods of model
|
16 |
+
*
|
17 |
+
* Jefferson_Clickview_Model_Observer
|
18 |
+
* Jefferson_Clickview_Model_Clickviewmodel
|
19 |
+
*/
|
20 |
+
|
21 |
+
protected $obj = null;
|
22 |
+
protected $objObs = null;
|
23 |
+
|
24 |
+
public function _construct(){
|
25 |
+
$this->obj = Mage::getSingleton('clickview/clickviewmodel');
|
26 |
+
$this->objObs = Mage::getSingleton('clickview/observer');
|
27 |
+
}
|
28 |
+
|
29 |
+
public function getCookie(){
|
30 |
+
return $this->objObs->getCookie('IDPRODUCT');
|
31 |
+
}
|
32 |
+
|
33 |
+
public function getCategoryProducts($id){
|
34 |
+
return $this->obj->getCategoryProducts($id);
|
35 |
+
}
|
36 |
+
|
37 |
+
public function getCategoryName($category){
|
38 |
+
return $this->obj->getCategoryName($category);
|
39 |
+
}
|
40 |
+
|
41 |
+
public function getDataProducts($entity_id, $categoryCurrent, $limit){
|
42 |
+
return $this->obj->getDataProducts($entity_id, $categoryCurrent, $limit);
|
43 |
+
}
|
44 |
+
|
45 |
+
public function getDataProductCurrent($id){
|
46 |
+
return $this->obj->getDataProductCurrent($id);
|
47 |
+
}
|
48 |
+
|
49 |
+
public function getDataProductSingle($id){
|
50 |
+
return $this->obj->getDataProductSingle($id);
|
51 |
+
}
|
52 |
+
|
53 |
+
public function getDataProductsRelated($id){
|
54 |
+
return $this->obj->getDataProductsRelated($id);
|
55 |
+
}
|
56 |
+
|
57 |
+
public function getClickCountRows(){
|
58 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_options/clickview_general/clickview_click_number_rows'));
|
59 |
+
}
|
60 |
+
|
61 |
+
public function getClickEnabled(){
|
62 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_options/clickview_general/clickview_click_enabled'));
|
63 |
+
}
|
64 |
+
|
65 |
+
public function getClickImgSize(){
|
66 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_options/clickview_general/clickview_img_size'));
|
67 |
+
}
|
68 |
+
|
69 |
+
}
|
70 |
+
|
71 |
+
?>
|
app/code/community/Jefferson/Clickview/Block/Clickviewmostviewedblock.php
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
/**
|
5 |
+
* @category Jefferson
|
6 |
+
* @package Jefferson_Clickview
|
7 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
8 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
9 |
+
*
|
10 |
+
*/
|
11 |
+
|
12 |
+
class Jefferson_Clickview_Block_Clickviewmostviewedblock extends Mage_Catalog_Block_Product_Abstract {
|
13 |
+
|
14 |
+
public function getMostViewed($num){
|
15 |
+
$storeId = Mage::app()->getStore()->getId();
|
16 |
+
|
17 |
+
$today = time();
|
18 |
+
$last = $today - (60*60*24*30);
|
19 |
+
|
20 |
+
$fromDate = date("Y-m-d", $last);
|
21 |
+
$toDate = date("Y-m-d", $today);
|
22 |
+
|
23 |
+
$products = Mage::getResourceModel('reports/product_collection')
|
24 |
+
->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
|
25 |
+
->setStoreId($storeId)
|
26 |
+
->addStoreFilter($storeId)
|
27 |
+
->addViewsCount($fromDate, $toDate)
|
28 |
+
->setOrder('views_count', 'desc')
|
29 |
+
->setPageSize($num);
|
30 |
+
|
31 |
+
$productFlatData = Mage::getStoreConfig('catalog/frontend/flat_catalog_product');
|
32 |
+
if($productFlatData == "1")
|
33 |
+
{
|
34 |
+
$products->getSelect()->joinLeft(
|
35 |
+
array('flat' => 'catalog_product_flat_'.$storeId),
|
36 |
+
"(e.entity_id = flat.entity_id ) ",
|
37 |
+
array(
|
38 |
+
'flat.name AS name','flat.small_image AS small_image','flat.price AS price','flat.special_price as special_price','flat.special_from_date AS special_from_date','flat.special_to_date AS special_to_date'
|
39 |
+
)
|
40 |
+
);
|
41 |
+
}
|
42 |
+
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products);
|
43 |
+
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($products);
|
44 |
+
|
45 |
+
return $products;
|
46 |
+
}
|
47 |
+
|
48 |
+
public function getClickCountRows(){
|
49 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_most_views/clickview_most_views_general/clickview_click_number_rows'));
|
50 |
+
}
|
51 |
+
|
52 |
+
public function getClickEnabled(){
|
53 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_most_views/clickview_most_views_general/clickview_click_enabled'));
|
54 |
+
}
|
55 |
+
|
56 |
+
public function getClickImgSize(){
|
57 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_most_views/clickview_most_views_general/clickview_img_size'));
|
58 |
+
}
|
59 |
+
|
60 |
+
|
61 |
+
|
62 |
+
|
63 |
+
}
|
64 |
+
|
65 |
+
?>
|
app/code/community/Jefferson/Clickview/Block/Clickviewmostviewedbycategoryblock.php
ADDED
@@ -0,0 +1,104 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
/**
|
5 |
+
* @category Jefferson
|
6 |
+
* @package Jefferson_Clickview
|
7 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
8 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
9 |
+
*
|
10 |
+
*/
|
11 |
+
|
12 |
+
class Jefferson_Clickview_Block_Clickviewmostviewedbycategoryblock extends Mage_Catalog_Block_Product_List {
|
13 |
+
|
14 |
+
protected $cat = null;
|
15 |
+
protected $html = null;
|
16 |
+
|
17 |
+
public function getMostViewedByCategory($num,$cat){
|
18 |
+
return Mage::getSingleton('clickview/clickviewmostviewedbycategorymodel')->getMostViewedByCategory($num,$cat);
|
19 |
+
}
|
20 |
+
|
21 |
+
public function getCategoryMostViewed(){
|
22 |
+
|
23 |
+
$storeId = Mage::app()->getStore()->getId();
|
24 |
+
|
25 |
+
$catAllowed = self::getCategoryAllowed();
|
26 |
+
|
27 |
+
$catDefault = self::getCatDefault();
|
28 |
+
|
29 |
+
$this->cat = Mage::getSingleton('catalog/category')
|
30 |
+
->getCollection()
|
31 |
+
->addAttributeToSelect('*')
|
32 |
+
->setStoreId($storeId)
|
33 |
+
->addAttributeToFilter('entity_id', array('in' => $catAllowed));
|
34 |
+
|
35 |
+
foreach($this->cat as $i){
|
36 |
+
if($i->getId() == $catDefault){
|
37 |
+
$this->html .= "<option value='".$i->getId()."' selected='selected' >".$i->getName()."</option>";
|
38 |
+
}else{
|
39 |
+
$this->html .= "<option value='".$i->getId()."'>".$i->getName()."</option>";
|
40 |
+
}
|
41 |
+
}
|
42 |
+
|
43 |
+
return $this->html;
|
44 |
+
}
|
45 |
+
|
46 |
+
public function getCategoryAllowed(){
|
47 |
+
$cat = explode(',', Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_category_allowed'));
|
48 |
+
return $cat;
|
49 |
+
}
|
50 |
+
|
51 |
+
public function getUrlControllerMostViewedByCategory(){
|
52 |
+
echo Mage::getUrl()."clickview/index/getmostviewedbycategory";
|
53 |
+
}
|
54 |
+
|
55 |
+
public function getBestsellerProductsByCategory($num,$cat){
|
56 |
+
return Mage::getSingleton('clickview/clickviewbestsellerbycategorymodel')->getBestsellerProductsByCategory($num,$cat);
|
57 |
+
}
|
58 |
+
|
59 |
+
public function getUrlControllerBestSellerByCategory(){
|
60 |
+
echo Mage::getUrl()."clickview/index/getbestsellerbycategory";
|
61 |
+
}
|
62 |
+
|
63 |
+
|
64 |
+
public function getCatDefault(){
|
65 |
+
return $catDefault = Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_category_default');
|
66 |
+
return $catDefault;
|
67 |
+
}
|
68 |
+
|
69 |
+
|
70 |
+
public function getMinSlides(){
|
71 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_category_minslider'));
|
72 |
+
}
|
73 |
+
|
74 |
+
public function getMaxSlides(){
|
75 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_category_maxslider'));
|
76 |
+
}
|
77 |
+
|
78 |
+
public function getSlideWidth(){
|
79 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_category_slidewidth'));
|
80 |
+
}
|
81 |
+
|
82 |
+
public function getSlideMargin(){
|
83 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_category_slidewidth'));
|
84 |
+
}
|
85 |
+
|
86 |
+
public function getMostViewedByCatImgSize(){
|
87 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_img_size'));
|
88 |
+
}
|
89 |
+
|
90 |
+
public function getMostViewedByCatRow(){
|
91 |
+
return Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_click_number_rows');
|
92 |
+
}
|
93 |
+
|
94 |
+
public function getMostViewedByCatMode(){
|
95 |
+
return Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_slide_mode');
|
96 |
+
}
|
97 |
+
|
98 |
+
public function getMostViewedByCatEnabled(){
|
99 |
+
return Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_click_enabled');
|
100 |
+
}
|
101 |
+
|
102 |
+
}
|
103 |
+
|
104 |
+
?>
|
app/code/community/Jefferson/Clickview/Block/Clickviewnewsproductsblock.php
ADDED
@@ -0,0 +1,241 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
/**
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/afl-3.0.php
|
12 |
+
* If you did not receive a copy of the license and are unable to
|
13 |
+
* obtain it through the world-wide-web, please send an email
|
14 |
+
* to license@magento.com so we can send you a copy immediately.
|
15 |
+
*
|
16 |
+
* @category Jefferson
|
17 |
+
* @package Jefferson_Clickview
|
18 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*
|
21 |
+
*/
|
22 |
+
|
23 |
+
class Jefferson_Clickview_Block_Clickviewnewsproductsblock extends Mage_Catalog_Block_Product_List {
|
24 |
+
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Get the new products by category
|
28 |
+
*
|
29 |
+
* @param $num int
|
30 |
+
* @param $cat int
|
31 |
+
*/
|
32 |
+
|
33 |
+
public function getNewsProductCollectionByCategory($num, $cat)
|
34 |
+
{
|
35 |
+
$todayStartOfDayDate = Mage::app()->getLocale()->date()
|
36 |
+
->setTime('00:00:00')
|
37 |
+
->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
|
38 |
+
|
39 |
+
$todayEndOfDayDate = Mage::app()->getLocale()->date()
|
40 |
+
->setTime('23:59:59')
|
41 |
+
->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
|
42 |
+
|
43 |
+
$collection = Mage::getResourceModel('catalog/product_collection');
|
44 |
+
$collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());
|
45 |
+
|
46 |
+
$category = Mage::getSingleton('catalog/category')
|
47 |
+
->setStoreId(Mage::app()->getStore()->getId())
|
48 |
+
->load($cat);
|
49 |
+
|
50 |
+
$collection = $this->_addProductAttributesAndPrices($collection)
|
51 |
+
->addStoreFilter()
|
52 |
+
->addCategoryFilter($category)
|
53 |
+
->addAttributeToFilter('news_from_date', array('or'=> array(
|
54 |
+
0 => array('date' => true, 'to' => $todayEndOfDayDate),
|
55 |
+
1 => array('is' => new Zend_Db_Expr('null')))
|
56 |
+
), 'left')
|
57 |
+
->addAttributeToFilter('news_to_date', array('or'=> array(
|
58 |
+
0 => array('date' => true, 'from' => $todayStartOfDayDate),
|
59 |
+
1 => array('is' => new Zend_Db_Expr('null')))
|
60 |
+
), 'left')
|
61 |
+
->addAttributeToFilter(
|
62 |
+
array(
|
63 |
+
array('attribute' => 'news_from_date', 'is'=>new Zend_Db_Expr('not null')),
|
64 |
+
array('attribute' => 'news_to_date', 'is'=>new Zend_Db_Expr('not null'))
|
65 |
+
)
|
66 |
+
)
|
67 |
+
->addAttributeToSort('news_from_date', 'desc')
|
68 |
+
->setPageSize($num)
|
69 |
+
->setCurPage(1)
|
70 |
+
;
|
71 |
+
|
72 |
+
return $collection;
|
73 |
+
|
74 |
+
}
|
75 |
+
|
76 |
+
public function getCategoryNewProduct(){
|
77 |
+
|
78 |
+
$storeId = Mage::app()->getStore()->getId();
|
79 |
+
|
80 |
+
$catAllowed = self::getCategoryAllowed();
|
81 |
+
|
82 |
+
$catDefault = self::getCatDefault();
|
83 |
+
|
84 |
+
$this->cat = Mage::getSingleton('catalog/category')
|
85 |
+
->getCollection()
|
86 |
+
->addAttributeToSelect('*')
|
87 |
+
->setStoreId($storeId)
|
88 |
+
->addAttributeToFilter('entity_id', array('in' => $catAllowed));
|
89 |
+
|
90 |
+
foreach($this->cat as $i){
|
91 |
+
if($i->getId() == $catDefault){
|
92 |
+
$this->html .= "<option value='".$i->getId()."' selected='selected' >".$i->getName()."</option>";
|
93 |
+
}else{
|
94 |
+
$this->html .= "<option value='".$i->getId()."'>".$i->getName()."</option>";
|
95 |
+
}
|
96 |
+
}
|
97 |
+
|
98 |
+
return $this->html;
|
99 |
+
}
|
100 |
+
|
101 |
+
public function getUrlControllerNewsProductsByCategory(){
|
102 |
+
echo Mage::getUrl()."clickview/index/getproductsnewsbycategory";
|
103 |
+
}
|
104 |
+
|
105 |
+
public function getUrlControllerAllProductsPromotion(){
|
106 |
+
echo Mage::getUrl()."clickview/index/getallproductspromotion";
|
107 |
+
}
|
108 |
+
|
109 |
+
|
110 |
+
|
111 |
+
public function getAllProductsPromotion($num, $cat){
|
112 |
+
|
113 |
+
$todayStartOfDayDate = Mage::app()->getLocale()->date()
|
114 |
+
->setTime('00:00:00')
|
115 |
+
->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
|
116 |
+
|
117 |
+
$todayEndOfDayDate = Mage::app()->getLocale()->date()
|
118 |
+
->setTime('23:59:59')
|
119 |
+
->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
|
120 |
+
|
121 |
+
$category = Mage::getSingleton('catalog/category')
|
122 |
+
->setStoreId(Mage::app()->getStore()->getId())
|
123 |
+
->load($cat);
|
124 |
+
|
125 |
+
|
126 |
+
|
127 |
+
$_products = Mage::getSingleton('catalog/product')
|
128 |
+
->getCollection()
|
129 |
+
->addAttributeToSelect('*')
|
130 |
+
->addAttributeToFilter(
|
131 |
+
'special_price', array('notnull' => true)
|
132 |
+
)
|
133 |
+
->addAttributeToFilter('special_from_date', array('or'=> array(
|
134 |
+
0 => array('date' => true, 'to' => $todayEndOfDayDate),
|
135 |
+
1 => array('is' => new Zend_Db_Expr('null')))
|
136 |
+
), 'left')
|
137 |
+
->addAttributeToFilter('special_to_date', array('or'=> array(
|
138 |
+
0 => array('date' => true, 'from' => $todayStartOfDayDate),
|
139 |
+
1 => array('is' => new Zend_Db_Expr('null')))
|
140 |
+
), 'left')
|
141 |
+
->addAttributeToFilter(
|
142 |
+
array(
|
143 |
+
array('attribute' => 'special_from_date', 'is'=>new Zend_Db_Expr('not null')),
|
144 |
+
array('attribute' => 'special_to_date', 'is'=>new Zend_Db_Expr('not null'))
|
145 |
+
)
|
146 |
+
)
|
147 |
+
->addCategoryFilter($category)
|
148 |
+
->addAttributeToSort('special_from_date', 'desc')
|
149 |
+
->setStoreId(Mage::app()->getStore()->getId())
|
150 |
+
->setPageSize($num);
|
151 |
+
|
152 |
+
$_products->getSelect()->order('RAND()');
|
153 |
+
|
154 |
+
return $_products;
|
155 |
+
|
156 |
+
}
|
157 |
+
|
158 |
+
|
159 |
+
/**
|
160 |
+
* Get products with discount
|
161 |
+
*/
|
162 |
+
public function getProductsDiscount($num){
|
163 |
+
|
164 |
+
$cat = @implode(',',Mage::getModel('clickview/system_config_source_category')->toOptionArray());
|
165 |
+
|
166 |
+
$_products = self::getAllProductsPromotion($num, $cat);
|
167 |
+
|
168 |
+
return $_products;
|
169 |
+
|
170 |
+
}
|
171 |
+
|
172 |
+
/**
|
173 |
+
* Calculates the percentage of discount
|
174 |
+
*
|
175 |
+
* @param $val1 double
|
176 |
+
* @param $val2 double
|
177 |
+
*/
|
178 |
+
|
179 |
+
public function getPerc($val1, $val2){
|
180 |
+
return Mage::helper('clickview')->calcPerc($val1, $val2);
|
181 |
+
}
|
182 |
+
|
183 |
+
/**
|
184 |
+
* Get the best selling function settings
|
185 |
+
*
|
186 |
+
*/
|
187 |
+
|
188 |
+
public function getCategoryAllowed(){
|
189 |
+
$cat = explode(',', Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_category_allowed'));
|
190 |
+
return $cat;
|
191 |
+
}
|
192 |
+
public function getCatDefault(){
|
193 |
+
return $catDefault = Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_category_default');
|
194 |
+
return $catDefault;
|
195 |
+
}
|
196 |
+
|
197 |
+
public function getMinSlides(){
|
198 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_category_minslider'));
|
199 |
+
}
|
200 |
+
|
201 |
+
public function getMaxSlides(){
|
202 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_category_maxslider'));
|
203 |
+
}
|
204 |
+
|
205 |
+
public function getSlideWidth(){
|
206 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_category_slidewidth'));
|
207 |
+
}
|
208 |
+
|
209 |
+
public function getSlideMargin(){
|
210 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_category_slidewidth'));
|
211 |
+
}
|
212 |
+
|
213 |
+
public function getNewProductByCatImgSize(){
|
214 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_img_size'));
|
215 |
+
}
|
216 |
+
|
217 |
+
public function getNewProductByCatRow(){
|
218 |
+
return Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_click_number_rows');
|
219 |
+
}
|
220 |
+
|
221 |
+
public function getNewProductByCatMode(){
|
222 |
+
return Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_slide_mode');
|
223 |
+
}
|
224 |
+
|
225 |
+
public function getNewProductByCatEnabled(){
|
226 |
+
return Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_click_enabled');
|
227 |
+
}
|
228 |
+
|
229 |
+
public function getDiscountImgSize(){
|
230 |
+
return Mage::getStoreConfig('clickview_product_discount/clickview_products_discount_general/clickview_img_size');
|
231 |
+
}
|
232 |
+
|
233 |
+
public function getDiscountRows(){
|
234 |
+
return Mage::getStoreConfig('clickview_product_discount/clickview_products_discount_general/clickview_click_number_rows');
|
235 |
+
}
|
236 |
+
|
237 |
+
|
238 |
+
}
|
239 |
+
|
240 |
+
?>
|
241 |
+
|
app/code/community/Jefferson/Clickview/Block/Clickviewproductspromotionblock.php
ADDED
@@ -0,0 +1,212 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
/**
|
5 |
+
* @category Jefferson
|
6 |
+
* @package Jefferson_Clickview
|
7 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
8 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
9 |
+
*
|
10 |
+
*/
|
11 |
+
|
12 |
+
class Jefferson_Clickview_Block_Clickviewproductspromotionblock extends Mage_Catalog_Block_Product_List {
|
13 |
+
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Get the products by category in promotion
|
17 |
+
*
|
18 |
+
* @param $num int
|
19 |
+
* @param $cat int
|
20 |
+
*/
|
21 |
+
|
22 |
+
public function getNewsProductCollectionByCategory($num, $cat)
|
23 |
+
{
|
24 |
+
$todayStartOfDayDate = Mage::app()->getLocale()->date()
|
25 |
+
->setTime('00:00:00')
|
26 |
+
->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
|
27 |
+
|
28 |
+
$todayEndOfDayDate = Mage::app()->getLocale()->date()
|
29 |
+
->setTime('23:59:59')
|
30 |
+
->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
|
31 |
+
|
32 |
+
$collection = Mage::getResourceModel('catalog/product_collection');
|
33 |
+
$collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());
|
34 |
+
|
35 |
+
$category = Mage::getSingleton('catalog/category')
|
36 |
+
->setStoreId(Mage::app()->getStore()->getId())
|
37 |
+
->load($cat);
|
38 |
+
|
39 |
+
$collection = $this->_addProductAttributesAndPrices($collection)
|
40 |
+
->setStoreId(Mage::app()->getStore()->getId())
|
41 |
+
->addStoreFilter(Mage::app()->getStore()->getId())
|
42 |
+
->addCategoryFilter($category)
|
43 |
+
->addAttributeToFilter('news_from_date', array('or'=> array(
|
44 |
+
0 => array('date' => true, 'to' => $todayEndOfDayDate),
|
45 |
+
1 => array('is' => new Zend_Db_Expr('null')))
|
46 |
+
), 'left')
|
47 |
+
->addAttributeToFilter('news_to_date', array('or'=> array(
|
48 |
+
0 => array('date' => true, 'from' => $todayStartOfDayDate),
|
49 |
+
1 => array('is' => new Zend_Db_Expr('null')))
|
50 |
+
), 'left')
|
51 |
+
->addAttributeToFilter(
|
52 |
+
array(
|
53 |
+
array('attribute' => 'news_from_date', 'is'=>new Zend_Db_Expr('not null')),
|
54 |
+
array('attribute' => 'news_to_date', 'is'=>new Zend_Db_Expr('not null'))
|
55 |
+
)
|
56 |
+
)
|
57 |
+
->addAttributeToSort('news_from_date', 'desc')
|
58 |
+
->setPageSize($num)
|
59 |
+
->setCurPage(1)
|
60 |
+
;
|
61 |
+
|
62 |
+
return $collection;
|
63 |
+
|
64 |
+
}
|
65 |
+
|
66 |
+
public function getCategoryProductPromotion(){
|
67 |
+
|
68 |
+
$storeId = Mage::app()->getStore()->getId();
|
69 |
+
|
70 |
+
$catAllowed = self::getCategoryAllowed();
|
71 |
+
|
72 |
+
$catDefault = self::getCatDefault();
|
73 |
+
|
74 |
+
$this->cat = Mage::getSingleton('catalog/category')
|
75 |
+
->getCollection()
|
76 |
+
->addAttributeToSelect('*')
|
77 |
+
->setStoreId($storeId)
|
78 |
+
->addAttributeToFilter('entity_id', array('in' => $catAllowed));
|
79 |
+
|
80 |
+
foreach($this->cat as $i){
|
81 |
+
if($i->getId() == $catDefault){
|
82 |
+
$this->html .= "<option value='".$i->getId()."' selected='selected' >".$i->getName()."</option>";
|
83 |
+
}else{
|
84 |
+
$this->html .= "<option value='".$i->getId()."'>".$i->getName()."</option>";
|
85 |
+
}
|
86 |
+
}
|
87 |
+
|
88 |
+
return $this->html;
|
89 |
+
}
|
90 |
+
|
91 |
+
public function getUrlControllerNewsProductsByCategory(){
|
92 |
+
echo Mage::getUrl()."clickview/index/getproductsnewsbycategory";
|
93 |
+
}
|
94 |
+
|
95 |
+
public function getUrlControllerAllProductsPromotion(){
|
96 |
+
echo Mage::getUrl()."clickview/index/getallproductspromotion";
|
97 |
+
}
|
98 |
+
|
99 |
+
|
100 |
+
|
101 |
+
public function getAllProductsPromotion($num, $cat){
|
102 |
+
|
103 |
+
$todayStartOfDayDate = Mage::app()->getLocale()->date()
|
104 |
+
->setTime('00:00:00')
|
105 |
+
->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
|
106 |
+
|
107 |
+
$todayEndOfDayDate = Mage::app()->getLocale()->date()
|
108 |
+
->setTime('23:59:59')
|
109 |
+
->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
|
110 |
+
|
111 |
+
$category = Mage::getSingleton('catalog/category')
|
112 |
+
->setStoreId(Mage::app()->getStore()->getId())
|
113 |
+
->load($cat);
|
114 |
+
|
115 |
+
|
116 |
+
|
117 |
+
$_products = Mage::getSingleton('catalog/product')
|
118 |
+
->getCollection()
|
119 |
+
->addAttributeToSelect('*')
|
120 |
+
->addAttributeToFilter(
|
121 |
+
'special_price', array('notnull' => true)
|
122 |
+
)
|
123 |
+
->addAttributeToFilter('special_from_date', array('or'=> array(
|
124 |
+
0 => array('date' => true, 'to' => $todayEndOfDayDate),
|
125 |
+
1 => array('is' => new Zend_Db_Expr('null')))
|
126 |
+
), 'left')
|
127 |
+
->addAttributeToFilter('special_to_date', array('or'=> array(
|
128 |
+
0 => array('date' => true, 'from' => $todayStartOfDayDate),
|
129 |
+
1 => array('is' => new Zend_Db_Expr('null')))
|
130 |
+
), 'left')
|
131 |
+
->addAttributeToFilter(
|
132 |
+
array(
|
133 |
+
array('attribute' => 'special_from_date', 'is'=>new Zend_Db_Expr('not null')),
|
134 |
+
array('attribute' => 'special_to_date', 'is'=>new Zend_Db_Expr('not null'))
|
135 |
+
)
|
136 |
+
)
|
137 |
+
->addCategoryFilter($category)
|
138 |
+
->addAttributeToSort('special_from_date', 'desc')
|
139 |
+
->setStoreId(Mage::app()->getStore()->getId())
|
140 |
+
->setPageSize($num);
|
141 |
+
|
142 |
+
$_products->getSelect()->order('RAND()');
|
143 |
+
|
144 |
+
return $_products;
|
145 |
+
|
146 |
+
}
|
147 |
+
|
148 |
+
public function getProductsDiscount(){
|
149 |
+
|
150 |
+
$num = 50;
|
151 |
+
$cat = implode(',',Mage::getModel('clickview/system_config_source_category')->toOptionArray());
|
152 |
+
|
153 |
+
$_products = self::getAllProductsPromotion($num, $cat);
|
154 |
+
|
155 |
+
return $_products;
|
156 |
+
|
157 |
+
}
|
158 |
+
|
159 |
+
public function getPerc($val1, $val2){
|
160 |
+
return Mage::helper('clickview')->calcPerc($val1, $val2);
|
161 |
+
}
|
162 |
+
|
163 |
+
/**
|
164 |
+
* Get the best selling function settings
|
165 |
+
*
|
166 |
+
*/
|
167 |
+
|
168 |
+
public function getCategoryAllowed(){
|
169 |
+
$cat = explode(',', Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_category_allowed'));
|
170 |
+
return $cat;
|
171 |
+
}
|
172 |
+
public function getCatDefault(){
|
173 |
+
return $catDefault = Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_category_default');
|
174 |
+
return $catDefault;
|
175 |
+
}
|
176 |
+
|
177 |
+
public function getMinSlides(){
|
178 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_category_minslider'));
|
179 |
+
}
|
180 |
+
|
181 |
+
public function getMaxSlides(){
|
182 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_category_maxslider'));
|
183 |
+
}
|
184 |
+
|
185 |
+
public function getSlideWidth(){
|
186 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_category_slidewidth'));
|
187 |
+
}
|
188 |
+
|
189 |
+
public function getSlideMargin(){
|
190 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_category_slidewidth'));
|
191 |
+
}
|
192 |
+
|
193 |
+
public function getNewProductByCatImgSize(){
|
194 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_img_size'));
|
195 |
+
}
|
196 |
+
|
197 |
+
public function getNewProductByCatRow(){
|
198 |
+
return Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_click_number_rows');
|
199 |
+
}
|
200 |
+
|
201 |
+
public function getNewProductByCatMode(){
|
202 |
+
return Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_slide_mode');
|
203 |
+
}
|
204 |
+
|
205 |
+
public function getNewProductByCatEnabled(){
|
206 |
+
return Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_click_enabled');
|
207 |
+
}
|
208 |
+
|
209 |
+
}
|
210 |
+
|
211 |
+
?>
|
212 |
+
|
app/code/community/Jefferson/Clickview/Block/Clickviewrecents.php
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Jefferson_Clickview_Block_Clickviewrecents extends Mage_Reports_Block_Product_Viewed {
|
3 |
+
|
4 |
+
public function getClickEnabled(){
|
5 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_click_recents/clickview_general/clickview_click_enabled'));
|
6 |
+
}
|
7 |
+
|
8 |
+
public function getClickImgSize(){
|
9 |
+
return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_click_recents/clickview_click_recents_general/clickview_img_size'));
|
10 |
+
}
|
11 |
+
|
12 |
+
}
|
13 |
+
?>
|
app/code/community/Jefferson/Clickview/Helper/Data.php
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magento.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Jefferson
|
16 |
+
* @package Jefferson_Clickview
|
17 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
18 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
19 |
+
*
|
20 |
+
*/
|
21 |
+
|
22 |
+
class Jefferson_Clickview_Helper_Data extends Mage_Core_Helper_Abstract {
|
23 |
+
|
24 |
+
public static function calcPerc($val1, $val2){
|
25 |
+
$total = ($val1 - $val2);
|
26 |
+
$total = $total / $val1;
|
27 |
+
$total = $total * 100;
|
28 |
+
|
29 |
+
return "-".number_format($total,'0')."%";
|
30 |
+
}
|
31 |
+
|
32 |
+
|
33 |
+
}
|
34 |
+
?>
|
app/code/community/Jefferson/Clickview/Model/Clickviewbestsellerbycategorymodel.php
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Jefferson_Clickview_Model_Clickviewbestsellerbycategorymodel extends Mage_Core_Model_Abstract {
|
3 |
+
|
4 |
+
protected function _construct()
|
5 |
+
{
|
6 |
+
$this->_init('clickview/clickviewbestsellerbycategorymodel');
|
7 |
+
}
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Get the best selling products by category
|
11 |
+
*
|
12 |
+
* @param $num int
|
13 |
+
* @param $cat int
|
14 |
+
*/
|
15 |
+
|
16 |
+
public function getBestsellerProductsByCategory($num,$cat)
|
17 |
+
{
|
18 |
+
$storeId = (int) Mage::app()->getStore()->getId();
|
19 |
+
$today = time();
|
20 |
+
$last = $today - (60*60*24*30);
|
21 |
+
|
22 |
+
$fromDate = date("Y-m-d", $last);
|
23 |
+
$toDate = date("Y-m-d", $today);
|
24 |
+
|
25 |
+
$category = Mage::getSingleton('catalog/category')
|
26 |
+
->setStoreId($storeId)
|
27 |
+
->load($cat);
|
28 |
+
|
29 |
+
|
30 |
+
$collection = Mage::getResourceModel('catalog/product_collection')
|
31 |
+
->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
|
32 |
+
->addStoreFilter()
|
33 |
+
->addPriceData()
|
34 |
+
->addCategoryFilter($category)
|
35 |
+
->addTaxPercents()
|
36 |
+
->addUrlRewrite()
|
37 |
+
->setPageSize($num);
|
38 |
+
|
39 |
+
$collection->getSelect()
|
40 |
+
->joinLeft(
|
41 |
+
array('aggregation' => $collection->getResource()->getTable('sales/bestsellers_aggregated_monthly')),
|
42 |
+
"e.entity_id = aggregation.product_id AND aggregation.store_id={$storeId} AND aggregation.period BETWEEN '{$fromDate}' AND '{$toDate}'",
|
43 |
+
array('SUM(aggregation.qty_ordered) AS sold_quantity')
|
44 |
+
)
|
45 |
+
->group('e.entity_id')
|
46 |
+
->order(array('sold_quantity DESC', 'e.created_at'));
|
47 |
+
|
48 |
+
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
|
49 |
+
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
|
50 |
+
|
51 |
+
return $collection;
|
52 |
+
}
|
53 |
+
|
54 |
+
}
|
55 |
+
|
56 |
+
?>
|
app/code/community/Jefferson/Clickview/Model/Clickviewbestsellersmodel.php
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Jefferson_Clickview_Model_Clickviewbestsellersmodel extends Mage_Core_Model_Abstract {
|
3 |
+
|
4 |
+
protected function _construct()
|
5 |
+
{
|
6 |
+
$this->_init('clickview/clickviewbestsellersmodel');
|
7 |
+
}
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Get the best-selling products
|
11 |
+
* @param $num int
|
12 |
+
* return Array
|
13 |
+
*/
|
14 |
+
public function getBestsellerProducts($num)
|
15 |
+
{
|
16 |
+
$storeId = (int) Mage::app()->getStore()->getId();
|
17 |
+
|
18 |
+
// Date
|
19 |
+
|
20 |
+
$toDate = date('y-m-d');
|
21 |
+
$fromDate = date('y-m-1');
|
22 |
+
|
23 |
+
$collection = Mage::getResourceModel('catalog/product_collection')
|
24 |
+
->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
|
25 |
+
->addStoreFilter()
|
26 |
+
->addPriceData()
|
27 |
+
->addTaxPercents()
|
28 |
+
->addUrlRewrite()
|
29 |
+
->setPageSize($num);
|
30 |
+
|
31 |
+
$collection->getSelect()
|
32 |
+
->joinLeft(
|
33 |
+
array('aggregation' => $collection->getResource()->getTable('sales/bestsellers_aggregated_monthly')),
|
34 |
+
"e.entity_id = aggregation.product_id AND aggregation.store_id={$storeId} AND aggregation.period BETWEEN '{$fromDate}' AND '{$toDate}'",
|
35 |
+
array('SUM(aggregation.qty_ordered) AS sold_quantity')
|
36 |
+
)
|
37 |
+
->group('e.entity_id')
|
38 |
+
->order(array('sold_quantity DESC', 'e.created_at'));
|
39 |
+
|
40 |
+
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
|
41 |
+
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
|
42 |
+
|
43 |
+
return $collection;
|
44 |
+
}
|
45 |
+
|
46 |
+
}
|
47 |
+
|
48 |
+
?>
|
app/code/community/Jefferson/Clickview/Model/Clickviewmodel.php
ADDED
@@ -0,0 +1,139 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* @category Jefferson
|
5 |
+
* @package Jefferson_Clickview
|
6 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
7 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
8 |
+
*
|
9 |
+
*/
|
10 |
+
|
11 |
+
class Jefferson_Clickview_Model_Clickviewmodel extends Mage_Core_Model_Abstract {
|
12 |
+
|
13 |
+
|
14 |
+
|
15 |
+
protected function _construct()
|
16 |
+
{
|
17 |
+
$this->_init('clickview/clickviewmodel');
|
18 |
+
}
|
19 |
+
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Handle the products in a given category
|
23 |
+
*
|
24 |
+
* @param int $entity_id
|
25 |
+
* @param int $categoryCurrent
|
26 |
+
* @param int $limit
|
27 |
+
* return Array
|
28 |
+
*/
|
29 |
+
public function getDataProducts($entity_id, $categoryCurrent, $limit){
|
30 |
+
|
31 |
+
$storeId = Mage::app()->getStore()->getId();
|
32 |
+
$_products = Mage::getSingleton('catalog/product')
|
33 |
+
->getCollection()
|
34 |
+
->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left')
|
35 |
+
->addAttributeToSelect('*')
|
36 |
+
// ->addAttributeToFilter('set_promotion', array('in'=>"1"))
|
37 |
+
|
38 |
+
->addFieldToFilter(array(
|
39 |
+
array('attribute'=>'entity_id','nin'=> $entity_id),
|
40 |
+
))
|
41 |
+
|
42 |
+
->addFieldToFilter(array(
|
43 |
+
array('attribute'=>'category_id','in'=> array($categoryCurrent)),
|
44 |
+
))
|
45 |
+
|
46 |
+
->setStoreId($storeId)
|
47 |
+
->setPageSize($limit);
|
48 |
+
$_products->getSelect()->group('e.entity_id');
|
49 |
+
|
50 |
+
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($_products);
|
51 |
+
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($_products);
|
52 |
+
|
53 |
+
|
54 |
+
$_products->getSelect()->order('RAND()');
|
55 |
+
|
56 |
+
|
57 |
+
foreach($_products as $item);
|
58 |
+
|
59 |
+
if ($item)
|
60 |
+
{
|
61 |
+
return $_products;
|
62 |
+
|
63 |
+
}else{
|
64 |
+
return false;
|
65 |
+
}
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
*Returns the name of a category
|
70 |
+
*
|
71 |
+
*@param int $category
|
72 |
+
*return String
|
73 |
+
*/
|
74 |
+
public function getCategoryName($category)
|
75 |
+
{
|
76 |
+
$storeId = (int)Mage::app()->getStore()->getId();
|
77 |
+
$this->category = Mage::getSingleton('catalog/category')
|
78 |
+
->setStoreId($storeId)
|
79 |
+
->load($category);
|
80 |
+
$cat = $this->category->getTitleCustomTabs();
|
81 |
+
if(!empty($cat)){
|
82 |
+
echo $this->category->getTitleCustomTabs();
|
83 |
+
}
|
84 |
+
else
|
85 |
+
{
|
86 |
+
echo $this->category->getName();
|
87 |
+
}
|
88 |
+
|
89 |
+
}
|
90 |
+
|
91 |
+
|
92 |
+
/**
|
93 |
+
*Take the categories of a product
|
94 |
+
*
|
95 |
+
*@param int $id
|
96 |
+
*return string
|
97 |
+
*/
|
98 |
+
public function getCategoryProducts($id){
|
99 |
+
|
100 |
+
$storeId = Mage::app()->getStore()->getId();
|
101 |
+
$_products = Mage::getSingleton('catalog/product')
|
102 |
+
->setStoreId($storeId)
|
103 |
+
->load($id);
|
104 |
+
$_category = $_products->getCategoryIds();
|
105 |
+
|
106 |
+
return implode(',',$_category);
|
107 |
+
}
|
108 |
+
|
109 |
+
/**
|
110 |
+
*Get the data of the current products
|
111 |
+
*
|
112 |
+
*@param int $id
|
113 |
+
*return Object
|
114 |
+
*/
|
115 |
+
public function getDataProductCurrent($id){
|
116 |
+
$storeId = (int)Mage::app()->getStore()->getId();
|
117 |
+
$_products = Mage::getSingleton('catalog/product')
|
118 |
+
->setStoreID($storeId)
|
119 |
+
->load($id);
|
120 |
+
return $_products;
|
121 |
+
}
|
122 |
+
|
123 |
+
|
124 |
+
/**
|
125 |
+
*Get a product related products
|
126 |
+
*
|
127 |
+
*@param int $id
|
128 |
+
*return Array
|
129 |
+
*
|
130 |
+
* Obs:This method is not being used in this module
|
131 |
+
*/
|
132 |
+
public function getDataProductsRelated($id){
|
133 |
+
$_products = self::getDataProductCurrent($id);
|
134 |
+
return $_products->getRelatedProductIds();
|
135 |
+
|
136 |
+
}
|
137 |
+
|
138 |
+
}
|
139 |
+
?>
|
app/code/community/Jefferson/Clickview/Model/Clickviewmostviewedbycategorymodel.php
ADDED
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Jefferson_Clickview_Model_Clickviewmostviewedbycategorymodel extends Mage_Core_Model_Abstract {
|
4 |
+
|
5 |
+
protected function _construct()
|
6 |
+
{
|
7 |
+
$this->_init('clickview/clickviewmostviewedbycategorymodel');
|
8 |
+
}
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Get the most viewed products by category
|
12 |
+
*
|
13 |
+
* @param $num int
|
14 |
+
* @param $cat int
|
15 |
+
*/
|
16 |
+
|
17 |
+
public function getMostViewedByCategory($num,$cat){
|
18 |
+
$storeId = Mage::app()->getStore()->getId();
|
19 |
+
$today = time();
|
20 |
+
$last = $today - (60*60*24*30);
|
21 |
+
|
22 |
+
$fromDate = date("Y-m-d", $last);
|
23 |
+
$toDate = date("Y-m-d", $today);
|
24 |
+
|
25 |
+
$category = Mage::getSingleton('catalog/category')
|
26 |
+
->setStoreId(Mage::app()->getStore()->getId())
|
27 |
+
->load($cat);
|
28 |
+
|
29 |
+
$products = Mage::getResourceModel('reports/product_collection')
|
30 |
+
->addAttributeToSelect('*')
|
31 |
+
->addCategoryFilter($category)
|
32 |
+
->setStoreId($storeId)
|
33 |
+
->addStoreFilter($storeId)
|
34 |
+
->addViewsCount($fromDate, $toDate)
|
35 |
+
->setOrder('views_count', 'desc')
|
36 |
+
->setPageSize($num);
|
37 |
+
|
38 |
+
$productFlatData = Mage::getStoreConfig('catalog/frontend/flat_catalog_product');
|
39 |
+
if($productFlatData == "1")
|
40 |
+
{
|
41 |
+
$products->getSelect()->joinLeft(
|
42 |
+
array('flat' => 'catalog_product_flat_'.$storeId),
|
43 |
+
"(e.entity_id = flat.entity_id ) ",
|
44 |
+
array(
|
45 |
+
'flat.name AS name','flat.small_image AS small_image','flat.price AS price','flat.special_price as special_price','flat.special_from_date AS special_from_date','flat.special_to_date AS special_to_date'
|
46 |
+
)
|
47 |
+
);
|
48 |
+
}
|
49 |
+
|
50 |
+
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products);
|
51 |
+
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($products);
|
52 |
+
|
53 |
+
return $products;
|
54 |
+
|
55 |
+
}
|
56 |
+
|
57 |
+
|
58 |
+
}
|
59 |
+
?>
|
app/code/community/Jefferson/Clickview/Model/Clickviewmostviewedmodel.php
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* @category Jefferson
|
5 |
+
* @package Jefferson_Clickview
|
6 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
7 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
8 |
+
*
|
9 |
+
*/
|
10 |
+
class Jefferson_Clickview_Model_Clickviewmostviewedmodel extends Mage_Core_Model_Abstract {
|
11 |
+
|
12 |
+
protected function _construct()
|
13 |
+
{
|
14 |
+
$this->_init('clickview/clickviewmostviewedmodel');
|
15 |
+
}
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Get the products viewed
|
19 |
+
* @param $num int
|
20 |
+
* @param Array
|
21 |
+
*/
|
22 |
+
|
23 |
+
public function getMostViewed($num){
|
24 |
+
$storeId = Mage::app()->getStore()->getId();
|
25 |
+
|
26 |
+
$today = time();
|
27 |
+
$last = $today - (60*60*24*30);
|
28 |
+
|
29 |
+
$fromDate = date("Y-m-d", $last);
|
30 |
+
$toDate = date("Y-m-d", $today);
|
31 |
+
|
32 |
+
$products = Mage::getResourceModel('reports/product_collection')
|
33 |
+
->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
|
34 |
+
->setStoreId($storeId)
|
35 |
+
->addStoreFilter($storeId)
|
36 |
+
->addViewsCount($fromDate, $toDate)
|
37 |
+
->setOrder('views_count', 'desc')
|
38 |
+
->setPageSize($num);
|
39 |
+
|
40 |
+
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products);
|
41 |
+
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($products);
|
42 |
+
|
43 |
+
return $products;
|
44 |
+
}
|
45 |
+
|
46 |
+
|
47 |
+
}
|
48 |
+
?>
|
app/code/community/Jefferson/Clickview/Model/Observer.php
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @category Jefferson
|
4 |
+
* @package Jefferson_Clickview
|
5 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
6 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Jefferson_Clickview_Model_Observer {
|
11 |
+
|
12 |
+
protected $name = 'IDPRODUCT';
|
13 |
+
protected $id = null;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Get the id of the clicked product and called the method that the arrow product id in the cookie
|
17 |
+
*
|
18 |
+
* @param $observer type Varien_Event_Observer
|
19 |
+
**/
|
20 |
+
public function setExecuteClickview(Varien_Event_Observer $observer){
|
21 |
+
$this->id = $observer->getProduct()->getId();
|
22 |
+
self::setCookie($this->name, $this->id);
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Writes the product id in the cookie
|
27 |
+
*
|
28 |
+
* @param $name String
|
29 |
+
* @param $value
|
30 |
+
**/
|
31 |
+
public function setCookie($name, $value){
|
32 |
+
return Mage::getSingleton('core/cookie')->set($name, $value);
|
33 |
+
}
|
34 |
+
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Get cookie data reported
|
38 |
+
*
|
39 |
+
* @param $name String
|
40 |
+
**/
|
41 |
+
|
42 |
+
public function getCookie($name){
|
43 |
+
return Mage::getSingleton('core/cookie')->get($name);
|
44 |
+
}
|
45 |
+
|
46 |
+
|
47 |
+
|
48 |
+
}
|
49 |
+
?>
|
app/code/community/Jefferson/Clickview/Model/System/Config/Source/Category.php
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magento.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Jefferson
|
16 |
+
* @package Jefferson_Promocaotabs
|
17 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
18 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
19 |
+
*
|
20 |
+
*/
|
21 |
+
|
22 |
+
class Jefferson_Clickview_Model_System_Config_Source_Category extends Mage_Adminhtml_Model_System_Config_Source_Category
|
23 |
+
{
|
24 |
+
|
25 |
+
protected function _construct()
|
26 |
+
{
|
27 |
+
$this->_init('clickview/system_config_source_category');
|
28 |
+
}
|
29 |
+
|
30 |
+
|
31 |
+
public function toOptionArray($addEmpty = true)
|
32 |
+
{
|
33 |
+
$options = array();
|
34 |
+
$storeId = Mage::app()->getStore()->getId();
|
35 |
+
$collection = Mage::getModel('catalog/category')
|
36 |
+
->getCollection()
|
37 |
+
->addAttributeToSelect('*')
|
38 |
+
->setStoreId($storeId);
|
39 |
+
|
40 |
+
foreach($collection as $category){
|
41 |
+
if($category->getName() != 'Root Catalog'){
|
42 |
+
$options[] = array(
|
43 |
+
'label' => $category->getName(),
|
44 |
+
'value' => $category->getId()
|
45 |
+
);
|
46 |
+
}
|
47 |
+
}
|
48 |
+
return $options;
|
49 |
+
}
|
50 |
+
}
|
51 |
+
|
52 |
+
|
53 |
+
?>
|
app/code/community/Jefferson/Clickview/Model/System/Config/Source/Categoryallowed.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magento.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Jefferson
|
16 |
+
* @package Jefferson_Promocaotabs
|
17 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
18 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
19 |
+
*
|
20 |
+
*/
|
21 |
+
|
22 |
+
class Jefferson_Clickview_Model_System_Config_Source_Categoryallowed extends Mage_Adminhtml_Model_System_Config_Source_Category
|
23 |
+
{
|
24 |
+
|
25 |
+
protected function _construct()
|
26 |
+
{
|
27 |
+
$this->_init('clickview/system_config_source_categoryallowed');
|
28 |
+
}
|
29 |
+
|
30 |
+
|
31 |
+
public function toOptionArray($addEmpty = true)
|
32 |
+
{
|
33 |
+
|
34 |
+
$catAllowed = self::getCategoryAllowed();
|
35 |
+
$options = array();
|
36 |
+
$storeId = Mage::app()->getStore()->getId();
|
37 |
+
$collection = Mage::getModel('catalog/category')
|
38 |
+
->getCollection()
|
39 |
+
->addAttributeToSelect('*')
|
40 |
+
->addAttributeToFilter('entity_id', array('in' => $catAllowed))
|
41 |
+
->setStoreId($storeId);
|
42 |
+
|
43 |
+
foreach($collection as $category){
|
44 |
+
if($category->getName() != 'Root Catalog'){
|
45 |
+
$options[] = array(
|
46 |
+
'label' => $category->getName(),
|
47 |
+
'value' => $category->getId()
|
48 |
+
);
|
49 |
+
}
|
50 |
+
}
|
51 |
+
return $options;
|
52 |
+
}
|
53 |
+
|
54 |
+
public function getCategoryAllowed(){
|
55 |
+
$cat = explode(',', Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_category_allowed'));
|
56 |
+
return $cat;
|
57 |
+
}
|
58 |
+
|
59 |
+
}
|
60 |
+
|
61 |
+
|
62 |
+
?>
|
app/code/community/Jefferson/Clickview/Model/System/Config/Source/Categorybestsellerbycategory.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magento.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Jefferson
|
16 |
+
* @package Jefferson_Promocaotabs
|
17 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
18 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
19 |
+
*
|
20 |
+
*/
|
21 |
+
|
22 |
+
class Jefferson_Clickview_Model_System_Config_Source_Categorybestsellerbycategory extends Mage_Adminhtml_Model_System_Config_Source_Category
|
23 |
+
{
|
24 |
+
|
25 |
+
protected function _construct()
|
26 |
+
{
|
27 |
+
$this->_init('clickview/system_config_source_Categorybestsellerbycategory');
|
28 |
+
}
|
29 |
+
|
30 |
+
|
31 |
+
public function toOptionArray($addEmpty = true)
|
32 |
+
{
|
33 |
+
|
34 |
+
$catAllowed = self::getCategoryAllowed();
|
35 |
+
$options = array();
|
36 |
+
$storeId = Mage::app()->getStore()->getId();
|
37 |
+
$collection = Mage::getModel('catalog/category')
|
38 |
+
->getCollection()
|
39 |
+
->addAttributeToSelect('*')
|
40 |
+
->addAttributeToFilter('entity_id', array('in' => $catAllowed))
|
41 |
+
->setStoreId($storeId);
|
42 |
+
|
43 |
+
foreach($collection as $category){
|
44 |
+
if($category->getName() != 'Root Catalog'){
|
45 |
+
$options[] = array(
|
46 |
+
'label' => $category->getName(),
|
47 |
+
'value' => $category->getId()
|
48 |
+
);
|
49 |
+
}
|
50 |
+
}
|
51 |
+
return $options;
|
52 |
+
}
|
53 |
+
|
54 |
+
public function getCategoryAllowed(){
|
55 |
+
$cat = explode(',', Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_category_allowed'));
|
56 |
+
return $cat;
|
57 |
+
}
|
58 |
+
|
59 |
+
}
|
60 |
+
|
61 |
+
|
62 |
+
?>
|
app/code/community/Jefferson/Clickview/Model/System/Config/Source/Categorynewsproducts.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magento.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Jefferson
|
16 |
+
* @package Jefferson_Promocaotabs
|
17 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
18 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
19 |
+
*
|
20 |
+
*/
|
21 |
+
|
22 |
+
class Jefferson_Clickview_Model_System_Config_Source_Categorynewsproducts extends Mage_Adminhtml_Model_System_Config_Source_Category
|
23 |
+
{
|
24 |
+
|
25 |
+
protected function _construct()
|
26 |
+
{
|
27 |
+
$this->_init('clickview/system_config_source_Categorynewsproducts');
|
28 |
+
}
|
29 |
+
|
30 |
+
|
31 |
+
public function toOptionArray($addEmpty = true)
|
32 |
+
{
|
33 |
+
|
34 |
+
$catAllowed = self::getCategoryAllowed();
|
35 |
+
$options = array();
|
36 |
+
$storeId = Mage::app()->getStore()->getId();
|
37 |
+
$collection = Mage::getModel('catalog/category')
|
38 |
+
->getCollection()
|
39 |
+
->addAttributeToSelect('*')
|
40 |
+
->addAttributeToFilter('entity_id', array('in' => $catAllowed))
|
41 |
+
->setStoreId($storeId);
|
42 |
+
|
43 |
+
foreach($collection as $category){
|
44 |
+
if($category->getName() != 'Root Catalog'){
|
45 |
+
$options[] = array(
|
46 |
+
'label' => $category->getName(),
|
47 |
+
'value' => $category->getId()
|
48 |
+
);
|
49 |
+
}
|
50 |
+
}
|
51 |
+
return $options;
|
52 |
+
}
|
53 |
+
|
54 |
+
public function getCategoryAllowed(){
|
55 |
+
$cat = explode(',', Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_category_allowed'));
|
56 |
+
return $cat;
|
57 |
+
}
|
58 |
+
|
59 |
+
}
|
60 |
+
|
61 |
+
|
62 |
+
?>
|
app/code/community/Jefferson/Clickview/Model/System/Config/Source/Categorypromotionproducts.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magento.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Jefferson
|
16 |
+
* @package Jefferson_Promocaotabs
|
17 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
18 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
19 |
+
*
|
20 |
+
*/
|
21 |
+
|
22 |
+
class Jefferson_Clickview_Model_System_Config_Source_Categorypromotionproducts extends Mage_Adminhtml_Model_System_Config_Source_Category
|
23 |
+
{
|
24 |
+
|
25 |
+
protected function _construct()
|
26 |
+
{
|
27 |
+
$this->_init('clickview/system_config_source_categorypromotionproducts');
|
28 |
+
}
|
29 |
+
|
30 |
+
|
31 |
+
public function toOptionArray($addEmpty = true)
|
32 |
+
{
|
33 |
+
|
34 |
+
$catAllowed = self::getCategoryAllowed();
|
35 |
+
$options = array();
|
36 |
+
$storeId = Mage::app()->getStore()->getId();
|
37 |
+
$collection = Mage::getModel('catalog/category')
|
38 |
+
->getCollection()
|
39 |
+
->addAttributeToSelect('*')
|
40 |
+
->addAttributeToFilter('entity_id', array('in' => $catAllowed))
|
41 |
+
->setStoreId($storeId);
|
42 |
+
|
43 |
+
foreach($collection as $category){
|
44 |
+
if($category->getName() != 'Root Catalog'){
|
45 |
+
$options[] = array(
|
46 |
+
'label' => $category->getName(),
|
47 |
+
'value' => $category->getId()
|
48 |
+
);
|
49 |
+
}
|
50 |
+
}
|
51 |
+
return $options;
|
52 |
+
}
|
53 |
+
|
54 |
+
public function getCategoryAllowed(){
|
55 |
+
$cat = explode(',', Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_category_allowed'));
|
56 |
+
return $cat;
|
57 |
+
}
|
58 |
+
|
59 |
+
}
|
60 |
+
|
61 |
+
|
62 |
+
?>
|
app/code/community/Jefferson/Clickview/Model/System/Config/Source/Mode.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* @category Jefferson
|
5 |
+
* @package Jefferson_Clickiew
|
6 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
7 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
8 |
+
*
|
9 |
+
*/
|
10 |
+
|
11 |
+
class Jefferson_Clickview_Model_System_Config_Source_Mode extends Mage_Adminhtml_Model_System_Config_Source_Category
|
12 |
+
{
|
13 |
+
|
14 |
+
protected function _construct()
|
15 |
+
{
|
16 |
+
$this->_init('clickview/system_config_source_mode');
|
17 |
+
}
|
18 |
+
|
19 |
+
|
20 |
+
public function toOptionArray($addEmpty = true)
|
21 |
+
{
|
22 |
+
$options = array(
|
23 |
+
'horizontal' => 'Horizontal',
|
24 |
+
'fade' => 'Fade'
|
25 |
+
);
|
26 |
+
return $options;
|
27 |
+
}
|
28 |
+
}
|
29 |
+
|
30 |
+
|
31 |
+
?>
|
app/code/community/Jefferson/Clickview/controllers/IndexController.php
ADDED
@@ -0,0 +1,439 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
*
|
4 |
+
* NOTICE OF LICENSE
|
5 |
+
*
|
6 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
7 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
8 |
+
* It is also available through the world-wide-web at this URL:
|
9 |
+
* http://opensource.org/licenses/afl-3.0.php
|
10 |
+
* If you did not receive a copy of the license and are unable to
|
11 |
+
* obtain it through the world-wide-web, please send an email
|
12 |
+
* to license@magento.com so we can send you a copy immediately.
|
13 |
+
*
|
14 |
+
* @category Jefferson
|
15 |
+
* @package Jefferson_Clickview
|
16 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
17 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
18 |
+
*
|
19 |
+
*/
|
20 |
+
|
21 |
+
|
22 |
+
class Jefferson_Clickview_IndexController extends Mage_Core_Controller_Front_Action {
|
23 |
+
|
24 |
+
//Carrega o layout
|
25 |
+
public function indexAction(){
|
26 |
+
$this->loadLayout();
|
27 |
+
$this->renderLayout();
|
28 |
+
}
|
29 |
+
|
30 |
+
//Retorna os produtos mais visualizados de uma categoria
|
31 |
+
public function getMostViewedByCategoryAction(){
|
32 |
+
$html = null;
|
33 |
+
$block = $this->getLayout()->createBlock('clickview/clickviewmostviewedbycategoryblock');
|
34 |
+
|
35 |
+
$getImgSize = $block->getMostViewedByCatImgSize();
|
36 |
+
|
37 |
+
$cat = $this->getRequest()->getParam('cat');
|
38 |
+
|
39 |
+
$rows = $block->getMostViewedByCatRow();
|
40 |
+
|
41 |
+
$_products = $block->getMostViewedByCategory($rows,$cat);
|
42 |
+
|
43 |
+
foreach($_products as $item){
|
44 |
+
|
45 |
+
$html .= "<li>";
|
46 |
+
|
47 |
+
$html .= "<figure>";
|
48 |
+
|
49 |
+
$html .= "<a href=".$item->getProductUrl() ." class='product-image'>";
|
50 |
+
$html .= "<img src='".Mage::helper('catalog/image')->init($item, 'small_image')->keepFrame(true)->resize($getImgSize,$getImgSize)."'/>";
|
51 |
+
$html .= "</a>";
|
52 |
+
|
53 |
+
$html .= "<figcaption>";
|
54 |
+
|
55 |
+
$html .= "<a href=".$item->getProductUrl() ." class='product-image'>".$item->getName()."</a>";
|
56 |
+
$html .= $block->getPriceHtml($item, true);
|
57 |
+
|
58 |
+
$html .= '<div class="product-secondary">';
|
59 |
+
|
60 |
+
if(!$item->canConfigure() && $item->isSaleable()):
|
61 |
+
$html .= '<p class="action">';
|
62 |
+
$html .= '<button type="button" title="'.$this->__('Add to Cart').'" class="button btn-cart"
|
63 |
+
onclick = " setLocation('."'".$block->getAddToCartUrl($item)."'".') ">';
|
64 |
+
$html .= "<span>";
|
65 |
+
$html .= "<span>";
|
66 |
+
$html .= $this->__('Add to Cart');
|
67 |
+
$html .= "</span>";
|
68 |
+
$html .= "</span>";
|
69 |
+
$html .= "</button>";
|
70 |
+
|
71 |
+
$html .= '</p>';
|
72 |
+
|
73 |
+
elseif($item->getStockItem() && $item->getStockItem()->getIsInStock()):
|
74 |
+
|
75 |
+
$html .= '<p class="action">';
|
76 |
+
|
77 |
+
$html .= '<a title=" '.$this->__('View Details').'"
|
78 |
+
class="button" href="'.$item->getProductUrl().' ">'.
|
79 |
+
$this->__('View Details').'</a>';
|
80 |
+
|
81 |
+
$html .= '</p>';
|
82 |
+
|
83 |
+
else:
|
84 |
+
|
85 |
+
$html .= '<p class="action availability out-of-stock">';
|
86 |
+
$html .= '<span>'.$this->__('Out of stock').'</span>';
|
87 |
+
$html .= '</p>';
|
88 |
+
|
89 |
+
endif;
|
90 |
+
|
91 |
+
$html .= '</div>';
|
92 |
+
|
93 |
+
|
94 |
+
$html .= "</figcaption>";
|
95 |
+
|
96 |
+
$html .= "</figure>";
|
97 |
+
|
98 |
+
$html .= "</li>";
|
99 |
+
|
100 |
+
}
|
101 |
+
|
102 |
+
echo json_encode(array('content' => $html));
|
103 |
+
}
|
104 |
+
|
105 |
+
|
106 |
+
//Retorna um mesclado dos produtos mais vendidos e mais vistos de uma determinada cateoria
|
107 |
+
public function getBestSellerByCategoryAction(){
|
108 |
+
|
109 |
+
$html = null;
|
110 |
+
$block = $this->getLayout()->createBlock('clickview/clickviewbestsellerbycategoryblock');
|
111 |
+
$cat = $this->getRequest()->getParam('cat');
|
112 |
+
$rows = $block->getBestSellerByCatRow();
|
113 |
+
$imgSize = $block->getBestSellerByCatImgSize();
|
114 |
+
$_products = $block->getBestsellerProductsByCategory($rows,$cat);
|
115 |
+
|
116 |
+
foreach($_products as $item){
|
117 |
+
|
118 |
+
$html .= "<li>";
|
119 |
+
|
120 |
+
$html .= "<figure>";
|
121 |
+
|
122 |
+
$html .= "<a href=".$item->getProductUrl() ." class='product-image'>";
|
123 |
+
$html .= "<img src='".Mage::helper('catalog/image')->init($item, 'small_image')->keepFrame(true)->resize($imgSize,$imgSize)."'/>";
|
124 |
+
$html .= "</a>";
|
125 |
+
|
126 |
+
$html .= "<figcaption>";
|
127 |
+
$html .= "<a href=".$item->getProductUrl() ." class='product-image'>".$item->getName()."</a>";
|
128 |
+
$html .= $block->getPriceHtml($item, true);
|
129 |
+
|
130 |
+
$html .= '<div class="product-secondary">';
|
131 |
+
|
132 |
+
if(!$item->canConfigure() && $item->isSaleable()):
|
133 |
+
$html .= '<p class="action">';
|
134 |
+
$html .= '<button type="button" title="'.$this->__('Add to Cart').'" class="button btn-cart"
|
135 |
+
onclick = " setLocation('."'".$block->getAddToCartUrl($item)."'".') ">';
|
136 |
+
$html .= "<span>";
|
137 |
+
$html .= "<span>";
|
138 |
+
$html .= $this->__('Add to Cart');
|
139 |
+
$html .= "</span>";
|
140 |
+
$html .= "</span>";
|
141 |
+
$html .= "</button>";
|
142 |
+
|
143 |
+
$html .= '</p>';
|
144 |
+
|
145 |
+
elseif($item->getStockItem() && $item->getStockItem()->getIsInStock()):
|
146 |
+
|
147 |
+
$html .= '<p class="action">';
|
148 |
+
|
149 |
+
$html .= '<a title=" '.$this->__('View Details').'"
|
150 |
+
class="button" href="'.$item->getProductUrl().' ">'.
|
151 |
+
$this->__('View Details').'</a>';
|
152 |
+
$html .= '</p>';
|
153 |
+
else:
|
154 |
+
|
155 |
+
$html .= '<p class="action availability out-of-stock">';
|
156 |
+
$html .= '<span>'.$this->__('Out of stock').'</span>';
|
157 |
+
$html .= '</p>';
|
158 |
+
|
159 |
+
$html .= '</p>';
|
160 |
+
|
161 |
+
endif;
|
162 |
+
|
163 |
+
$html .= '</div>';
|
164 |
+
|
165 |
+
$html .= "</figcaption>";
|
166 |
+
|
167 |
+
$html .= "</figure>";
|
168 |
+
|
169 |
+
$html .= "</li>";
|
170 |
+
|
171 |
+
}
|
172 |
+
|
173 |
+
echo json_encode(array('content' => $html));
|
174 |
+
|
175 |
+
}
|
176 |
+
|
177 |
+
public function getProductsNewsByCategoryAction(){
|
178 |
+
|
179 |
+
$html = null;
|
180 |
+
$block = $this->getLayout()->createBlock('clickview/clickviewnewsproductsblock');
|
181 |
+
$cat = $this->getRequest()->getParam('cat');
|
182 |
+
$rows = $block->getNewProductByCatRow();
|
183 |
+
$imgSize = $block->getNewProductByCatImgSize();
|
184 |
+
|
185 |
+
|
186 |
+
$_products = $block->getNewsProductCollectionByCategory($rows,$cat);
|
187 |
+
|
188 |
+
foreach($_products as $item){
|
189 |
+
|
190 |
+
$html .= "<li>";
|
191 |
+
|
192 |
+
$html .= "<figure>";
|
193 |
+
|
194 |
+
$html .= "<a href=".$item->getProductUrl() ." class='product-image'>";
|
195 |
+
$html .= "<img src='".Mage::helper('catalog/image')->init($item, 'small_image')->keepFrame(true)->resize($imgSize,$imgSize)."'/>";
|
196 |
+
$html .= "</a>";
|
197 |
+
|
198 |
+
$html .= '<span class="perc">'.$this->__('News').'</span>';
|
199 |
+
|
200 |
+
$html .= "<figcaption>";
|
201 |
+
|
202 |
+
$html .= "<a href=".$item->getProductUrl() ." class='product-image'>".$item->getName()."</a>";
|
203 |
+
$html .= $block->getPriceHtml($item, true);
|
204 |
+
|
205 |
+
$html .= '<div class="product-secondary">';
|
206 |
+
|
207 |
+
if(!$item->canConfigure() && $item->isSaleable()):
|
208 |
+
$html .= '<p class="action">';
|
209 |
+
$html .= '<button type="button" title="'.$this->__('Add to Cart').'" class="button btn-cart"
|
210 |
+
onclick = " setLocation('."'".$block->getAddToCartUrl($item)."'".') ">';
|
211 |
+
$html .= "<span>";
|
212 |
+
$html .= "<span>";
|
213 |
+
$html .= $this->__('Add to Cart');
|
214 |
+
$html .= "</span>";
|
215 |
+
$html .= "</span>";
|
216 |
+
$html .= "</button>";
|
217 |
+
|
218 |
+
$html .= '</p>';
|
219 |
+
|
220 |
+
elseif($item->getStockItem() && $item->getStockItem()->getIsInStock()):
|
221 |
+
|
222 |
+
$html .= '<p class="action">';
|
223 |
+
|
224 |
+
$html .= '<a title=" '.$this->__('View Details').'"
|
225 |
+
class="button" href="'.$item->getProductUrl().' ">'.
|
226 |
+
$this->__('View Details').'</a>';
|
227 |
+
$html .= '</p>';
|
228 |
+
else:
|
229 |
+
|
230 |
+
$html .= '<p class="action availability out-of-stock">';
|
231 |
+
$html .= '<span>'.$this->__('Out of stock').'</span>';
|
232 |
+
$html .= '</p>';
|
233 |
+
|
234 |
+
$html .= '</p>';
|
235 |
+
|
236 |
+
endif;
|
237 |
+
|
238 |
+
$html .= '</div>';
|
239 |
+
|
240 |
+
|
241 |
+
$html .= "</figcaption>";
|
242 |
+
|
243 |
+
$html .= "</figure>";
|
244 |
+
|
245 |
+
$html .= "</li>";
|
246 |
+
|
247 |
+
}
|
248 |
+
|
249 |
+
echo json_encode(array('content' => $html));
|
250 |
+
|
251 |
+
}
|
252 |
+
|
253 |
+
|
254 |
+
public function getAllProductsPromotionAction(){
|
255 |
+
|
256 |
+
$html = null;
|
257 |
+
|
258 |
+
$block = $this->getLayout()->createBlock('clickview/Clickviewproductspromotionblock');
|
259 |
+
|
260 |
+
$cat = $this->getRequest()->getParam('cat');
|
261 |
+
|
262 |
+
$num = $block->getNewProductByCatRow();
|
263 |
+
|
264 |
+
$imgSize = $block->getNewProductByCatImgSize();
|
265 |
+
|
266 |
+
$_products = $block->getAllProductsPromotion($num, $cat);
|
267 |
+
|
268 |
+
foreach($_products as $item){
|
269 |
+
|
270 |
+
$html .= "<li>";
|
271 |
+
|
272 |
+
$html .= "<figure>";
|
273 |
+
|
274 |
+
$html .= "<a href=".$item->getProductUrl() ." class='product-image'>";
|
275 |
+
$html .= "<img src='".Mage::helper('catalog/image')->init($item, 'small_image')->keepFrame(true)->resize($imgSize,$imgSize)."'/>";
|
276 |
+
$html .= "</a>";
|
277 |
+
|
278 |
+
if($item->getSpecialPrice() > 0 ):
|
279 |
+
$html .= '<span class="perc">'.$block->getPerc($item->getPrice(), $item->getSpecialPrice() ).'</span>';
|
280 |
+
endif;
|
281 |
+
|
282 |
+
$html .= "<figcaption>";
|
283 |
+
|
284 |
+
$html .= "<a href=".$item->getProductUrl() ." class='product-image'>".$item->getName()."</a>";
|
285 |
+
$html .= $block->getPriceHtml($item, true);
|
286 |
+
|
287 |
+
$html .= '<div class="product-secondary">';
|
288 |
+
|
289 |
+
if(!$item->canConfigure() && $item->isSaleable()):
|
290 |
+
$html .= '<p class="action">';
|
291 |
+
$html .= '<button type="button" title="'.$this->__('Add to Cart').'" class="button btn-cart"
|
292 |
+
onclick = " setLocation('."'".$block->getAddToCartUrl($item)."'".') ">';
|
293 |
+
$html .= "<span>";
|
294 |
+
$html .= "<span>";
|
295 |
+
$html .= $this->__('Add to Cart');
|
296 |
+
$html .= "</span>";
|
297 |
+
$html .= "</span>";
|
298 |
+
$html .= "</button>";
|
299 |
+
|
300 |
+
$html .= '</p>';
|
301 |
+
|
302 |
+
elseif($item->getStockItem() && $item->getStockItem()->getIsInStock()):
|
303 |
+
|
304 |
+
$html .= '<p class="action">';
|
305 |
+
|
306 |
+
$html .= '<a title=" '.$this->__('View Details').'"
|
307 |
+
class="button" href="'.$item->getProductUrl().' ">'.
|
308 |
+
$this->__('View Details').'</a>';
|
309 |
+
$html .= '</p>';
|
310 |
+
else:
|
311 |
+
|
312 |
+
$html .= '<p class="action availability out-of-stock">';
|
313 |
+
$html .= '<span>'.$this->__('Out of stock').'</span>';
|
314 |
+
$html .= '</p>';
|
315 |
+
|
316 |
+
$html .= '</p>';
|
317 |
+
|
318 |
+
endif;
|
319 |
+
|
320 |
+
$html .= '</div>';
|
321 |
+
|
322 |
+
|
323 |
+
$html .= "</figcaption>";
|
324 |
+
|
325 |
+
$html .= "</figure>";
|
326 |
+
|
327 |
+
$html .= "</li>";
|
328 |
+
|
329 |
+
}
|
330 |
+
|
331 |
+
echo json_encode(array('content' => $html));
|
332 |
+
|
333 |
+
}
|
334 |
+
|
335 |
+
|
336 |
+
public function getCatAction(){
|
337 |
+
$html = null;
|
338 |
+
$storeId = Mage::app()->getStore()->getId();
|
339 |
+
|
340 |
+
$catAllowed = self::getCategoryAllowed();
|
341 |
+
|
342 |
+
$cat = Mage::getSingleton('catalog/category')
|
343 |
+
->getCollection()
|
344 |
+
->addAttributeToSelect('*')
|
345 |
+
->setStoreId($storeId)
|
346 |
+
->addAttributeToFilter('entity_id', array('in' => $catAllowed));
|
347 |
+
|
348 |
+
foreach($cat as $i){
|
349 |
+
$html .= "<option value='".$i->getId()."'>".$i->getName()."</option>";
|
350 |
+
}
|
351 |
+
|
352 |
+
|
353 |
+
}
|
354 |
+
|
355 |
+
public function getCategoryAllowed(){
|
356 |
+
$cat = explode(',', Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_category_allowed'));
|
357 |
+
return $cat;
|
358 |
+
}
|
359 |
+
|
360 |
+
|
361 |
+
/**public function feedAction(){
|
362 |
+
|
363 |
+
$_products = Mage::getSingleton('catalog/product')
|
364 |
+
->getCollection()
|
365 |
+
->addAttributeToSelect('*')
|
366 |
+
->addAttributeToFilter('status', array('eq' => 1))
|
367 |
+
->joinField('qty',
|
368 |
+
'cataloginventory/stock_item',
|
369 |
+
'qty',
|
370 |
+
'product_id=entity_id',
|
371 |
+
'{{table}}.stock_id=1',
|
372 |
+
'left')
|
373 |
+
|
374 |
+
->addAttributeToFilter('qty', array("gt" => 0))
|
375 |
+
->load();
|
376 |
+
|
377 |
+
$xml .= '<?xml version="1.0"?>';
|
378 |
+
$xml .= '<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">';
|
379 |
+
$xml .= '<channel>';
|
380 |
+
$xml .= '<title>Hajime</title>';
|
381 |
+
$xml .= '<link>http://webmaster.hajimesushitucuruvi.com.br/teste/</link>';
|
382 |
+
$xml .= '<description>Loja teste</description>';
|
383 |
+
|
384 |
+
foreach($_products as $item){
|
385 |
+
|
386 |
+
$xml .= '<item>';
|
387 |
+
$xml .= "<g:id>".$item->getSku()."</g:id>";
|
388 |
+
$xml .= "<g:title>".$item->getName()."</g:title>";
|
389 |
+
$xml .= "<g:description>".$item->getShortDescription()."</g:description>";
|
390 |
+
$xml .= "<g:price>".self::getPriceProduct($item->getPrice(), $item->getSpecialPrice())."</g:price>";
|
391 |
+
$xml .= "<g:availability>".self::isStock($item->isSaleable())."</g:availability>";
|
392 |
+
$xml .= "<g:link>".$item->getProductUrl()."</g:link>";
|
393 |
+
$xml .= "<g:image_link>".Mage::helper('catalog/image')->init($item, 'small_image')->resize(200)."</g:image_link>";
|
394 |
+
$xml .= "<g:condition>new</g:condition>";
|
395 |
+
$xml .= "".number_format($item->getQty(),0,'','')."";
|
396 |
+
$xml .= '<g:shipping>
|
397 |
+
<g:country>BR</g:country>
|
398 |
+
<g:service>Standard</g:service>
|
399 |
+
<g:price>20.00 BRL</g:price>
|
400 |
+
</g:shipping>';
|
401 |
+
$xml .= "<g:google_product_category>Alimentos, bebidas e tabaco > Alimentos > Padaria</g:google_product_category>";
|
402 |
+
$xml .= '<g:identifier_exists>FALSE</g:identifier_exists>';
|
403 |
+
$xml .= "<g:product_type>Alimentos Orgânicos</g:product_type>";
|
404 |
+
$xml .= '</item>';
|
405 |
+
|
406 |
+
}
|
407 |
+
|
408 |
+
$xml .= '</channel>';
|
409 |
+
$xml .= '</rss>';
|
410 |
+
|
411 |
+
return self::setFile($xml);
|
412 |
+
|
413 |
+
}*/
|
414 |
+
|
415 |
+
public function isStock($stock){
|
416 |
+
if($stock){
|
417 |
+
return "in stock";
|
418 |
+
}else{
|
419 |
+
return "sold out";
|
420 |
+
}
|
421 |
+
}
|
422 |
+
|
423 |
+
public function getPriceProduct($price, $specialPrice){
|
424 |
+
if($specialPrice > 0){
|
425 |
+
return number_format($specialPrice,2,'.','.');
|
426 |
+
}else{
|
427 |
+
return number_format($price,2,'.','.');
|
428 |
+
}
|
429 |
+
}
|
430 |
+
|
431 |
+
public function setFile($xml){
|
432 |
+
$f = fopen('feed.xml', 'a+');
|
433 |
+
fwrite($f, $xml);
|
434 |
+
fclose($f);
|
435 |
+
}
|
436 |
+
|
437 |
+
}
|
438 |
+
|
439 |
+
?>
|
app/code/community/Jefferson/Clickview/etc/config.xml
ADDED
@@ -0,0 +1,299 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* NOTICE OF LICENSE
|
5 |
+
*
|
6 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
7 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
8 |
+
* It is also available through the world-wide-web at this URL:
|
9 |
+
* http://opensource.org/licenses/afl-3.0.php
|
10 |
+
* If you did not receive a copy of the license and are unable to
|
11 |
+
* obtain it through the world-wide-web, please send an email
|
12 |
+
* to license@magento.com so we can send you a copy immediately.
|
13 |
+
*
|
14 |
+
* @category Jefferson
|
15 |
+
* @package Jefferson_Clickview
|
16 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
17 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
18 |
+
*
|
19 |
+
*/
|
20 |
+
-->
|
21 |
+
|
22 |
+
<config>
|
23 |
+
|
24 |
+
<modules>
|
25 |
+
<Jefferson_Clickview>
|
26 |
+
<version>0.1.0</version>
|
27 |
+
</Jefferson_Clickview>
|
28 |
+
</modules>
|
29 |
+
|
30 |
+
<frontend>
|
31 |
+
|
32 |
+
<layout>
|
33 |
+
<updates>
|
34 |
+
<Jefferson_Clickview>
|
35 |
+
<file>jefferson/jefferson_clickview.xml</file>
|
36 |
+
</Jefferson_Clickview>
|
37 |
+
</updates>
|
38 |
+
</layout>
|
39 |
+
|
40 |
+
<routers>
|
41 |
+
<clickview>
|
42 |
+
<use>standard</use>
|
43 |
+
<args>
|
44 |
+
<module>Jefferson_Clickview</module>
|
45 |
+
<frontName>clickview</frontName>
|
46 |
+
</args>
|
47 |
+
</clickview>
|
48 |
+
</routers>
|
49 |
+
|
50 |
+
<translate>
|
51 |
+
<modules>
|
52 |
+
<Jefferson_Clickview>
|
53 |
+
<files>
|
54 |
+
<default>jefferson_clickview.csv</default>
|
55 |
+
</files>
|
56 |
+
</Jefferson_Clickview>
|
57 |
+
</modules>
|
58 |
+
</translate>
|
59 |
+
|
60 |
+
<events>
|
61 |
+
<catalog_controller_product_view >
|
62 |
+
<observers>
|
63 |
+
<jefferson_clickview_model_observer>
|
64 |
+
<type>singleton</type>
|
65 |
+
<class>Jefferson_Clickview_Model_Observer</class>
|
66 |
+
<method>setExecuteClickview</method>
|
67 |
+
</jefferson_clickview_model_observer>
|
68 |
+
</observers>
|
69 |
+
</catalog_controller_product_view >
|
70 |
+
|
71 |
+
<catalog_product_compare_add_product>
|
72 |
+
<observers>
|
73 |
+
<jefferson_clickview_model_observer>
|
74 |
+
<type>singleton</type>
|
75 |
+
<class>Jefferson_Clickview_Model_Observer</class>
|
76 |
+
<method>setExecuteClickview</method>
|
77 |
+
</jefferson_clickview_model_observer>
|
78 |
+
</observers>
|
79 |
+
</catalog_product_compare_add_product>
|
80 |
+
|
81 |
+
<wishlist_add_product>
|
82 |
+
<observers>
|
83 |
+
<jefferson_clickview_model_observer>
|
84 |
+
<type>singleton</type>
|
85 |
+
<class>Jefferson_Clickview_Model_Observer</class>
|
86 |
+
<method>setExecuteClickview</method>
|
87 |
+
</jefferson_clickview_model_observer>
|
88 |
+
</observers>
|
89 |
+
</wishlist_add_product>
|
90 |
+
|
91 |
+
<checkout_cart_product_add_after>
|
92 |
+
<observers>
|
93 |
+
<jefferson_clickview_model_observer>
|
94 |
+
<type>singleton</type>
|
95 |
+
<class>Jefferson_Clickview_Model_Observer</class>
|
96 |
+
<method>setExecuteClickview</method>
|
97 |
+
</jefferson_clickview_model_observer>
|
98 |
+
</observers>
|
99 |
+
</checkout_cart_product_add_after>
|
100 |
+
|
101 |
+
</events>
|
102 |
+
|
103 |
+
</frontend>
|
104 |
+
|
105 |
+
<global>
|
106 |
+
|
107 |
+
<resources>
|
108 |
+
<jefferson_clickview_setup>
|
109 |
+
<setup>
|
110 |
+
<module>Jefferson_Clickview</module>
|
111 |
+
</setup>
|
112 |
+
</jefferson_clickview_setup>
|
113 |
+
</resources>
|
114 |
+
|
115 |
+
<blocks>
|
116 |
+
<clickview>
|
117 |
+
<class>Jefferson_Clickview_Block</class>
|
118 |
+
</clickview>
|
119 |
+
</blocks>
|
120 |
+
|
121 |
+
<helpers>
|
122 |
+
<clickview>
|
123 |
+
<class>Jefferson_Clickview_Helper</class>
|
124 |
+
</clickview>
|
125 |
+
</helpers>
|
126 |
+
|
127 |
+
<models>
|
128 |
+
<clickview>
|
129 |
+
<class>Jefferson_Clickview_Model</class>
|
130 |
+
</clickview>
|
131 |
+
</models>
|
132 |
+
</global>
|
133 |
+
|
134 |
+
<default>
|
135 |
+
<clickview_options>
|
136 |
+
<clickview_general>
|
137 |
+
<clickview_click_number_rows>16</clickview_click_number_rows>
|
138 |
+
<clickview_img_size>200</clickview_img_size>
|
139 |
+
<clickview_click_enabled>1</clickview_click_enabled>
|
140 |
+
</clickview_general>
|
141 |
+
</clickview_options>
|
142 |
+
|
143 |
+
<clickview_click_recents>
|
144 |
+
<clickview_click_recents_general>
|
145 |
+
<clickview_img_size>200</clickview_img_size>
|
146 |
+
<clickview_click_enabled>1</clickview_click_enabled>
|
147 |
+
</clickview_click_recents_general>
|
148 |
+
</clickview_click_recents>
|
149 |
+
|
150 |
+
<clickview_best_seller>
|
151 |
+
<clickview_best_seller_general>
|
152 |
+
<clickview_click_number_rows>16</clickview_click_number_rows>
|
153 |
+
<clickview_img_size>200</clickview_img_size>
|
154 |
+
<clickview_click_enabled>1</clickview_click_enabled>
|
155 |
+
</clickview_best_seller_general>
|
156 |
+
</clickview_best_seller>
|
157 |
+
|
158 |
+
<clickview_most_views>
|
159 |
+
<clickview_most_views_general>
|
160 |
+
<clickview_click_number_rows>16</clickview_click_number_rows>
|
161 |
+
<clickview_img_size>200</clickview_img_size>
|
162 |
+
<clickview_click_enabled>1</clickview_click_enabled>
|
163 |
+
</clickview_most_views_general>
|
164 |
+
</clickview_most_views>
|
165 |
+
|
166 |
+
<clickview_product_discount>
|
167 |
+
<clickview_products_discount_general>
|
168 |
+
<clickview_click_number_rows>16</clickview_click_number_rows>
|
169 |
+
<clickview_img_size>200</clickview_img_size>
|
170 |
+
<clickview_click_enabled>1</clickview_click_enabled>
|
171 |
+
</clickview_products_discount_general>
|
172 |
+
</clickview_product_discount>
|
173 |
+
|
174 |
+
<clickview_product_release>
|
175 |
+
<clickview_product_release_general>
|
176 |
+
<clickview_img_size>200</clickview_img_size>
|
177 |
+
<clickview_click_enabled>1</clickview_click_enabled>
|
178 |
+
</clickview_product_release_general>
|
179 |
+
</clickview_product_release>
|
180 |
+
|
181 |
+
<clickview_by_category>
|
182 |
+
|
183 |
+
<clickview_most_viewed_by_category>
|
184 |
+
<clickview_category_slidemargin>10</clickview_category_slidemargin>
|
185 |
+
<clickview_category_slidewidth>200</clickview_category_slidewidth>
|
186 |
+
<clickview_category_maxslider>1</clickview_category_maxslider>
|
187 |
+
<clickview_category_minslider>1</clickview_category_minslider>
|
188 |
+
<clickview_category_allowed></clickview_category_allowed>
|
189 |
+
<clickview_category_default></clickview_category_default>
|
190 |
+
<clickview_click_number_rows>16</clickview_click_number_rows>
|
191 |
+
<clickview_img_size>200</clickview_img_size>
|
192 |
+
<clickview_slide_mode>fade</clickview_slide_mode>
|
193 |
+
<clickview_click_enabled>1</clickview_click_enabled>
|
194 |
+
</clickview_most_viewed_by_category>
|
195 |
+
|
196 |
+
<clickview_best_seller_by_category>
|
197 |
+
<clickview_category_slidemargin>10</clickview_category_slidemargin>
|
198 |
+
<clickview_category_slidewidth>200</clickview_category_slidewidth>
|
199 |
+
<clickview_category_maxslider>1</clickview_category_maxslider>
|
200 |
+
<clickview_category_minslider>1</clickview_category_minslider>
|
201 |
+
<clickview_category_allowed></clickview_category_allowed>
|
202 |
+
<clickview_category_default></clickview_category_default>
|
203 |
+
<clickview_click_number_rows>16</clickview_click_number_rows>
|
204 |
+
<clickview_img_size>200</clickview_img_size>
|
205 |
+
<clickview_slide_mode>fade</clickview_slide_mode>
|
206 |
+
<clickview_click_enabled>1</clickview_click_enabled>
|
207 |
+
</clickview_best_seller_by_category>
|
208 |
+
|
209 |
+
<clickview_news_products_by_category>
|
210 |
+
<clickview_category_slidemargin>10</clickview_category_slidemargin>
|
211 |
+
<clickview_category_slidewidth>200</clickview_category_slidewidth>
|
212 |
+
<clickview_category_maxslider>1</clickview_category_maxslider>
|
213 |
+
<clickview_category_minslider>1</clickview_category_minslider>
|
214 |
+
<clickview_category_allowed></clickview_category_allowed>
|
215 |
+
<clickview_category_default></clickview_category_default>
|
216 |
+
<clickview_click_number_rows>16</clickview_click_number_rows>
|
217 |
+
<clickview_img_size>200</clickview_img_size>
|
218 |
+
<clickview_slide_mode>fade</clickview_slide_mode>
|
219 |
+
<clickview_click_enabled>1</clickview_click_enabled>
|
220 |
+
</clickview_news_products_by_category>
|
221 |
+
|
222 |
+
<clickview_products_promotion_by_category>
|
223 |
+
<clickview_category_slidemargin>10</clickview_category_slidemargin>
|
224 |
+
<clickview_category_slidewidth>200</clickview_category_slidewidth>
|
225 |
+
<clickview_category_maxslider>1</clickview_category_maxslider>
|
226 |
+
<clickview_category_minslider>1</clickview_category_minslider>
|
227 |
+
<clickview_category_allowed></clickview_category_allowed>
|
228 |
+
<clickview_category_default></clickview_category_default>
|
229 |
+
<clickview_click_number_rows>16</clickview_click_number_rows>
|
230 |
+
<clickview_img_size>200</clickview_img_size>
|
231 |
+
<clickview_slide_mode>fade</clickview_slide_mode>
|
232 |
+
<clickview_click_enabled>1</clickview_click_enabled>
|
233 |
+
</clickview_products_promotion_by_category>
|
234 |
+
|
235 |
+
</clickview_by_category>
|
236 |
+
|
237 |
+
</default>
|
238 |
+
|
239 |
+
|
240 |
+
<adminhtml>
|
241 |
+
<translate>
|
242 |
+
<modules>
|
243 |
+
<Jefferson_Clickview>
|
244 |
+
<files>
|
245 |
+
<default>jefferson_clickview.csv</default>
|
246 |
+
</files>
|
247 |
+
</Jefferson_Clickview>
|
248 |
+
</modules>
|
249 |
+
</translate>
|
250 |
+
|
251 |
+
<acl>
|
252 |
+
<resources>
|
253 |
+
<admin>
|
254 |
+
<children>
|
255 |
+
<system>
|
256 |
+
<children>
|
257 |
+
<config>
|
258 |
+
<children>
|
259 |
+
|
260 |
+
<clickview_options>
|
261 |
+
<title>Last click</title>
|
262 |
+
</clickview_options>
|
263 |
+
|
264 |
+
<clickview_click_recents>
|
265 |
+
<title>Click recents</title>
|
266 |
+
</clickview_click_recents>
|
267 |
+
|
268 |
+
<clickview_best_seller>
|
269 |
+
<title>Best Seller</title>
|
270 |
+
</clickview_best_seller>
|
271 |
+
|
272 |
+
<clickview_most_views>
|
273 |
+
<title>Most Viewed</title>
|
274 |
+
</clickview_most_views>
|
275 |
+
|
276 |
+
<clickview_by_category>
|
277 |
+
<title>Filter by category</title>
|
278 |
+
</clickview_by_category>
|
279 |
+
|
280 |
+
<clickview_product_discount>
|
281 |
+
<title>Products discount</title>
|
282 |
+
</clickview_product_discount>
|
283 |
+
|
284 |
+
<clickview_product_release>
|
285 |
+
<title>Products release</title>
|
286 |
+
</clickview_product_release>
|
287 |
+
|
288 |
+
</children>
|
289 |
+
</config>
|
290 |
+
</children>
|
291 |
+
</system>
|
292 |
+
</children>
|
293 |
+
</admin>
|
294 |
+
</resources>
|
295 |
+
</acl>
|
296 |
+
|
297 |
+
</adminhtml>
|
298 |
+
|
299 |
+
</config>
|
app/code/community/Jefferson/Clickview/etc/system.xml
ADDED
@@ -0,0 +1,842 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* @category Jefferson
|
5 |
+
* @package Jefferson_Clickview
|
6 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
7 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
8 |
+
*
|
9 |
+
*/
|
10 |
+
-->
|
11 |
+
|
12 |
+
<config>
|
13 |
+
<tabs>
|
14 |
+
<clickview translate="label" module="clickview">
|
15 |
+
<label>Top Home Store</label>
|
16 |
+
<sort_order>99999</sort_order>
|
17 |
+
</clickview>
|
18 |
+
</tabs>
|
19 |
+
<!--Click view click-->
|
20 |
+
<sections>
|
21 |
+
<clickview_options translate="label" module="clickview">
|
22 |
+
<label>Last click</label>
|
23 |
+
<tab>clickview</tab>
|
24 |
+
<frontend_type>text</frontend_type>
|
25 |
+
<sort_order>1000</sort_order>
|
26 |
+
<show_in_default>1</show_in_default>
|
27 |
+
<show_in_website>1</show_in_website>
|
28 |
+
<show_in_store>1</show_in_store>
|
29 |
+
|
30 |
+
<groups translate="label">
|
31 |
+
|
32 |
+
<clickview_general>
|
33 |
+
<label>General</label>
|
34 |
+
<frontend_type>text</frontend_type>
|
35 |
+
<sort_order>1</sort_order>
|
36 |
+
<show_in_default>1</show_in_default>
|
37 |
+
<show_in_website>1</show_in_website>
|
38 |
+
<show_in_store>1</show_in_store>
|
39 |
+
|
40 |
+
<fields>
|
41 |
+
|
42 |
+
<clickview_click_number_rows translate="label">
|
43 |
+
<label>Number in the results</label>
|
44 |
+
<frontend_type>text</frontend_type>
|
45 |
+
<sort_order>1</sort_order>
|
46 |
+
<show_in_default>1</show_in_default>
|
47 |
+
<show_in_website>1</show_in_website>
|
48 |
+
<show_in_store>1</show_in_store>
|
49 |
+
</clickview_click_number_rows>
|
50 |
+
|
51 |
+
<clickview_img_size>
|
52 |
+
<label>Product image size</label>
|
53 |
+
<frontend_type>text</frontend_type>
|
54 |
+
<sort_order>1</sort_order>
|
55 |
+
<show_in_default>1</show_in_default>
|
56 |
+
<show_in_website>1</show_in_website>
|
57 |
+
<show_in_store>1</show_in_store>
|
58 |
+
</clickview_img_size>
|
59 |
+
|
60 |
+
<clickview_click_enabled translate="label">
|
61 |
+
<label>Enabled</label>
|
62 |
+
<frontend_type>select</frontend_type>
|
63 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
64 |
+
<sort_order>1</sort_order>
|
65 |
+
<show_in_default>1</show_in_default>
|
66 |
+
<show_in_website>1</show_in_website>
|
67 |
+
<show_in_store>1</show_in_store>
|
68 |
+
</clickview_click_enabled>
|
69 |
+
|
70 |
+
</fields>
|
71 |
+
|
72 |
+
</clickview_general>
|
73 |
+
|
74 |
+
</groups>
|
75 |
+
|
76 |
+
</clickview_options>
|
77 |
+
</sections>
|
78 |
+
|
79 |
+
<!--Click view click recents-->
|
80 |
+
<sections>
|
81 |
+
<clickview_click_recents translate="label" module="clickview">
|
82 |
+
<label>Click recents</label>
|
83 |
+
<tab>clickview</tab>
|
84 |
+
<frontend_type>text</frontend_type>
|
85 |
+
<sort_order>1000</sort_order>
|
86 |
+
<show_in_default>1</show_in_default>
|
87 |
+
<show_in_website>1</show_in_website>
|
88 |
+
<show_in_store>1</show_in_store>
|
89 |
+
|
90 |
+
<groups translate="label">
|
91 |
+
|
92 |
+
<clickview_click_recents_general>
|
93 |
+
<label>General</label>
|
94 |
+
<frontend_type>text</frontend_type>
|
95 |
+
<sort_order>1</sort_order>
|
96 |
+
<show_in_default>1</show_in_default>
|
97 |
+
<show_in_website>1</show_in_website>
|
98 |
+
<show_in_store>1</show_in_store>
|
99 |
+
|
100 |
+
<fields>
|
101 |
+
|
102 |
+
<clickview_img_size>
|
103 |
+
<label>Product image size</label>
|
104 |
+
<frontend_type>text</frontend_type>
|
105 |
+
<sort_order>1</sort_order>
|
106 |
+
<show_in_default>1</show_in_default>
|
107 |
+
<show_in_website>1</show_in_website>
|
108 |
+
<show_in_store>1</show_in_store>
|
109 |
+
</clickview_img_size>
|
110 |
+
|
111 |
+
<clickview_click_enabled translate="label">
|
112 |
+
<label>Enabled</label>
|
113 |
+
<frontend_type>select</frontend_type>
|
114 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
115 |
+
<sort_order>1</sort_order>
|
116 |
+
<show_in_default>1</show_in_default>
|
117 |
+
<show_in_website>1</show_in_website>
|
118 |
+
<show_in_store>1</show_in_store>
|
119 |
+
</clickview_click_enabled>
|
120 |
+
|
121 |
+
</fields>
|
122 |
+
|
123 |
+
</clickview_click_recents_general>
|
124 |
+
|
125 |
+
</groups>
|
126 |
+
|
127 |
+
</clickview_click_recents>
|
128 |
+
</sections>
|
129 |
+
|
130 |
+
<!--Get the best-selling products-->
|
131 |
+
<sections>
|
132 |
+
<clickview_best_seller translate="label" module="clickview">
|
133 |
+
<label>Best Seller</label>
|
134 |
+
<tab>clickview</tab>
|
135 |
+
<frontend_type>text</frontend_type>
|
136 |
+
<sort_order>1000</sort_order>
|
137 |
+
<show_in_default>1</show_in_default>
|
138 |
+
<show_in_website>1</show_in_website>
|
139 |
+
<show_in_store>1</show_in_store>
|
140 |
+
|
141 |
+
<groups translate="label">
|
142 |
+
|
143 |
+
<clickview_best_seller_general>
|
144 |
+
<label>General</label>
|
145 |
+
<frontend_type>text</frontend_type>
|
146 |
+
<sort_order>1</sort_order>
|
147 |
+
<show_in_default>1</show_in_default>
|
148 |
+
<show_in_website>1</show_in_website>
|
149 |
+
<show_in_store>1</show_in_store>
|
150 |
+
|
151 |
+
<fields>
|
152 |
+
|
153 |
+
<clickview_click_number_rows translate="label">
|
154 |
+
<label>Number in the results</label>
|
155 |
+
<frontend_type>text</frontend_type>
|
156 |
+
<sort_order>1</sort_order>
|
157 |
+
<show_in_default>1</show_in_default>
|
158 |
+
<show_in_website>1</show_in_website>
|
159 |
+
<show_in_store>1</show_in_store>
|
160 |
+
</clickview_click_number_rows>
|
161 |
+
|
162 |
+
<clickview_img_size>
|
163 |
+
<label>Product image size</label>
|
164 |
+
<frontend_type>text</frontend_type>
|
165 |
+
<sort_order>1</sort_order>
|
166 |
+
<show_in_default>1</show_in_default>
|
167 |
+
<show_in_website>1</show_in_website>
|
168 |
+
<show_in_store>1</show_in_store>
|
169 |
+
</clickview_img_size>
|
170 |
+
|
171 |
+
<clickview_click_enabled translate="label">
|
172 |
+
<label>Enabled</label>
|
173 |
+
<frontend_type>select</frontend_type>
|
174 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
175 |
+
<sort_order>1</sort_order>
|
176 |
+
<show_in_default>1</show_in_default>
|
177 |
+
<show_in_website>1</show_in_website>
|
178 |
+
<show_in_store>1</show_in_store>
|
179 |
+
</clickview_click_enabled>
|
180 |
+
|
181 |
+
</fields>
|
182 |
+
|
183 |
+
</clickview_best_seller_general>
|
184 |
+
|
185 |
+
</groups>
|
186 |
+
|
187 |
+
</clickview_best_seller>
|
188 |
+
</sections>
|
189 |
+
|
190 |
+
<!--Get the most viewed products-->
|
191 |
+
<sections>
|
192 |
+
<clickview_most_views translate="label" module="clickview">
|
193 |
+
<label>Most Viewed</label>
|
194 |
+
<tab>clickview</tab>
|
195 |
+
<frontend_type>text</frontend_type>
|
196 |
+
<sort_order>1000</sort_order>
|
197 |
+
<show_in_default>1</show_in_default>
|
198 |
+
<show_in_website>1</show_in_website>
|
199 |
+
<show_in_store>1</show_in_store>
|
200 |
+
|
201 |
+
<groups translate="label">
|
202 |
+
|
203 |
+
<clickview_most_views_general>
|
204 |
+
<label>General</label>
|
205 |
+
<frontend_type>text</frontend_type>
|
206 |
+
<sort_order>1</sort_order>
|
207 |
+
<show_in_default>1</show_in_default>
|
208 |
+
<show_in_website>1</show_in_website>
|
209 |
+
<show_in_store>1</show_in_store>
|
210 |
+
|
211 |
+
<fields>
|
212 |
+
|
213 |
+
<clickview_click_number_rows translate="label">
|
214 |
+
<label>Number in the results</label>
|
215 |
+
<frontend_type>text</frontend_type>
|
216 |
+
<sort_order>1</sort_order>
|
217 |
+
<show_in_default>1</show_in_default>
|
218 |
+
<show_in_website>1</show_in_website>
|
219 |
+
<show_in_store>1</show_in_store>
|
220 |
+
</clickview_click_number_rows>
|
221 |
+
|
222 |
+
<clickview_img_size>
|
223 |
+
<label>Product image size</label>
|
224 |
+
<frontend_type>text</frontend_type>
|
225 |
+
<sort_order>1</sort_order>
|
226 |
+
<show_in_default>1</show_in_default>
|
227 |
+
<show_in_website>1</show_in_website>
|
228 |
+
<show_in_store>1</show_in_store>
|
229 |
+
</clickview_img_size>
|
230 |
+
|
231 |
+
<clickview_click_enabled translate="label">
|
232 |
+
<label>Enabled</label>
|
233 |
+
<frontend_type>select</frontend_type>
|
234 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
235 |
+
<sort_order>1</sort_order>
|
236 |
+
<show_in_default>1</show_in_default>
|
237 |
+
<show_in_website>1</show_in_website>
|
238 |
+
<show_in_store>1</show_in_store>
|
239 |
+
</clickview_click_enabled>
|
240 |
+
|
241 |
+
</fields>
|
242 |
+
|
243 |
+
</clickview_most_views_general>
|
244 |
+
|
245 |
+
</groups>
|
246 |
+
|
247 |
+
</clickview_most_views>
|
248 |
+
</sections>
|
249 |
+
|
250 |
+
<!--Products discount-->
|
251 |
+
|
252 |
+
<sections>
|
253 |
+
<clickview_product_discount translate="label" module="clickview">
|
254 |
+
<label>Products discount</label>
|
255 |
+
<tab>clickview</tab>
|
256 |
+
<frontend_type>text</frontend_type>
|
257 |
+
<sort_order>1000</sort_order>
|
258 |
+
<show_in_default>1</show_in_default>
|
259 |
+
<show_in_website>1</show_in_website>
|
260 |
+
<show_in_store>1</show_in_store>
|
261 |
+
|
262 |
+
<groups translate="label">
|
263 |
+
|
264 |
+
<clickview_products_discount_general>
|
265 |
+
<label>General</label>
|
266 |
+
<frontend_type>text</frontend_type>
|
267 |
+
<sort_order>1</sort_order>
|
268 |
+
<show_in_default>1</show_in_default>
|
269 |
+
<show_in_website>1</show_in_website>
|
270 |
+
<show_in_store>1</show_in_store>
|
271 |
+
|
272 |
+
<fields>
|
273 |
+
|
274 |
+
<clickview_click_number_rows translate="label">
|
275 |
+
<label>Number in the results</label>
|
276 |
+
<frontend_type>text</frontend_type>
|
277 |
+
<sort_order>1</sort_order>
|
278 |
+
<show_in_default>1</show_in_default>
|
279 |
+
<show_in_website>1</show_in_website>
|
280 |
+
<show_in_store>1</show_in_store>
|
281 |
+
</clickview_click_number_rows>
|
282 |
+
|
283 |
+
<clickview_img_size>
|
284 |
+
<label>Product image size</label>
|
285 |
+
<frontend_type>text</frontend_type>
|
286 |
+
<sort_order>1</sort_order>
|
287 |
+
<show_in_default>1</show_in_default>
|
288 |
+
<show_in_website>1</show_in_website>
|
289 |
+
<show_in_store>1</show_in_store>
|
290 |
+
</clickview_img_size>
|
291 |
+
|
292 |
+
<clickview_click_enabled translate="label">
|
293 |
+
<label>Enabled</label>
|
294 |
+
<frontend_type>select</frontend_type>
|
295 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
296 |
+
<sort_order>1</sort_order>
|
297 |
+
<show_in_default>1</show_in_default>
|
298 |
+
<show_in_website>1</show_in_website>
|
299 |
+
<show_in_store>1</show_in_store>
|
300 |
+
</clickview_click_enabled>
|
301 |
+
|
302 |
+
</fields>
|
303 |
+
|
304 |
+
</clickview_products_discount_general>
|
305 |
+
|
306 |
+
</groups>
|
307 |
+
|
308 |
+
</clickview_product_discount>
|
309 |
+
</sections>
|
310 |
+
|
311 |
+
<!--Products release-->
|
312 |
+
|
313 |
+
<sections>
|
314 |
+
<clickview_product_release translate="label" module="clickview">
|
315 |
+
<label>Products release</label>
|
316 |
+
<tab>clickview</tab>
|
317 |
+
<frontend_type>text</frontend_type>
|
318 |
+
<sort_order>1000</sort_order>
|
319 |
+
<show_in_default>1</show_in_default>
|
320 |
+
<show_in_website>1</show_in_website>
|
321 |
+
<show_in_store>1</show_in_store>
|
322 |
+
|
323 |
+
<groups translate="label">
|
324 |
+
|
325 |
+
<clickview_product_release_general>
|
326 |
+
<label>General</label>
|
327 |
+
<frontend_type>text</frontend_type>
|
328 |
+
<sort_order>1</sort_order>
|
329 |
+
<show_in_default>1</show_in_default>
|
330 |
+
<show_in_website>1</show_in_website>
|
331 |
+
<show_in_store>1</show_in_store>
|
332 |
+
|
333 |
+
<fields>
|
334 |
+
<clickview_img_size>
|
335 |
+
<label>Product image size</label>
|
336 |
+
<frontend_type>text</frontend_type>
|
337 |
+
<sort_order>1</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 |
+
</clickview_img_size>
|
342 |
+
|
343 |
+
<clickview_click_enabled translate="label">
|
344 |
+
<label>Enabled</label>
|
345 |
+
<frontend_type>select</frontend_type>
|
346 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
347 |
+
<sort_order>1</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 |
+
</clickview_click_enabled>
|
352 |
+
|
353 |
+
</fields>
|
354 |
+
|
355 |
+
</clickview_product_release_general>
|
356 |
+
|
357 |
+
</groups>
|
358 |
+
|
359 |
+
</clickview_product_release>
|
360 |
+
</sections>
|
361 |
+
|
362 |
+
|
363 |
+
<!---->
|
364 |
+
|
365 |
+
<!--Filter by category-->
|
366 |
+
|
367 |
+
<sections>
|
368 |
+
<clickview_by_category translate="label" module="clickview">
|
369 |
+
<label>Filter by category</label>
|
370 |
+
<tab>clickview</tab>
|
371 |
+
<frontend_type>text</frontend_type>
|
372 |
+
<sort_order>1000</sort_order>
|
373 |
+
<show_in_default>1</show_in_default>
|
374 |
+
<show_in_website>1</show_in_website>
|
375 |
+
<show_in_store>1</show_in_store>
|
376 |
+
|
377 |
+
<groups translate="label">
|
378 |
+
|
379 |
+
<clickview_most_viewed_by_category>
|
380 |
+
<label>Most viewed by category</label>
|
381 |
+
<frontend_type>text</frontend_type>
|
382 |
+
<sort_order>1</sort_order>
|
383 |
+
<show_in_default>1</show_in_default>
|
384 |
+
<show_in_website>1</show_in_website>
|
385 |
+
<show_in_store>1</show_in_store>
|
386 |
+
|
387 |
+
<fields>
|
388 |
+
|
389 |
+
<clickview_category_slidemargin>
|
390 |
+
<label>Margin of the slide</label>
|
391 |
+
<frontend_type>text</frontend_type>
|
392 |
+
<sort_order>1</sort_order>
|
393 |
+
<show_in_default>1</show_in_default>
|
394 |
+
<show_in_website>1</show_in_website>
|
395 |
+
<show_in_store>1</show_in_store>
|
396 |
+
</clickview_category_slidemargin>
|
397 |
+
|
398 |
+
|
399 |
+
<clickview_category_slidewidth>
|
400 |
+
<label>Maximum width of the slider</label>
|
401 |
+
<frontend_type>text</frontend_type>
|
402 |
+
<sort_order>1</sort_order>
|
403 |
+
<show_in_default>1</show_in_default>
|
404 |
+
<show_in_website>1</show_in_website>
|
405 |
+
<show_in_store>1</show_in_store>
|
406 |
+
</clickview_category_slidewidth>
|
407 |
+
|
408 |
+
|
409 |
+
<clickview_category_maxslider>
|
410 |
+
<label>Maximum amount slider</label>
|
411 |
+
<frontend_type>text</frontend_type>
|
412 |
+
<sort_order>1</sort_order>
|
413 |
+
<show_in_default>1</show_in_default>
|
414 |
+
<show_in_website>1</show_in_website>
|
415 |
+
<show_in_store>1</show_in_store>
|
416 |
+
</clickview_category_maxslider>
|
417 |
+
|
418 |
+
<clickview_category_minslider>
|
419 |
+
<label>Minimum amount slider</label>
|
420 |
+
<frontend_type>text</frontend_type>
|
421 |
+
<sort_order>1</sort_order>
|
422 |
+
<show_in_default>1</show_in_default>
|
423 |
+
<show_in_website>1</show_in_website>
|
424 |
+
<show_in_store>1</show_in_store>
|
425 |
+
</clickview_category_minslider>
|
426 |
+
|
427 |
+
<clickview_category_allowed>
|
428 |
+
<label>Select the categories allowed</label>
|
429 |
+
<frontend_type>multiselect</frontend_type>
|
430 |
+
<source_model>clickview/system_config_source_category</source_model>
|
431 |
+
<sort_order>1</sort_order>
|
432 |
+
<show_in_default>1</show_in_default>
|
433 |
+
<show_in_website>1</show_in_website>
|
434 |
+
<show_in_store>1</show_in_store>
|
435 |
+
</clickview_category_allowed>
|
436 |
+
|
437 |
+
<clickview_category_default>
|
438 |
+
<label>Select the default category</label>
|
439 |
+
<frontend_type>select</frontend_type>
|
440 |
+
<source_model>clickview/system_config_source_categoryallowed</source_model>
|
441 |
+
<sort_order>1</sort_order>
|
442 |
+
<show_in_default>1</show_in_default>
|
443 |
+
<show_in_website>1</show_in_website>
|
444 |
+
<show_in_store>1</show_in_store>
|
445 |
+
</clickview_category_default>
|
446 |
+
|
447 |
+
<clickview_click_number_rows translate="label">
|
448 |
+
<label>Number in the results</label>
|
449 |
+
<frontend_type>text</frontend_type>
|
450 |
+
<sort_order>1</sort_order>
|
451 |
+
<show_in_default>1</show_in_default>
|
452 |
+
<show_in_website>1</show_in_website>
|
453 |
+
<show_in_store>1</show_in_store>
|
454 |
+
<comment>Enter the number of products that will appear in the slider</comment>
|
455 |
+
</clickview_click_number_rows>
|
456 |
+
|
457 |
+
<clickview_img_size>
|
458 |
+
<label>Product image size</label>
|
459 |
+
<frontend_type>text</frontend_type>
|
460 |
+
<sort_order>1</sort_order>
|
461 |
+
<show_in_default>1</show_in_default>
|
462 |
+
<show_in_website>1</show_in_website>
|
463 |
+
<show_in_store>1</show_in_store>
|
464 |
+
<comment>Notify the image size of the product</comment>
|
465 |
+
</clickview_img_size>
|
466 |
+
|
467 |
+
<clickview_slide_mode>
|
468 |
+
<label>Select the default category</label>
|
469 |
+
<frontend_type>select</frontend_type>
|
470 |
+
<source_model>clickview/system_config_source_mode</source_model>
|
471 |
+
<sort_order>1</sort_order>
|
472 |
+
<show_in_default>1</show_in_default>
|
473 |
+
<show_in_website>1</show_in_website>
|
474 |
+
<show_in_store>1</show_in_store>
|
475 |
+
</clickview_slide_mode>
|
476 |
+
|
477 |
+
<clickview_click_enabled translate="label">
|
478 |
+
<label>Enabled</label>
|
479 |
+
<frontend_type>select</frontend_type>
|
480 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
481 |
+
<sort_order>0</sort_order>
|
482 |
+
<show_in_default>1</show_in_default>
|
483 |
+
<show_in_website>1</show_in_website>
|
484 |
+
<show_in_store>1</show_in_store>
|
485 |
+
<comment>Enabled/Disabled the function Click Recents</comment>
|
486 |
+
</clickview_click_enabled>
|
487 |
+
|
488 |
+
|
489 |
+
</fields>
|
490 |
+
|
491 |
+
</clickview_most_viewed_by_category>
|
492 |
+
|
493 |
+
<!--Best seller by categry-->
|
494 |
+
|
495 |
+
<clickview_best_seller_by_category>
|
496 |
+
<label>Best seller by category</label>
|
497 |
+
<frontend_type>text</frontend_type>
|
498 |
+
<sort_order>1</sort_order>
|
499 |
+
<show_in_default>1</show_in_default>
|
500 |
+
<show_in_website>1</show_in_website>
|
501 |
+
<show_in_store>1</show_in_store>
|
502 |
+
|
503 |
+
<fields>
|
504 |
+
|
505 |
+
<clickview_click_enabled translate="label">
|
506 |
+
<label>Enabled</label>
|
507 |
+
<frontend_type>select</frontend_type>
|
508 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
509 |
+
<sort_order>0</sort_order>
|
510 |
+
<show_in_default>1</show_in_default>
|
511 |
+
<show_in_website>1</show_in_website>
|
512 |
+
<show_in_store>1</show_in_store>
|
513 |
+
<comment>Enabled/Disabled the function Click Recents</comment>
|
514 |
+
</clickview_click_enabled>
|
515 |
+
|
516 |
+
<clickview_category_slidemargin>
|
517 |
+
<label>Margin of the slide</label>
|
518 |
+
<frontend_type>text</frontend_type>
|
519 |
+
<sort_order>1</sort_order>
|
520 |
+
<show_in_default>1</show_in_default>
|
521 |
+
<show_in_website>1</show_in_website>
|
522 |
+
<show_in_store>1</show_in_store>
|
523 |
+
</clickview_category_slidemargin>
|
524 |
+
|
525 |
+
|
526 |
+
<clickview_category_slidewidth>
|
527 |
+
<label>Maximum width of the slider</label>
|
528 |
+
<frontend_type>text</frontend_type>
|
529 |
+
<sort_order>1</sort_order>
|
530 |
+
<show_in_default>1</show_in_default>
|
531 |
+
<show_in_website>1</show_in_website>
|
532 |
+
<show_in_store>1</show_in_store>
|
533 |
+
</clickview_category_slidewidth>
|
534 |
+
|
535 |
+
|
536 |
+
<clickview_category_maxslider>
|
537 |
+
<label>Maximum amount slider</label>
|
538 |
+
<frontend_type>text</frontend_type>
|
539 |
+
<sort_order>1</sort_order>
|
540 |
+
<show_in_default>1</show_in_default>
|
541 |
+
<show_in_website>1</show_in_website>
|
542 |
+
<show_in_store>1</show_in_store>
|
543 |
+
</clickview_category_maxslider>
|
544 |
+
|
545 |
+
<clickview_category_minslider>
|
546 |
+
<label>Minimum amount slider</label>
|
547 |
+
<frontend_type>text</frontend_type>
|
548 |
+
<sort_order>1</sort_order>
|
549 |
+
<show_in_default>1</show_in_default>
|
550 |
+
<show_in_website>1</show_in_website>
|
551 |
+
<show_in_store>1</show_in_store>
|
552 |
+
</clickview_category_minslider>
|
553 |
+
|
554 |
+
<clickview_category_allowed>
|
555 |
+
<label>Select the categories allowed</label>
|
556 |
+
<frontend_type>multiselect</frontend_type>
|
557 |
+
<source_model>clickview/system_config_source_category</source_model>
|
558 |
+
<sort_order>1</sort_order>
|
559 |
+
<show_in_default>1</show_in_default>
|
560 |
+
<show_in_website>1</show_in_website>
|
561 |
+
<show_in_store>1</show_in_store>
|
562 |
+
</clickview_category_allowed>
|
563 |
+
|
564 |
+
<clickview_category_default>
|
565 |
+
<label>Select the default category</label>
|
566 |
+
<frontend_type>select</frontend_type>
|
567 |
+
<source_model>clickview/system_config_source_Categorybestsellerbycategory</source_model>
|
568 |
+
<sort_order>1</sort_order>
|
569 |
+
<show_in_default>1</show_in_default>
|
570 |
+
<show_in_website>1</show_in_website>
|
571 |
+
<show_in_store>1</show_in_store>
|
572 |
+
</clickview_category_default>
|
573 |
+
|
574 |
+
<clickview_click_number_rows translate="label">
|
575 |
+
<label>Number in the results</label>
|
576 |
+
<frontend_type>text</frontend_type>
|
577 |
+
<sort_order>1</sort_order>
|
578 |
+
<show_in_default>1</show_in_default>
|
579 |
+
<show_in_website>1</show_in_website>
|
580 |
+
<show_in_store>1</show_in_store>
|
581 |
+
<comment>Enter the number of products that will appear in the slider</comment>
|
582 |
+
</clickview_click_number_rows>
|
583 |
+
|
584 |
+
<clickview_img_size>
|
585 |
+
<label>Product image size</label>
|
586 |
+
<frontend_type>text</frontend_type>
|
587 |
+
<sort_order>1</sort_order>
|
588 |
+
<show_in_default>1</show_in_default>
|
589 |
+
<show_in_website>1</show_in_website>
|
590 |
+
<show_in_store>1</show_in_store>
|
591 |
+
<comment>Notify the image size of the product</comment>
|
592 |
+
</clickview_img_size>
|
593 |
+
|
594 |
+
<clickview_slide_mode>
|
595 |
+
<label>Select the default category</label>
|
596 |
+
<frontend_type>select</frontend_type>
|
597 |
+
<source_model>clickview/system_config_source_mode</source_model>
|
598 |
+
<sort_order>1</sort_order>
|
599 |
+
<show_in_default>1</show_in_default>
|
600 |
+
<show_in_website>1</show_in_website>
|
601 |
+
<show_in_store>1</show_in_store>
|
602 |
+
</clickview_slide_mode>
|
603 |
+
|
604 |
+
</fields>
|
605 |
+
|
606 |
+
</clickview_best_seller_by_category>
|
607 |
+
|
608 |
+
<!--News products by category-->
|
609 |
+
|
610 |
+
<clickview_news_products_by_category>
|
611 |
+
<label>News products by category</label>
|
612 |
+
<frontend_type>text</frontend_type>
|
613 |
+
<sort_order>1</sort_order>
|
614 |
+
<show_in_default>1</show_in_default>
|
615 |
+
<show_in_website>1</show_in_website>
|
616 |
+
<show_in_store>1</show_in_store>
|
617 |
+
|
618 |
+
<fields>
|
619 |
+
|
620 |
+
<clickview_click_enabled translate="label">
|
621 |
+
<label>Enabled</label>
|
622 |
+
<frontend_type>select</frontend_type>
|
623 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
624 |
+
<sort_order>0</sort_order>
|
625 |
+
<show_in_default>1</show_in_default>
|
626 |
+
<show_in_website>1</show_in_website>
|
627 |
+
<show_in_store>1</show_in_store>
|
628 |
+
<comment>Enabled/Disabled the function Click Recents</comment>
|
629 |
+
</clickview_click_enabled>
|
630 |
+
|
631 |
+
<clickview_category_slidemargin>
|
632 |
+
<label>Margin of the slide</label>
|
633 |
+
<frontend_type>text</frontend_type>
|
634 |
+
<sort_order>1</sort_order>
|
635 |
+
<show_in_default>1</show_in_default>
|
636 |
+
<show_in_website>1</show_in_website>
|
637 |
+
<show_in_store>1</show_in_store>
|
638 |
+
</clickview_category_slidemargin>
|
639 |
+
|
640 |
+
|
641 |
+
<clickview_category_slidewidth>
|
642 |
+
<label>Maximum width of the slider</label>
|
643 |
+
<frontend_type>text</frontend_type>
|
644 |
+
<sort_order>1</sort_order>
|
645 |
+
<show_in_default>1</show_in_default>
|
646 |
+
<show_in_website>1</show_in_website>
|
647 |
+
<show_in_store>1</show_in_store>
|
648 |
+
</clickview_category_slidewidth>
|
649 |
+
|
650 |
+
|
651 |
+
<clickview_category_maxslider>
|
652 |
+
<label>Maximum amount slider</label>
|
653 |
+
<frontend_type>text</frontend_type>
|
654 |
+
<sort_order>1</sort_order>
|
655 |
+
<show_in_default>1</show_in_default>
|
656 |
+
<show_in_website>1</show_in_website>
|
657 |
+
<show_in_store>1</show_in_store>
|
658 |
+
</clickview_category_maxslider>
|
659 |
+
|
660 |
+
<clickview_category_minslider>
|
661 |
+
<label>Minimum amount slider</label>
|
662 |
+
<frontend_type>text</frontend_type>
|
663 |
+
<sort_order>1</sort_order>
|
664 |
+
<show_in_default>1</show_in_default>
|
665 |
+
<show_in_website>1</show_in_website>
|
666 |
+
<show_in_store>1</show_in_store>
|
667 |
+
</clickview_category_minslider>
|
668 |
+
|
669 |
+
<clickview_category_allowed>
|
670 |
+
<label>Select the categories allowed</label>
|
671 |
+
<frontend_type>multiselect</frontend_type>
|
672 |
+
<source_model>clickview/system_config_source_category</source_model>
|
673 |
+
<sort_order>1</sort_order>
|
674 |
+
<show_in_default>1</show_in_default>
|
675 |
+
<show_in_website>1</show_in_website>
|
676 |
+
<show_in_store>1</show_in_store>
|
677 |
+
</clickview_category_allowed>
|
678 |
+
|
679 |
+
<clickview_category_default>
|
680 |
+
<label>Select the default category</label>
|
681 |
+
<frontend_type>select</frontend_type>
|
682 |
+
<source_model>clickview/system_config_source_Categorynewsproducts</source_model>
|
683 |
+
<sort_order>1</sort_order>
|
684 |
+
<show_in_default>1</show_in_default>
|
685 |
+
<show_in_website>1</show_in_website>
|
686 |
+
<show_in_store>1</show_in_store>
|
687 |
+
</clickview_category_default>
|
688 |
+
|
689 |
+
<clickview_click_number_rows translate="label">
|
690 |
+
<label>Number in the results</label>
|
691 |
+
<frontend_type>text</frontend_type>
|
692 |
+
<sort_order>1</sort_order>
|
693 |
+
<show_in_default>1</show_in_default>
|
694 |
+
<show_in_website>1</show_in_website>
|
695 |
+
<show_in_store>1</show_in_store>
|
696 |
+
<comment>Enter the number of products that will appear in the slider</comment>
|
697 |
+
</clickview_click_number_rows>
|
698 |
+
|
699 |
+
<clickview_img_size>
|
700 |
+
<label>Product image size</label>
|
701 |
+
<frontend_type>text</frontend_type>
|
702 |
+
<sort_order>1</sort_order>
|
703 |
+
<show_in_default>1</show_in_default>
|
704 |
+
<show_in_website>1</show_in_website>
|
705 |
+
<show_in_store>1</show_in_store>
|
706 |
+
<comment>Notify the image size of the product</comment>
|
707 |
+
</clickview_img_size>
|
708 |
+
|
709 |
+
<clickview_slide_mode>
|
710 |
+
<label>Select the default category</label>
|
711 |
+
<frontend_type>select</frontend_type>
|
712 |
+
<source_model>clickview/system_config_source_mode</source_model>
|
713 |
+
<sort_order>1</sort_order>
|
714 |
+
<show_in_default>1</show_in_default>
|
715 |
+
<show_in_website>1</show_in_website>
|
716 |
+
<show_in_store>1</show_in_store>
|
717 |
+
</clickview_slide_mode>
|
718 |
+
|
719 |
+
</fields>
|
720 |
+
|
721 |
+
</clickview_news_products_by_category>
|
722 |
+
|
723 |
+
<!--Products promotion by category-->
|
724 |
+
|
725 |
+
<clickview_products_promotion_by_category>
|
726 |
+
<label>Products promotion by category</label>
|
727 |
+
<frontend_type>text</frontend_type>
|
728 |
+
<sort_order>1</sort_order>
|
729 |
+
<show_in_default>1</show_in_default>
|
730 |
+
<show_in_website>1</show_in_website>
|
731 |
+
<show_in_store>1</show_in_store>
|
732 |
+
|
733 |
+
<fields>
|
734 |
+
|
735 |
+
<clickview_click_enabled translate="label">
|
736 |
+
<label>Enabled</label>
|
737 |
+
<frontend_type>select</frontend_type>
|
738 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
739 |
+
<sort_order>0</sort_order>
|
740 |
+
<show_in_default>1</show_in_default>
|
741 |
+
<show_in_website>1</show_in_website>
|
742 |
+
<show_in_store>1</show_in_store>
|
743 |
+
<comment>Enabled/Disabled the function Click Recents</comment>
|
744 |
+
</clickview_click_enabled>
|
745 |
+
|
746 |
+
<clickview_category_slidemargin>
|
747 |
+
<label>Margin of the slide</label>
|
748 |
+
<frontend_type>text</frontend_type>
|
749 |
+
<sort_order>1</sort_order>
|
750 |
+
<show_in_default>1</show_in_default>
|
751 |
+
<show_in_website>1</show_in_website>
|
752 |
+
<show_in_store>1</show_in_store>
|
753 |
+
</clickview_category_slidemargin>
|
754 |
+
|
755 |
+
|
756 |
+
<clickview_category_slidewidth>
|
757 |
+
<label>Maximum width of the slider</label>
|
758 |
+
<frontend_type>text</frontend_type>
|
759 |
+
<sort_order>1</sort_order>
|
760 |
+
<show_in_default>1</show_in_default>
|
761 |
+
<show_in_website>1</show_in_website>
|
762 |
+
<show_in_store>1</show_in_store>
|
763 |
+
</clickview_category_slidewidth>
|
764 |
+
|
765 |
+
|
766 |
+
<clickview_category_maxslider>
|
767 |
+
<label>Maximum amount slider</label>
|
768 |
+
<frontend_type>text</frontend_type>
|
769 |
+
<sort_order>1</sort_order>
|
770 |
+
<show_in_default>1</show_in_default>
|
771 |
+
<show_in_website>1</show_in_website>
|
772 |
+
<show_in_store>1</show_in_store>
|
773 |
+
</clickview_category_maxslider>
|
774 |
+
|
775 |
+
<clickview_category_minslider>
|
776 |
+
<label>Minimum amount slider</label>
|
777 |
+
<frontend_type>text</frontend_type>
|
778 |
+
<sort_order>1</sort_order>
|
779 |
+
<show_in_default>1</show_in_default>
|
780 |
+
<show_in_website>1</show_in_website>
|
781 |
+
<show_in_store>1</show_in_store>
|
782 |
+
</clickview_category_minslider>
|
783 |
+
|
784 |
+
<clickview_category_allowed>
|
785 |
+
<label>Select the categories allowed</label>
|
786 |
+
<frontend_type>multiselect</frontend_type>
|
787 |
+
<source_model>clickview/system_config_source_category</source_model>
|
788 |
+
<sort_order>1</sort_order>
|
789 |
+
<show_in_default>1</show_in_default>
|
790 |
+
<show_in_website>1</show_in_website>
|
791 |
+
<show_in_store>1</show_in_store>
|
792 |
+
</clickview_category_allowed>
|
793 |
+
|
794 |
+
<clickview_category_default>
|
795 |
+
<label>Select the default category</label>
|
796 |
+
<frontend_type>select</frontend_type>
|
797 |
+
<source_model>clickview/system_config_source_Categorypromotionproducts</source_model>
|
798 |
+
<sort_order>1</sort_order>
|
799 |
+
<show_in_default>1</show_in_default>
|
800 |
+
<show_in_website>1</show_in_website>
|
801 |
+
<show_in_store>1</show_in_store>
|
802 |
+
</clickview_category_default>
|
803 |
+
|
804 |
+
<clickview_click_number_rows translate="label">
|
805 |
+
<label>Number in the results</label>
|
806 |
+
<frontend_type>text</frontend_type>
|
807 |
+
<sort_order>1</sort_order>
|
808 |
+
<show_in_default>1</show_in_default>
|
809 |
+
<show_in_website>1</show_in_website>
|
810 |
+
<show_in_store>1</show_in_store>
|
811 |
+
<comment>Enter the number of products that will appear in the slider</comment>
|
812 |
+
</clickview_click_number_rows>
|
813 |
+
|
814 |
+
<clickview_img_size>
|
815 |
+
<label>Product image size</label>
|
816 |
+
<frontend_type>text</frontend_type>
|
817 |
+
<sort_order>1</sort_order>
|
818 |
+
<show_in_default>1</show_in_default>
|
819 |
+
<show_in_website>1</show_in_website>
|
820 |
+
<show_in_store>1</show_in_store>
|
821 |
+
<comment>Notify the image size of the product</comment>
|
822 |
+
</clickview_img_size>
|
823 |
+
|
824 |
+
<clickview_slide_mode>
|
825 |
+
<label>Select the default category</label>
|
826 |
+
<frontend_type>select</frontend_type>
|
827 |
+
<source_model>clickview/system_config_source_mode</source_model>
|
828 |
+
<sort_order>1</sort_order>
|
829 |
+
<show_in_default>1</show_in_default>
|
830 |
+
<show_in_website>1</show_in_website>
|
831 |
+
<show_in_store>1</show_in_store>
|
832 |
+
</clickview_slide_mode>
|
833 |
+
|
834 |
+
</fields>
|
835 |
+
|
836 |
+
</clickview_products_promotion_by_category>
|
837 |
+
</groups>
|
838 |
+
|
839 |
+
</clickview_by_category>
|
840 |
+
</sections>
|
841 |
+
|
842 |
+
</config>
|
app/code/community/Jefferson/Clickview/sql/jefferson_clickview_setup/install-0.1.0.php
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magento.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Jefferson
|
16 |
+
* @package Jefferson_Clickview
|
17 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
18 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
19 |
+
*
|
20 |
+
*/
|
21 |
+
|
22 |
+
|
23 |
+
$installer = Mage::getResourceModel('catalog/setup', 'core_setup');
|
24 |
+
|
25 |
+
$installer->startSetup();
|
26 |
+
$installer->endSetup();
|
27 |
+
|
28 |
+
?>
|
app/design/frontend/base/default/layout/jefferson/jefferson_clickview.xml
ADDED
@@ -0,0 +1,120 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
|
3 |
+
<!--
|
4 |
+
/**
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/afl-3.0.php
|
12 |
+
* If you did not receive a copy of the license and are unable to
|
13 |
+
* obtain it through the world-wide-web, please send an email
|
14 |
+
* to license@magento.com so we can send you a copy immediately.
|
15 |
+
*
|
16 |
+
* @category design
|
17 |
+
* @package base_default
|
18 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*
|
21 |
+
*/
|
22 |
+
-->
|
23 |
+
|
24 |
+
<layout version="0.1.0">
|
25 |
+
|
26 |
+
|
27 |
+
<default>
|
28 |
+
|
29 |
+
<reference name="head">
|
30 |
+
|
31 |
+
<action method="addItem"><type>skin_css</type><name>jefferson/Clickview/css/bxslider.css</name></action>
|
32 |
+
|
33 |
+
<action method="addItem"><type>skin_css</type><name>jefferson/Clickview/css/style.css</name></action>
|
34 |
+
|
35 |
+
<action method="addLinkRel"><rel>stylesheet</rel><href>//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css</href></action>
|
36 |
+
|
37 |
+
<action method="addItem"><type>skin_js</type><name>jefferson/Clickview/js/jquery.js</name></action>
|
38 |
+
|
39 |
+
<action method="addItem"><type>skin_js</type><name>jefferson/Clickview/js/bxslider.js</name></action>
|
40 |
+
|
41 |
+
<action method="addItem"><type>skin_js</type><name>jefferson/Clickview/js/script.js</name></action>
|
42 |
+
|
43 |
+
<block type="core/text" name="bootstrap.cdn">
|
44 |
+
<action method="setText">
|
45 |
+
<text><![CDATA[<script type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>]]></text>
|
46 |
+
</action>
|
47 |
+
|
48 |
+
</block>
|
49 |
+
|
50 |
+
</reference>
|
51 |
+
|
52 |
+
|
53 |
+
</default>
|
54 |
+
|
55 |
+
<cms_index_index>
|
56 |
+
<reference name="content">
|
57 |
+
<remove name="home.reports.product.viewed" />
|
58 |
+
<remove name="home.reports.product.compared" />
|
59 |
+
<remove name="home.catalog.product.new" />
|
60 |
+
|
61 |
+
<!--Jefferson_Clickview_Block_Clickviewblock-->
|
62 |
+
<block type="clickview/clickviewblock" name="clickview" before="">
|
63 |
+
<action method="setTemplate" ifconfig="clickview_options/clickview_general/clickview_click_enabled">
|
64 |
+
<template>jefferson/clickview/clickview_template.phtml</template>
|
65 |
+
</action>
|
66 |
+
</block>
|
67 |
+
|
68 |
+
<!--Jefferson_Clickview_Block_Clickviewrecents-->
|
69 |
+
<block type="clickview/Clickviewrecents" name="product.viewed.recents" alias="product_viewed_recents" after="product_new">
|
70 |
+
<action method="addPriceBlockType">
|
71 |
+
<type>bundle</type>
|
72 |
+
<block>bundle/catalog_product_price</block>
|
73 |
+
<template>bundle/catalog/product/price.phtml</template>
|
74 |
+
</action>
|
75 |
+
|
76 |
+
<action method="setTemplate" ifconfig="clickview_click_recents/clickview_click_recents_general/clickview_click_enabled">
|
77 |
+
<template>jefferson/clickview/recents.phtml</template>
|
78 |
+
</action>
|
79 |
+
</block>
|
80 |
+
|
81 |
+
<!--Produtos mais vendidos-->
|
82 |
+
<block type="clickview/clickviewbestsellersblock" name="clickview.bestseller">
|
83 |
+
<action method="setTemplate" ifconfig="clickview_best_seller/clickview_best_seller_general/clickview_click_enabled">
|
84 |
+
<template>jefferson/clickview/bestseller.phtml</template>
|
85 |
+
</action>
|
86 |
+
</block>
|
87 |
+
|
88 |
+
<!--Produtos mais visualizados-->
|
89 |
+
<block type="clickview/clickviewmostviewedblock" name="clickview.mostviewed">
|
90 |
+
<action method="setTemplate" ifconfig="clickview_most_views/clickview_most_views_general/clickview_click_enabled">
|
91 |
+
<template>jefferson/clickview/mostviewed.phtml</template>
|
92 |
+
</action>
|
93 |
+
</block>
|
94 |
+
|
95 |
+
<!--Produtos filtrados por categorias-->
|
96 |
+
<block type="core/template" name="union" template="jefferson/clickview/union.phtml" />
|
97 |
+
|
98 |
+
|
99 |
+
<!--Baixaram de preço-->
|
100 |
+
<block type = "clickview/clickviewnewsproductsblock" name = "productsPromotion">
|
101 |
+
<action method="setTemplate" ifconfig="clickview_product_discount/clickview_products_discount_general/clickview_click_enabled">
|
102 |
+
<template>jefferson/clickview/products_discount.phtml</template>
|
103 |
+
</action>
|
104 |
+
</block>
|
105 |
+
|
106 |
+
<!--Novos produtos-->
|
107 |
+
<block type="catalog/product_new" name="productNew">
|
108 |
+
<action method="setTemplate" ifconfig="clickview_product_release/clickview_product_release_general/clickview_click_enabled">
|
109 |
+
<template>jefferson/clickview/newsproducts.phtml</template>
|
110 |
+
</action>
|
111 |
+
</block>
|
112 |
+
|
113 |
+
|
114 |
+
|
115 |
+
</reference>
|
116 |
+
</cms_index_index>
|
117 |
+
|
118 |
+
|
119 |
+
|
120 |
+
</layout>
|
app/design/frontend/base/default/template/jefferson/clickview/bestseller.phtml
ADDED
@@ -0,0 +1,96 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @category design
|
4 |
+
* @package base_default
|
5 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
6 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
?>
|
10 |
+
<?php
|
11 |
+
/**
|
12 |
+
*@see Jefferson_Clickview_Block_Clickviewbestsellersblock
|
13 |
+
*
|
14 |
+
*/
|
15 |
+
?>
|
16 |
+
<?php
|
17 |
+
|
18 |
+
$num = $this->getClickCountRows();
|
19 |
+
|
20 |
+
$getImgSize = $this->getClickImgSize();
|
21 |
+
|
22 |
+
$_products = $this->getBestsellerProducts($num);
|
23 |
+
|
24 |
+
?>
|
25 |
+
|
26 |
+
|
27 |
+
<div class="container clickview">
|
28 |
+
<div class="row">
|
29 |
+
<div class="col-md-12">
|
30 |
+
<h2 class="subtitle"><?php echo $this->__('The most sold...') ?></h2>
|
31 |
+
</div>
|
32 |
+
<div class="col-md-12">
|
33 |
+
<ul class="bxslider_clickview_best_selling">
|
34 |
+
<?php foreach($_products as $item){ ?>
|
35 |
+
|
36 |
+
<li>
|
37 |
+
<figure>
|
38 |
+
|
39 |
+
<a href="<?php echo $item->getProductUrl() ?>"
|
40 |
+
title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>" class="product-image">
|
41 |
+
<img src="<?php echo $this->helper('catalog/image')->init($item, 'small_image')->keepFrame(true)->resize($getImgSize, $getImgSize); ?>" />
|
42 |
+
</a>
|
43 |
+
|
44 |
+
<figcaption>
|
45 |
+
|
46 |
+
<a href="<?php echo $item->getProductUrl() ?>"
|
47 |
+
title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>"
|
48 |
+
class="product-image">
|
49 |
+
<?php echo $item->getName(); ?>
|
50 |
+
</a>
|
51 |
+
|
52 |
+
<?php echo $this->getPriceHtml($item, true) ?>
|
53 |
+
|
54 |
+
<div class="product-secondary">
|
55 |
+
|
56 |
+
<?php if(!$item->canConfigure() && $item->isSaleable()): ?>
|
57 |
+
|
58 |
+
<p class="action">
|
59 |
+
<button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart"
|
60 |
+
onclick="setLocation('<?php echo $this->getAddToCartUrl($item) ?>')">
|
61 |
+
<span>
|
62 |
+
<span>
|
63 |
+
<?php echo $this->__('Add to Cart') ?>
|
64 |
+
</span>
|
65 |
+
</span>
|
66 |
+
</button>
|
67 |
+
</p>
|
68 |
+
|
69 |
+
<?php elseif($item->getStockItem() && $item->getStockItem()->getIsInStock()): ?>
|
70 |
+
|
71 |
+
<p class="action">
|
72 |
+
<a title="<?php echo $this->__('View Details') ?>" class="button"
|
73 |
+
href="<?php echo $item->getProductUrl() ?>"><?php echo $this->__('View Details') ?>
|
74 |
+
</a>
|
75 |
+
</p>
|
76 |
+
|
77 |
+
<?php else: ?>
|
78 |
+
|
79 |
+
<p class="action availability out-of-stock">
|
80 |
+
<span><?php echo $this->__('Out of stock') ?></span>
|
81 |
+
</p>
|
82 |
+
|
83 |
+
<?php endif; ?>
|
84 |
+
|
85 |
+
</div>
|
86 |
+
|
87 |
+
</figcaption>
|
88 |
+
|
89 |
+
</figure>
|
90 |
+
</li>
|
91 |
+
|
92 |
+
<?php } ?>
|
93 |
+
</ul>
|
94 |
+
</div>
|
95 |
+
</div>
|
96 |
+
</div>
|
app/design/frontend/base/default/template/jefferson/clickview/bestsellerbycategory.phtml
ADDED
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/javascript">
|
2 |
+
|
3 |
+
$clickview(document).ready(function(){
|
4 |
+
|
5 |
+
var slider1 = $clickview('.bxslider_clickview_best_seller_by_category').bxSlider({
|
6 |
+
|
7 |
+
mode: '<?php echo $this->getBestSellerByCatMode() ?>',
|
8 |
+
minSlides: <?php echo $this->getMinSlides() ?>,
|
9 |
+
maxSlides: <?php echo $this->getMaxSlides() ?>,
|
10 |
+
slideWidth: <?php echo $this->getSlideWidth() ?>,
|
11 |
+
slideMargin: <?php echo $this->getSlideMargin() ?>
|
12 |
+
|
13 |
+
});
|
14 |
+
|
15 |
+
var formData1 = {
|
16 |
+
cat : '<?php echo $this->getCatDefault() ?>',
|
17 |
+
};
|
18 |
+
|
19 |
+
$clickview.ajax({
|
20 |
+
|
21 |
+
url: "<?php echo $this->getUrlControllerBestSellerByCategory() ?>",
|
22 |
+
type: "POST",
|
23 |
+
dataType: 'json',
|
24 |
+
cache : false,
|
25 |
+
data: formData1,
|
26 |
+
beforeSend: function(){
|
27 |
+
$clickview('.bxslider_clickview_best_seller_by_category').append('<li><img src="<?php echo Mage::getBaseUrl() ?>/skin/frontend/base/default/jefferson/Clickview/image/loading.gif" /></li>');
|
28 |
+
},
|
29 |
+
success : function(data2){
|
30 |
+
$clickview('.bxslider_clickview_best_seller_by_category').empty();
|
31 |
+
$clickview('.bxslider_clickview_best_seller_by_category').append(data2.content);
|
32 |
+
slider1.reloadSlider();
|
33 |
+
},
|
34 |
+
|
35 |
+
});
|
36 |
+
|
37 |
+
$clickview('.category_clickview_best_seller').change(function(){
|
38 |
+
|
39 |
+
var formData = {
|
40 |
+
cat : $clickview('.category_clickview_best_seller').val(),
|
41 |
+
};
|
42 |
+
|
43 |
+
$clickview.ajax({
|
44 |
+
|
45 |
+
url: "<?php echo $this->getUrlControllerBestSellerByCategory() ?>",
|
46 |
+
type: "POST",
|
47 |
+
dataType: 'json',
|
48 |
+
cache : false,
|
49 |
+
data: formData,
|
50 |
+
beforeSend: function(){
|
51 |
+
$clickview('.bxslider_clickview_best_seller_by_category').append('<li><img src="<?php echo Mage::getBaseUrl() ?>/skin/frontend/base/default/jefferson/Clickview/image/loading.gif" /></li>')
|
52 |
+
},
|
53 |
+
success : function(data2){
|
54 |
+
$clickview('.bxslider_clickview_best_seller_by_category').empty();
|
55 |
+
$clickview('.bxslider_clickview_best_seller_by_category').append(data2.content);
|
56 |
+
slider1.reloadSlider();
|
57 |
+
},
|
58 |
+
|
59 |
+
});
|
60 |
+
|
61 |
+
});
|
62 |
+
});
|
63 |
+
|
64 |
+
</script>
|
65 |
+
|
66 |
+
|
67 |
+
<div class="col-md-3">
|
68 |
+
<div class="info">
|
69 |
+
<h2 class="subtitle"><?php echo $this->__('Top sellers') ?></h2>
|
70 |
+
<select name="category_clickview_best_seller" class="category_clickview_best_seller form-control">
|
71 |
+
<?php echo $this->getCategoryBestSeller(); ?>
|
72 |
+
</select>
|
73 |
+
<ul class="bxslider_clickview_best_seller_by_category"></ul>
|
74 |
+
</div>
|
75 |
+
</div>
|
app/design/frontend/base/default/template/jefferson/clickview/clickview_template.phtml
ADDED
@@ -0,0 +1,201 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @category design
|
4 |
+
* @package base_default
|
5 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
6 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
?>
|
10 |
+
<?php
|
11 |
+
/**
|
12 |
+
* Related products loop that was clicked
|
13 |
+
* @see Jefferson_Clickview_Block_Clickviewblock
|
14 |
+
*
|
15 |
+
*/
|
16 |
+
?>
|
17 |
+
<?php
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Limits the query results
|
21 |
+
*/
|
22 |
+
$limit = $this->getClickCountRows();
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Product image size
|
26 |
+
*/
|
27 |
+
$getImgSize = $this->getClickImgSize();
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Get the id of the item that was clicked through the cookie
|
31 |
+
*/
|
32 |
+
$cookie = $this->getCookie();
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Get the categrias of the product that was clicked
|
36 |
+
*/
|
37 |
+
$_categoryProducts = $this->getCategoryProducts($cookie);
|
38 |
+
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Get the products product category that was clicked
|
42 |
+
*/
|
43 |
+
$_products = $this->getDataProducts($cookie,$_categoryProducts,$limit);
|
44 |
+
|
45 |
+
|
46 |
+
|
47 |
+
?>
|
48 |
+
<?php if(!empty($cookie)): ?>
|
49 |
+
<div class="container clickview">
|
50 |
+
|
51 |
+
<div class="row">
|
52 |
+
<div class="col-md-3">
|
53 |
+
<h2 class="subtitle">
|
54 |
+
<?php echo $this->__('You clicked...') ?>
|
55 |
+
</h2>
|
56 |
+
</div>
|
57 |
+
|
58 |
+
<div class="col-md-9">
|
59 |
+
<h2 class="subtitle">
|
60 |
+
<?php echo $this->__('and we recommend for you...'); ?>
|
61 |
+
</h2>
|
62 |
+
</div>
|
63 |
+
|
64 |
+
</div>
|
65 |
+
<div class="row">
|
66 |
+
|
67 |
+
<div class="col-md-3">
|
68 |
+
<?php
|
69 |
+
$item_current = $this->getDataProductCurrent($cookie);
|
70 |
+
?>
|
71 |
+
<figure>
|
72 |
+
|
73 |
+
<a href="<?php echo $item_current->getProductUrl() ?>"
|
74 |
+
title="<?php echo $this->stripTags($this->getImageLabel($item_current, 'small_image'), null, true) ?>" class="product-image">
|
75 |
+
<img src="<?php echo $this->helper('catalog/image')->init($item_current, 'small_image')->keepFrame(false)->resize($getImgSize,$getImgSize); ?>" />
|
76 |
+
</a>
|
77 |
+
|
78 |
+
<figcaption>
|
79 |
+
|
80 |
+
<a href="<?php echo $item_current->getProductUrl() ?>"
|
81 |
+
title="<?php echo $this->stripTags($this->getImageLabel($item_current, 'small_image'), null, true) ?>"
|
82 |
+
class="product-image">
|
83 |
+
<?php echo $item_current->getName()."<br />"; ?>
|
84 |
+
</a>
|
85 |
+
|
86 |
+
<?php echo $this->getPriceHtml($item_current, true) ?>
|
87 |
+
|
88 |
+
<div class="product-secondary">
|
89 |
+
|
90 |
+
<?php if(!$item_current->canConfigure() && $item_current->isSaleable()): ?>
|
91 |
+
|
92 |
+
<p class="action">
|
93 |
+
<button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart"
|
94 |
+
onclick="setLocation('<?php echo $this->getAddToCartUrl($item_current) ?>')">
|
95 |
+
<span>
|
96 |
+
<span>
|
97 |
+
<?php echo $this->__('Add to Cart') ?>
|
98 |
+
</span>
|
99 |
+
</span>
|
100 |
+
</button>
|
101 |
+
</p>
|
102 |
+
|
103 |
+
<?php elseif($item_current->getStockItem() && $item_current->getStockItem()->getIsInStock() && $item_current->isSaleable()): ?>
|
104 |
+
|
105 |
+
<p class="action">
|
106 |
+
<a title="<?php echo $this->__('View Details') ?>" class="button"
|
107 |
+
href="<?php echo $item_current->getProductUrl() ?>"><?php echo $this->__('View Details') ?>
|
108 |
+
</a>
|
109 |
+
</p>
|
110 |
+
|
111 |
+
<?php else: ?>
|
112 |
+
|
113 |
+
<p class="action availability out-of-stock">
|
114 |
+
<span><?php echo $this->__('Out of stock') ?></span>
|
115 |
+
</p>
|
116 |
+
|
117 |
+
<?php endif; ?>
|
118 |
+
|
119 |
+
</div>
|
120 |
+
|
121 |
+
</figcaption>
|
122 |
+
|
123 |
+
</figure>
|
124 |
+
</div>
|
125 |
+
|
126 |
+
<div class="col-md-9">
|
127 |
+
<ul class="bxslider_clickview">
|
128 |
+
|
129 |
+
<?php foreach($_products as $item){ ?>
|
130 |
+
|
131 |
+
<li>
|
132 |
+
<figure>
|
133 |
+
|
134 |
+
<a href="<?php echo $item->getProductUrl() ?>"
|
135 |
+
title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>" class="product-image">
|
136 |
+
<img src="<?php echo $this->helper('catalog/image')->init($item, 'small_image')->keepFrame(true)->resize($getImgSize); ?>" />
|
137 |
+
</a>
|
138 |
+
|
139 |
+
<figcaption>
|
140 |
+
|
141 |
+
<a href="<?php echo $item->getProductUrl() ?>"
|
142 |
+
title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>"
|
143 |
+
class="product-image">
|
144 |
+
<?php echo $item->getName()."<br />"; ?>
|
145 |
+
</a>
|
146 |
+
|
147 |
+
<?php echo $this->getPriceHtml($item, true) ?>
|
148 |
+
|
149 |
+
<div class="product-secondary">
|
150 |
+
|
151 |
+
<?php if(!$item->canConfigure() && $item->isSaleable()): ?>
|
152 |
+
|
153 |
+
<p class="action">
|
154 |
+
<button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart"
|
155 |
+
onclick="setLocation('<?php echo $this->getAddToCartUrl($item) ?>')">
|
156 |
+
<span>
|
157 |
+
<span>
|
158 |
+
<?php echo $this->__('Add to Cart') ?>
|
159 |
+
</span>
|
160 |
+
</span>
|
161 |
+
</button>
|
162 |
+
</p>
|
163 |
+
|
164 |
+
<?php elseif($item->getStockItem() && $item->getStockItem()->getIsInStock()): ?>
|
165 |
+
|
166 |
+
<p class="action">
|
167 |
+
<a title="<?php echo $this->__('View Details') ?>" class="button"
|
168 |
+
href="<?php echo $item->getProductUrl() ?>"><?php echo $this->__('View Details') ?>
|
169 |
+
</a>
|
170 |
+
</p>
|
171 |
+
|
172 |
+
<?php else: ?>
|
173 |
+
|
174 |
+
<p class="action availability out-of-stock">
|
175 |
+
<span><?php echo $this->__('Out of stock') ?></span>
|
176 |
+
</p>
|
177 |
+
|
178 |
+
<?php endif; ?>
|
179 |
+
|
180 |
+
</div>
|
181 |
+
|
182 |
+
</figcaption>
|
183 |
+
|
184 |
+
</figure>
|
185 |
+
</li>
|
186 |
+
|
187 |
+
<?php } ?>
|
188 |
+
</ul>
|
189 |
+
</div>
|
190 |
+
|
191 |
+
</div>
|
192 |
+
</div>
|
193 |
+
<?php endif; ?>
|
194 |
+
|
195 |
+
|
196 |
+
|
197 |
+
|
198 |
+
|
199 |
+
|
200 |
+
|
201 |
+
|
app/design/frontend/base/default/template/jefferson/clickview/mostviewed.phtml
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @category design
|
4 |
+
* @package base_default
|
5 |
+
* @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
|
6 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
?>
|
10 |
+
<?php
|
11 |
+
/**
|
12 |
+
*@see Jefferson_Clickview_Block_Clickviewmostviewedblock
|
13 |
+
*
|
14 |
+
*/
|
15 |
+
?>
|
16 |
+
<?php
|
17 |
+
|
18 |
+
$num = $this->getClickCountRows();
|
19 |
+
$getImgSize = $this->getClickImgSize();
|
20 |
+
$_products = $this->getMostViewed($num);
|
21 |
+
?>
|
22 |
+
|
23 |
+
<div class="container clickview">
|
24 |
+
<div class="row">
|
25 |
+
<div class="col-md-12">
|
26 |
+
<h2 class="subtitle"><?php echo $this->__('Most viewed...') ?></h2>
|
27 |
+
</div>
|
28 |
+
<div class="col-md-12">
|
29 |
+
<ul class="bxslider_clickview_best_selling">
|
30 |
+
<?php foreach($_products as $item){ ?>
|
31 |
+
|
32 |
+
<li>
|
33 |
+
<figure>
|
34 |
+
|
35 |
+
<a href="<?php echo $item->getProductUrl() ?>"
|
36 |
+
title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>" class="product-image">
|
37 |
+
<img src="<?php echo $this->helper('catalog/image')->init($item, 'small_image')->keepFrame(true)->resize($getImgSize,$getImgSize); ?>" />
|
38 |
+
</a>
|
39 |
+
|
40 |
+
<figcaption>
|
41 |
+
|
42 |
+
<a href="<?php echo $item->getProductUrl() ?>"
|
43 |
+
title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>"
|
44 |
+
class="product-image">
|
45 |
+
<?php echo $item->getName(); ?>
|
46 |
+
</a>
|
47 |
+
|
48 |
+
<?php echo $this->getPriceHtml($item, true) ?>
|
49 |
+
|
50 |
+
<div class="product-secondary">
|
51 |
+
|
52 |
+
<?php if(!$item->canConfigure() && $item->isSaleable()): ?>
|
53 |
+
|
54 |
+
<p class="action">
|
55 |
+
<button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart"
|
56 |
+
onclick="setLocation('<?php echo $this->getAddToCartUrl($item) ?>')">
|
57 |
+
<span>
|
58 |
+
<span>
|
59 |
+
<?php echo $this->__('Add to Cart') ?>
|
60 |
+
</span>
|
61 |
+
</span>
|
62 |
+
</button>
|
63 |
+
</p>
|
64 |
+
|
65 |
+
<?php elseif($item->getStockItem() && $item->getStockItem()->getIsInStock()): ?>
|
66 |
+
|
67 |
+
<p class="action">
|
68 |
+
<a title="<?php echo $this->__('View Details') ?>" class="button"
|
69 |
+
href="<?php echo $item->getProductUrl() ?>"><?php echo $this->__('View Details') ?>
|
70 |
+
</a>
|
71 |
+
</p>
|
72 |
+
|
73 |
+
<?php else: ?>
|
74 |
+
|
75 |
+
<p class="action availability out-of-stock">
|
76 |
+
<span><?php echo $this->__('Out of stock') ?></span>
|
77 |
+
</p>
|
78 |
+
|
79 |
+
<?php endif; ?>
|
80 |
+
|
81 |
+
</div>
|
82 |
+
|
83 |
+
</figcaption>
|
84 |
+
|
85 |
+
</figure>
|
86 |
+
</li>
|
87 |
+
|
88 |
+
<?php } ?>
|
89 |
+
</ul>
|
90 |
+
</div>
|
91 |
+
</div>
|
92 |
+
</div>
|
app/design/frontend/base/default/template/jefferson/clickview/mostviewedbycategory.phtml
ADDED
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/javascript">
|
2 |
+
|
3 |
+
$clickview(document).ready(function(){
|
4 |
+
|
5 |
+
var slider = $clickview('.bxslider_clickview_most_viewed_by_category').bxSlider({
|
6 |
+
|
7 |
+
mode: '<?php echo $this->getMostViewedByCatMode() ?>',
|
8 |
+
minSlides: <?php echo $this->getMinSlides() ?>,
|
9 |
+
maxSlides: <?php echo $this->getMaxSlides() ?>,
|
10 |
+
slideWidth: <?php echo $this->getSlideWidth() ?>,
|
11 |
+
slideMargin: <?php echo $this->getSlideMargin() ?>
|
12 |
+
|
13 |
+
});
|
14 |
+
|
15 |
+
var formData1 = {
|
16 |
+
cat : <?php echo $this->getCatDefault(); ?>,
|
17 |
+
};
|
18 |
+
|
19 |
+
$clickview.ajax({
|
20 |
+
|
21 |
+
url: "<?php echo $this->getUrlControllerMostViewedByCategory() ?>",
|
22 |
+
type: "POST",
|
23 |
+
dataType: 'json',
|
24 |
+
cache : false,
|
25 |
+
data: formData1,
|
26 |
+
beforeSend: function(){
|
27 |
+
$clickview('.bxslider_clickview_most_viewed_by_category').append('<li><img src="<?php echo Mage::getBaseUrl() ?>/skin/frontend/base/default/jefferson/Clickview/image/loading.gif" /></li>');
|
28 |
+
},
|
29 |
+
success : function(data2){
|
30 |
+
$clickview('.bxslider_clickview_most_viewed_by_category').empty();
|
31 |
+
$clickview('.bxslider_clickview_most_viewed_by_category').append(data2.content);
|
32 |
+
slider.reloadSlider();
|
33 |
+
},
|
34 |
+
|
35 |
+
});
|
36 |
+
|
37 |
+
$clickview('.category_clickview').change(function(){
|
38 |
+
|
39 |
+
var formData = {
|
40 |
+
cat : $clickview('.category_clickview').val(),
|
41 |
+
};
|
42 |
+
|
43 |
+
$clickview.ajax({
|
44 |
+
|
45 |
+
url: "<?php echo $this->getUrlControllerMostViewedByCategory() ?>",
|
46 |
+
type: "POST",
|
47 |
+
dataType: 'json',
|
48 |
+
cache : false,
|
49 |
+
data: formData,
|
50 |
+
beforeSend: function(){
|
51 |
+
$clickview('.bxslider_clickview_most_viewed_by_category').append('<li><img src="<?php echo Mage::getBaseUrl() ?>/skin/frontend/base/default/jefferson/Clickview/image/loading.gif" /></li>');
|
52 |
+
},
|
53 |
+
success : function(data2){
|
54 |
+
$clickview('.bxslider_clickview_most_viewed_by_category').empty();
|
55 |
+
$clickview('.bxslider_clickview_most_viewed_by_category').append(data2.content);
|
56 |
+
slider.reloadSlider();
|
57 |
+
},
|
58 |
+
|
59 |
+
});
|
60 |
+
|
61 |
+
|
62 |
+
|
63 |
+
});
|
64 |
+
});
|
65 |
+
|
66 |
+
</script>
|
67 |
+
|
68 |
+
<div class="col-md-3">
|
69 |
+
<div class="info">
|
70 |
+
<h2 class="subtitle"><?php echo $this->__('Most viewed') ?></h2>
|
71 |
+
<select name="category_clickview" class="category_clickview form-control">
|
72 |
+
<?php echo $this->getCategoryMostViewed(); ?>
|
73 |
+
</select>
|
74 |
+
<ul class="bxslider_clickview_most_viewed_by_category "></ul>
|
75 |
+
</div>
|
76 |
+
</div>
|
app/design/frontend/base/default/template/jefferson/clickview/newsproducts.phtml
ADDED
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @category design
|
4 |
+
* @package base_default
|
5 |
+
* @copyright Copyright (c) 2006-2015 X.commerce, Inc. (http://www.magento.com)
|
6 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
7 |
+
*/
|
8 |
+
?>
|
9 |
+
<?php
|
10 |
+
$getImgSize = Mage::getStoreConfig('clickview_product_release/clickview_product_release_general/clickview_img_size');
|
11 |
+
?>
|
12 |
+
<?php if (($_products = $this->getProductCollection()) && $_products->getSize()): ?>
|
13 |
+
|
14 |
+
<div class="container clickview">
|
15 |
+
<div class="row">
|
16 |
+
<div class="col-md-12">
|
17 |
+
<h2 class="subtitle"><?php echo $this->__('Releases') ?></h2>
|
18 |
+
</div>
|
19 |
+
<div class="col-md-12">
|
20 |
+
<ul class="bxslider_clickview_best_selling">
|
21 |
+
<?php foreach($_products as $item){ ?>
|
22 |
+
|
23 |
+
<li>
|
24 |
+
<figure>
|
25 |
+
|
26 |
+
<a href="<?php echo $item->getProductUrl() ?>"
|
27 |
+
title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>" class="product-image">
|
28 |
+
<img src="<?php echo $this->helper('catalog/image')->init($item, 'small_image')->keepFrame(true)->resize($getImgSize,$getImgSize); ?>" />
|
29 |
+
</a>
|
30 |
+
|
31 |
+
<span class="perc"> <?php echo $this->__('News') ?></span>;
|
32 |
+
|
33 |
+
<figcaption>
|
34 |
+
|
35 |
+
<a href="<?php echo $item->getProductUrl() ?>"
|
36 |
+
title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>"
|
37 |
+
class="product-image">
|
38 |
+
<?php echo $item->getName(); ?>
|
39 |
+
</a>
|
40 |
+
|
41 |
+
<?php echo $this->getPriceHtml($item, true) ?>
|
42 |
+
|
43 |
+
<div class="product-secondary">
|
44 |
+
|
45 |
+
<?php if(!$item->canConfigure() && $item->isSaleable()): ?>
|
46 |
+
|
47 |
+
<p class="action">
|
48 |
+
<button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart"
|
49 |
+
onclick="setLocation('<?php echo $this->getAddToCartUrl($item) ?>')">
|
50 |
+
<span>
|
51 |
+
<span>
|
52 |
+
<?php echo $this->__('Add to Cart') ?>
|
53 |
+
</span>
|
54 |
+
</span>
|
55 |
+
</button>
|
56 |
+
</p>
|
57 |
+
|
58 |
+
<?php elseif($item->getStockItem() && $item->getStockItem()->getIsInStock()): ?>
|
59 |
+
|
60 |
+
<p class="action">
|
61 |
+
<a title="<?php echo $this->__('View Details') ?>" class="button"
|
62 |
+
href="<?php echo $item->getProductUrl() ?>"><?php echo $this->__('View Details') ?>
|
63 |
+
</a>
|
64 |
+
</p>
|
65 |
+
|
66 |
+
<?php else: ?>
|
67 |
+
|
68 |
+
<p class="action availability out-of-stock">
|
69 |
+
<span><?php echo $this->__('Out of stock') ?></span>
|
70 |
+
</p>
|
71 |
+
|
72 |
+
<?php endif; ?>
|
73 |
+
|
74 |
+
</div>
|
75 |
+
|
76 |
+
</figcaption>
|
77 |
+
|
78 |
+
</figure>
|
79 |
+
</li>
|
80 |
+
|
81 |
+
<?php } ?>
|
82 |
+
</ul>
|
83 |
+
</div>
|
84 |
+
</div>
|
85 |
+
</div>
|
86 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/jefferson/clickview/products_all_promotion.phtml
ADDED
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
<script type="text/javascript">
|
3 |
+
|
4 |
+
$clickview(document).ready(function(){
|
5 |
+
|
6 |
+
var sliderPromotion = $clickview('.bxslider_clickview_products_promotion').bxSlider({
|
7 |
+
|
8 |
+
mode: '<?php echo $this->getNewProductByCatMode()?>',
|
9 |
+
minSlides: <?php echo $this->getMinSlides() ?>,
|
10 |
+
maxSlides: <?php echo $this->getMaxSlides() ?>,
|
11 |
+
slideWidth: <?php echo $this->getSlideWidth() ?>,
|
12 |
+
slideMargin: <?php echo $this->getSlideMargin() ?>
|
13 |
+
|
14 |
+
});
|
15 |
+
|
16 |
+
var formDataPromotion = {
|
17 |
+
cat : '<?php echo $this->getCatDefault() ?>',
|
18 |
+
};
|
19 |
+
|
20 |
+
$clickview.ajax({
|
21 |
+
|
22 |
+
url: "<?php echo $this->getUrlControllerAllProductsPromotion() ?>",
|
23 |
+
type: "POST",
|
24 |
+
dataType: 'json',
|
25 |
+
cache : false,
|
26 |
+
data: formDataPromotion,
|
27 |
+
beforeSend: function(){
|
28 |
+
$clickview('.bxslider_clickview_products_promotion').append('<li><img src="<?php echo Mage::getBaseUrl() ?>/skin/frontend/base/default/jefferson/Clickview/image/loading.gif" /></li>');
|
29 |
+
},
|
30 |
+
success : function(data2){
|
31 |
+
$clickview('.bxslider_clickview_products_promotion').empty();
|
32 |
+
$clickview('.bxslider_clickview_products_promotion').append(data2.content);
|
33 |
+
sliderPromotion.reloadSlider();
|
34 |
+
},
|
35 |
+
|
36 |
+
});
|
37 |
+
|
38 |
+
$clickview('.category_clickview_products_promotion').change(function(){
|
39 |
+
|
40 |
+
var formDataPromotion = {
|
41 |
+
cat : $clickview('.category_clickview_products_promotion').val(),
|
42 |
+
};
|
43 |
+
|
44 |
+
$clickview.ajax({
|
45 |
+
|
46 |
+
url: "<?php echo $this->getUrlControllerAllProductsPromotion() ?>",
|
47 |
+
type: "POST",
|
48 |
+
dataType: 'json',
|
49 |
+
cache : false,
|
50 |
+
data: formDataPromotion,
|
51 |
+
beforeSend: function(){
|
52 |
+
$clickview('.bxslider_clickview_products_promotion').append('<li><img src="<?php echo Mage::getBaseUrl() ?>/skin/frontend/base/default/jefferson/Clickview/image/loading.gif" /></li>');
|
53 |
+
},
|
54 |
+
success : function(data2){
|
55 |
+
$clickview('.bxslider_clickview_products_promotion').empty();
|
56 |
+
$clickview('.bxslider_clickview_products_promotion').append(data2.content);
|
57 |
+
sliderPromotion.reloadSlider();
|
58 |
+
},
|
59 |
+
|
60 |
+
});
|
61 |
+
|
62 |
+
|
63 |
+
|
64 |
+
});
|
65 |
+
});
|
66 |
+
|
67 |
+
</script>
|
68 |
+
|
69 |
+
|
70 |
+
<div class="col-md-3">
|
71 |
+
<div class="info">
|
72 |
+
<h2 class="subtitle"><?php echo $this->__('Promotion') ?></h2>
|
73 |
+
<select name="category_clickview_products_promotion" class="category_clickview_products_promotion form-control">
|
74 |
+
<?php echo $this->getCategoryProductPromotion(); ?>
|
75 |
+
</select>
|
76 |
+
<ul class="bxslider_clickview_products_promotion"></ul>
|
77 |
+
</div>
|
78 |
+
</div>
|
app/design/frontend/base/default/template/jefferson/clickview/products_discount.phtml
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$getImgSize = $this->getDiscountImgSize();
|
3 |
+
$num = $this->getDiscountRows();
|
4 |
+
$_products = $this->getProductsDiscount($num);
|
5 |
+
?>
|
6 |
+
|
7 |
+
<div class="container clickview">
|
8 |
+
<div class="row">
|
9 |
+
<div class="col-md-12">
|
10 |
+
<h2 class="subtitle"><?php echo $this->__('Price lowered') ?></h2>
|
11 |
+
</div>
|
12 |
+
<div class="col-md-12">
|
13 |
+
<ul class="bxslider_clickview_best_selling">
|
14 |
+
<?php foreach($_products as $item){ ?>
|
15 |
+
|
16 |
+
<li>
|
17 |
+
<figure>
|
18 |
+
|
19 |
+
<a href="<?php echo $item->getProductUrl() ?>"
|
20 |
+
title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>" class="product-image">
|
21 |
+
<img src="<?php echo $this->helper('catalog/image')->init($item, 'small_image')->keepFrame(true)->resize($getImgSize,$getImgSize); ?>" />
|
22 |
+
</a>
|
23 |
+
|
24 |
+
<?php if($item->getSpecialPrice() > 0 ): ?>
|
25 |
+
<span class="perc"> <?php echo $this->getPerc($item->getPrice(), $item->getSpecialPrice() ); ?></span>
|
26 |
+
<?php endif; ?>
|
27 |
+
|
28 |
+
<figcaption>
|
29 |
+
|
30 |
+
<a href="<?php echo $item->getProductUrl() ?>"
|
31 |
+
title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>"
|
32 |
+
class="product-image">
|
33 |
+
<?php echo $item->getName(); ?>
|
34 |
+
</a>
|
35 |
+
|
36 |
+
<?php echo $this->getPriceHtml($item, true) ?>
|
37 |
+
|
38 |
+
<div class="product-secondary">
|
39 |
+
|
40 |
+
<?php if(!$item->canConfigure() && $item->isSaleable()): ?>
|
41 |
+
|
42 |
+
<p class="action">
|
43 |
+
<button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart"
|
44 |
+
onclick="setLocation('<?php echo $this->getAddToCartUrl($item) ?>')">
|
45 |
+
<span>
|
46 |
+
<span>
|
47 |
+
<?php echo $this->__('Add to Cart') ?>
|
48 |
+
</span>
|
49 |
+
</span>
|
50 |
+
</button>
|
51 |
+
</p>
|
52 |
+
|
53 |
+
<?php elseif($item->getStockItem() && $item->getStockItem()->getIsInStock()): ?>
|
54 |
+
|
55 |
+
<p class="action">
|
56 |
+
<a title="<?php echo $this->__('View Details') ?>" class="button"
|
57 |
+
href="<?php echo $item->getProductUrl() ?>"><?php echo $this->__('View Details') ?>
|
58 |
+
</a>
|
59 |
+
</p>
|
60 |
+
|
61 |
+
<?php else: ?>
|
62 |
+
|
63 |
+
<p class="action availability out-of-stock">
|
64 |
+
<span><?php echo $this->__('Out of stock') ?></span>
|
65 |
+
</p>
|
66 |
+
|
67 |
+
<?php endif; ?>
|
68 |
+
|
69 |
+
</div>
|
70 |
+
|
71 |
+
</figcaption>
|
72 |
+
|
73 |
+
</figure>
|
74 |
+
</li>
|
75 |
+
|
76 |
+
<?php } ?>
|
77 |
+
</ul>
|
78 |
+
</div>
|
79 |
+
</div>
|
80 |
+
</div>
|
app/design/frontend/base/default/template/jefferson/clickview/products_new_by_category.phtml
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/javascript">
|
2 |
+
|
3 |
+
$clickview(document).ready(function(){
|
4 |
+
|
5 |
+
var sliderNews = $clickview('.bxslider_clickview_new_product_by_category').bxSlider({
|
6 |
+
|
7 |
+
mode: '<?php echo $this->getNewProductByCatMode() ?>',
|
8 |
+
minSlides: <?php echo $this->getMinSlides() ?>,
|
9 |
+
maxSlides: <?php echo $this->getMaxSlides() ?>,
|
10 |
+
slideWidth: <?php echo $this->getSlideWidth() ?>,
|
11 |
+
slideMargin: <?php echo $this->getSlideMargin() ?>
|
12 |
+
|
13 |
+
});
|
14 |
+
|
15 |
+
var formDataNews = {
|
16 |
+
cat : '<?php echo $this->getCatDefault() ?>',
|
17 |
+
};
|
18 |
+
|
19 |
+
$clickview.ajax({
|
20 |
+
|
21 |
+
url: "<?php echo $this->getUrlControllerNewsProductsByCategory() ?>",
|
22 |
+
type: "POST",
|
23 |
+
dataType: 'json',
|
24 |
+
cache : false,
|
25 |
+
data: formDataNews,
|
26 |
+
beforeSend: function(){
|
27 |
+
$clickview('.bxslider_clickview_new_product_by_category').append('<li><img src="<?php echo Mage::getBaseUrl() ?>/skin/frontend/base/default/jefferson/Clickview/image/loading.gif" /></li>');
|
28 |
+
},
|
29 |
+
success : function(data2){
|
30 |
+
$clickview('.bxslider_clickview_new_product_by_category').empty();
|
31 |
+
$clickview('.bxslider_clickview_new_product_by_category').append(data2.content);
|
32 |
+
sliderNews.reloadSlider();
|
33 |
+
},
|
34 |
+
|
35 |
+
});
|
36 |
+
|
37 |
+
$clickview('.category_clickview_new_product').change(function(){
|
38 |
+
|
39 |
+
var formDataNews = {
|
40 |
+
cat : $clickview('.category_clickview_new_product').val(),
|
41 |
+
};
|
42 |
+
|
43 |
+
$clickview.ajax({
|
44 |
+
|
45 |
+
url: "<?php echo $this->getUrlControllerNewsProductsByCategory() ?>",
|
46 |
+
type: "POST",
|
47 |
+
dataType: 'json',
|
48 |
+
cache : false,
|
49 |
+
data: formDataNews,
|
50 |
+
beforeSend: function(){
|
51 |
+
$clickview('.bxslider_clickview_new_product_by_category').append('<li><img src="<?php echo Mage::getBaseUrl() ?>/skin/frontend/base/default/jefferson/Clickview/image/loading.gif" /></li>');
|
52 |
+
},
|
53 |
+
success : function(data2){
|
54 |
+
$clickview('.bxslider_clickview_new_product_by_category').empty();
|
55 |
+
$clickview('.bxslider_clickview_new_product_by_category').append(data2.content);
|
56 |
+
sliderNews.reloadSlider();
|
57 |
+
},
|
58 |
+
|
59 |
+
});
|
60 |
+
|
61 |
+
|
62 |
+
|
63 |
+
});
|
64 |
+
});
|
65 |
+
|
66 |
+
</script>
|
67 |
+
|
68 |
+
|
69 |
+
<div class="col-md-3">
|
70 |
+
<div class="info">
|
71 |
+
<h2 class="subtitle"><?php echo $this->__('News') ?></h2>
|
72 |
+
<select name="category_clickview_new_product" class="category_clickview_new_product form-control">
|
73 |
+
<?php echo $this->getCategoryNewProduct(); ?>
|
74 |
+
</select>
|
75 |
+
<ul class="bxslider_clickview_new_product_by_category"></ul>
|
76 |
+
</div>
|
77 |
+
</div>
|
app/design/frontend/base/default/template/jefferson/clickview/recents.phtml
ADDED
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magento.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
18 |
+
* versions in the future. If you wish to customize Magento for your
|
19 |
+
* needs please refer to http://www.magento.com for more information.
|
20 |
+
*
|
21 |
+
* @category design
|
22 |
+
* @package base_default
|
23 |
+
* @copyright Copyright (c) 2006-2015 X.commerce, Inc. (http://www.magento.com)
|
24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
25 |
+
*/
|
26 |
+
/* @var $this Jefferson_Clickview_Block_Clickviewrecents */
|
27 |
+
?>
|
28 |
+
<?php
|
29 |
+
$getImgSize = $this->getClickImgSize();
|
30 |
+
?>
|
31 |
+
|
32 |
+
|
33 |
+
<?php
|
34 |
+
/**
|
35 |
+
* @see Jefferson_Clickview_Block_Clickviewrecents
|
36 |
+
*/
|
37 |
+
?>
|
38 |
+
|
39 |
+
<div class="container clickview">
|
40 |
+
<div class="row">
|
41 |
+
<div class="col-md-12">
|
42 |
+
<?php if ($_products = $this->getRecentlyViewedProducts()): ?>
|
43 |
+
|
44 |
+
<h2 class="subtitle">
|
45 |
+
<?php echo $this->__('Their recent clicks...') ?>
|
46 |
+
</h2>
|
47 |
+
|
48 |
+
<ul class="bxslider_clickview_recents">
|
49 |
+
|
50 |
+
<?php foreach ($_products as $_product): ?>
|
51 |
+
|
52 |
+
<li>
|
53 |
+
<a href="<?php echo $this->getProductUrl($_product) ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>"
|
54 |
+
class="product-image">
|
55 |
+
<img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->keepFrame(true)->resize($getImgSize,$getImgSize) ?>"
|
56 |
+
alt="<?php echo $this->stripTags($_product->getName(), null, true) ?>" />
|
57 |
+
</a>
|
58 |
+
|
59 |
+
<h3 class="product-name">
|
60 |
+
<a href="<?php echo $this->getProductUrl($_product) ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>">
|
61 |
+
<?php echo $this->helper('catalog/output')->productAttribute($_product, $_product->getName() , 'name') ?>
|
62 |
+
</a>
|
63 |
+
</h3>
|
64 |
+
|
65 |
+
<?php echo $this->getReviewsSummaryHtml($_product, 'short') ?>
|
66 |
+
|
67 |
+
<?php echo $this->getPriceHtml($_product, true, '-home-viewed') ?>
|
68 |
+
|
69 |
+
<div class="actions">
|
70 |
+
<?php if($_product->isSaleable()): ?>
|
71 |
+
|
72 |
+
<button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')">
|
73 |
+
<span>
|
74 |
+
<span>
|
75 |
+
<?php echo $this->__('Add to Cart') ?>
|
76 |
+
</span>
|
77 |
+
</span>
|
78 |
+
</button>
|
79 |
+
|
80 |
+
<?php else: ?>
|
81 |
+
|
82 |
+
<p class="availability out-of-stock">
|
83 |
+
<span>
|
84 |
+
<?php echo $this->__('Out of stock') ?>
|
85 |
+
</span>
|
86 |
+
</p>
|
87 |
+
|
88 |
+
<?php endif; ?>
|
89 |
+
|
90 |
+
</div>
|
91 |
+
|
92 |
+
</li>
|
93 |
+
|
94 |
+
<?php endforeach; ?>
|
95 |
+
|
96 |
+
</ul>
|
97 |
+
|
98 |
+
<?php endif; ?>
|
99 |
+
</div>
|
100 |
+
</div>
|
101 |
+
</div>
|
app/design/frontend/base/default/template/jefferson/clickview/union.phtml
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="container clickview clickview_by_category">
|
2 |
+
<div class="container">
|
3 |
+
<div class="row">
|
4 |
+
<?php
|
5 |
+
//The most-viewed products by category
|
6 |
+
$obj1 = $this->getLayout()->createBlock('clickview/clickviewmostviewedbycategoryblock');
|
7 |
+
if($obj1->getMostViewedByCatEnabled() == 1):
|
8 |
+
echo $obj1->setTemplate('jefferson/clickview/mostviewedbycategory.phtml')->toHtml();
|
9 |
+
endif;
|
10 |
+
?>
|
11 |
+
|
12 |
+
<?php
|
13 |
+
|
14 |
+
//Top-selling products by category
|
15 |
+
$obj2 = $this->getLayout()->createBlock('clickview/clickviewbestsellerbycategoryblock');
|
16 |
+
if($obj2->getBestSellerByCatEnabled() == 1):
|
17 |
+
echo $obj2->setTemplate('jefferson/clickview/bestsellerbycategory.phtml')->toHtml();
|
18 |
+
endif;
|
19 |
+
?>
|
20 |
+
|
21 |
+
<?php
|
22 |
+
|
23 |
+
//New products by category
|
24 |
+
$obj3 = $this->getLayout()->createBlock('clickview/clickviewnewsproductsblock');
|
25 |
+
if($obj3->getNewProductByCatEnabled() == 1):
|
26 |
+
echo $obj3->setTemplate('jefferson/clickview/products_new_by_category.phtml')->toHtml();
|
27 |
+
endif;
|
28 |
+
?>
|
29 |
+
|
30 |
+
<?php
|
31 |
+
|
32 |
+
//Products on promotion by category
|
33 |
+
$obj4 = $this->getLayout()->createBlock('clickview/clickviewproductspromotionblock');
|
34 |
+
if($obj4->getNewProductByCatEnabled() == 1):
|
35 |
+
echo $obj4->setTemplate('jefferson/clickview/products_all_promotion.phtml')->toHtml();
|
36 |
+
endif;
|
37 |
+
?>
|
38 |
+
</div>
|
39 |
+
|
40 |
+
</div>
|
41 |
+
</div>
|
app/etc/modules/Jefferson_Clickview.xml
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<Jefferson_Clickview>
|
5 |
+
<active>true</active>
|
6 |
+
<codePool>community</codePool>
|
7 |
+
<version>0.1.0</version>
|
8 |
+
</Jefferson_Clickview>
|
9 |
+
</modules>
|
10 |
+
</config>
|
app/locale/pt_BR/jefferson_clickview.csv
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"You clicked...","You clicked..."
|
2 |
+
"and we recommend for you...","and we recommend for you..."
|
3 |
+
"Their recent clicks...","Their recent clicks..."
|
4 |
+
"The most sold...","The most sold..."
|
5 |
+
"Most viewed...","Most viewed..."
|
6 |
+
"Top sellers","Top sellers"
|
7 |
+
"Most viewed","Most viewed"
|
8 |
+
"Releases","Releases"
|
9 |
+
"Promotion","Promotion"
|
10 |
+
"Price lowered","Price lowered"
|
11 |
+
"News","News"
|
12 |
+
"Last click","Last click"
|
13 |
+
"Number in the results","Number in the results"
|
14 |
+
"Product image size","Product image size"
|
15 |
+
"Notify the image size of the product","Notify the image size of the product"
|
16 |
+
"Best Seller","Best Seller"
|
17 |
+
"Most Viewed","Most Viewed"
|
18 |
+
"Products discount","Products discount"
|
19 |
+
"Filter by category","Filter by category"
|
20 |
+
"Most viewed by category","Most viewed by category"
|
21 |
+
"Margin of the slide","Margin of the slide"
|
22 |
+
"Maximum width of the slider","Maximum width of the slider"
|
23 |
+
"Maximum amount slider","Maximum amount slider"
|
24 |
+
"Minimum amount slider","Minimum amount slider"
|
25 |
+
"Select the categories allowed","Select the categories allowed"
|
26 |
+
"Select the default category","Select the default category"
|
27 |
+
"Number in the results","Number in the results"
|
28 |
+
"Best seller by category","Best seller by category"
|
29 |
+
"News products by category","News products by category"
|
30 |
+
"Products promotion by category","Products promotion by category"
|
31 |
+
"Enabled","Enabled"
|
package.xml
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<package>
|
3 |
+
<name>Jefferson_Clickview</name>
|
4 |
+
<version>0.1.0</version>
|
5 |
+
<stability>stable</stability>
|
6 |
+
<license uri="http://opensource.org/licenses/OSL-3.0">Open Software License v. 3.0 (OSL-3.0)</license>
|
7 |
+
<channel>community</channel>
|
8 |
+
<extends/>
|
9 |
+
<summary>A new look at &quot;Home&quot; of your store with Top Home Store, increase your sales</summary>
|
10 |
+
<description>A new look for your store with Top Home Store, increase your sales conversion making the functional user navigation, with Top Home Store, let your store more appealing to its users, show your users with the product in promotion, news, bestsellers, recent clicks and display click related products with Top Home Store you can he get the results mentioned above by filtering for each category. You retailer has the option to choose which categories can be filtered by the user, enable only the features that interest you and more of a new face to your store with Top Home Store.</description>
|
11 |
+
<notes>Technologies used to build the module: php, jquery, html, css, Bootstrap, modules compatible with Magento version 1.7 onward</notes>
|
12 |
+
<authors><author><name>Jefferson Batista Porto</name><user>fdsa451</user><email>jefferson.b.porto@gmail.com</email></author></authors>
|
13 |
+
<date>2015-08-16</date>
|
14 |
+
<time>18:39:04</time>
|
15 |
+
<contents><target name="magecommunity"><dir name="Jefferson"><dir name="Clickview"><dir name="Block"><file name="Clickviewbestsellerbycategoryblock.php" hash="25bcb2637e01516401313ab53dc6780c"/><file name="Clickviewbestsellersblock.php" hash="fc3321f2a8134d2e94f4a12489329bca"/><file name="Clickviewblock.php" hash="6abae3caed79df9fe3bc9698850253a0"/><file name="Clickviewmostviewedblock.php" hash="b821224b3e904f1dfb694ceb6fa684a1"/><file name="Clickviewmostviewedbycategoryblock.php" hash="d7aa10e2ef69e37dc23bc0416c2ae2c9"/><file name="Clickviewnewsproductsblock.php" hash="a24f62577b0c47877b5d6406bf354318"/><file name="Clickviewproductspromotionblock.php" hash="b9da6d7a10591c2539e2edd64974433e"/><file name="Clickviewrecents.php" hash="cc5e7f3fd6df907920628110fce99ea8"/></dir><dir name="Helper"><file name="Data.php" hash="db5fec2a366116d4aaa2f6df4fa1e373"/></dir><dir name="Model"><file name="Clickviewbestsellerbycategorymodel.php" hash="0f68ffb78761a1c8aec3d4bd2439f3f7"/><file name="Clickviewbestsellersmodel.php" hash="015b28819ddb0c1b0704008f8b287093"/><file name="Clickviewmodel.php" hash="52cccf9902d85b0d8a8a74e0cada601a"/><file name="Clickviewmostviewedbycategorymodel.php" hash="053d9e7c0ca15876d2bae68242760941"/><file name="Clickviewmostviewedmodel.php" hash="4027dfd7ce7d9d0d8e3020b1cc31159c"/><file name="Observer.php" hash="d5c2ba687b4874b817a6544aa92f26df"/><dir name="System"><dir name="Config"><dir name="Source"><file name="Category.php" hash="bebbe28ec9124e754bdde82c6723deff"/><file name="Categoryallowed.php" hash="7d1d52db12000dad3159694e7d1d25dc"/><file name="Categorybestsellerbycategory.php" hash="b5be7a5b5aca876278039d6c5ec57c35"/><file name="Categorynewsproducts.php" hash="68af05b6f6b42291cc554f1a05a98ada"/><file name="Categorypromotionproducts.php" hash="d3c85ad367f2d48c9be9d6194eb7ed78"/><file name="Mode.php" hash="c732297289d1f2d10d3d51c4a6792e09"/></dir></dir></dir></dir><dir name="controllers"><file name="IndexController.php" hash="ee6be9d81c06b5ada17dc0de9031cd36"/></dir><dir name="etc"><file name="config.xml" hash="3bd6069ec32be6a1624a8c6af1f6f369"/><file name="system.xml" hash="774a9fdeeee58960ea6b40d75780831c"/></dir><dir name="sql"><dir name="jefferson_clickview_setup"><file name="install-0.1.0.php" hash="49d40128d6bb7c8f30e868fcd198fbb4"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Jefferson_Clickview.xml" hash="6a3e062c2fe7e70587000c5adc8901a5"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="jefferson"><file name="jefferson_clickview.xml" hash="27000a35ea320d328ae4ebf594046d77"/></dir></dir><dir name="template"><dir name="jefferson"><dir name="clickview"><file name="bestseller.phtml" hash="e1eee56a45b3798a657d1ca643739026"/><file name="bestsellerbycategory.phtml" hash="b4f8e670dd2f49cbc5ee89f298575c7e"/><file name="clickview_template.phtml" hash="c1a78ce739707ee6a94383dd9f592936"/><file name="mostviewed.phtml" hash="b2b88fdb86001ade4d6e21b20896e54e"/><file name="mostviewedbycategory.phtml" hash="75e4fc7dce2f0c0d84eb5212da9492bd"/><file name="newsproducts.phtml" hash="8a3f5982508760d51c38025930805243"/><file name="products_all_promotion.phtml" hash="86b6cec4a1f7c5ea427539d91b178b2a"/><file name="products_discount.phtml" hash="78fb35f4445c218741fcb700ecfaec85"/><file name="products_new_by_category.phtml" hash="083e0f82af2d9f44d2a0c3c66d3f5156"/><file name="recents.phtml" hash="17ac128b65cef52ab2cdc21e2bab0e9a"/><file name="union.phtml" hash="ebde22ef0c62e47db7fa2eccdf6c7ebb"/></dir></dir></dir></dir></dir></dir></target><target name="magelocale"><dir><dir name="pt_BR"><file name="jefferson_clickview.csv" hash="d92519f5537fe6ef674b053ab54f6b16"/></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="jefferson"><dir name="Clickview"><dir name="css"><file name="bxslider.css" hash="f74f7a7073563c0f3b42357057b8c0b2"/><file name="style.css" hash="87ee9efd8916894a5766bec424d24b56"/></dir><dir name="image"><file name="loading.gif" hash="1a01d0c9387d131090ff88f8d24b9bc2"/></dir><dir name="js"><file name="bxslider.js" hash="fe2e161344ab5535b98d4a58596fb2b0"/><file name="jquery.js" hash="628072e7212db1e8cdacb22b21752cda"/><file name="script.js" hash="b01b5ab109f4148552cea5ded88ce2a7"/></dir></dir></dir></dir></dir></dir></target></contents>
|
16 |
+
<compatible/>
|
17 |
+
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
18 |
+
</package>
|
skin/frontend/base/default/jefferson/Clickview/css/bxslider.css
ADDED
@@ -0,0 +1,297 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* BxSlider v4.1.2 - Fully loaded, responsive content slider
|
3 |
+
* http://bxslider.com
|
4 |
+
*
|
5 |
+
* Written by: Steven Wanderski, 2014
|
6 |
+
* http://stevenwanderski.com
|
7 |
+
* (while drinking Belgian ales and listening to jazz)
|
8 |
+
*
|
9 |
+
* CEO and founder of bxCreative, LTD
|
10 |
+
* http://bxcreative.com
|
11 |
+
*/
|
12 |
+
|
13 |
+
|
14 |
+
/** RESET AND LAYOUT
|
15 |
+
===================================*/
|
16 |
+
|
17 |
+
@media(max-width:768px){
|
18 |
+
.container_img_bx {
|
19 |
+
width: 100% !important;
|
20 |
+
}
|
21 |
+
|
22 |
+
.container_info_bx {
|
23 |
+
width: 100% !important;
|
24 |
+
word-wrap:break-word;
|
25 |
+
}
|
26 |
+
|
27 |
+
.bx-wrapper li img {
|
28 |
+
float: none !important;
|
29 |
+
text-align: center !important;
|
30 |
+
margin: 0 auto !important;
|
31 |
+
}
|
32 |
+
|
33 |
+
.perc {
|
34 |
+
float: none !important;
|
35 |
+
margin: 10px auto !important;
|
36 |
+
}
|
37 |
+
}
|
38 |
+
|
39 |
+
.container_info_bx {
|
40 |
+
float: right;
|
41 |
+
display: inline-block;
|
42 |
+
width: 50%;
|
43 |
+
}
|
44 |
+
|
45 |
+
.container_img_bx {
|
46 |
+
float: left;
|
47 |
+
width: 48%;
|
48 |
+
}
|
49 |
+
|
50 |
+
.perc {
|
51 |
+
border-radius: 5%;
|
52 |
+
width: 55px;
|
53 |
+
height: 25px;
|
54 |
+
background: #3399CC;
|
55 |
+
text-align: left;
|
56 |
+
line-height: 25px;
|
57 |
+
color: #fff;
|
58 |
+
display: inline-block;
|
59 |
+
padding: 0 8px;
|
60 |
+
font-weight: bold;
|
61 |
+
font-size: 13px;
|
62 |
+
top: 10px;
|
63 |
+
right: 10px;
|
64 |
+
position: absolute;
|
65 |
+
}
|
66 |
+
|
67 |
+
.product-cta {
|
68 |
+
text-align: center;
|
69 |
+
background: #3399CC;
|
70 |
+
color: #fff;
|
71 |
+
padding: 10px 11px;
|
72 |
+
font-size: 18px;
|
73 |
+
border-radius: 5%;
|
74 |
+
top: 15px;
|
75 |
+
display: inline-block;
|
76 |
+
width: 190px;
|
77 |
+
font-weight: bold;
|
78 |
+
}
|
79 |
+
|
80 |
+
.bx-wrapper {
|
81 |
+
position: relative;
|
82 |
+
margin: 0 auto 60px;
|
83 |
+
padding: 0;
|
84 |
+
*zoom: 1;
|
85 |
+
}
|
86 |
+
|
87 |
+
.bx-wrapper img {
|
88 |
+
max-width: 100%;
|
89 |
+
display: block;
|
90 |
+
}
|
91 |
+
|
92 |
+
/** THEME
|
93 |
+
===================================*/
|
94 |
+
|
95 |
+
.clickview_by_category .bx-wrapper img,
|
96 |
+
.clickview_by_category .bx-wrapper a {
|
97 |
+
width: 100%;
|
98 |
+
float: none;
|
99 |
+
margin: 0 auto;
|
100 |
+
}
|
101 |
+
|
102 |
+
.bx-wrapper img,
|
103 |
+
.bx-wrapper a {
|
104 |
+
border: none;
|
105 |
+
}
|
106 |
+
|
107 |
+
.bx-wrapper .bx-viewport {
|
108 |
+
/*-moz-box-shadow: 0 0 5px #ccc;*/
|
109 |
+
/*-webkit-box-shadow: 0 0 5px #ccc;*/
|
110 |
+
/*box-shadow: 0 0 5px #ccc;*/
|
111 |
+
/*border: 5px solid #fff;*/
|
112 |
+
left: -5px;
|
113 |
+
background: #fff;
|
114 |
+
|
115 |
+
/*fix other elements on the page moving (on Chrome)*/
|
116 |
+
-webkit-transform: translatez(0);
|
117 |
+
-moz-transform: translatez(0);
|
118 |
+
-ms-transform: translatez(0);
|
119 |
+
-o-transform: translatez(0);
|
120 |
+
transform: translatez(0);
|
121 |
+
}
|
122 |
+
|
123 |
+
.bx-wrapper .bx-pager,
|
124 |
+
.bx-wrapper .bx-controls-auto {
|
125 |
+
position: absolute;
|
126 |
+
bottom: -30px;
|
127 |
+
width: 100%;
|
128 |
+
}
|
129 |
+
|
130 |
+
/* LOADER */
|
131 |
+
|
132 |
+
.bx-wrapper .bx-loading {
|
133 |
+
min-height: 50px;
|
134 |
+
background: url(images/bx_loader.gif) center center no-repeat #fff;
|
135 |
+
height: 100%;
|
136 |
+
width: 100%;
|
137 |
+
position: absolute;
|
138 |
+
top: 0;
|
139 |
+
left: 0;
|
140 |
+
z-index: 2000;
|
141 |
+
}
|
142 |
+
|
143 |
+
/* PAGER */
|
144 |
+
|
145 |
+
.bx-wrapper .bx-pager {
|
146 |
+
text-align: center;
|
147 |
+
font-size: .85em;
|
148 |
+
font-family: Arial;
|
149 |
+
font-weight: bold;
|
150 |
+
color: #666;
|
151 |
+
padding-top: 20px;
|
152 |
+
}
|
153 |
+
|
154 |
+
.bx-wrapper .bx-pager .bx-pager-item,
|
155 |
+
.bx-wrapper .bx-controls-auto .bx-controls-auto-item {
|
156 |
+
display: inline-block;
|
157 |
+
*zoom: 1;
|
158 |
+
*display: inline;
|
159 |
+
}
|
160 |
+
|
161 |
+
.clickview_by_category .bx-wrapper .bx-pager.bx-default-pager a {
|
162 |
+
background: #666 !important;
|
163 |
+
text-indent: -9999px !important;
|
164 |
+
display: block !important;
|
165 |
+
width: 10px !important;
|
166 |
+
height: 10px !important;
|
167 |
+
margin: 0 5px !important;
|
168 |
+
outline: 0 !important;
|
169 |
+
-moz-border-radius: 5px !important;
|
170 |
+
-webkit-border-radius: 5px !important;
|
171 |
+
border-radius: 5px !important;
|
172 |
+
}
|
173 |
+
|
174 |
+
.bx-wrapper .bx-pager.bx-default-pager a:hover,
|
175 |
+
.bx-wrapper .bx-pager.bx-default-pager a.active {
|
176 |
+
background: #000;
|
177 |
+
}
|
178 |
+
|
179 |
+
/* DIRECTION CONTROLS (NEXT / PREV) */
|
180 |
+
|
181 |
+
.bx-wrapper .bx-prev {
|
182 |
+
/* left: 10px;
|
183 |
+
background: url(images/controls.png) no-repeat 0 -32px; */
|
184 |
+
display: none;
|
185 |
+
}
|
186 |
+
|
187 |
+
.bx-wrapper .bx-next {
|
188 |
+
right: 10px;
|
189 |
+
background: url(images/controls.png) no-repeat -43px -32px;
|
190 |
+
display: none;
|
191 |
+
}
|
192 |
+
|
193 |
+
.bx-wrapper .bx-prev:hover {
|
194 |
+
background-position: 0 0;
|
195 |
+
}
|
196 |
+
|
197 |
+
.bx-wrapper .bx-next:hover {
|
198 |
+
background-position: -43px 0;
|
199 |
+
}
|
200 |
+
|
201 |
+
.bx-wrapper .bx-controls-direction a {
|
202 |
+
position: absolute;
|
203 |
+
top: 50%;
|
204 |
+
margin-top: -16px;
|
205 |
+
outline: 0;
|
206 |
+
width: 32px;
|
207 |
+
height: 32px;
|
208 |
+
text-indent: -9999px;
|
209 |
+
z-index: 9999;
|
210 |
+
}
|
211 |
+
|
212 |
+
.bx-wrapper .bx-controls-direction a.disabled {
|
213 |
+
display: none;
|
214 |
+
}
|
215 |
+
|
216 |
+
/* AUTO CONTROLS (START / STOP) */
|
217 |
+
|
218 |
+
.bx-wrapper .bx-controls-auto {
|
219 |
+
text-align: center;
|
220 |
+
}
|
221 |
+
|
222 |
+
.bx-wrapper .bx-controls-auto .bx-start {
|
223 |
+
display: block;
|
224 |
+
text-indent: -9999px;
|
225 |
+
width: 10px;
|
226 |
+
height: 11px;
|
227 |
+
outline: 0;
|
228 |
+
background: url(images/controls.png) -86px -11px no-repeat;
|
229 |
+
margin: 0 3px;
|
230 |
+
}
|
231 |
+
|
232 |
+
.bx-wrapper .bx-controls-auto .bx-start:hover,
|
233 |
+
.bx-wrapper .bx-controls-auto .bx-start.active {
|
234 |
+
background-position: -86px 0;
|
235 |
+
}
|
236 |
+
|
237 |
+
.bx-wrapper .bx-controls-auto .bx-stop {
|
238 |
+
display: block;
|
239 |
+
text-indent: -9999px;
|
240 |
+
width: 9px;
|
241 |
+
height: 11px;
|
242 |
+
outline: 0;
|
243 |
+
background: url(images/controls.png) -86px -44px no-repeat;
|
244 |
+
margin: 0 3px;
|
245 |
+
}
|
246 |
+
|
247 |
+
.bx-wrapper .bx-controls-auto .bx-stop:hover,
|
248 |
+
.bx-wrapper .bx-controls-auto .bx-stop.active {
|
249 |
+
background-position: -86px -33px;
|
250 |
+
}
|
251 |
+
|
252 |
+
/* PAGER WITH AUTO-CONTROLS HYBRID LAYOUT */
|
253 |
+
|
254 |
+
.bx-wrapper li {
|
255 |
+
text-align: center;
|
256 |
+
}
|
257 |
+
|
258 |
+
.bx-wrapper li img{
|
259 |
+
text-align: left;
|
260 |
+
float: left;
|
261 |
+
}
|
262 |
+
|
263 |
+
|
264 |
+
.bx-wrapper .bx-controls.bx-has-controls-auto.bx-has-pager .bx-pager {
|
265 |
+
text-align: left;
|
266 |
+
width: 80%;
|
267 |
+
}
|
268 |
+
|
269 |
+
.bx-wrapper .bx-controls.bx-has-controls-auto.bx-has-pager .bx-controls-auto {
|
270 |
+
right: 0;
|
271 |
+
width: 35px;
|
272 |
+
}
|
273 |
+
|
274 |
+
/* IMAGE CAPTIONS */
|
275 |
+
|
276 |
+
.bx-wrapper .bx-caption {
|
277 |
+
position: absolute;
|
278 |
+
bottom: 0;
|
279 |
+
left: 0;
|
280 |
+
background: #666\9;
|
281 |
+
background: rgba(80, 80, 80, 0.75);
|
282 |
+
width: 100%;
|
283 |
+
}
|
284 |
+
|
285 |
+
.bx-wrapper .bx-caption span {
|
286 |
+
color: #fff;
|
287 |
+
font-family: Arial;
|
288 |
+
display: block;
|
289 |
+
font-size: .85em;
|
290 |
+
padding: 10px;
|
291 |
+
}
|
292 |
+
|
293 |
+
|
294 |
+
.clickview .bx-wrapper img,
|
295 |
+
.clickview_by_category .bx-wrapper img {
|
296 |
+
width: auto !important;
|
297 |
+
}
|
skin/frontend/base/default/jefferson/Clickview/css/style.css
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
.clickview .bx-wrapper {
|
3 |
+
margin: 0;
|
4 |
+
}
|
5 |
+
|
6 |
+
.clickview {
|
7 |
+
margin-bottom: 50px;
|
8 |
+
}
|
9 |
+
|
10 |
+
.clickview + .std {
|
11 |
+
display: none;
|
12 |
+
}
|
13 |
+
|
14 |
+
.clickview figure {
|
15 |
+
text-align: center;
|
16 |
+
}
|
17 |
+
|
18 |
+
.clickview figure img {
|
19 |
+
margin: 0 auto;
|
20 |
+
}
|
21 |
+
|
22 |
+
/*By category*/
|
23 |
+
|
24 |
+
.clickview.clickview_by_category .bx-wrapper{
|
25 |
+
margin: 14px auto;
|
26 |
+
vertical-align: top;
|
27 |
+
}
|
28 |
+
|
29 |
+
.clickview.clickview_by_category .form-control {
|
30 |
+
text-transform: uppercase;
|
31 |
+
}
|
skin/frontend/base/default/jefferson/Clickview/image/loading.gif
ADDED
Binary file
|
skin/frontend/base/default/jefferson/Clickview/js/bxslider.js
ADDED
@@ -0,0 +1,1348 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* BxSlider v4.1.2 - Fully loaded, responsive content slider
|
3 |
+
* http://bxslider.com
|
4 |
+
*
|
5 |
+
* Copyright 2014, Steven Wanderski - http://stevenwanderski.com - http://bxcreative.com
|
6 |
+
* Written while drinking Belgian ales and listening to jazz
|
7 |
+
*
|
8 |
+
* Released under the MIT license - http://opensource.org/licenses/MIT
|
9 |
+
*/
|
10 |
+
|
11 |
+
jQuery.noConflict();
|
12 |
+
|
13 |
+
;(function($){
|
14 |
+
|
15 |
+
|
16 |
+
|
17 |
+
|
18 |
+
var plugin = {};
|
19 |
+
|
20 |
+
var defaults = {
|
21 |
+
|
22 |
+
// GENERAL
|
23 |
+
mode: 'horizontal',
|
24 |
+
slideSelector: '',
|
25 |
+
infiniteLoop: true,
|
26 |
+
hideControlOnEnd: false,
|
27 |
+
speed: 500,
|
28 |
+
easing: null,
|
29 |
+
slideMargin: 0,
|
30 |
+
startSlide: 0,
|
31 |
+
randomStart: false,
|
32 |
+
captions: false,
|
33 |
+
ticker: false,
|
34 |
+
tickerHover: false,
|
35 |
+
adaptiveHeight: false,
|
36 |
+
adaptiveHeightSpeed: 500,
|
37 |
+
video: false,
|
38 |
+
useCSS: true,
|
39 |
+
preloadImages: 'visible',
|
40 |
+
responsive: true,
|
41 |
+
slideZIndex: 50,
|
42 |
+
wrapperClass: 'bx-wrapper',
|
43 |
+
|
44 |
+
// TOUCH
|
45 |
+
touchEnabled: true,
|
46 |
+
swipeThreshold: 50,
|
47 |
+
oneToOneTouch: true,
|
48 |
+
preventDefaultSwipeX: true,
|
49 |
+
preventDefaultSwipeY: false,
|
50 |
+
|
51 |
+
// PAGER
|
52 |
+
pager: true,
|
53 |
+
pagerType: 'full',
|
54 |
+
pagerShortSeparator: ' / ',
|
55 |
+
pagerSelector: null,
|
56 |
+
buildPager: null,
|
57 |
+
pagerCustom: null,
|
58 |
+
|
59 |
+
// CONTROLS
|
60 |
+
controls: true,
|
61 |
+
nextText: 'Next',
|
62 |
+
prevText: 'Prev',
|
63 |
+
nextSelector: null,
|
64 |
+
prevSelector: null,
|
65 |
+
autoControls: false,
|
66 |
+
startText: 'Start',
|
67 |
+
stopText: 'Stop',
|
68 |
+
autoControlsCombine: false,
|
69 |
+
autoControlsSelector: null,
|
70 |
+
|
71 |
+
// AUTO
|
72 |
+
auto: false,
|
73 |
+
pause: 4000,
|
74 |
+
autoStart: true,
|
75 |
+
autoDirection: 'next',
|
76 |
+
autoHover: false,
|
77 |
+
autoDelay: 0,
|
78 |
+
autoSlideForOnePage: false,
|
79 |
+
|
80 |
+
// CAROUSEL
|
81 |
+
minSlides: 1,
|
82 |
+
maxSlides: 1,
|
83 |
+
moveSlides: 0,
|
84 |
+
slideWidth: 0,
|
85 |
+
|
86 |
+
// CALLBACKS
|
87 |
+
onSliderLoad: function() {},
|
88 |
+
onSlideBefore: function() {},
|
89 |
+
onSlideAfter: function() {},
|
90 |
+
onSlideNext: function() {},
|
91 |
+
onSlidePrev: function() {},
|
92 |
+
onSliderResize: function() {}
|
93 |
+
}
|
94 |
+
|
95 |
+
$.fn.bxSlider = function(options){
|
96 |
+
|
97 |
+
if(this.length == 0) return this;
|
98 |
+
|
99 |
+
// support mutltiple elements
|
100 |
+
if(this.length > 1){
|
101 |
+
this.each(function(){$(this).bxSlider(options)});
|
102 |
+
return this;
|
103 |
+
}
|
104 |
+
|
105 |
+
// create a namespace to be used throughout the plugin
|
106 |
+
var slider = {};
|
107 |
+
// set a reference to our slider element
|
108 |
+
var el = this;
|
109 |
+
plugin.el = this;
|
110 |
+
|
111 |
+
/**
|
112 |
+
* Makes slideshow responsive
|
113 |
+
*/
|
114 |
+
// first get the original window dimens (thanks alot IE)
|
115 |
+
var windowWidth = $(window).width();
|
116 |
+
var windowHeight = $(window).height();
|
117 |
+
|
118 |
+
|
119 |
+
|
120 |
+
/**
|
121 |
+
* ===================================================================================
|
122 |
+
* = PRIVATE FUNCTIONS
|
123 |
+
* ===================================================================================
|
124 |
+
*/
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Initializes namespace settings to be used throughout plugin
|
128 |
+
*/
|
129 |
+
var init = function(){
|
130 |
+
// merge user-supplied options with the defaults
|
131 |
+
slider.settings = $.extend({}, defaults, options);
|
132 |
+
// parse slideWidth setting
|
133 |
+
slider.settings.slideWidth = parseInt(slider.settings.slideWidth);
|
134 |
+
// store the original children
|
135 |
+
slider.children = el.children(slider.settings.slideSelector);
|
136 |
+
// check if actual number of slides is less than minSlides / maxSlides
|
137 |
+
if(slider.children.length < slider.settings.minSlides) slider.settings.minSlides = slider.children.length;
|
138 |
+
if(slider.children.length < slider.settings.maxSlides) slider.settings.maxSlides = slider.children.length;
|
139 |
+
// if random start, set the startSlide setting to random number
|
140 |
+
if(slider.settings.randomStart) slider.settings.startSlide = Math.floor(Math.random() * slider.children.length);
|
141 |
+
// store active slide information
|
142 |
+
slider.active = { index: slider.settings.startSlide }
|
143 |
+
// store if the slider is in carousel mode (displaying / moving multiple slides)
|
144 |
+
slider.carousel = slider.settings.minSlides > 1 || slider.settings.maxSlides > 1;
|
145 |
+
// if carousel, force preloadImages = 'all'
|
146 |
+
if(slider.carousel) slider.settings.preloadImages = 'all';
|
147 |
+
// calculate the min / max width thresholds based on min / max number of slides
|
148 |
+
// used to setup and update carousel slides dimensions
|
149 |
+
slider.minThreshold = (slider.settings.minSlides * slider.settings.slideWidth) + ((slider.settings.minSlides - 1) * slider.settings.slideMargin);
|
150 |
+
slider.maxThreshold = (slider.settings.maxSlides * slider.settings.slideWidth) + ((slider.settings.maxSlides - 1) * slider.settings.slideMargin);
|
151 |
+
// store the current state of the slider (if currently animating, working is true)
|
152 |
+
slider.working = false;
|
153 |
+
// initialize the controls object
|
154 |
+
slider.controls = {};
|
155 |
+
// initialize an auto interval
|
156 |
+
slider.interval = null;
|
157 |
+
// determine which property to use for transitions
|
158 |
+
slider.animProp = slider.settings.mode == 'vertical' ? 'top' : 'left';
|
159 |
+
// determine if hardware acceleration can be used
|
160 |
+
slider.usingCSS = slider.settings.useCSS && slider.settings.mode != 'fade' && (function(){
|
161 |
+
// create our test div element
|
162 |
+
var div = document.createElement('div');
|
163 |
+
// css transition properties
|
164 |
+
var props = ['WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective'];
|
165 |
+
// test for each property
|
166 |
+
for(var i in props){
|
167 |
+
if(div.style[props[i]] !== undefined){
|
168 |
+
slider.cssPrefix = props[i].replace('Perspective', '').toLowerCase();
|
169 |
+
slider.animProp = '-' + slider.cssPrefix + '-transform';
|
170 |
+
return true;
|
171 |
+
}
|
172 |
+
}
|
173 |
+
return false;
|
174 |
+
}());
|
175 |
+
// if vertical mode always make maxSlides and minSlides equal
|
176 |
+
if(slider.settings.mode == 'vertical') slider.settings.maxSlides = slider.settings.minSlides;
|
177 |
+
// save original style data
|
178 |
+
el.data("origStyle", el.attr("style"));
|
179 |
+
el.children(slider.settings.slideSelector).each(function() {
|
180 |
+
$(this).data("origStyle", $(this).attr("style"));
|
181 |
+
});
|
182 |
+
// perform all DOM / CSS modifications
|
183 |
+
setup();
|
184 |
+
}
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Performs all DOM and CSS modifications
|
188 |
+
*/
|
189 |
+
var setup = function(){
|
190 |
+
// wrap el in a wrapper
|
191 |
+
el.wrap('<div class="' + slider.settings.wrapperClass + '"><div class="bx-viewport"></div></div>');
|
192 |
+
// store a namspace reference to .bx-viewport
|
193 |
+
slider.viewport = el.parent();
|
194 |
+
// add a loading div to display while images are loading
|
195 |
+
slider.loader = $('<div class="bx-loading" />');
|
196 |
+
slider.viewport.prepend(slider.loader);
|
197 |
+
// set el to a massive width, to hold any needed slides
|
198 |
+
// also strip any margin and padding from el
|
199 |
+
el.css({
|
200 |
+
width: slider.settings.mode == 'horizontal' ? (slider.children.length * 100 + 215) + '%' : 'auto',
|
201 |
+
position: 'relative'
|
202 |
+
});
|
203 |
+
// if using CSS, add the easing property
|
204 |
+
if(slider.usingCSS && slider.settings.easing){
|
205 |
+
el.css('-' + slider.cssPrefix + '-transition-timing-function', slider.settings.easing);
|
206 |
+
// if not using CSS and no easing value was supplied, use the default JS animation easing (swing)
|
207 |
+
}else if(!slider.settings.easing){
|
208 |
+
slider.settings.easing = 'swing';
|
209 |
+
}
|
210 |
+
var slidesShowing = getNumberSlidesShowing();
|
211 |
+
// make modifications to the viewport (.bx-viewport)
|
212 |
+
slider.viewport.css({
|
213 |
+
width: '100%',
|
214 |
+
overflow: 'hidden',
|
215 |
+
position: 'relative'
|
216 |
+
});
|
217 |
+
slider.viewport.parent().css({
|
218 |
+
maxWidth: getViewportMaxWidth()
|
219 |
+
});
|
220 |
+
// make modification to the wrapper (.bx-wrapper)
|
221 |
+
if(!slider.settings.pager) {
|
222 |
+
slider.viewport.parent().css({
|
223 |
+
margin: '0 auto 0px'
|
224 |
+
});
|
225 |
+
}
|
226 |
+
// apply css to all slider children
|
227 |
+
slider.children.css({
|
228 |
+
'float': slider.settings.mode == 'horizontal' ? 'left' : 'none',
|
229 |
+
listStyle: 'none',
|
230 |
+
position: 'relative'
|
231 |
+
});
|
232 |
+
// apply the calculated width after the float is applied to prevent scrollbar interference
|
233 |
+
slider.children.css('width', getSlideWidth());
|
234 |
+
// if slideMargin is supplied, add the css
|
235 |
+
if(slider.settings.mode == 'horizontal' && slider.settings.slideMargin > 0) slider.children.css('marginRight', slider.settings.slideMargin);
|
236 |
+
if(slider.settings.mode == 'vertical' && slider.settings.slideMargin > 0) slider.children.css('marginBottom', slider.settings.slideMargin);
|
237 |
+
// if "fade" mode, add positioning and z-index CSS
|
238 |
+
if(slider.settings.mode == 'fade'){
|
239 |
+
slider.children.css({
|
240 |
+
position: 'absolute',
|
241 |
+
zIndex: 0,
|
242 |
+
display: 'none'
|
243 |
+
});
|
244 |
+
// prepare the z-index on the showing element
|
245 |
+
slider.children.eq(slider.settings.startSlide).css({zIndex: slider.settings.slideZIndex, display: 'block'});
|
246 |
+
}
|
247 |
+
// create an element to contain all slider controls (pager, start / stop, etc)
|
248 |
+
slider.controls.el = $('<div class="bx-controls" />');
|
249 |
+
// if captions are requested, add them
|
250 |
+
if(slider.settings.captions) appendCaptions();
|
251 |
+
// check if startSlide is last slide
|
252 |
+
slider.active.last = slider.settings.startSlide == getPagerQty() - 1;
|
253 |
+
// if video is true, set up the fitVids plugin
|
254 |
+
if(slider.settings.video) el.fitVids();
|
255 |
+
// set the default preload selector (visible)
|
256 |
+
var preloadSelector = slider.children.eq(slider.settings.startSlide);
|
257 |
+
if (slider.settings.preloadImages == "all") preloadSelector = slider.children;
|
258 |
+
// only check for control addition if not in "ticker" mode
|
259 |
+
if(!slider.settings.ticker){
|
260 |
+
// if pager is requested, add it
|
261 |
+
if(slider.settings.pager) appendPager();
|
262 |
+
// if controls are requested, add them
|
263 |
+
if(slider.settings.controls) appendControls();
|
264 |
+
// if auto is true, and auto controls are requested, add them
|
265 |
+
if(slider.settings.auto && slider.settings.autoControls) appendControlsAuto();
|
266 |
+
// if any control option is requested, add the controls wrapper
|
267 |
+
if(slider.settings.controls || slider.settings.autoControls || slider.settings.pager) slider.viewport.after(slider.controls.el);
|
268 |
+
// if ticker mode, do not allow a pager
|
269 |
+
}else{
|
270 |
+
slider.settings.pager = false;
|
271 |
+
}
|
272 |
+
// preload all images, then perform final DOM / CSS modifications that depend on images being loaded
|
273 |
+
loadElements(preloadSelector, start);
|
274 |
+
}
|
275 |
+
|
276 |
+
var loadElements = function(selector, callback){
|
277 |
+
var total = selector.find('img, iframe').length;
|
278 |
+
if (total == 0){
|
279 |
+
callback();
|
280 |
+
return;
|
281 |
+
}
|
282 |
+
var count = 0;
|
283 |
+
selector.find('img, iframe').each(function(){
|
284 |
+
$(this).one('load', function() {
|
285 |
+
if(++count == total) callback();
|
286 |
+
}).each(function() {
|
287 |
+
if(this.complete) $(this).load();
|
288 |
+
});
|
289 |
+
});
|
290 |
+
}
|
291 |
+
|
292 |
+
/**
|
293 |
+
* Start the slider
|
294 |
+
*/
|
295 |
+
var start = function(){
|
296 |
+
// if infinite loop, prepare additional slides
|
297 |
+
if(slider.settings.infiniteLoop && slider.settings.mode != 'fade' && !slider.settings.ticker){
|
298 |
+
var slice = slider.settings.mode == 'vertical' ? slider.settings.minSlides : slider.settings.maxSlides;
|
299 |
+
var sliceAppend = slider.children.slice(0, slice).clone().addClass('bx-clone');
|
300 |
+
var slicePrepend = slider.children.slice(-slice).clone().addClass('bx-clone');
|
301 |
+
el.append(sliceAppend).prepend(slicePrepend);
|
302 |
+
}
|
303 |
+
// remove the loading DOM element
|
304 |
+
slider.loader.remove();
|
305 |
+
// set the left / top position of "el"
|
306 |
+
setSlidePosition();
|
307 |
+
// if "vertical" mode, always use adaptiveHeight to prevent odd behavior
|
308 |
+
if (slider.settings.mode == 'vertical') slider.settings.adaptiveHeight = true;
|
309 |
+
// set the viewport height
|
310 |
+
slider.viewport.height(getViewportHeight());
|
311 |
+
// make sure everything is positioned just right (same as a window resize)
|
312 |
+
el.redrawSlider();
|
313 |
+
// onSliderLoad callback
|
314 |
+
slider.settings.onSliderLoad(slider.active.index);
|
315 |
+
// slider has been fully initialized
|
316 |
+
slider.initialized = true;
|
317 |
+
// bind the resize call to the window
|
318 |
+
if (slider.settings.responsive) $(window).bind('resize', resizeWindow);
|
319 |
+
// if auto is true and has more than 1 page, start the show
|
320 |
+
if (slider.settings.auto && slider.settings.autoStart && (getPagerQty() > 1 || slider.settings.autoSlideForOnePage)) initAuto();
|
321 |
+
// if ticker is true, start the ticker
|
322 |
+
if (slider.settings.ticker) initTicker();
|
323 |
+
// if pager is requested, make the appropriate pager link active
|
324 |
+
if (slider.settings.pager) updatePagerActive(slider.settings.startSlide);
|
325 |
+
// check for any updates to the controls (like hideControlOnEnd updates)
|
326 |
+
if (slider.settings.controls) updateDirectionControls();
|
327 |
+
// if touchEnabled is true, setup the touch events
|
328 |
+
if (slider.settings.touchEnabled && !slider.settings.ticker) initTouch();
|
329 |
+
}
|
330 |
+
|
331 |
+
/**
|
332 |
+
* Returns the calculated height of the viewport, used to determine either adaptiveHeight or the maxHeight value
|
333 |
+
*/
|
334 |
+
var getViewportHeight = function(){
|
335 |
+
var height = 0;
|
336 |
+
// first determine which children (slides) should be used in our height calculation
|
337 |
+
var children = $();
|
338 |
+
// if mode is not "vertical" and adaptiveHeight is false, include all children
|
339 |
+
if(slider.settings.mode != 'vertical' && !slider.settings.adaptiveHeight){
|
340 |
+
children = slider.children;
|
341 |
+
}else{
|
342 |
+
// if not carousel, return the single active child
|
343 |
+
if(!slider.carousel){
|
344 |
+
children = slider.children.eq(slider.active.index);
|
345 |
+
// if carousel, return a slice of children
|
346 |
+
}else{
|
347 |
+
// get the individual slide index
|
348 |
+
var currentIndex = slider.settings.moveSlides == 1 ? slider.active.index : slider.active.index * getMoveBy();
|
349 |
+
// add the current slide to the children
|
350 |
+
children = slider.children.eq(currentIndex);
|
351 |
+
// cycle through the remaining "showing" slides
|
352 |
+
for (i = 1; i <= slider.settings.maxSlides - 1; i++){
|
353 |
+
// if looped back to the start
|
354 |
+
if(currentIndex + i >= slider.children.length){
|
355 |
+
children = children.add(slider.children.eq(i - 1));
|
356 |
+
}else{
|
357 |
+
children = children.add(slider.children.eq(currentIndex + i));
|
358 |
+
}
|
359 |
+
}
|
360 |
+
}
|
361 |
+
}
|
362 |
+
// if "vertical" mode, calculate the sum of the heights of the children
|
363 |
+
if(slider.settings.mode == 'vertical'){
|
364 |
+
children.each(function(index) {
|
365 |
+
height += $(this).outerHeight();
|
366 |
+
});
|
367 |
+
// add user-supplied margins
|
368 |
+
if(slider.settings.slideMargin > 0){
|
369 |
+
height += slider.settings.slideMargin * (slider.settings.minSlides - 1);
|
370 |
+
}
|
371 |
+
// if not "vertical" mode, calculate the max height of the children
|
372 |
+
}else{
|
373 |
+
height = Math.max.apply(Math, children.map(function(){
|
374 |
+
return $(this).outerHeight(false);
|
375 |
+
}).get());
|
376 |
+
}
|
377 |
+
|
378 |
+
if(slider.viewport.css('box-sizing') == 'border-box'){
|
379 |
+
height += parseFloat(slider.viewport.css('padding-top')) + parseFloat(slider.viewport.css('padding-bottom')) +
|
380 |
+
parseFloat(slider.viewport.css('border-top-width')) + parseFloat(slider.viewport.css('border-bottom-width'));
|
381 |
+
}else if(slider.viewport.css('box-sizing') == 'padding-box'){
|
382 |
+
height += parseFloat(slider.viewport.css('padding-top')) + parseFloat(slider.viewport.css('padding-bottom'));
|
383 |
+
}
|
384 |
+
|
385 |
+
return height;
|
386 |
+
}
|
387 |
+
|
388 |
+
/**
|
389 |
+
* Returns the calculated width to be used for the outer wrapper / viewport
|
390 |
+
*/
|
391 |
+
var getViewportMaxWidth = function(){
|
392 |
+
var width = '100%';
|
393 |
+
if(slider.settings.slideWidth > 0){
|
394 |
+
if(slider.settings.mode == 'horizontal'){
|
395 |
+
width = (slider.settings.maxSlides * slider.settings.slideWidth) + ((slider.settings.maxSlides - 1) * slider.settings.slideMargin);
|
396 |
+
}else{
|
397 |
+
width = slider.settings.slideWidth;
|
398 |
+
}
|
399 |
+
}
|
400 |
+
return width;
|
401 |
+
}
|
402 |
+
|
403 |
+
/**
|
404 |
+
* Returns the calculated width to be applied to each slide
|
405 |
+
*/
|
406 |
+
var getSlideWidth = function(){
|
407 |
+
// start with any user-supplied slide width
|
408 |
+
var newElWidth = slider.settings.slideWidth;
|
409 |
+
// get the current viewport width
|
410 |
+
var wrapWidth = slider.viewport.width();
|
411 |
+
// if slide width was not supplied, or is larger than the viewport use the viewport width
|
412 |
+
if(slider.settings.slideWidth == 0 ||
|
413 |
+
(slider.settings.slideWidth > wrapWidth && !slider.carousel) ||
|
414 |
+
slider.settings.mode == 'vertical'){
|
415 |
+
newElWidth = wrapWidth;
|
416 |
+
// if carousel, use the thresholds to determine the width
|
417 |
+
}else if(slider.settings.maxSlides > 1 && slider.settings.mode == 'horizontal'){
|
418 |
+
if(wrapWidth > slider.maxThreshold){
|
419 |
+
// newElWidth = (wrapWidth - (slider.settings.slideMargin * (slider.settings.maxSlides - 1))) / slider.settings.maxSlides;
|
420 |
+
}else if(wrapWidth < slider.minThreshold){
|
421 |
+
newElWidth = (wrapWidth - (slider.settings.slideMargin * (slider.settings.minSlides - 1))) / slider.settings.minSlides;
|
422 |
+
}
|
423 |
+
}
|
424 |
+
return newElWidth;
|
425 |
+
}
|
426 |
+
|
427 |
+
/**
|
428 |
+
* Returns the number of slides currently visible in the viewport (includes partially visible slides)
|
429 |
+
*/
|
430 |
+
var getNumberSlidesShowing = function(){
|
431 |
+
var slidesShowing = 1;
|
432 |
+
if(slider.settings.mode == 'horizontal' && slider.settings.slideWidth > 0){
|
433 |
+
// if viewport is smaller than minThreshold, return minSlides
|
434 |
+
if(slider.viewport.width() < slider.minThreshold){
|
435 |
+
slidesShowing = slider.settings.minSlides;
|
436 |
+
// if viewport is larger than minThreshold, return maxSlides
|
437 |
+
}else if(slider.viewport.width() > slider.maxThreshold){
|
438 |
+
slidesShowing = slider.settings.maxSlides;
|
439 |
+
// if viewport is between min / max thresholds, divide viewport width by first child width
|
440 |
+
}else{
|
441 |
+
var childWidth = slider.children.first().width() + slider.settings.slideMargin;
|
442 |
+
slidesShowing = Math.floor((slider.viewport.width() +
|
443 |
+
slider.settings.slideMargin) / childWidth);
|
444 |
+
}
|
445 |
+
// if "vertical" mode, slides showing will always be minSlides
|
446 |
+
}else if(slider.settings.mode == 'vertical'){
|
447 |
+
slidesShowing = slider.settings.minSlides;
|
448 |
+
}
|
449 |
+
return slidesShowing;
|
450 |
+
}
|
451 |
+
|
452 |
+
/**
|
453 |
+
* Returns the number of pages (one full viewport of slides is one "page")
|
454 |
+
*/
|
455 |
+
var getPagerQty = function(){
|
456 |
+
var pagerQty = 0;
|
457 |
+
// if moveSlides is specified by the user
|
458 |
+
if(slider.settings.moveSlides > 0){
|
459 |
+
if(slider.settings.infiniteLoop){
|
460 |
+
pagerQty = Math.ceil(slider.children.length / getMoveBy());
|
461 |
+
}else{
|
462 |
+
// use a while loop to determine pages
|
463 |
+
var breakPoint = 0;
|
464 |
+
var counter = 0
|
465 |
+
// when breakpoint goes above children length, counter is the number of pages
|
466 |
+
while (breakPoint < slider.children.length){
|
467 |
+
++pagerQty;
|
468 |
+
breakPoint = counter + getNumberSlidesShowing();
|
469 |
+
counter += slider.settings.moveSlides <= getNumberSlidesShowing() ? slider.settings.moveSlides : getNumberSlidesShowing();
|
470 |
+
}
|
471 |
+
}
|
472 |
+
// if moveSlides is 0 (auto) divide children length by sides showing, then round up
|
473 |
+
}else{
|
474 |
+
pagerQty = Math.ceil(slider.children.length / getNumberSlidesShowing());
|
475 |
+
}
|
476 |
+
return pagerQty;
|
477 |
+
}
|
478 |
+
|
479 |
+
/**
|
480 |
+
* Returns the number of indivual slides by which to shift the slider
|
481 |
+
*/
|
482 |
+
var getMoveBy = function(){
|
483 |
+
// if moveSlides was set by the user and moveSlides is less than number of slides showing
|
484 |
+
if(slider.settings.moveSlides > 0 && slider.settings.moveSlides <= getNumberSlidesShowing()){
|
485 |
+
return slider.settings.moveSlides;
|
486 |
+
}
|
487 |
+
// if moveSlides is 0 (auto)
|
488 |
+
return getNumberSlidesShowing();
|
489 |
+
}
|
490 |
+
|
491 |
+
/**
|
492 |
+
* Sets the slider's (el) left or top position
|
493 |
+
*/
|
494 |
+
var setSlidePosition = function(){
|
495 |
+
// if last slide, not infinite loop, and number of children is larger than specified maxSlides
|
496 |
+
if(slider.children.length > slider.settings.maxSlides && slider.active.last && !slider.settings.infiniteLoop){
|
497 |
+
if (slider.settings.mode == 'horizontal'){
|
498 |
+
// get the last child's position
|
499 |
+
var lastChild = slider.children.last();
|
500 |
+
var position = lastChild.position();
|
501 |
+
// set the left position
|
502 |
+
setPositionProperty(-(position.left - (slider.viewport.width() - lastChild.outerWidth())), 'reset', 0);
|
503 |
+
}else if(slider.settings.mode == 'vertical'){
|
504 |
+
// get the last showing index's position
|
505 |
+
var lastShowingIndex = slider.children.length - slider.settings.minSlides;
|
506 |
+
var position = slider.children.eq(lastShowingIndex).position();
|
507 |
+
// set the top position
|
508 |
+
setPositionProperty(-position.top, 'reset', 0);
|
509 |
+
}
|
510 |
+
// if not last slide
|
511 |
+
}else{
|
512 |
+
// get the position of the first showing slide
|
513 |
+
var position = slider.children.eq(slider.active.index * getMoveBy()).position();
|
514 |
+
// check for last slide
|
515 |
+
if (slider.active.index == getPagerQty() - 1) slider.active.last = true;
|
516 |
+
// set the repective position
|
517 |
+
if (position != undefined){
|
518 |
+
if (slider.settings.mode == 'horizontal') setPositionProperty(-position.left, 'reset', 0);
|
519 |
+
else if (slider.settings.mode == 'vertical') setPositionProperty(-position.top, 'reset', 0);
|
520 |
+
}
|
521 |
+
}
|
522 |
+
}
|
523 |
+
|
524 |
+
/**
|
525 |
+
* Sets the el's animating property position (which in turn will sometimes animate el).
|
526 |
+
* If using CSS, sets the transform property. If not using CSS, sets the top / left property.
|
527 |
+
*
|
528 |
+
* @param value (int)
|
529 |
+
* - the animating property's value
|
530 |
+
*
|
531 |
+
* @param type (string) 'slider', 'reset', 'ticker'
|
532 |
+
* - the type of instance for which the function is being
|
533 |
+
*
|
534 |
+
* @param duration (int)
|
535 |
+
* - the amount of time (in ms) the transition should occupy
|
536 |
+
*
|
537 |
+
* @param params (array) optional
|
538 |
+
* - an optional parameter containing any variables that need to be passed in
|
539 |
+
*/
|
540 |
+
var setPositionProperty = function(value, type, duration, params){
|
541 |
+
// use CSS transform
|
542 |
+
if(slider.usingCSS){
|
543 |
+
// determine the translate3d value
|
544 |
+
var propValue = slider.settings.mode == 'vertical' ? 'translate3d(0, ' + value + 'px, 0)' : 'translate3d(' + value + 'px, 0, 0)';
|
545 |
+
// add the CSS transition-duration
|
546 |
+
el.css('-' + slider.cssPrefix + '-transition-duration', duration / 1000 + 's');
|
547 |
+
if(type == 'slide'){
|
548 |
+
// set the property value
|
549 |
+
el.css(slider.animProp, propValue);
|
550 |
+
// bind a callback method - executes when CSS transition completes
|
551 |
+
el.bind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function(){
|
552 |
+
// unbind the callback
|
553 |
+
el.unbind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd');
|
554 |
+
updateAfterSlideTransition();
|
555 |
+
});
|
556 |
+
}else if(type == 'reset'){
|
557 |
+
el.css(slider.animProp, propValue);
|
558 |
+
}else if(type == 'ticker'){
|
559 |
+
// make the transition use 'linear'
|
560 |
+
el.css('-' + slider.cssPrefix + '-transition-timing-function', 'linear');
|
561 |
+
el.css(slider.animProp, propValue);
|
562 |
+
// bind a callback method - executes when CSS transition completes
|
563 |
+
el.bind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function(){
|
564 |
+
// unbind the callback
|
565 |
+
el.unbind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd');
|
566 |
+
// reset the position
|
567 |
+
setPositionProperty(params['resetValue'], 'reset', 0);
|
568 |
+
// start the loop again
|
569 |
+
tickerLoop();
|
570 |
+
});
|
571 |
+
}
|
572 |
+
// use JS animate
|
573 |
+
}else{
|
574 |
+
var animateObj = {};
|
575 |
+
animateObj[slider.animProp] = value;
|
576 |
+
if(type == 'slide'){
|
577 |
+
el.animate(animateObj, duration, slider.settings.easing, function(){
|
578 |
+
updateAfterSlideTransition();
|
579 |
+
});
|
580 |
+
}else if(type == 'reset'){
|
581 |
+
el.css(slider.animProp, value)
|
582 |
+
}else if(type == 'ticker'){
|
583 |
+
el.animate(animateObj, speed, 'linear', function(){
|
584 |
+
setPositionProperty(params['resetValue'], 'reset', 0);
|
585 |
+
// run the recursive loop after animation
|
586 |
+
tickerLoop();
|
587 |
+
});
|
588 |
+
}
|
589 |
+
}
|
590 |
+
}
|
591 |
+
|
592 |
+
/**
|
593 |
+
* Populates the pager with proper amount of pages
|
594 |
+
*/
|
595 |
+
var populatePager = function(){
|
596 |
+
var pagerHtml = '';
|
597 |
+
var pagerQty = getPagerQty();
|
598 |
+
// loop through each pager item
|
599 |
+
for(var i=0; i < pagerQty; i++){
|
600 |
+
var linkContent = '';
|
601 |
+
// if a buildPager function is supplied, use it to get pager link value, else use index + 1
|
602 |
+
if(slider.settings.buildPager && $.isFunction(slider.settings.buildPager)){
|
603 |
+
linkContent = slider.settings.buildPager(i);
|
604 |
+
slider.pagerEl.addClass('bx-custom-pager');
|
605 |
+
}else{
|
606 |
+
linkContent = i + 1;
|
607 |
+
slider.pagerEl.addClass('bx-default-pager');
|
608 |
+
}
|
609 |
+
// var linkContent = slider.settings.buildPager && $.isFunction(slider.settings.buildPager) ? slider.settings.buildPager(i) : i + 1;
|
610 |
+
// add the markup to the string
|
611 |
+
pagerHtml += '<div class="bx-pager-item"><a href="" data-slide-index="' + i + '" class="bx-pager-link">' + linkContent + '</a></div>';
|
612 |
+
};
|
613 |
+
// populate the pager element with pager links
|
614 |
+
slider.pagerEl.html(pagerHtml);
|
615 |
+
}
|
616 |
+
|
617 |
+
/**
|
618 |
+
* Appends the pager to the controls element
|
619 |
+
*/
|
620 |
+
var appendPager = function(){
|
621 |
+
if(!slider.settings.pagerCustom){
|
622 |
+
// create the pager DOM element
|
623 |
+
slider.pagerEl = $('<div class="bx-pager" />');
|
624 |
+
// if a pager selector was supplied, populate it with the pager
|
625 |
+
if(slider.settings.pagerSelector){
|
626 |
+
$(slider.settings.pagerSelector).html(slider.pagerEl);
|
627 |
+
// if no pager selector was supplied, add it after the wrapper
|
628 |
+
}else{
|
629 |
+
slider.controls.el.addClass('bx-has-pager').append(slider.pagerEl);
|
630 |
+
}
|
631 |
+
// populate the pager
|
632 |
+
populatePager();
|
633 |
+
}else{
|
634 |
+
slider.pagerEl = $(slider.settings.pagerCustom);
|
635 |
+
}
|
636 |
+
// assign the pager click binding
|
637 |
+
slider.pagerEl.on('click', 'a', clickPagerBind);
|
638 |
+
}
|
639 |
+
|
640 |
+
/**
|
641 |
+
* Appends prev / next controls to the controls element
|
642 |
+
*/
|
643 |
+
var appendControls = function(){
|
644 |
+
slider.controls.next = $('<a class="bx-next" href="">' + slider.settings.nextText + '</a>');
|
645 |
+
slider.controls.prev = $('<a class="bx-prev" href="">' + slider.settings.prevText + '</a>');
|
646 |
+
// bind click actions to the controls
|
647 |
+
slider.controls.next.bind('click', clickNextBind);
|
648 |
+
slider.controls.prev.bind('click', clickPrevBind);
|
649 |
+
// if nextSlector was supplied, populate it
|
650 |
+
if(slider.settings.nextSelector){
|
651 |
+
$(slider.settings.nextSelector).append(slider.controls.next);
|
652 |
+
}
|
653 |
+
// if prevSlector was supplied, populate it
|
654 |
+
if(slider.settings.prevSelector){
|
655 |
+
$(slider.settings.prevSelector).append(slider.controls.prev);
|
656 |
+
}
|
657 |
+
// if no custom selectors were supplied
|
658 |
+
if(!slider.settings.nextSelector && !slider.settings.prevSelector){
|
659 |
+
// add the controls to the DOM
|
660 |
+
slider.controls.directionEl = $('<div class="bx-controls-direction" />');
|
661 |
+
// add the control elements to the directionEl
|
662 |
+
slider.controls.directionEl.append(slider.controls.prev).append(slider.controls.next);
|
663 |
+
// slider.viewport.append(slider.controls.directionEl);
|
664 |
+
slider.controls.el.addClass('bx-has-controls-direction').append(slider.controls.directionEl);
|
665 |
+
}
|
666 |
+
}
|
667 |
+
|
668 |
+
/**
|
669 |
+
* Appends start / stop auto controls to the controls element
|
670 |
+
*/
|
671 |
+
var appendControlsAuto = function(){
|
672 |
+
slider.controls.start = $('<div class="bx-controls-auto-item"><a class="bx-start" href="">' + slider.settings.startText + '</a></div>');
|
673 |
+
slider.controls.stop = $('<div class="bx-controls-auto-item"><a class="bx-stop" href="">' + slider.settings.stopText + '</a></div>');
|
674 |
+
// add the controls to the DOM
|
675 |
+
slider.controls.autoEl = $('<div class="bx-controls-auto" />');
|
676 |
+
// bind click actions to the controls
|
677 |
+
slider.controls.autoEl.on('click', '.bx-start', clickStartBind);
|
678 |
+
slider.controls.autoEl.on('click', '.bx-stop', clickStopBind);
|
679 |
+
// if autoControlsCombine, insert only the "start" control
|
680 |
+
if(slider.settings.autoControlsCombine){
|
681 |
+
slider.controls.autoEl.append(slider.controls.start);
|
682 |
+
// if autoControlsCombine is false, insert both controls
|
683 |
+
}else{
|
684 |
+
slider.controls.autoEl.append(slider.controls.start).append(slider.controls.stop);
|
685 |
+
}
|
686 |
+
// if auto controls selector was supplied, populate it with the controls
|
687 |
+
if(slider.settings.autoControlsSelector){
|
688 |
+
$(slider.settings.autoControlsSelector).html(slider.controls.autoEl);
|
689 |
+
// if auto controls selector was not supplied, add it after the wrapper
|
690 |
+
}else{
|
691 |
+
slider.controls.el.addClass('bx-has-controls-auto').append(slider.controls.autoEl);
|
692 |
+
}
|
693 |
+
// update the auto controls
|
694 |
+
updateAutoControls(slider.settings.autoStart ? 'stop' : 'start');
|
695 |
+
}
|
696 |
+
|
697 |
+
/**
|
698 |
+
* Appends image captions to the DOM
|
699 |
+
*/
|
700 |
+
var appendCaptions = function(){
|
701 |
+
// cycle through each child
|
702 |
+
slider.children.each(function(index){
|
703 |
+
// get the image title attribute
|
704 |
+
var title = $(this).find('img:first').attr('title');
|
705 |
+
// append the caption
|
706 |
+
if (title != undefined && ('' + title).length) {
|
707 |
+
$(this).append('<div class="bx-caption"><span>' + title + '</span></div>');
|
708 |
+
}
|
709 |
+
});
|
710 |
+
}
|
711 |
+
|
712 |
+
/**
|
713 |
+
* Click next binding
|
714 |
+
*
|
715 |
+
* @param e (event)
|
716 |
+
* - DOM event object
|
717 |
+
*/
|
718 |
+
var clickNextBind = function(e){
|
719 |
+
// if auto show is running, stop it
|
720 |
+
if (slider.settings.auto) el.stopAuto();
|
721 |
+
el.goToNextSlide();
|
722 |
+
e.preventDefault();
|
723 |
+
}
|
724 |
+
|
725 |
+
/**
|
726 |
+
* Click prev binding
|
727 |
+
*
|
728 |
+
* @param e (event)
|
729 |
+
* - DOM event object
|
730 |
+
*/
|
731 |
+
var clickPrevBind = function(e){
|
732 |
+
// if auto show is running, stop it
|
733 |
+
if (slider.settings.auto) el.stopAuto();
|
734 |
+
el.goToPrevSlide();
|
735 |
+
e.preventDefault();
|
736 |
+
}
|
737 |
+
|
738 |
+
/**
|
739 |
+
* Click start binding
|
740 |
+
*
|
741 |
+
* @param e (event)
|
742 |
+
* - DOM event object
|
743 |
+
*/
|
744 |
+
var clickStartBind = function(e){
|
745 |
+
el.startAuto();
|
746 |
+
e.preventDefault();
|
747 |
+
}
|
748 |
+
|
749 |
+
/**
|
750 |
+
* Click stop binding
|
751 |
+
*
|
752 |
+
* @param e (event)
|
753 |
+
* - DOM event object
|
754 |
+
*/
|
755 |
+
var clickStopBind = function(e){
|
756 |
+
el.stopAuto();
|
757 |
+
e.preventDefault();
|
758 |
+
}
|
759 |
+
|
760 |
+
/**
|
761 |
+
* Click pager binding
|
762 |
+
*
|
763 |
+
* @param e (event)
|
764 |
+
* - DOM event object
|
765 |
+
*/
|
766 |
+
var clickPagerBind = function(e){
|
767 |
+
// if auto show is running, stop it
|
768 |
+
if (slider.settings.auto) el.stopAuto();
|
769 |
+
var pagerLink = $(e.currentTarget);
|
770 |
+
if(pagerLink.attr('data-slide-index') !== undefined){
|
771 |
+
var pagerIndex = parseInt(pagerLink.attr('data-slide-index'));
|
772 |
+
// if clicked pager link is not active, continue with the goToSlide call
|
773 |
+
if(pagerIndex != slider.active.index) el.goToSlide(pagerIndex);
|
774 |
+
e.preventDefault();
|
775 |
+
}
|
776 |
+
}
|
777 |
+
|
778 |
+
/**
|
779 |
+
* Updates the pager links with an active class
|
780 |
+
*
|
781 |
+
* @param slideIndex (int)
|
782 |
+
* - index of slide to make active
|
783 |
+
*/
|
784 |
+
var updatePagerActive = function(slideIndex){
|
785 |
+
// if "short" pager type
|
786 |
+
var len = slider.children.length; // nb of children
|
787 |
+
if(slider.settings.pagerType == 'short'){
|
788 |
+
if(slider.settings.maxSlides > 1) {
|
789 |
+
len = Math.ceil(slider.children.length/slider.settings.maxSlides);
|
790 |
+
}
|
791 |
+
slider.pagerEl.html( (slideIndex + 1) + slider.settings.pagerShortSeparator + len);
|
792 |
+
return;
|
793 |
+
}
|
794 |
+
// remove all pager active classes
|
795 |
+
slider.pagerEl.find('a').removeClass('active');
|
796 |
+
// apply the active class for all pagers
|
797 |
+
slider.pagerEl.each(function(i, el) { $(el).find('a').eq(slideIndex).addClass('active'); });
|
798 |
+
}
|
799 |
+
|
800 |
+
/**
|
801 |
+
* Performs needed actions after a slide transition
|
802 |
+
*/
|
803 |
+
var updateAfterSlideTransition = function(){
|
804 |
+
// if infinte loop is true
|
805 |
+
if(slider.settings.infiniteLoop){
|
806 |
+
var position = '';
|
807 |
+
// first slide
|
808 |
+
if(slider.active.index == 0){
|
809 |
+
// set the new position
|
810 |
+
position = slider.children.eq(0).position();
|
811 |
+
// carousel, last slide
|
812 |
+
}else if(slider.active.index == getPagerQty() - 1 && slider.carousel){
|
813 |
+
position = slider.children.eq((getPagerQty() - 1) * getMoveBy()).position();
|
814 |
+
// last slide
|
815 |
+
}else if(slider.active.index == slider.children.length - 1){
|
816 |
+
position = slider.children.eq(slider.children.length - 1).position();
|
817 |
+
}
|
818 |
+
if(position){
|
819 |
+
if (slider.settings.mode == 'horizontal') { setPositionProperty(-position.left, 'reset', 0); }
|
820 |
+
else if (slider.settings.mode == 'vertical') { setPositionProperty(-position.top, 'reset', 0); }
|
821 |
+
}
|
822 |
+
}
|
823 |
+
// declare that the transition is complete
|
824 |
+
slider.working = false;
|
825 |
+
// onSlideAfter callback
|
826 |
+
slider.settings.onSlideAfter(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);
|
827 |
+
}
|
828 |
+
|
829 |
+
/**
|
830 |
+
* Updates the auto controls state (either active, or combined switch)
|
831 |
+
*
|
832 |
+
* @param state (string) "start", "stop"
|
833 |
+
* - the new state of the auto show
|
834 |
+
*/
|
835 |
+
var updateAutoControls = function(state){
|
836 |
+
// if autoControlsCombine is true, replace the current control with the new state
|
837 |
+
if(slider.settings.autoControlsCombine){
|
838 |
+
slider.controls.autoEl.html(slider.controls[state]);
|
839 |
+
// if autoControlsCombine is false, apply the "active" class to the appropriate control
|
840 |
+
}else{
|
841 |
+
slider.controls.autoEl.find('a').removeClass('active');
|
842 |
+
slider.controls.autoEl.find('a:not(.bx-' + state + ')').addClass('active');
|
843 |
+
}
|
844 |
+
}
|
845 |
+
|
846 |
+
/**
|
847 |
+
* Updates the direction controls (checks if either should be hidden)
|
848 |
+
*/
|
849 |
+
var updateDirectionControls = function(){
|
850 |
+
if(getPagerQty() == 1){
|
851 |
+
slider.controls.prev.addClass('disabled');
|
852 |
+
slider.controls.next.addClass('disabled');
|
853 |
+
}else if(!slider.settings.infiniteLoop && slider.settings.hideControlOnEnd){
|
854 |
+
// if first slide
|
855 |
+
if (slider.active.index == 0){
|
856 |
+
slider.controls.prev.addClass('disabled');
|
857 |
+
slider.controls.next.removeClass('disabled');
|
858 |
+
// if last slide
|
859 |
+
}else if(slider.active.index == getPagerQty() - 1){
|
860 |
+
slider.controls.next.addClass('disabled');
|
861 |
+
slider.controls.prev.removeClass('disabled');
|
862 |
+
// if any slide in the middle
|
863 |
+
}else{
|
864 |
+
slider.controls.prev.removeClass('disabled');
|
865 |
+
slider.controls.next.removeClass('disabled');
|
866 |
+
}
|
867 |
+
}
|
868 |
+
}
|
869 |
+
|
870 |
+
/**
|
871 |
+
* Initialzes the auto process
|
872 |
+
*/
|
873 |
+
var initAuto = function(){
|
874 |
+
// if autoDelay was supplied, launch the auto show using a setTimeout() call
|
875 |
+
if(slider.settings.autoDelay > 0){
|
876 |
+
var timeout = setTimeout(el.startAuto, slider.settings.autoDelay);
|
877 |
+
// if autoDelay was not supplied, start the auto show normally
|
878 |
+
}else{
|
879 |
+
el.startAuto();
|
880 |
+
}
|
881 |
+
// if autoHover is requested
|
882 |
+
if(slider.settings.autoHover){
|
883 |
+
// on el hover
|
884 |
+
el.hover(function(){
|
885 |
+
// if the auto show is currently playing (has an active interval)
|
886 |
+
if(slider.interval){
|
887 |
+
// stop the auto show and pass true agument which will prevent control update
|
888 |
+
el.stopAuto(true);
|
889 |
+
// create a new autoPaused value which will be used by the relative "mouseout" event
|
890 |
+
slider.autoPaused = true;
|
891 |
+
}
|
892 |
+
}, function(){
|
893 |
+
// if the autoPaused value was created be the prior "mouseover" event
|
894 |
+
if(slider.autoPaused){
|
895 |
+
// start the auto show and pass true agument which will prevent control update
|
896 |
+
el.startAuto(true);
|
897 |
+
// reset the autoPaused value
|
898 |
+
slider.autoPaused = null;
|
899 |
+
}
|
900 |
+
});
|
901 |
+
}
|
902 |
+
}
|
903 |
+
|
904 |
+
/**
|
905 |
+
* Initialzes the ticker process
|
906 |
+
*/
|
907 |
+
var initTicker = function(){
|
908 |
+
var startPosition = 0;
|
909 |
+
// if autoDirection is "next", append a clone of the entire slider
|
910 |
+
if(slider.settings.autoDirection == 'next'){
|
911 |
+
el.append(slider.children.clone().addClass('bx-clone'));
|
912 |
+
// if autoDirection is "prev", prepend a clone of the entire slider, and set the left position
|
913 |
+
}else{
|
914 |
+
el.prepend(slider.children.clone().addClass('bx-clone'));
|
915 |
+
var position = slider.children.first().position();
|
916 |
+
startPosition = slider.settings.mode == 'horizontal' ? -position.left : -position.top;
|
917 |
+
}
|
918 |
+
setPositionProperty(startPosition, 'reset', 0);
|
919 |
+
// do not allow controls in ticker mode
|
920 |
+
slider.settings.pager = false;
|
921 |
+
slider.settings.controls = false;
|
922 |
+
slider.settings.autoControls = false;
|
923 |
+
// if autoHover is requested
|
924 |
+
if(slider.settings.tickerHover && !slider.usingCSS){
|
925 |
+
// on el hover
|
926 |
+
slider.viewport.hover(function(){
|
927 |
+
el.stop();
|
928 |
+
}, function(){
|
929 |
+
// calculate the total width of children (used to calculate the speed ratio)
|
930 |
+
var totalDimens = 0;
|
931 |
+
slider.children.each(function(index){
|
932 |
+
totalDimens += slider.settings.mode == 'horizontal' ? $(this).outerWidth(true) : $(this).outerHeight(true);
|
933 |
+
});
|
934 |
+
// calculate the speed ratio (used to determine the new speed to finish the paused animation)
|
935 |
+
var ratio = slider.settings.speed / totalDimens;
|
936 |
+
// determine which property to use
|
937 |
+
var property = slider.settings.mode == 'horizontal' ? 'left' : 'top';
|
938 |
+
// calculate the new speed
|
939 |
+
var newSpeed = ratio * (totalDimens - (Math.abs(parseInt(el.css(property)))));
|
940 |
+
tickerLoop(newSpeed);
|
941 |
+
});
|
942 |
+
}
|
943 |
+
// start the ticker loop
|
944 |
+
tickerLoop();
|
945 |
+
}
|
946 |
+
|
947 |
+
/**
|
948 |
+
* Runs a continuous loop, news ticker-style
|
949 |
+
*/
|
950 |
+
var tickerLoop = function(resumeSpeed){
|
951 |
+
speed = resumeSpeed ? resumeSpeed : slider.settings.speed;
|
952 |
+
var position = {left: 0, top: 0};
|
953 |
+
var reset = {left: 0, top: 0};
|
954 |
+
// if "next" animate left position to last child, then reset left to 0
|
955 |
+
if(slider.settings.autoDirection == 'next'){
|
956 |
+
position = el.find('.bx-clone').first().position();
|
957 |
+
// if "prev" animate left position to 0, then reset left to first non-clone child
|
958 |
+
}else{
|
959 |
+
reset = slider.children.first().position();
|
960 |
+
}
|
961 |
+
var animateProperty = slider.settings.mode == 'horizontal' ? -position.left : -position.top;
|
962 |
+
var resetValue = slider.settings.mode == 'horizontal' ? -reset.left : -reset.top;
|
963 |
+
var params = {resetValue: resetValue};
|
964 |
+
setPositionProperty(animateProperty, 'ticker', speed, params);
|
965 |
+
}
|
966 |
+
|
967 |
+
/**
|
968 |
+
* Initializes touch events
|
969 |
+
*/
|
970 |
+
var initTouch = function(){
|
971 |
+
// initialize object to contain all touch values
|
972 |
+
slider.touch = {
|
973 |
+
start: {x: 0, y: 0},
|
974 |
+
end: {x: 0, y: 0}
|
975 |
+
}
|
976 |
+
slider.viewport.bind('touchstart', onTouchStart);
|
977 |
+
}
|
978 |
+
|
979 |
+
/**
|
980 |
+
* Event handler for "touchstart"
|
981 |
+
*
|
982 |
+
* @param e (event)
|
983 |
+
* - DOM event object
|
984 |
+
*/
|
985 |
+
var onTouchStart = function(e){
|
986 |
+
if(slider.working){
|
987 |
+
e.preventDefault();
|
988 |
+
}else{
|
989 |
+
// record the original position when touch starts
|
990 |
+
slider.touch.originalPos = el.position();
|
991 |
+
var orig = e.originalEvent;
|
992 |
+
// record the starting touch x, y coordinates
|
993 |
+
slider.touch.start.x = orig.changedTouches[0].pageX;
|
994 |
+
slider.touch.start.y = orig.changedTouches[0].pageY;
|
995 |
+
// bind a "touchmove" event to the viewport
|
996 |
+
slider.viewport.bind('touchmove', onTouchMove);
|
997 |
+
// bind a "touchend" event to the viewport
|
998 |
+
slider.viewport.bind('touchend', onTouchEnd);
|
999 |
+
}
|
1000 |
+
}
|
1001 |
+
|
1002 |
+
/**
|
1003 |
+
* Event handler for "touchmove"
|
1004 |
+
*
|
1005 |
+
* @param e (event)
|
1006 |
+
* - DOM event object
|
1007 |
+
*/
|
1008 |
+
var onTouchMove = function(e){
|
1009 |
+
var orig = e.originalEvent;
|
1010 |
+
// if scrolling on y axis, do not prevent default
|
1011 |
+
var xMovement = Math.abs(orig.changedTouches[0].pageX - slider.touch.start.x);
|
1012 |
+
var yMovement = Math.abs(orig.changedTouches[0].pageY - slider.touch.start.y);
|
1013 |
+
// x axis swipe
|
1014 |
+
if((xMovement * 3) > yMovement && slider.settings.preventDefaultSwipeX){
|
1015 |
+
e.preventDefault();
|
1016 |
+
// y axis swipe
|
1017 |
+
}else if((yMovement * 3) > xMovement && slider.settings.preventDefaultSwipeY){
|
1018 |
+
e.preventDefault();
|
1019 |
+
}
|
1020 |
+
if(slider.settings.mode != 'fade' && slider.settings.oneToOneTouch){
|
1021 |
+
var value = 0;
|
1022 |
+
// if horizontal, drag along x axis
|
1023 |
+
if(slider.settings.mode == 'horizontal'){
|
1024 |
+
var change = orig.changedTouches[0].pageX - slider.touch.start.x;
|
1025 |
+
value = slider.touch.originalPos.left + change;
|
1026 |
+
// if vertical, drag along y axis
|
1027 |
+
}else{
|
1028 |
+
var change = orig.changedTouches[0].pageY - slider.touch.start.y;
|
1029 |
+
value = slider.touch.originalPos.top + change;
|
1030 |
+
}
|
1031 |
+
setPositionProperty(value, 'reset', 0);
|
1032 |
+
}
|
1033 |
+
}
|
1034 |
+
|
1035 |
+
/**
|
1036 |
+
* Event handler for "touchend"
|
1037 |
+
*
|
1038 |
+
* @param e (event)
|
1039 |
+
* - DOM event object
|
1040 |
+
*/
|
1041 |
+
var onTouchEnd = function(e){
|
1042 |
+
slider.viewport.unbind('touchmove', onTouchMove);
|
1043 |
+
var orig = e.originalEvent;
|
1044 |
+
var value = 0;
|
1045 |
+
// record end x, y positions
|
1046 |
+
slider.touch.end.x = orig.changedTouches[0].pageX;
|
1047 |
+
slider.touch.end.y = orig.changedTouches[0].pageY;
|
1048 |
+
// if fade mode, check if absolute x distance clears the threshold
|
1049 |
+
if(slider.settings.mode == 'fade'){
|
1050 |
+
var distance = Math.abs(slider.touch.start.x - slider.touch.end.x);
|
1051 |
+
if(distance >= slider.settings.swipeThreshold){
|
1052 |
+
slider.touch.start.x > slider.touch.end.x ? el.goToNextSlide() : el.goToPrevSlide();
|
1053 |
+
el.stopAuto();
|
1054 |
+
}
|
1055 |
+
// not fade mode
|
1056 |
+
}else{
|
1057 |
+
var distance = 0;
|
1058 |
+
// calculate distance and el's animate property
|
1059 |
+
if(slider.settings.mode == 'horizontal'){
|
1060 |
+
distance = slider.touch.end.x - slider.touch.start.x;
|
1061 |
+
value = slider.touch.originalPos.left;
|
1062 |
+
}else{
|
1063 |
+
distance = slider.touch.end.y - slider.touch.start.y;
|
1064 |
+
value = slider.touch.originalPos.top;
|
1065 |
+
}
|
1066 |
+
// if not infinite loop and first / last slide, do not attempt a slide transition
|
1067 |
+
if(!slider.settings.infiniteLoop && ((slider.active.index == 0 && distance > 0) || (slider.active.last && distance < 0))){
|
1068 |
+
setPositionProperty(value, 'reset', 200);
|
1069 |
+
}else{
|
1070 |
+
// check if distance clears threshold
|
1071 |
+
if(Math.abs(distance) >= slider.settings.swipeThreshold){
|
1072 |
+
distance < 0 ? el.goToNextSlide() : el.goToPrevSlide();
|
1073 |
+
el.stopAuto();
|
1074 |
+
}else{
|
1075 |
+
// el.animate(property, 200);
|
1076 |
+
setPositionProperty(value, 'reset', 200);
|
1077 |
+
}
|
1078 |
+
}
|
1079 |
+
}
|
1080 |
+
slider.viewport.unbind('touchend', onTouchEnd);
|
1081 |
+
}
|
1082 |
+
|
1083 |
+
/**
|
1084 |
+
* Window resize event callback
|
1085 |
+
*/
|
1086 |
+
var resizeWindow = function(e){
|
1087 |
+
// don't do anything if slider isn't initialized.
|
1088 |
+
if(!slider.initialized) return;
|
1089 |
+
// get the new window dimens (again, thank you IE)
|
1090 |
+
var windowWidthNew = $(window).width();
|
1091 |
+
var windowHeightNew = $(window).height();
|
1092 |
+
// make sure that it is a true window resize
|
1093 |
+
// *we must check this because our dinosaur friend IE fires a window resize event when certain DOM elements
|
1094 |
+
// are resized. Can you just die already?*
|
1095 |
+
if(windowWidth != windowWidthNew || windowHeight != windowHeightNew){
|
1096 |
+
// set the new window dimens
|
1097 |
+
windowWidth = windowWidthNew;
|
1098 |
+
windowHeight = windowHeightNew;
|
1099 |
+
// update all dynamic elements
|
1100 |
+
el.redrawSlider();
|
1101 |
+
// Call user resize handler
|
1102 |
+
slider.settings.onSliderResize.call(el, slider.active.index);
|
1103 |
+
}
|
1104 |
+
}
|
1105 |
+
|
1106 |
+
/**
|
1107 |
+
* ===================================================================================
|
1108 |
+
* = PUBLIC FUNCTIONS
|
1109 |
+
* ===================================================================================
|
1110 |
+
*/
|
1111 |
+
|
1112 |
+
/**
|
1113 |
+
* Performs slide transition to the specified slide
|
1114 |
+
*
|
1115 |
+
* @param slideIndex (int)
|
1116 |
+
* - the destination slide's index (zero-based)
|
1117 |
+
*
|
1118 |
+
* @param direction (string)
|
1119 |
+
* - INTERNAL USE ONLY - the direction of travel ("prev" / "next")
|
1120 |
+
*/
|
1121 |
+
el.goToSlide = function(slideIndex, direction){
|
1122 |
+
// if plugin is currently in motion, ignore request
|
1123 |
+
if(slider.working || slider.active.index == slideIndex) return;
|
1124 |
+
// declare that plugin is in motion
|
1125 |
+
slider.working = true;
|
1126 |
+
// store the old index
|
1127 |
+
slider.oldIndex = slider.active.index;
|
1128 |
+
// if slideIndex is less than zero, set active index to last child (this happens during infinite loop)
|
1129 |
+
if(slideIndex < 0){
|
1130 |
+
slider.active.index = getPagerQty() - 1;
|
1131 |
+
// if slideIndex is greater than children length, set active index to 0 (this happens during infinite loop)
|
1132 |
+
}else if(slideIndex >= getPagerQty()){
|
1133 |
+
slider.active.index = 0;
|
1134 |
+
// set active index to requested slide
|
1135 |
+
}else{
|
1136 |
+
slider.active.index = slideIndex;
|
1137 |
+
}
|
1138 |
+
// onSlideBefore, onSlideNext, onSlidePrev callbacks
|
1139 |
+
slider.settings.onSlideBefore(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);
|
1140 |
+
if(direction == 'next'){
|
1141 |
+
slider.settings.onSlideNext(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);
|
1142 |
+
}else if(direction == 'prev'){
|
1143 |
+
slider.settings.onSlidePrev(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);
|
1144 |
+
}
|
1145 |
+
// check if last slide
|
1146 |
+
slider.active.last = slider.active.index >= getPagerQty() - 1;
|
1147 |
+
// update the pager with active class
|
1148 |
+
if(slider.settings.pager) updatePagerActive(slider.active.index);
|
1149 |
+
// // check for direction control update
|
1150 |
+
if(slider.settings.controls) updateDirectionControls();
|
1151 |
+
// if slider is set to mode: "fade"
|
1152 |
+
if(slider.settings.mode == 'fade'){
|
1153 |
+
// if adaptiveHeight is true and next height is different from current height, animate to the new height
|
1154 |
+
if(slider.settings.adaptiveHeight && slider.viewport.height() != getViewportHeight()){
|
1155 |
+
slider.viewport.animate({height: getViewportHeight()}, slider.settings.adaptiveHeightSpeed);
|
1156 |
+
}
|
1157 |
+
// fade out the visible child and reset its z-index value
|
1158 |
+
slider.children.filter(':visible').fadeOut(slider.settings.speed).css({zIndex: 0});
|
1159 |
+
// fade in the newly requested slide
|
1160 |
+
slider.children.eq(slider.active.index).css('zIndex', slider.settings.slideZIndex+1).fadeIn(slider.settings.speed, function(){
|
1161 |
+
$(this).css('zIndex', slider.settings.slideZIndex);
|
1162 |
+
updateAfterSlideTransition();
|
1163 |
+
});
|
1164 |
+
// slider mode is not "fade"
|
1165 |
+
}else{
|
1166 |
+
// if adaptiveHeight is true and next height is different from current height, animate to the new height
|
1167 |
+
if(slider.settings.adaptiveHeight && slider.viewport.height() != getViewportHeight()){
|
1168 |
+
slider.viewport.animate({height: getViewportHeight()}, slider.settings.adaptiveHeightSpeed);
|
1169 |
+
}
|
1170 |
+
var moveBy = 0;
|
1171 |
+
var position = {left: 0, top: 0};
|
1172 |
+
// if carousel and not infinite loop
|
1173 |
+
if(!slider.settings.infiniteLoop && slider.carousel && slider.active.last){
|
1174 |
+
if(slider.settings.mode == 'horizontal'){
|
1175 |
+
// get the last child position
|
1176 |
+
var lastChild = slider.children.eq(slider.children.length - 1);
|
1177 |
+
position = lastChild.position();
|
1178 |
+
// calculate the position of the last slide
|
1179 |
+
moveBy = slider.viewport.width() - lastChild.outerWidth();
|
1180 |
+
}else{
|
1181 |
+
// get last showing index position
|
1182 |
+
var lastShowingIndex = slider.children.length - slider.settings.minSlides;
|
1183 |
+
position = slider.children.eq(lastShowingIndex).position();
|
1184 |
+
}
|
1185 |
+
// horizontal carousel, going previous while on first slide (infiniteLoop mode)
|
1186 |
+
}else if(slider.carousel && slider.active.last && direction == 'prev'){
|
1187 |
+
// get the last child position
|
1188 |
+
var eq = slider.settings.moveSlides == 1 ? slider.settings.maxSlides - getMoveBy() : ((getPagerQty() - 1) * getMoveBy()) - (slider.children.length - slider.settings.maxSlides);
|
1189 |
+
var lastChild = el.children('.bx-clone').eq(eq);
|
1190 |
+
position = lastChild.position();
|
1191 |
+
// if infinite loop and "Next" is clicked on the last slide
|
1192 |
+
}else if(direction == 'next' && slider.active.index == 0){
|
1193 |
+
// get the last clone position
|
1194 |
+
position = el.find('> .bx-clone').eq(slider.settings.maxSlides).position();
|
1195 |
+
slider.active.last = false;
|
1196 |
+
// normal non-zero requests
|
1197 |
+
}else if(slideIndex >= 0){
|
1198 |
+
var requestEl = slideIndex * getMoveBy();
|
1199 |
+
position = slider.children.eq(requestEl).position();
|
1200 |
+
}
|
1201 |
+
|
1202 |
+
/* If the position doesn't exist
|
1203 |
+
* (e.g. if you destroy the slider on a next click),
|
1204 |
+
* it doesn't throw an error.
|
1205 |
+
*/
|
1206 |
+
if ("undefined" !== typeof(position)) {
|
1207 |
+
var value = slider.settings.mode == 'horizontal' ? -(position.left - moveBy) : -position.top;
|
1208 |
+
// plugin values to be animated
|
1209 |
+
setPositionProperty(value, 'slide', slider.settings.speed);
|
1210 |
+
}
|
1211 |
+
}
|
1212 |
+
}
|
1213 |
+
|
1214 |
+
/**
|
1215 |
+
* Transitions to the next slide in the show
|
1216 |
+
*/
|
1217 |
+
el.goToNextSlide = function(){
|
1218 |
+
// if infiniteLoop is false and last page is showing, disregard call
|
1219 |
+
if (!slider.settings.infiniteLoop && slider.active.last) return;
|
1220 |
+
var pagerIndex = parseInt(slider.active.index) + 1;
|
1221 |
+
el.goToSlide(pagerIndex, 'next');
|
1222 |
+
}
|
1223 |
+
|
1224 |
+
/**
|
1225 |
+
* Transitions to the prev slide in the show
|
1226 |
+
*/
|
1227 |
+
el.goToPrevSlide = function(){
|
1228 |
+
// if infiniteLoop is false and last page is showing, disregard call
|
1229 |
+
if (!slider.settings.infiniteLoop && slider.active.index == 0) return;
|
1230 |
+
var pagerIndex = parseInt(slider.active.index) - 1;
|
1231 |
+
el.goToSlide(pagerIndex, 'prev');
|
1232 |
+
}
|
1233 |
+
|
1234 |
+
/**
|
1235 |
+
* Starts the auto show
|
1236 |
+
*
|
1237 |
+
* @param preventControlUpdate (boolean)
|
1238 |
+
* - if true, auto controls state will not be updated
|
1239 |
+
*/
|
1240 |
+
el.startAuto = function(preventControlUpdate){
|
1241 |
+
// if an interval already exists, disregard call
|
1242 |
+
if(slider.interval) return;
|
1243 |
+
// create an interval
|
1244 |
+
slider.interval = setInterval(function(){
|
1245 |
+
slider.settings.autoDirection == 'next' ? el.goToNextSlide() : el.goToPrevSlide();
|
1246 |
+
}, slider.settings.pause);
|
1247 |
+
// if auto controls are displayed and preventControlUpdate is not true
|
1248 |
+
if (slider.settings.autoControls && preventControlUpdate != true) updateAutoControls('stop');
|
1249 |
+
}
|
1250 |
+
|
1251 |
+
/**
|
1252 |
+
* Stops the auto show
|
1253 |
+
*
|
1254 |
+
* @param preventControlUpdate (boolean)
|
1255 |
+
* - if true, auto controls state will not be updated
|
1256 |
+
*/
|
1257 |
+
el.stopAuto = function(preventControlUpdate){
|
1258 |
+
// if no interval exists, disregard call
|
1259 |
+
if(!slider.interval) return;
|
1260 |
+
// clear the interval
|
1261 |
+
clearInterval(slider.interval);
|
1262 |
+
slider.interval = null;
|
1263 |
+
// if auto controls are displayed and preventControlUpdate is not true
|
1264 |
+
if (slider.settings.autoControls && preventControlUpdate != true) updateAutoControls('start');
|
1265 |
+
}
|
1266 |
+
|
1267 |
+
/**
|
1268 |
+
* Returns current slide index (zero-based)
|
1269 |
+
*/
|
1270 |
+
el.getCurrentSlide = function(){
|
1271 |
+
return slider.active.index;
|
1272 |
+
}
|
1273 |
+
|
1274 |
+
/**
|
1275 |
+
* Returns current slide element
|
1276 |
+
*/
|
1277 |
+
el.getCurrentSlideElement = function(){
|
1278 |
+
return slider.children.eq(slider.active.index);
|
1279 |
+
}
|
1280 |
+
|
1281 |
+
/**
|
1282 |
+
* Returns number of slides in show
|
1283 |
+
*/
|
1284 |
+
el.getSlideCount = function(){
|
1285 |
+
return slider.children.length;
|
1286 |
+
}
|
1287 |
+
|
1288 |
+
/**
|
1289 |
+
* Update all dynamic slider elements
|
1290 |
+
*/
|
1291 |
+
el.redrawSlider = function(){
|
1292 |
+
// resize all children in ratio to new screen size
|
1293 |
+
slider.children.add(el.find('.bx-clone')).width(getSlideWidth());
|
1294 |
+
// adjust the height
|
1295 |
+
slider.viewport.css('height', getViewportHeight());
|
1296 |
+
// update the slide position
|
1297 |
+
if(!slider.settings.ticker) setSlidePosition();
|
1298 |
+
// if active.last was true before the screen resize, we want
|
1299 |
+
// to keep it last no matter what screen size we end on
|
1300 |
+
if (slider.active.last) slider.active.index = getPagerQty() - 1;
|
1301 |
+
// if the active index (page) no longer exists due to the resize, simply set the index as last
|
1302 |
+
if (slider.active.index >= getPagerQty()) slider.active.last = true;
|
1303 |
+
// if a pager is being displayed and a custom pager is not being used, update it
|
1304 |
+
if(slider.settings.pager && !slider.settings.pagerCustom){
|
1305 |
+
populatePager();
|
1306 |
+
updatePagerActive(slider.active.index);
|
1307 |
+
}
|
1308 |
+
}
|
1309 |
+
|
1310 |
+
/**
|
1311 |
+
* Destroy the current instance of the slider (revert everything back to original state)
|
1312 |
+
*/
|
1313 |
+
el.destroySlider = function(){
|
1314 |
+
// don't do anything if slider has already been destroyed
|
1315 |
+
if(!slider.initialized) return;
|
1316 |
+
slider.initialized = false;
|
1317 |
+
$('.bx-clone', this).remove();
|
1318 |
+
slider.children.each(function() {
|
1319 |
+
$(this).data("origStyle") != undefined ? $(this).attr("style", $(this).data("origStyle")) : $(this).removeAttr('style');
|
1320 |
+
});
|
1321 |
+
$(this).data("origStyle") != undefined ? this.attr("style", $(this).data("origStyle")) : $(this).removeAttr('style');
|
1322 |
+
$(this).unwrap().unwrap();
|
1323 |
+
if(slider.controls.el) slider.controls.el.remove();
|
1324 |
+
if(slider.controls.next) slider.controls.next.remove();
|
1325 |
+
if(slider.controls.prev) slider.controls.prev.remove();
|
1326 |
+
if(slider.pagerEl && slider.settings.controls) slider.pagerEl.remove();
|
1327 |
+
$('.bx-caption', this).remove();
|
1328 |
+
if(slider.controls.autoEl) slider.controls.autoEl.remove();
|
1329 |
+
clearInterval(slider.interval);
|
1330 |
+
if(slider.settings.responsive) $(window).unbind('resize', resizeWindow);
|
1331 |
+
}
|
1332 |
+
|
1333 |
+
/**
|
1334 |
+
* Reload the slider (revert all DOM changes, and re-initialize)
|
1335 |
+
*/
|
1336 |
+
el.reloadSlider = function(settings){
|
1337 |
+
if (settings != undefined) options = settings;
|
1338 |
+
el.destroySlider();
|
1339 |
+
init();
|
1340 |
+
}
|
1341 |
+
|
1342 |
+
init();
|
1343 |
+
|
1344 |
+
// returns the current jQuery object
|
1345 |
+
return this;
|
1346 |
+
}
|
1347 |
+
|
1348 |
+
})(jQuery);
|
skin/frontend/base/default/jefferson/Clickview/js/jquery.js
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
|
2 |
+
//@ sourceMappingURL=jquery-1.10.2.min.map
|
3 |
+
*/
|
4 |
+
(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav></:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t
|
5 |
+
}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},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(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);
|
6 |
+
u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,"display"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===x.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+"px":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||x.css(e,"display"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}x.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(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var mn,yn,vn=x.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=o.href}catch(Ln){yn=a.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return"string"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o["*"]&&s("*")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(" ");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&x.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?x("<div>").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,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":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
|
skin/frontend/base/default/jefferson/Clickview/js/script.js
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
$clickview = jQuery.noConflict();
|
2 |
+
|
3 |
+
$clickview(document).ready(function(){
|
4 |
+
|
5 |
+
$clickview('.bxslider_clickview').bxSlider({
|
6 |
+
|
7 |
+
minSlides: 1,
|
8 |
+
maxSlides: 15,
|
9 |
+
slideWidth: 200,
|
10 |
+
slideMargin: 10
|
11 |
+
|
12 |
+
});
|
13 |
+
|
14 |
+
$clickview('.bxslider_clickview_recents').bxSlider({
|
15 |
+
|
16 |
+
minSlides: 1,
|
17 |
+
maxSlides: 15,
|
18 |
+
slideWidth: 200,
|
19 |
+
slideMargin: 10
|
20 |
+
|
21 |
+
});
|
22 |
+
|
23 |
+
$clickview('.bxslider_clickview_best_selling').bxSlider({
|
24 |
+
|
25 |
+
minSlides: 1,
|
26 |
+
maxSlides: 15,
|
27 |
+
slideWidth: 200,
|
28 |
+
slideMargin: 10
|
29 |
+
|
30 |
+
});
|
31 |
+
|
32 |
+
|
33 |
+
|
34 |
+
|
35 |
+
|
36 |
+
|
37 |
+
|
38 |
+
|
39 |
+
|
40 |
+
});
|