Version Notes
Facebook Connect - 1.0.0
Download this release
Release Info
Developer | Dropfin |
Extension | Dropfin_Fbconnect |
Version | 1.0.0 |
Comparing to | |
See all releases |
Version 1.0.0
- app/code/community/Dropfin/Fbconnect/Block/Login.php +33 -0
- app/code/community/Dropfin/Fbconnect/Block/Login/Button.php +62 -0
- app/code/community/Dropfin/Fbconnect/Helper/Data.php +141 -0
- app/code/community/Dropfin/Fbconnect/Helper/Facebook.php +119 -0
- app/code/community/Dropfin/Fbconnect/Model/Facebook/Connect.php +199 -0
- app/code/community/Dropfin/Fbconnect/Model/Resource/Setup.php +63 -0
- app/code/community/Dropfin/Fbconnect/Model/System/Config/Language.php +140 -0
- app/code/community/Dropfin/Fbconnect/Model/System/Config/Themes.php +36 -0
- app/code/community/Dropfin/Fbconnect/controllers/AccountController.php +191 -0
- app/code/community/Dropfin/Fbconnect/etc/config.xml +138 -0
- app/code/community/Dropfin/Fbconnect/etc/system.xml +345 -0
- app/code/community/Dropfin/Fbconnect/sql/fbconnect_setup/install-1.0.0.php +47 -0
- app/design/frontend/base/default/layout/dropfin/fbconnect.xml +124 -0
- app/design/frontend/base/default/template/dropfin/fbconnect/fbcomment.phtml +42 -0
- app/design/frontend/base/default/template/dropfin/fbconnect/fblikebox.phtml +42 -0
- app/design/frontend/base/default/template/dropfin/fbconnect/form/button.phtml +33 -0
- app/design/frontend/base/default/template/dropfin/fbconnect/form/fblogin.phtml +44 -0
- app/design/frontend/base/default/template/dropfin/fbconnect/form/onepage/login.phtml +168 -0
- app/design/frontend/base/default/template/dropfin/fbconnect/form/register.phtml +198 -0
- app/etc/modules/Dropfin_Fbconnect.xml +33 -0
- app/locale/en_US/Dropfin_Fbconnect.csv +34 -0
- package.xml +18 -0
- skin/frontend/base/default/dropfin/fbconnect/css/styles.css +8 -0
- skin/frontend/base/default/dropfin/fbconnect/images/loader.gif +0 -0
- skin/frontend/base/default/dropfin/fbconnect/js/fbconnect.js +37 -0
- skin/frontend/base/default/dropfin/fbconnect/js/jquery-1.10.2.min.js +8 -0
app/code/community/Dropfin/Fbconnect/Block/Login.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Dropfin
|
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 |
+
* DISCLAIMER
|
17 |
+
*
|
18 |
+
* Do not edit or add to this file if you wish to upgrade
|
19 |
+
* this extension to newer versions in the future.
|
20 |
+
*
|
21 |
+
* @category Dropfin
|
22 |
+
* @package Facebook Connect
|
23 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
24 |
+
*/
|
25 |
+
|
26 |
+
class Dropfin_Fbconnect_Block_Login extends Mage_Core_Block_Template
|
27 |
+
{
|
28 |
+
|
29 |
+
protected function _construct() {
|
30 |
+
parent::_construct();
|
31 |
+
}
|
32 |
+
|
33 |
+
}
|
app/code/community/Dropfin/Fbconnect/Block/Login/Button.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Dropfin
|
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 |
+
* DISCLAIMER
|
17 |
+
*
|
18 |
+
* Do not edit or add to this file if you wish to upgrade
|
19 |
+
* this extension to newer versions in the future.
|
20 |
+
*
|
21 |
+
* @category Dropfin
|
22 |
+
* @package Facebook Connect
|
23 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
24 |
+
*/
|
25 |
+
|
26 |
+
class Dropfin_Fbconnect_Block_Login_Button extends Mage_Core_Block_Template
|
27 |
+
{
|
28 |
+
protected $fbconnect = null;
|
29 |
+
protected $userInfo = null;
|
30 |
+
protected $redirectUri = null;
|
31 |
+
|
32 |
+
protected function _construct() {
|
33 |
+
parent::_construct();
|
34 |
+
|
35 |
+
$this->fbconnect = Mage::getSingleton('fbconnect/facebook_connect');
|
36 |
+
|
37 |
+
if(!Mage::helper('dropfin_fbconnect')->isLoginEnable()){
|
38 |
+
return;
|
39 |
+
}
|
40 |
+
|
41 |
+
// CSRF protection
|
42 |
+
Mage::getSingleton('core/session')->setFacebookCsrf($csrf = md5(uniqid(rand(), TRUE)));
|
43 |
+
$this->fbconnect->setState($csrf);
|
44 |
+
|
45 |
+
if(!($redirect = Mage::getSingleton('customer/session')->getBeforeAuthUrl())) {
|
46 |
+
$redirect = Mage::helper('core/url')->getCurrentUrl();
|
47 |
+
}
|
48 |
+
|
49 |
+
// Redirect uri
|
50 |
+
Mage::getSingleton('core/session')->setFacebookRedirect($redirect);
|
51 |
+
}
|
52 |
+
|
53 |
+
protected function _getButtonUrl()
|
54 |
+
{
|
55 |
+
if(!Mage::getSingleton('customer/session')->isLoggedIn()){
|
56 |
+
return $this->fbconnect->createAuthUrl();
|
57 |
+
} else {
|
58 |
+
return $this->getUrl('customer/account');
|
59 |
+
}
|
60 |
+
}
|
61 |
+
|
62 |
+
}
|
app/code/community/Dropfin/Fbconnect/Helper/Data.php
ADDED
@@ -0,0 +1,141 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Dropfin
|
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 |
+
* DISCLAIMER
|
17 |
+
*
|
18 |
+
* Do not edit or add to this file if you wish to upgrade
|
19 |
+
* this extension to newer versions in the future.
|
20 |
+
*
|
21 |
+
* @category Dropfin
|
22 |
+
* @package Facebook Connect
|
23 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
24 |
+
*/
|
25 |
+
|
26 |
+
class Dropfin_Fbconnect_Helper_Data extends Mage_Core_Helper_Abstract {
|
27 |
+
|
28 |
+
const XML_PATH_ENABLED = 'dropfin_fbconnect/general/enable';
|
29 |
+
|
30 |
+
const XML_PATH_APP_ID = 'dropfin_fbconnect/general/app_id';
|
31 |
+
const XML_PATH_APP_SECRET = 'dropfin_fbconnect/general/app_secret';
|
32 |
+
const XML_PATH_LANGUAGE = 'dropfin_fbconnect/general/language';
|
33 |
+
|
34 |
+
const XML_PATH_LOGIN = 'dropfin_fbconnect/general/login';
|
35 |
+
const XML_PATH_LOGIN_BLOCK_TITLE = 'dropfin_fbconnect/general/login_block_title';
|
36 |
+
const XML_PATH_LOGIN_BLOCK_CONTENT = 'dropfin_fbconnect/general/login_block_content';
|
37 |
+
const XML_PATH_LOGIN_BUTTON_TEXT = 'dropfin_fbconnect/general/login_button_text';
|
38 |
+
|
39 |
+
const XML_PATH_SHOW_FANBOX = 'dropfin_fbconnect/general/show_fanbox';
|
40 |
+
const XML_PATH_PAGE_ID = 'dropfin_fbconnect/general/fb_page_id';
|
41 |
+
const XML_PATH_FANBOX_WIDTH = 'dropfin_fbconnect/general/fanbox_width';
|
42 |
+
const XML_PATH_FANBOX_HEIGHT = 'dropfin_fbconnect/general/fanbox_height';
|
43 |
+
const XML_PATH_SHOW_FACES = 'dropfin_fbconnect/general/show_faces';
|
44 |
+
const XML_PATH_SHOW_STREAM = 'dropfin_fbconnect/general/show_stream';
|
45 |
+
const XML_PATH_SHOW_COVER = 'dropfin_fbconnect/general/show_cover';
|
46 |
+
|
47 |
+
const XML_PATH_SHOW_COMMENTBOX = 'dropfin_fbconnect/general/show_comment';
|
48 |
+
const XML_PATH_COMMENTBOX_COLOR = 'dropfin_fbconnect/general/commentbox_color';
|
49 |
+
const XML_PATH_COMMENTBOX_WIDTH = 'dropfin_fbconnect/general/commentbox_width';
|
50 |
+
const XML_PATH_COMMENTBOX_NO = 'dropfin_fbconnect/general/commentbox_no';
|
51 |
+
|
52 |
+
public function _getStoreConfig($xml) {
|
53 |
+
return Mage::getStoreConfig($xml);
|
54 |
+
}
|
55 |
+
|
56 |
+
public function isEnable() {
|
57 |
+
return $this->_getStoreConfig(self::XML_PATH_ENABLED);
|
58 |
+
}
|
59 |
+
|
60 |
+
public function getAppId() {
|
61 |
+
return $this->_getStoreConfig(self::XML_PATH_APP_ID);
|
62 |
+
}
|
63 |
+
|
64 |
+
public function getAppSecret() {
|
65 |
+
return $this->_getStoreConfig(self::XML_PATH_APP_SECRET);
|
66 |
+
}
|
67 |
+
|
68 |
+
public function getLanguage() {
|
69 |
+
return $this->_getStoreConfig(self::XML_PATH_LANGUAGE);
|
70 |
+
}
|
71 |
+
|
72 |
+
public function isLoginEnable() {
|
73 |
+
return $this->_getStoreConfig(self::XML_PATH_LOGIN);
|
74 |
+
}
|
75 |
+
|
76 |
+
public function getLoginBlockTitle() {
|
77 |
+
return $this->_getStoreConfig(self::XML_PATH_LOGIN_BLOCK_TITLE);
|
78 |
+
}
|
79 |
+
|
80 |
+
public function getLoginBlockContent() {
|
81 |
+
return $this->_getStoreConfig(self::XML_PATH_LOGIN_BLOCK_CONTENT);
|
82 |
+
}
|
83 |
+
|
84 |
+
public function getLoginButtonText() {
|
85 |
+
return $this->_getStoreConfig(self::XML_PATH_LOGIN_BUTTON_TEXT);
|
86 |
+
}
|
87 |
+
|
88 |
+
public function showFanBox() {
|
89 |
+
return $this->_getStoreConfig(self::XML_PATH_SHOW_FANBOX);
|
90 |
+
}
|
91 |
+
|
92 |
+
public function getFanboxPageId() {
|
93 |
+
return $this->_getStoreConfig(self::XML_PATH_PAGE_ID);
|
94 |
+
}
|
95 |
+
|
96 |
+
public function getFanboxWidth() {
|
97 |
+
return $this->_getStoreConfig(self::XML_PATH_FANBOX_WIDTH);
|
98 |
+
}
|
99 |
+
|
100 |
+
public function getFanboxHeight() {
|
101 |
+
return $this->_getStoreConfig(self::XML_PATH_FANBOX_HEIGHT);
|
102 |
+
}
|
103 |
+
|
104 |
+
public function showFaces() {
|
105 |
+
if($this->_getStoreConfig(self::XML_PATH_SHOW_FACES)){
|
106 |
+
return 'true';
|
107 |
+
}
|
108 |
+
return 'false';
|
109 |
+
}
|
110 |
+
|
111 |
+
public function showStream() {
|
112 |
+
if($this->_getStoreConfig(self::XML_PATH_SHOW_STREAM)){
|
113 |
+
return 'true';
|
114 |
+
}
|
115 |
+
return 'false';
|
116 |
+
}
|
117 |
+
|
118 |
+
public function showCover() {
|
119 |
+
if($this->_getStoreConfig(self::XML_PATH_SHOW_COVER)){
|
120 |
+
return 'false';
|
121 |
+
}
|
122 |
+
return 'true';
|
123 |
+
}
|
124 |
+
|
125 |
+
public function showCommmentBox() {
|
126 |
+
return $this->_getStoreConfig(self::XML_PATH_SHOW_COMMENTBOX);
|
127 |
+
}
|
128 |
+
|
129 |
+
public function getCommmentBoxColor() {
|
130 |
+
return $this->_getStoreConfig(self::XML_PATH_COMMENTBOX_COLOR);
|
131 |
+
}
|
132 |
+
|
133 |
+
public function getCommmentBoxWidth() {
|
134 |
+
return $this->_getStoreConfig(self::XML_PATH_COMMENTBOX_WIDTH);
|
135 |
+
}
|
136 |
+
|
137 |
+
public function getCommentBoxNo() {
|
138 |
+
return $this->_getStoreConfig(self::XML_PATH_COMMENTBOX_NO);
|
139 |
+
}
|
140 |
+
|
141 |
+
}
|
app/code/community/Dropfin/Fbconnect/Helper/Facebook.php
ADDED
@@ -0,0 +1,119 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Dropfin
|
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 |
+
* DISCLAIMER
|
17 |
+
*
|
18 |
+
* Do not edit or add to this file if you wish to upgrade
|
19 |
+
* this extension to newer versions in the future.
|
20 |
+
*
|
21 |
+
* @category Dropfin
|
22 |
+
* @package Facebook Connect
|
23 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
24 |
+
*/
|
25 |
+
|
26 |
+
class Dropfin_Fbconnect_Helper_Facebook extends Mage_Core_Helper_Abstract {
|
27 |
+
|
28 |
+
public function getUserByFacebookId(Mage_Customer_Model_Customer $customer, $facebookId, $token) {
|
29 |
+
|
30 |
+
$customer->setFbconnectFid($facebookId)
|
31 |
+
->setFbconnectFtoken($token)
|
32 |
+
->save();
|
33 |
+
|
34 |
+
Mage::getSingleton('customer/session')->setCustomerAsLoggedIn($customer);
|
35 |
+
}
|
36 |
+
|
37 |
+
public function createAccount($email, $firstName, $lastName, $facebookId, $token) {
|
38 |
+
|
39 |
+
$customer = Mage::getModel('customer/customer');
|
40 |
+
|
41 |
+
$customer->setWebsiteId(Mage::app()->getWebsite()->getId())
|
42 |
+
->setEmail($email)
|
43 |
+
->setFirstname($firstName)
|
44 |
+
->setLastname($lastName)
|
45 |
+
->setFbconnectFid($facebookId)
|
46 |
+
->setFbconnectFtoken($token)
|
47 |
+
->setPassword($customer->generatePassword(10))
|
48 |
+
->save();
|
49 |
+
|
50 |
+
$customer->setConfirmation(null);
|
51 |
+
$customer->save();
|
52 |
+
|
53 |
+
$customer->sendNewAccountEmail('confirmed', '', Mage::app()->getStore()->getId());
|
54 |
+
|
55 |
+
Mage::getSingleton('customer/session')->setCustomerAsLoggedIn($customer);
|
56 |
+
|
57 |
+
}
|
58 |
+
|
59 |
+
public function loginByCustomer(Mage_Customer_Model_Customer $customer) {
|
60 |
+
|
61 |
+
if($customer->getConfirmation()) {
|
62 |
+
$customer->setConfirmation(null);
|
63 |
+
$customer->save();
|
64 |
+
}
|
65 |
+
|
66 |
+
Mage::getSingleton('customer/session')->setCustomerAsLoggedIn($customer);
|
67 |
+
}
|
68 |
+
|
69 |
+
public function getCustomersByFacebookId($facebookId) {
|
70 |
+
|
71 |
+
$customer = Mage::getModel('customer/customer');
|
72 |
+
|
73 |
+
$collection = $customer->getCollection()
|
74 |
+
->addAttributeToFilter('fbconnect_fid', $facebookId)
|
75 |
+
->setPageSize(1);
|
76 |
+
|
77 |
+
if($customer->getSharingConfig()->isWebsiteScope()) {
|
78 |
+
$collection->addAttributeToFilter(
|
79 |
+
'website_id',
|
80 |
+
Mage::app()->getWebsite()->getId()
|
81 |
+
);
|
82 |
+
}
|
83 |
+
|
84 |
+
if(Mage::getSingleton('customer/session')->isLoggedIn()) {
|
85 |
+
$collection->addFieldToFilter(
|
86 |
+
'entity_id',
|
87 |
+
array('neq' => Mage::getSingleton('customer/session')->getCustomerId())
|
88 |
+
);
|
89 |
+
}
|
90 |
+
|
91 |
+
return $collection;
|
92 |
+
}
|
93 |
+
|
94 |
+
public function getCustomersByEmail($email) {
|
95 |
+
|
96 |
+
$customer = Mage::getModel('customer/customer');
|
97 |
+
|
98 |
+
$collection = $customer->getCollection()
|
99 |
+
->addFieldToFilter('email', $email)
|
100 |
+
->setPageSize(1);
|
101 |
+
|
102 |
+
if($customer->getSharingConfig()->isWebsiteScope()) {
|
103 |
+
$collection->addAttributeToFilter(
|
104 |
+
'website_id',
|
105 |
+
Mage::app()->getWebsite()->getId()
|
106 |
+
);
|
107 |
+
}
|
108 |
+
|
109 |
+
if(Mage::getSingleton('customer/session')->isLoggedIn()) {
|
110 |
+
$collection->addFieldToFilter(
|
111 |
+
'entity_id',
|
112 |
+
array('neq' => Mage::getSingleton('customer/session')->getCustomerId())
|
113 |
+
);
|
114 |
+
}
|
115 |
+
|
116 |
+
return $collection;
|
117 |
+
}
|
118 |
+
|
119 |
+
}
|
app/code/community/Dropfin/Fbconnect/Model/Facebook/Connect.php
ADDED
@@ -0,0 +1,199 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Dropfin
|
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 |
+
* DISCLAIMER
|
17 |
+
*
|
18 |
+
* Do not edit or add to this file if you wish to upgrade
|
19 |
+
* this extension to newer versions in the future.
|
20 |
+
*
|
21 |
+
* @category Dropfin
|
22 |
+
* @package Facebook Connect
|
23 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
24 |
+
*/
|
25 |
+
|
26 |
+
class Dropfin_Fbconnect_Model_Facebook_Connect
|
27 |
+
{
|
28 |
+
const REDIRECT_URI_ROUTE = 'fbconnect/account/connect';
|
29 |
+
|
30 |
+
const OAUTH2_SERVICE_URI = 'https://graph.facebook.com';
|
31 |
+
const OAUTH2_AUTH_URI = 'https://graph.facebook.com/oauth/authorize';
|
32 |
+
const OAUTH2_TOKEN_URI = 'https://graph.facebook.com/oauth/access_token';
|
33 |
+
|
34 |
+
protected $appId = null;
|
35 |
+
protected $appSecret = null;
|
36 |
+
protected $redirectUri = null;
|
37 |
+
protected $state = '';
|
38 |
+
protected $scope = array('email');
|
39 |
+
|
40 |
+
protected $token = null;
|
41 |
+
|
42 |
+
public function __construct($params = array())
|
43 |
+
{
|
44 |
+
if(($this->isEnabled = $this->_isEnabled())) {
|
45 |
+
$this->appId = $this->_getAppId();
|
46 |
+
$this->appSecret = $this->_getAppSecret();
|
47 |
+
$this->redirectUri = Mage::getModel('core/url')->sessionUrlVar(
|
48 |
+
Mage::getUrl(self::REDIRECT_URI_ROUTE)
|
49 |
+
);
|
50 |
+
|
51 |
+
if(!empty($params['scope'])) {
|
52 |
+
$this->scope = $params['scope'];
|
53 |
+
}
|
54 |
+
|
55 |
+
if(!empty($params['state'])) {
|
56 |
+
$this->state = $params['state'];
|
57 |
+
}
|
58 |
+
}
|
59 |
+
}
|
60 |
+
|
61 |
+
public function setState($state)
|
62 |
+
{
|
63 |
+
$this->state = $state;
|
64 |
+
}
|
65 |
+
|
66 |
+
public function getAccessToken()
|
67 |
+
{
|
68 |
+
if(empty($this->token)) {
|
69 |
+
$this->fetchAccessToken();
|
70 |
+
}
|
71 |
+
|
72 |
+
return json_encode($this->token);
|
73 |
+
}
|
74 |
+
|
75 |
+
public function createAuthUrl()
|
76 |
+
{
|
77 |
+
$url =
|
78 |
+
self::OAUTH2_AUTH_URI.'?'.
|
79 |
+
http_build_query(
|
80 |
+
array(
|
81 |
+
'client_id' => $this->appId,
|
82 |
+
'redirect_uri' => $this->redirectUri,
|
83 |
+
'state' => $this->state,
|
84 |
+
'scope' => implode(',', $this->scope)
|
85 |
+
)
|
86 |
+
);
|
87 |
+
return $url;
|
88 |
+
}
|
89 |
+
|
90 |
+
public function api($endpoint, $method = 'GET', $params = array())
|
91 |
+
{
|
92 |
+
if(empty($this->token)) {
|
93 |
+
$this->fetchAccessToken();
|
94 |
+
}
|
95 |
+
|
96 |
+
$url = self::OAUTH2_SERVICE_URI.$endpoint;
|
97 |
+
|
98 |
+
$method = strtoupper($method);
|
99 |
+
|
100 |
+
$params = array_merge(array(
|
101 |
+
'access_token' => $this->token->access_token
|
102 |
+
), $params);
|
103 |
+
|
104 |
+
$response = $this->_httpRequest($url, $method, $params);
|
105 |
+
|
106 |
+
return $response;
|
107 |
+
}
|
108 |
+
|
109 |
+
protected function fetchAccessToken()
|
110 |
+
{
|
111 |
+
if(empty($_REQUEST['code'])) {
|
112 |
+
throw new Exception(
|
113 |
+
Mage::helper('dropfin_fbconnect')->__('Unable to retrieve access code.')
|
114 |
+
);
|
115 |
+
}
|
116 |
+
|
117 |
+
$response = $this->_httpRequest(
|
118 |
+
self::OAUTH2_TOKEN_URI,
|
119 |
+
'POST',
|
120 |
+
array(
|
121 |
+
'code' => $_REQUEST['code'],
|
122 |
+
'redirect_uri' => $this->redirectUri,
|
123 |
+
'client_id' => $this->appId,
|
124 |
+
'client_secret' => $this->appSecret,
|
125 |
+
'grant_type' => 'authorization_code'
|
126 |
+
)
|
127 |
+
);
|
128 |
+
|
129 |
+
$this->token = $response;
|
130 |
+
}
|
131 |
+
|
132 |
+
protected function _httpRequest($url, $method = 'GET', $params = array())
|
133 |
+
{
|
134 |
+
$connect = new Zend_Http_Client($url, array('timeout' => 60));
|
135 |
+
|
136 |
+
switch ($method) {
|
137 |
+
case 'GET':
|
138 |
+
$connect->setParameterGet($params);
|
139 |
+
break;
|
140 |
+
case 'POST':
|
141 |
+
$connect->setParameterPost($params);
|
142 |
+
break;
|
143 |
+
case 'DELETE':
|
144 |
+
$connect->setParameterGet($params);
|
145 |
+
break;
|
146 |
+
default:
|
147 |
+
throw new Exception(
|
148 |
+
Mage::helper('dropfin_fbconnect')->__('Required HTTP method is not supported.')
|
149 |
+
);
|
150 |
+
}
|
151 |
+
|
152 |
+
$response = $connect->request($method);
|
153 |
+
$decoded_response = json_decode($response->getBody());
|
154 |
+
|
155 |
+
if(empty($decoded_response)) {
|
156 |
+
$parsed_response = array();
|
157 |
+
parse_str($response->getBody(), $parsed_response);
|
158 |
+
|
159 |
+
$decoded_response = json_decode(json_encode($parsed_response));
|
160 |
+
}
|
161 |
+
|
162 |
+
if($response->isError()) {
|
163 |
+
$status = $response->getStatus();
|
164 |
+
if(($status == 400 || $status == 401)) {
|
165 |
+
if(isset($decoded_response->error->message)) {
|
166 |
+
$message = $decoded_response->error->message;
|
167 |
+
} else {
|
168 |
+
$message = Mage::helper('dropfin_fbconnect')->__('Unspecified OAuth error occurred.');
|
169 |
+
}
|
170 |
+
|
171 |
+
throw new Dropfin_Fbconnect_FacebookOAuthException($message);
|
172 |
+
} else {
|
173 |
+
$message = sprintf(
|
174 |
+
Mage::helper('dropfin_fbconnect')->__('HTTP error %d occurred while issuing request.'),
|
175 |
+
$status
|
176 |
+
);
|
177 |
+
throw new Exception($message);
|
178 |
+
}
|
179 |
+
}
|
180 |
+
|
181 |
+
return $decoded_response;
|
182 |
+
}
|
183 |
+
|
184 |
+
protected function _isEnabled() {
|
185 |
+
return Mage::helper('dropfin_fbconnect')->isLoginEnable();
|
186 |
+
}
|
187 |
+
|
188 |
+
protected function _getAppId()
|
189 |
+
{
|
190 |
+
return Mage::helper('dropfin_fbconnect')->getAppId();
|
191 |
+
}
|
192 |
+
|
193 |
+
protected function _getAppSecret()
|
194 |
+
{
|
195 |
+
return Mage::helper('dropfin_fbconnect')->getAppSecret();
|
196 |
+
}
|
197 |
+
}
|
198 |
+
|
199 |
+
class Dropfin_Fbconnect_FacebookOAuthException extends Exception {}
|
app/code/community/Dropfin/Fbconnect/Model/Resource/Setup.php
ADDED
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Dropfin
|
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 |
+
* DISCLAIMER
|
17 |
+
*
|
18 |
+
* Do not edit or add to this file if you wish to upgrade
|
19 |
+
* this extension to newer versions in the future.
|
20 |
+
*
|
21 |
+
* @category Dropfin
|
22 |
+
* @package Facebook Connect
|
23 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
24 |
+
*/
|
25 |
+
|
26 |
+
class Dropfin_Fbconnect_Model_Resource_Setup extends Mage_Eav_Model_Entity_Setup
|
27 |
+
{
|
28 |
+
protected $_customerAttributes = array();
|
29 |
+
|
30 |
+
public function setCustomerAttributes($customerAttributes)
|
31 |
+
{
|
32 |
+
$this->_customerAttributes = $customerAttributes;
|
33 |
+
return $this;
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Add our custom attributes
|
38 |
+
*
|
39 |
+
* @return Mage_Eav_Model_Entity_Setup
|
40 |
+
*/
|
41 |
+
public function installCustomerAttributes()
|
42 |
+
{
|
43 |
+
foreach ($this->_customerAttributes as $code => $attr) {
|
44 |
+
$this->addAttribute('customer', $code, $attr);
|
45 |
+
}
|
46 |
+
|
47 |
+
return $this;
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Remove custom attributes
|
52 |
+
*
|
53 |
+
* @return Mage_Eav_Model_Entity_Setup
|
54 |
+
*/
|
55 |
+
public function removeCustomerAttributes()
|
56 |
+
{
|
57 |
+
foreach ($this->_customerAttributes as $code => $attr) {
|
58 |
+
$this->removeAttribute('customer', $code);
|
59 |
+
}
|
60 |
+
|
61 |
+
return $this;
|
62 |
+
}
|
63 |
+
}
|
app/code/community/Dropfin/Fbconnect/Model/System/Config/Language.php
ADDED
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Dropfin
|
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 |
+
* DISCLAIMER
|
17 |
+
*
|
18 |
+
* Do not edit or add to this file if you wish to upgrade
|
19 |
+
* this extension to newer versions in the future.
|
20 |
+
*
|
21 |
+
* @category Dropfin
|
22 |
+
* @package Facebook Connect
|
23 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
24 |
+
*/
|
25 |
+
|
26 |
+
class Dropfin_Fbconnect_Model_System_Config_Language
|
27 |
+
{
|
28 |
+
public function toOptionArray()
|
29 |
+
{
|
30 |
+
return array(
|
31 |
+
array('value'=>'ca_ES','label'=> Mage::helper('adminhtml')->__('Catalan')),
|
32 |
+
array('value'=>'cs_CZ','label'=> Mage::helper('adminhtml')->__('Czech')),
|
33 |
+
array('value'=>'cy_GB','label'=> Mage::helper('adminhtml')->__('Welsh')),
|
34 |
+
array('value'=>'da_DK','label'=> Mage::helper('adminhtml')->__('Danish')),
|
35 |
+
array('value'=>'de_DE','label'=> Mage::helper('adminhtml')->__('German')),
|
36 |
+
array('value'=>'eu_ES','label'=> Mage::helper('adminhtml')->__('Basque')),
|
37 |
+
array('value'=>'en_PI','label'=> Mage::helper('adminhtml')->__('English (Pirate)')),
|
38 |
+
array('value'=>'en_UD','label'=> Mage::helper('adminhtml')->__('English (Upside Down)')),
|
39 |
+
array('value'=>'ck_US','label'=> Mage::helper('adminhtml')->__('Cherokee')),
|
40 |
+
array('value'=>'en_US','label'=> Mage::helper('adminhtml')->__('English (US)')),
|
41 |
+
array('value'=>'es_LA','label'=> Mage::helper('adminhtml')->__('Spanish')),
|
42 |
+
array('value'=>'es_CL','label'=> Mage::helper('adminhtml')->__('Spanish (Chile)')),
|
43 |
+
array('value'=>'es_CO','label'=> Mage::helper('adminhtml')->__('Spanish (Colombia)')),
|
44 |
+
array('value'=>'es_ES','label'=> Mage::helper('adminhtml')->__('Spanish (Spain)')),
|
45 |
+
array('value'=>'es_MX','label'=> Mage::helper('adminhtml')->__('Spanish (Mexico)')),
|
46 |
+
array('value'=>'es_VE','label'=> Mage::helper('adminhtml')->__('Spanish (Venezuela)')),
|
47 |
+
array('value'=>'fb_FI','label'=> Mage::helper('adminhtml')->__('Finnish (test)')),
|
48 |
+
array('value'=>'fi_FI','label'=> Mage::helper('adminhtml')->__('Finnish')),
|
49 |
+
array('value'=>'fr_FR','label'=> Mage::helper('adminhtml')->__('French (France)')),
|
50 |
+
array('value'=>'gl_ES','label'=> Mage::helper('adminhtml')->__('Galician')),
|
51 |
+
array('value'=>'hu_HU','label'=> Mage::helper('adminhtml')->__('Hungarian')),
|
52 |
+
array('value'=>'it_IT','label'=> Mage::helper('adminhtml')->__('Italian')),
|
53 |
+
array('value'=>'ja_JP','label'=> Mage::helper('adminhtml')->__('Japanese')),
|
54 |
+
array('value'=>'ko_KR','label'=> Mage::helper('adminhtml')->__('Korean')),
|
55 |
+
array('value'=>'nb_NO','label'=> Mage::helper('adminhtml')->__('Norwegian (bokmal)')),
|
56 |
+
array('value'=>'nn_NO','label'=> Mage::helper('adminhtml')->__('Norwegian (nynorsk)')),
|
57 |
+
array('value'=>'nl_NL','label'=> Mage::helper('adminhtml')->__('Dutch')),
|
58 |
+
array('value'=>'pl_PL','label'=> Mage::helper('adminhtml')->__('Polish')),
|
59 |
+
array('value'=>'pt_BR','label'=> Mage::helper('adminhtml')->__('Portuguese (Brazil)')),
|
60 |
+
array('value'=>'pt_PT','label'=> Mage::helper('adminhtml')->__('Portuguese (Portugal)')),
|
61 |
+
array('value'=>'ro_RO','label'=> Mage::helper('adminhtml')->__('Romanian')),
|
62 |
+
array('value'=>'ru_RU','label'=> Mage::helper('adminhtml')->__('Russian')),
|
63 |
+
array('value'=>'sk_SK','label'=> Mage::helper('adminhtml')->__('Slovak')),
|
64 |
+
array('value'=>'sl_SI','label'=> Mage::helper('adminhtml')->__('Slovenian')),
|
65 |
+
array('value'=>'sv_SE','label'=> Mage::helper('adminhtml')->__('Swedish')),
|
66 |
+
array('value'=>'th_TH','label'=> Mage::helper('adminhtml')->__('Thai')),
|
67 |
+
array('value'=>'ku_TR','label'=> Mage::helper('adminhtml')->__('Kurdish')),
|
68 |
+
array('value'=>'zh_CN','label'=> Mage::helper('adminhtml')->__('Simplified Chinese (China)')),
|
69 |
+
array('value'=>'zh_HK','label'=> Mage::helper('adminhtml')->__('Traditional Chinese (Hong Kong)')),
|
70 |
+
array('value'=>'zh_TW','label'=> Mage::helper('adminhtml')->__('Traditional Chinese (Taiwan)')),
|
71 |
+
array('value'=>'fb_LT','label'=> Mage::helper('adminhtml')->__('Leet Speak')),
|
72 |
+
array('value'=>'af_ZA','label'=> Mage::helper('adminhtml')->__('Afrikaans')),
|
73 |
+
array('value'=>'sq_AL','label'=> Mage::helper('adminhtml')->__('Albanian')),
|
74 |
+
array('value'=>'hy_AM','label'=> Mage::helper('adminhtml')->__('Armenian')),
|
75 |
+
array('value'=>'az_AZ','label'=> Mage::helper('adminhtml')->__('Azeri')),
|
76 |
+
array('value'=>'be_BY','label'=> Mage::helper('adminhtml')->__('Belarusian')),
|
77 |
+
array('value'=>'bn_IN','label'=> Mage::helper('adminhtml')->__('Bengali')),
|
78 |
+
array('value'=>'bs_BA','label'=> Mage::helper('adminhtml')->__('Bosnian')),
|
79 |
+
array('value'=>'bg_BG','label'=> Mage::helper('adminhtml')->__('Bulgarian')),
|
80 |
+
array('value'=>'hr_HR','label'=> Mage::helper('adminhtml')->__('Croatian')),
|
81 |
+
array('value'=>'nl_BE','label'=> Mage::helper('adminhtml')->__('Dutch (Belgie)')),
|
82 |
+
array('value'=>'en_GB','label'=> Mage::helper('adminhtml')->__('English (UK)')),
|
83 |
+
array('value'=>'eo_EO','label'=> Mage::helper('adminhtml')->__('Esperanto')),
|
84 |
+
array('value'=>'et_EE','label'=> Mage::helper('adminhtml')->__('Estonian')),
|
85 |
+
array('value'=>'fo_FO','label'=> Mage::helper('adminhtml')->__('Faroese')),
|
86 |
+
array('value'=>'fr_CA','label'=> Mage::helper('adminhtml')->__('French (Canada)')),
|
87 |
+
array('value'=>'ka_GE','label'=> Mage::helper('adminhtml')->__('Georgian')),
|
88 |
+
array('value'=>'el_GR','label'=> Mage::helper('adminhtml')->__('Greek')),
|
89 |
+
array('value'=>'gu_IN','label'=> Mage::helper('adminhtml')->__('Gujarati')),
|
90 |
+
array('value'=>'hi_IN','label'=> Mage::helper('adminhtml')->__('Hindi')),
|
91 |
+
array('value'=>'is_IS','label'=> Mage::helper('adminhtml')->__('Icelandic')),
|
92 |
+
array('value'=>'id_ID','label'=> Mage::helper('adminhtml')->__('Indonesian')),
|
93 |
+
array('value'=>'ga_IE','label'=> Mage::helper('adminhtml')->__('Irish')),
|
94 |
+
array('value'=>'jv_ID','label'=> Mage::helper('adminhtml')->__('Javanese')),
|
95 |
+
array('value'=>'kn_IN','label'=> Mage::helper('adminhtml')->__('Kannada')),
|
96 |
+
array('value'=>'kk_KZ','label'=> Mage::helper('adminhtml')->__('Kazakh')),
|
97 |
+
array('value'=>'la_VA','label'=> Mage::helper('adminhtml')->__('Latin')),
|
98 |
+
array('value'=>'lv_LV','label'=> Mage::helper('adminhtml')->__('Latvian')),
|
99 |
+
array('value'=>'li_NL','label'=> Mage::helper('adminhtml')->__('Limburgish')),
|
100 |
+
array('value'=>'lt_LT','label'=> Mage::helper('adminhtml')->__('Lithuanian')),
|
101 |
+
array('value'=>'mk_MK','label'=> Mage::helper('adminhtml')->__('Macedonian')),
|
102 |
+
array('value'=>'mg_MG','label'=> Mage::helper('adminhtml')->__('Malagasy')),
|
103 |
+
array('value'=>'ms_MY','label'=> Mage::helper('adminhtml')->__('Malay')),
|
104 |
+
array('value'=>'mt_MT','label'=> Mage::helper('adminhtml')->__('Maltese')),
|
105 |
+
array('value'=>'mr_IN','label'=> Mage::helper('adminhtml')->__('Marathi')),
|
106 |
+
array('value'=>'mn_MN','label'=> Mage::helper('adminhtml')->__('Mongolian')),
|
107 |
+
array('value'=>'ne_NP','label'=> Mage::helper('adminhtml')->__('Nepali')),
|
108 |
+
array('value'=>'pa_IN','label'=> Mage::helper('adminhtml')->__('Punjabi')),
|
109 |
+
array('value'=>'rm_CH','label'=> Mage::helper('adminhtml')->__('Romansh')),
|
110 |
+
array('value'=>'sa_IN','label'=> Mage::helper('adminhtml')->__('Sanskrit')),
|
111 |
+
array('value'=>'sr_RS','label'=> Mage::helper('adminhtml')->__('Serbian')),
|
112 |
+
array('value'=>'so_SO','label'=> Mage::helper('adminhtml')->__('Somali')),
|
113 |
+
array('value'=>'sw_KE','label'=> Mage::helper('adminhtml')->__('Swahili')),
|
114 |
+
array('value'=>'tl_PH','label'=> Mage::helper('adminhtml')->__('Filipino')),
|
115 |
+
array('value'=>'ta_IN','label'=> Mage::helper('adminhtml')->__('Tamil')),
|
116 |
+
array('value'=>'tt_RU','label'=> Mage::helper('adminhtml')->__('Tatar')),
|
117 |
+
array('value'=>'te_IN','label'=> Mage::helper('adminhtml')->__('Telugu')),
|
118 |
+
array('value'=>'ml_IN','label'=> Mage::helper('adminhtml')->__('Malayalam')),
|
119 |
+
array('value'=>'uk_UA','label'=> Mage::helper('adminhtml')->__('Ukrainian')),
|
120 |
+
array('value'=>'uz_UZ','label'=> Mage::helper('adminhtml')->__('Uzbek')),
|
121 |
+
array('value'=>'vi_VN','label'=> Mage::helper('adminhtml')->__('Vietnamese')),
|
122 |
+
array('value'=>'xh_ZA','label'=> Mage::helper('adminhtml')->__('Xhosa')),
|
123 |
+
array('value'=>'zu_ZA','label'=> Mage::helper('adminhtml')->__('Zulu')),
|
124 |
+
array('value'=>'km_KH','label'=> Mage::helper('adminhtml')->__('Khmer')),
|
125 |
+
array('value'=>'tg_TJ','label'=> Mage::helper('adminhtml')->__('Tajik')),
|
126 |
+
array('value'=>'ar_AR','label'=> Mage::helper('adminhtml')->__('Arabic')),
|
127 |
+
array('value'=>'he_IL','label'=> Mage::helper('adminhtml')->__('Hebrew')),
|
128 |
+
array('value'=>'ur_PK','label'=> Mage::helper('adminhtml')->__('Urdu')),
|
129 |
+
array('value'=>'fa_IR','label'=> Mage::helper('adminhtml')->__('Persian')),
|
130 |
+
array('value'=>'sy_SY','label'=> Mage::helper('adminhtml')->__('Syriac')),
|
131 |
+
array('value'=>'yi_DE','label'=> Mage::helper('adminhtml')->__('Yiddish')),
|
132 |
+
array('value'=>'gn_PY','label'=> Mage::helper('adminhtml')->__('Guarani')),
|
133 |
+
array('value'=>'qu_PE','label'=> Mage::helper('adminhtml')->__('Quechua')),
|
134 |
+
array('value'=>'ay_BO','label'=> Mage::helper('adminhtml')->__('Aymara')),
|
135 |
+
array('value'=>'se_NO','label'=> Mage::helper('adminhtml')->__('Northern Sami')),
|
136 |
+
array('value'=>'ps_AF','label'=> Mage::helper('adminhtml')->__('Pashto')),
|
137 |
+
array('value'=>'tl_ST','label'=> Mage::helper('adminhtml')->__('Klingon')),
|
138 |
+
);
|
139 |
+
}
|
140 |
+
}
|
app/code/community/Dropfin/Fbconnect/Model/System/Config/Themes.php
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Dropfin
|
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 |
+
* DISCLAIMER
|
17 |
+
*
|
18 |
+
* Do not edit or add to this file if you wish to upgrade
|
19 |
+
* this extension to newer versions in the future.
|
20 |
+
*
|
21 |
+
* @category Dropfin
|
22 |
+
* @package Facebook Connect
|
23 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
24 |
+
*/
|
25 |
+
|
26 |
+
class Dropfin_Fbconnect_Model_System_Config_Themes
|
27 |
+
{
|
28 |
+
public function toOptionArray()
|
29 |
+
{
|
30 |
+
return array(
|
31 |
+
array('value'=>"light", 'label'=> Mage::helper('adminhtml')->__('Light')),
|
32 |
+
array('value'=> "dark", 'label'=> Mage::helper('adminhtml')->__('Dark'))
|
33 |
+
);
|
34 |
+
}
|
35 |
+
}
|
36 |
+
|
app/code/community/Dropfin/Fbconnect/controllers/AccountController.php
ADDED
@@ -0,0 +1,191 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Dropfin
|
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 |
+
* DISCLAIMER
|
17 |
+
*
|
18 |
+
* Do not edit or add to this file if you wish to upgrade
|
19 |
+
* this extension to newer versions in the future.
|
20 |
+
*
|
21 |
+
* @category Dropfin
|
22 |
+
* @package Facebook Connect
|
23 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
24 |
+
*/
|
25 |
+
|
26 |
+
class Dropfin_Fbconnect_AccountController extends Mage_Core_Controller_Front_Action {
|
27 |
+
|
28 |
+
protected function _getSession() {
|
29 |
+
return Mage::getSingleton('customer/session');
|
30 |
+
}
|
31 |
+
|
32 |
+
protected function _getLanguage() {
|
33 |
+
return Mage::helper('dropfin_fbconnect');
|
34 |
+
}
|
35 |
+
|
36 |
+
protected function _closeWindow() {
|
37 |
+
if($this->getRequest()->isXmlHttpRequest()) {
|
38 |
+
$this->getResponse()->clearHeaders()->setHeader('Content-type', 'application/json', true);
|
39 |
+
$this->getResponse()->setBody(json_encode(array(
|
40 |
+
'windowClose' => true
|
41 |
+
)));
|
42 |
+
}else{
|
43 |
+
$this->getResponse()->setBody('<script type="text/javascript">window.opener.location.reload(true);window.close();</script>');
|
44 |
+
}
|
45 |
+
return true;
|
46 |
+
}
|
47 |
+
|
48 |
+
protected function _connectCallback() {
|
49 |
+
$errorCode = $this->getRequest()->getParam('error');
|
50 |
+
$code = $this->getRequest()->getParam('code');
|
51 |
+
$state = $this->getRequest()->getParam('state');
|
52 |
+
if(!($errorCode || $code) && !$state) {
|
53 |
+
// Direct route access - deny
|
54 |
+
return;
|
55 |
+
}
|
56 |
+
|
57 |
+
if(!$state || $state != Mage::getSingleton('core/session')->getFacebookCsrf()) {
|
58 |
+
return;
|
59 |
+
}
|
60 |
+
|
61 |
+
if($errorCode) {
|
62 |
+
// Facebook API read light - abort
|
63 |
+
if($errorCode === 'access_denied') {
|
64 |
+
Mage::getSingleton('core/session')->addNotice(
|
65 |
+
$this->_getLanguage()->__('Facebook connect process aborted.')
|
66 |
+
);
|
67 |
+
return;
|
68 |
+
}
|
69 |
+
|
70 |
+
throw new Exception(
|
71 |
+
sprintf(
|
72 |
+
$this->_getLanguage()->__('Sorry, Please try again.'),
|
73 |
+
$errorCode
|
74 |
+
)
|
75 |
+
);
|
76 |
+
return;
|
77 |
+
}
|
78 |
+
|
79 |
+
if ($code) {
|
80 |
+
|
81 |
+
// Facebook API green light - proceed
|
82 |
+
$connect = Mage::getSingleton('fbconnect/facebook_connect');
|
83 |
+
$facebookHelper = Mage::helper('dropfin_fbconnect/facebook');
|
84 |
+
|
85 |
+
$userInfo = $connect->api('/me');
|
86 |
+
$token = $connect->getAccessToken();
|
87 |
+
|
88 |
+
$customersByFacebookId = $facebookHelper->getCustomersByFacebookId($userInfo->id);
|
89 |
+
|
90 |
+
if($this->_getSession()->isLoggedIn()) {
|
91 |
+
|
92 |
+
// Logged in user
|
93 |
+
if($customersByFacebookId->count()) {
|
94 |
+
// Facebook account already connected to other account - deny
|
95 |
+
Mage::getSingleton('core/session')->addNotice(
|
96 |
+
$this->_getLanguage()->__('Your facebook account is already connected to the store accounts.')
|
97 |
+
);
|
98 |
+
return;
|
99 |
+
}
|
100 |
+
|
101 |
+
// Connect from account dashboard - attach
|
102 |
+
$customer = $this->_getSession()->getCustomer();
|
103 |
+
|
104 |
+
$facebookHelper->getUserByFacebookId(
|
105 |
+
$customer,
|
106 |
+
$userInfo->id,
|
107 |
+
$token
|
108 |
+
);
|
109 |
+
|
110 |
+
Mage::getSingleton('core/session')->addSuccess(
|
111 |
+
$this->_getLanguage()->__('Your facebook account is now connected to the store accout.')
|
112 |
+
);
|
113 |
+
|
114 |
+
return;
|
115 |
+
}
|
116 |
+
|
117 |
+
if($customersByFacebookId->count()) {
|
118 |
+
// Existing connected user - login
|
119 |
+
$customer = $customersByFacebookId->getFirstItem();
|
120 |
+
|
121 |
+
$facebookHelper->loginByCustomer($customer);
|
122 |
+
|
123 |
+
Mage::getSingleton('core/session')->addSuccess(
|
124 |
+
$this->_getLanguage()->__('You have successfully logged in using your facebook account.')
|
125 |
+
);
|
126 |
+
|
127 |
+
return;
|
128 |
+
}
|
129 |
+
|
130 |
+
$customersByEmail = $facebookHelper->getCustomersByEmail($userInfo->email);
|
131 |
+
|
132 |
+
if($customersByEmail->count()) {
|
133 |
+
|
134 |
+
$customer = $customersByEmail->getFirstItem();
|
135 |
+
|
136 |
+
$facebookHelper->getUserByFacebookId(
|
137 |
+
$customer,
|
138 |
+
$userInfo->id,
|
139 |
+
$token
|
140 |
+
);
|
141 |
+
|
142 |
+
Mage::getSingleton('core/session')->addSuccess(
|
143 |
+
$this->_getLanguage()->__('We have discovered you already have an account at our store. Your facebook account is now connected to the store account.')
|
144 |
+
);
|
145 |
+
|
146 |
+
return;
|
147 |
+
}
|
148 |
+
|
149 |
+
// New connection - create, attach, login
|
150 |
+
if(empty($userInfo->first_name)) {
|
151 |
+
throw new Exception(
|
152 |
+
$this->_getLanguage()->__('Sorry, could not retrieve your facebook first name. Please try again.')
|
153 |
+
);
|
154 |
+
}
|
155 |
+
|
156 |
+
if(empty($userInfo->last_name)) {
|
157 |
+
throw new Exception(
|
158 |
+
$this->_getLanguage()->__('Sorry, could not retrieve your facebook last name. Please try again.')
|
159 |
+
);
|
160 |
+
}
|
161 |
+
|
162 |
+
$facebookHelper->createAccount(
|
163 |
+
$userInfo->email,
|
164 |
+
$userInfo->first_name,
|
165 |
+
$userInfo->last_name,
|
166 |
+
$userInfo->id,
|
167 |
+
$token
|
168 |
+
);
|
169 |
+
|
170 |
+
Mage::getSingleton('core/session')->addSuccess(
|
171 |
+
$this->_getLanguage()->__('Your facebook account is now connected to our store.')
|
172 |
+
);
|
173 |
+
}
|
174 |
+
}
|
175 |
+
|
176 |
+
public function connectAction() {
|
177 |
+
|
178 |
+
$session = $this->_getSession();
|
179 |
+
if ($session->isLoggedIn()) {
|
180 |
+
return $this->_closeWindow();
|
181 |
+
}
|
182 |
+
|
183 |
+
try {
|
184 |
+
$this->_connectCallback();
|
185 |
+
} catch (Exception $e) {
|
186 |
+
Mage::getSingleton('core/session')->addError($e->getMessage());
|
187 |
+
}
|
188 |
+
|
189 |
+
return $this->_closeWindow();
|
190 |
+
}
|
191 |
+
}
|
app/code/community/Dropfin/Fbconnect/etc/config.xml
ADDED
@@ -0,0 +1,138 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Dropfin
|
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 |
+
* DISCLAIMER
|
17 |
+
*
|
18 |
+
* Do not edit or add to this file if you wish to upgrade
|
19 |
+
* this extension to newer versions in the future.
|
20 |
+
*
|
21 |
+
* @category Dropfin
|
22 |
+
* @package Facebook Connect
|
23 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
24 |
+
*/
|
25 |
+
-->
|
26 |
+
<config>
|
27 |
+
<modules>
|
28 |
+
<Dropfin_Fbconnect>
|
29 |
+
<version>1.0.0</version>
|
30 |
+
</Dropfin_Fbconnect>
|
31 |
+
</modules>
|
32 |
+
<default>
|
33 |
+
<dropfin_fbconnect>
|
34 |
+
<general module="dropfin_fbconnect">
|
35 |
+
<enable>0</enable>
|
36 |
+
<language>en_US</language>
|
37 |
+
<login>0</login>
|
38 |
+
<login_block_title>Facebook Users</login_block_title>
|
39 |
+
<login_block_content>Use your Facebook account to login/register within our store.</login_block_content>
|
40 |
+
<login_button_text>Connect with Facebook</login_button_text>
|
41 |
+
<fanbox>0</fanbox>
|
42 |
+
<fanbox_position>right</fanbox_position>
|
43 |
+
<fb_page_id>Dropfin</fb_page_id>
|
44 |
+
<fanbox_width>250</fanbox_width>
|
45 |
+
<fanbox_height>300</fanbox_height>
|
46 |
+
<show_comment>0</show_comment>
|
47 |
+
<commentbox_color>light</commentbox_color>
|
48 |
+
<commentbox_width>600</commentbox_width>
|
49 |
+
<commentbox_no>5</commentbox_no>
|
50 |
+
</general>
|
51 |
+
</dropfin_fbconnect>
|
52 |
+
</default>
|
53 |
+
<frontend>
|
54 |
+
<routers>
|
55 |
+
<dropfin_fbconnect>
|
56 |
+
<use>standard</use>
|
57 |
+
<args>
|
58 |
+
<module>Dropfin_Fbconnect</module>
|
59 |
+
<frontName>fbconnect</frontName>
|
60 |
+
</args>
|
61 |
+
</dropfin_fbconnect>
|
62 |
+
</routers>
|
63 |
+
<layout>
|
64 |
+
<updates>
|
65 |
+
<dropfin_fbconnect>
|
66 |
+
<file>dropfin/fbconnect.xml</file>
|
67 |
+
</dropfin_fbconnect>
|
68 |
+
</updates>
|
69 |
+
</layout>
|
70 |
+
<translate>
|
71 |
+
<modules>
|
72 |
+
<translations>
|
73 |
+
<files>
|
74 |
+
<default>Dropfin_Fbconnect.csv</default>
|
75 |
+
</files>
|
76 |
+
</translations>
|
77 |
+
</modules>
|
78 |
+
</translate>
|
79 |
+
</frontend>
|
80 |
+
<adminhtml>
|
81 |
+
<acl>
|
82 |
+
<resources>
|
83 |
+
<all>
|
84 |
+
<title>Allow Everything</title>
|
85 |
+
</all>
|
86 |
+
<admin>
|
87 |
+
<children>
|
88 |
+
<system>
|
89 |
+
<children>
|
90 |
+
<config>
|
91 |
+
<children>
|
92 |
+
<dropfin_fbconnect>
|
93 |
+
<title>Dropfin Fbconnect</title>
|
94 |
+
</dropfin_fbconnect>
|
95 |
+
</children>
|
96 |
+
</config>
|
97 |
+
</children>
|
98 |
+
</system>
|
99 |
+
</children>
|
100 |
+
</admin>
|
101 |
+
</resources>
|
102 |
+
</acl>
|
103 |
+
<translate>
|
104 |
+
<modules>
|
105 |
+
<translations>
|
106 |
+
<files>
|
107 |
+
<default>Dropfin_Fbconnect.csv</default>
|
108 |
+
</files>
|
109 |
+
</translations>
|
110 |
+
</modules>
|
111 |
+
</translate>
|
112 |
+
</adminhtml>
|
113 |
+
<global>
|
114 |
+
<blocks>
|
115 |
+
<dropfin_fbconnect>
|
116 |
+
<class>Dropfin_Fbconnect_Block</class>
|
117 |
+
</dropfin_fbconnect>
|
118 |
+
</blocks>
|
119 |
+
<helpers>
|
120 |
+
<dropfin_fbconnect>
|
121 |
+
<class>Dropfin_Fbconnect_Helper</class>
|
122 |
+
</dropfin_fbconnect>
|
123 |
+
</helpers>
|
124 |
+
<models>
|
125 |
+
<fbconnect>
|
126 |
+
<class>Dropfin_Fbconnect_Model</class>
|
127 |
+
</fbconnect>
|
128 |
+
</models>
|
129 |
+
<resources>
|
130 |
+
<fbconnect_setup>
|
131 |
+
<setup>
|
132 |
+
<module>Dropfin_Fbconnect</module>
|
133 |
+
<class>Dropfin_Fbconnect_Model_Resource_Setup</class>
|
134 |
+
</setup>
|
135 |
+
</fbconnect_setup>
|
136 |
+
</resources>
|
137 |
+
</global>
|
138 |
+
</config>
|
app/code/community/Dropfin/Fbconnect/etc/system.xml
ADDED
@@ -0,0 +1,345 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Dropfin
|
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 |
+
* DISCLAIMER
|
17 |
+
*
|
18 |
+
* Do not edit or add to this file if you wish to upgrade
|
19 |
+
* this extension to newer versions in the future.
|
20 |
+
*
|
21 |
+
* @category Dropfin
|
22 |
+
* @package Facebook Connect
|
23 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
24 |
+
*/
|
25 |
+
-->
|
26 |
+
<config>
|
27 |
+
<tabs>
|
28 |
+
<dropfin translate="label">
|
29 |
+
<label>Dropfin</label>
|
30 |
+
<sort_order>150</sort_order>
|
31 |
+
</dropfin>
|
32 |
+
</tabs>
|
33 |
+
<sections>
|
34 |
+
<dropfin_fbconnect module="dropfin_fbconnect" translate="label">
|
35 |
+
<label>Facebook Connect</label>
|
36 |
+
<tab>dropfin</tab>
|
37 |
+
<frontend_type>text</frontend_type>
|
38 |
+
<sort_order>40</sort_order>
|
39 |
+
<show_in_default>1</show_in_default>
|
40 |
+
<show_in_website>1</show_in_website>
|
41 |
+
<show_in_store>1</show_in_store>
|
42 |
+
<groups>
|
43 |
+
|
44 |
+
<general module="dropfin_fbconnect" translate="label">
|
45 |
+
<label>Configuration</label>
|
46 |
+
<frontend_type>text</frontend_type>
|
47 |
+
<sort_order>1</sort_order>
|
48 |
+
<show_in_default>1</show_in_default>
|
49 |
+
<show_in_website>1</show_in_website>
|
50 |
+
<show_in_store>1</show_in_store>
|
51 |
+
<fields>
|
52 |
+
<enable translate="label">
|
53 |
+
<label>Enable</label>
|
54 |
+
<frontend_type>select</frontend_type>
|
55 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
56 |
+
<sort_order>1</sort_order>
|
57 |
+
<show_in_default>1</show_in_default>
|
58 |
+
<show_in_website>1</show_in_website>
|
59 |
+
<show_in_store>1</show_in_store>
|
60 |
+
</enable>
|
61 |
+
|
62 |
+
<app_id translate="label">
|
63 |
+
<label>App Id</label>
|
64 |
+
<frontend_type>text</frontend_type>
|
65 |
+
<sort_order>2</sort_order>
|
66 |
+
<show_in_default>1</show_in_default>
|
67 |
+
<show_in_website>1</show_in_website>
|
68 |
+
<show_in_store>1</show_in_store>
|
69 |
+
<comment><a href="http://developers.facebook.com/setup/" target="_blank">Register</a></comment>
|
70 |
+
<depends>
|
71 |
+
<enable>1</enable>
|
72 |
+
</depends>
|
73 |
+
<validate>required-entry</validate>
|
74 |
+
</app_id>
|
75 |
+
|
76 |
+
<app_secret translate="label">
|
77 |
+
<label>App Secret</label>
|
78 |
+
<frontend_type>password</frontend_type>
|
79 |
+
<sort_order>3</sort_order>
|
80 |
+
<show_in_default>1</show_in_default>
|
81 |
+
<show_in_website>1</show_in_website>
|
82 |
+
<show_in_store>1</show_in_store>
|
83 |
+
<depends>
|
84 |
+
<enable>1</enable>
|
85 |
+
</depends>
|
86 |
+
<validate>required-entry</validate>
|
87 |
+
</app_secret>
|
88 |
+
|
89 |
+
<language translate="label">
|
90 |
+
<label>Language</label>
|
91 |
+
<frontend_type>select</frontend_type>
|
92 |
+
<source_model>fbconnect/system_config_language</source_model>
|
93 |
+
<sort_order>4</sort_order>
|
94 |
+
<show_in_default>1</show_in_default>
|
95 |
+
<show_in_website>1</show_in_website>
|
96 |
+
<show_in_store>1</show_in_store>
|
97 |
+
<depends>
|
98 |
+
<enable>1</enable>
|
99 |
+
</depends>
|
100 |
+
</language>
|
101 |
+
|
102 |
+
<login translate="label">
|
103 |
+
<label>Enable Login</label>
|
104 |
+
<frontend_type>select</frontend_type>
|
105 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
106 |
+
<sort_order>5</sort_order>
|
107 |
+
<show_in_default>1</show_in_default>
|
108 |
+
<show_in_website>1</show_in_website>
|
109 |
+
<show_in_store>1</show_in_store>
|
110 |
+
<depends>
|
111 |
+
<enable>1</enable>
|
112 |
+
</depends>
|
113 |
+
</login>
|
114 |
+
|
115 |
+
<login_block_title translate="label">
|
116 |
+
<label>Login Block Title</label>
|
117 |
+
<frontend_type>text</frontend_type>
|
118 |
+
<sort_order>6</sort_order>
|
119 |
+
<show_in_default>1</show_in_default>
|
120 |
+
<show_in_website>1</show_in_website>
|
121 |
+
<show_in_store>1</show_in_store>
|
122 |
+
<depends>
|
123 |
+
<login>1</login>
|
124 |
+
</depends>
|
125 |
+
<depends>
|
126 |
+
<enable>1</enable>
|
127 |
+
</depends>
|
128 |
+
<validate>required-entry</validate>
|
129 |
+
</login_block_title>
|
130 |
+
|
131 |
+
<login_block_content translate="label">
|
132 |
+
<label>Login Block Content</label>
|
133 |
+
<frontend_type>textarea</frontend_type>
|
134 |
+
<sort_order>7</sort_order>
|
135 |
+
<show_in_default>1</show_in_default>
|
136 |
+
<show_in_website>1</show_in_website>
|
137 |
+
<show_in_store>1</show_in_store>
|
138 |
+
<depends>
|
139 |
+
<login>1</login>
|
140 |
+
</depends>
|
141 |
+
<depends>
|
142 |
+
<enable>1</enable>
|
143 |
+
</depends>
|
144 |
+
<validate>required-entry</validate>
|
145 |
+
</login_block_content>
|
146 |
+
|
147 |
+
<login_button_text translate="label">
|
148 |
+
<label>Facebook Login Button Text</label>
|
149 |
+
<frontend_type>text</frontend_type>
|
150 |
+
<sort_order>8</sort_order>
|
151 |
+
<show_in_default>1</show_in_default>
|
152 |
+
<show_in_website>1</show_in_website>
|
153 |
+
<show_in_store>1</show_in_store>
|
154 |
+
<depends>
|
155 |
+
<login>1</login>
|
156 |
+
</depends>
|
157 |
+
<depends>
|
158 |
+
<enable>1</enable>
|
159 |
+
</depends>
|
160 |
+
<validate>required-entry</validate>
|
161 |
+
</login_button_text>
|
162 |
+
|
163 |
+
<show_fanbox translate="label">
|
164 |
+
<label>Enable Fanbox</label>
|
165 |
+
<frontend_type>select</frontend_type>
|
166 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
167 |
+
<sort_order>9</sort_order>
|
168 |
+
<show_in_default>1</show_in_default>
|
169 |
+
<show_in_website>1</show_in_website>
|
170 |
+
<show_in_store>1</show_in_store>
|
171 |
+
<depends>
|
172 |
+
<enable>1</enable>
|
173 |
+
</depends>
|
174 |
+
</show_fanbox>
|
175 |
+
|
176 |
+
<fb_page_id translate="label">
|
177 |
+
<label>Facebook Page Id</label>
|
178 |
+
<frontend_type>text</frontend_type>
|
179 |
+
<sort_order>10</sort_order>
|
180 |
+
<show_in_default>1</show_in_default>
|
181 |
+
<show_in_website>1</show_in_website>
|
182 |
+
<show_in_store>1</show_in_store>
|
183 |
+
<depends>
|
184 |
+
<show_fanbox>1</show_fanbox>
|
185 |
+
</depends>
|
186 |
+
<depends>
|
187 |
+
<enable>1</enable>
|
188 |
+
</depends>
|
189 |
+
<validate>required-entry</validate>
|
190 |
+
</fb_page_id>
|
191 |
+
|
192 |
+
<fanbox_width translate="label">
|
193 |
+
<label>Fanbox's Width</label>
|
194 |
+
<frontend_type>text</frontend_type>
|
195 |
+
<sort_order>11</sort_order>
|
196 |
+
<show_in_default>1</show_in_default>
|
197 |
+
<show_in_website>1</show_in_website>
|
198 |
+
<show_in_store>1</show_in_store>
|
199 |
+
<depends>
|
200 |
+
<show_fanbox>1</show_fanbox>
|
201 |
+
</depends>
|
202 |
+
<depends>
|
203 |
+
<enable>1</enable>
|
204 |
+
</depends>
|
205 |
+
<comment>Width in Pixels</comment>
|
206 |
+
<validate>required-entry</validate>
|
207 |
+
</fanbox_width>
|
208 |
+
|
209 |
+
<fanbox_height translate="label">
|
210 |
+
<label>Fanbox's Height</label>
|
211 |
+
<frontend_type>text</frontend_type>
|
212 |
+
<sort_order>12</sort_order>
|
213 |
+
<show_in_default>1</show_in_default>
|
214 |
+
<show_in_website>1</show_in_website>
|
215 |
+
<show_in_store>1</show_in_store>
|
216 |
+
<depends>
|
217 |
+
<show_fanbox>1</show_fanbox>
|
218 |
+
</depends>
|
219 |
+
<depends>
|
220 |
+
<enable>1</enable>
|
221 |
+
</depends>
|
222 |
+
<comment>Height in Pixels</comment>
|
223 |
+
<validate>required-entry</validate>
|
224 |
+
</fanbox_height>
|
225 |
+
|
226 |
+
<show_faces translate="label">
|
227 |
+
<label>Show Faces in Fanbox</label>
|
228 |
+
<frontend_type>select</frontend_type>
|
229 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
230 |
+
<sort_order>13</sort_order>
|
231 |
+
<show_in_default>1</show_in_default>
|
232 |
+
<show_in_website>1</show_in_website>
|
233 |
+
<show_in_store>1</show_in_store>
|
234 |
+
<depends>
|
235 |
+
<show_fanbox>1</show_fanbox>
|
236 |
+
</depends>
|
237 |
+
<depends>
|
238 |
+
<enable>1</enable>
|
239 |
+
</depends>
|
240 |
+
<validate>required-entry</validate>
|
241 |
+
</show_faces>
|
242 |
+
|
243 |
+
<show_stream translate="label">
|
244 |
+
<label>Show Stream in Fanbox</label>
|
245 |
+
<frontend_type>select</frontend_type>
|
246 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
247 |
+
<sort_order>14</sort_order>
|
248 |
+
<show_in_default>1</show_in_default>
|
249 |
+
<show_in_website>1</show_in_website>
|
250 |
+
<show_in_store>1</show_in_store>
|
251 |
+
<depends>
|
252 |
+
<show_fanbox>1</show_fanbox>
|
253 |
+
</depends>
|
254 |
+
<depends>
|
255 |
+
<enable>1</enable>
|
256 |
+
</depends>
|
257 |
+
<validate>required-entry</validate>
|
258 |
+
</show_stream>
|
259 |
+
|
260 |
+
<show_cover translate="label">
|
261 |
+
<label>Show Cover Photo in Fanbox</label>
|
262 |
+
<frontend_type>select</frontend_type>
|
263 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
264 |
+
<sort_order>15</sort_order>
|
265 |
+
<show_in_default>1</show_in_default>
|
266 |
+
<show_in_website>1</show_in_website>
|
267 |
+
<show_in_store>1</show_in_store>
|
268 |
+
<depends>
|
269 |
+
<show_fanbox>1</show_fanbox>
|
270 |
+
</depends>
|
271 |
+
<depends>
|
272 |
+
<enable>1</enable>
|
273 |
+
</depends>
|
274 |
+
<validate>required-entry</validate>
|
275 |
+
</show_cover>
|
276 |
+
|
277 |
+
<show_comment translate="label">
|
278 |
+
<label>Facebook Comment for Product</label>
|
279 |
+
<frontend_type>select</frontend_type>
|
280 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
281 |
+
<sort_order>16</sort_order>
|
282 |
+
<show_in_default>1</show_in_default>
|
283 |
+
<show_in_website>1</show_in_website>
|
284 |
+
<show_in_store>1</show_in_store>
|
285 |
+
<comment>Comment Box will Show in Product View Page</comment>
|
286 |
+
<depends>
|
287 |
+
<enable>1</enable>
|
288 |
+
</depends>
|
289 |
+
</show_comment>
|
290 |
+
|
291 |
+
<commentbox_color translate="label">
|
292 |
+
<label>Comment Box's Color Theme</label>
|
293 |
+
<frontend_type>select</frontend_type>
|
294 |
+
<source_model>fbconnect/system_config_themes</source_model>
|
295 |
+
<sort_order>17</sort_order>
|
296 |
+
<show_in_default>1</show_in_default>
|
297 |
+
<show_in_website>1</show_in_website>
|
298 |
+
<show_in_store>1</show_in_store>
|
299 |
+
<depends>
|
300 |
+
<show_comment>1</show_comment>
|
301 |
+
</depends>
|
302 |
+
<depends>
|
303 |
+
<enable>1</enable>
|
304 |
+
</depends>
|
305 |
+
</commentbox_color>
|
306 |
+
|
307 |
+
<commentbox_width translate="label">
|
308 |
+
<label>Comment Box's Width</label>
|
309 |
+
<frontend_type>text</frontend_type>
|
310 |
+
<sort_order>18</sort_order>
|
311 |
+
<show_in_default>1</show_in_default>
|
312 |
+
<show_in_website>1</show_in_website>
|
313 |
+
<show_in_store>1</show_in_store>
|
314 |
+
<depends>
|
315 |
+
<show_comment>1</show_comment>
|
316 |
+
</depends>
|
317 |
+
<depends>
|
318 |
+
<enable>1</enable>
|
319 |
+
</depends>
|
320 |
+
<comment>Width in Pixels</comment>
|
321 |
+
<validate>required-entry</validate>
|
322 |
+
</commentbox_width>
|
323 |
+
|
324 |
+
<commentbox_no translate="label">
|
325 |
+
<label>Number of Post to Display</label>
|
326 |
+
<frontend_type>text</frontend_type>
|
327 |
+
<sort_order>19</sort_order>
|
328 |
+
<show_in_default>1</show_in_default>
|
329 |
+
<show_in_website>1</show_in_website>
|
330 |
+
<show_in_store>1</show_in_store>
|
331 |
+
<depends>
|
332 |
+
<show_comment>1</show_comment>
|
333 |
+
</depends>
|
334 |
+
<depends>
|
335 |
+
<enable>1</enable>
|
336 |
+
</depends>
|
337 |
+
<validate>required-entry</validate>
|
338 |
+
</commentbox_no>
|
339 |
+
|
340 |
+
</fields>
|
341 |
+
</general>
|
342 |
+
</groups>
|
343 |
+
</dropfin_fbconnect>
|
344 |
+
</sections>
|
345 |
+
</config>
|
app/code/community/Dropfin/Fbconnect/sql/fbconnect_setup/install-1.0.0.php
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Dropfin
|
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 |
+
* DISCLAIMER
|
17 |
+
*
|
18 |
+
* Do not edit or add to this file if you wish to upgrade
|
19 |
+
* this extension to newer versions in the future.
|
20 |
+
*
|
21 |
+
* @category Dropfin
|
22 |
+
* @package Facebook Connect
|
23 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
24 |
+
*/
|
25 |
+
|
26 |
+
$installer = $this;
|
27 |
+
$installer->startSetup();
|
28 |
+
|
29 |
+
$installer->setCustomerAttributes(
|
30 |
+
array(
|
31 |
+
'fbconnect_fid' => array(
|
32 |
+
'type' => 'text',
|
33 |
+
'visible' => false,
|
34 |
+
'required' => false,
|
35 |
+
'user_defined' => false
|
36 |
+
),
|
37 |
+
'fbconnect_ftoken' => array(
|
38 |
+
'type' => 'text',
|
39 |
+
'visible' => false,
|
40 |
+
'required' => false,
|
41 |
+
'user_defined' => false
|
42 |
+
)
|
43 |
+
)
|
44 |
+
);
|
45 |
+
|
46 |
+
$installer->installCustomerAttributes();
|
47 |
+
$installer->endSetup();
|
app/design/frontend/base/default/layout/dropfin/fbconnect.xml
ADDED
@@ -0,0 +1,124 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
|
3 |
+
<!--
|
4 |
+
/**
|
5 |
+
* Dropfin
|
6 |
+
*
|
7 |
+
* NOTICE OF LICENSE
|
8 |
+
*
|
9 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
10 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
11 |
+
* It is also available through the world-wide-web at this URL:
|
12 |
+
* http://opensource.org/licenses/afl-3.0.php
|
13 |
+
* If you did not receive a copy of the license and are unable to
|
14 |
+
* obtain it through the world-wide-web, please send an email
|
15 |
+
* to license@magento.com so we can send you a copy immediately.
|
16 |
+
*
|
17 |
+
* DISCLAIMER
|
18 |
+
*
|
19 |
+
* Do not edit or add to this file if you wish to upgrade
|
20 |
+
* this extension to newer versions in the future.
|
21 |
+
*
|
22 |
+
* @category Dropfin
|
23 |
+
* @package Facebook Connect
|
24 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
25 |
+
*/
|
26 |
+
-->
|
27 |
+
|
28 |
+
<layout version="1.0">
|
29 |
+
|
30 |
+
<default>
|
31 |
+
<reference name="right">
|
32 |
+
<block type="core/template" name="fbconnect.fblikebox" before="-">
|
33 |
+
<label>Facebook Like Box</label>
|
34 |
+
<action method="setTemplate" ifconfig="dropfin_fbconnect/general/show_fanbox">
|
35 |
+
<template>dropfin/fbconnect/fblikebox.phtml</template>
|
36 |
+
</action>
|
37 |
+
</block>
|
38 |
+
</reference>
|
39 |
+
</default>
|
40 |
+
|
41 |
+
<catalog_product_view translate="label">
|
42 |
+
<label>Catalog Product View</label>
|
43 |
+
<reference name="product.info.additional">
|
44 |
+
<block type="core/template" name="fbconnect.fbcomment" before="-">
|
45 |
+
<label>Facebook Comment for Product</label>
|
46 |
+
<action method="setTemplate" ifconfig="dropfin_fbconnect/general/show_comment">
|
47 |
+
<template>dropfin/fbconnect/fbcomment.phtml</template>
|
48 |
+
</action>
|
49 |
+
</block>
|
50 |
+
</reference>
|
51 |
+
</catalog_product_view>
|
52 |
+
|
53 |
+
<customer_account_login translate="label">
|
54 |
+
<reference name="head">
|
55 |
+
<action method="addItem" ifconfig="dropfin_fbconnect/general/login">
|
56 |
+
<type>skin_css</type>
|
57 |
+
<name>dropfin/fbconnect/css/styles.css</name>
|
58 |
+
</action>
|
59 |
+
<action method="addItem" ifconfig="dropfin_fbconnect/general/login">
|
60 |
+
<type>skin_js</type>
|
61 |
+
<name>dropfin/fbconnect/js/jquery-1.10.2.min.js</name>
|
62 |
+
</action>
|
63 |
+
<action method="addItem" ifconfig="dropfin_fbconnect/general/login">
|
64 |
+
<type>skin_js</type>
|
65 |
+
<name>dropfin/fbconnect/js/fbconnect.js</name>
|
66 |
+
</action>
|
67 |
+
</reference>
|
68 |
+
<reference name="content">
|
69 |
+
<block type="dropfin_fbconnect/login" name="dropfin.fblogin">
|
70 |
+
<action method="setTemplate" ifconfig="dropfin_fbconnect/general/login">
|
71 |
+
<template>dropfin/fbconnect/form/fblogin.phtml</template>
|
72 |
+
</action>
|
73 |
+
<block type="dropfin_fbconnect/login_button" name="dropfin.fbbutton" as="dropfin_fbbutton" template="dropfin/fbconnect/form/button.phtml" />
|
74 |
+
</block>
|
75 |
+
</reference>
|
76 |
+
</customer_account_login>
|
77 |
+
|
78 |
+
<customer_account_create translate="label">
|
79 |
+
<reference name="head">
|
80 |
+
<action method="addItem" ifconfig="dropfin_fbconnect/general/login">
|
81 |
+
<type>skin_css</type>
|
82 |
+
<name>dropfin/fbconnect/css/styles.css</name>
|
83 |
+
</action>
|
84 |
+
<action method="addItem" ifconfig="dropfin_fbconnect/general/login">
|
85 |
+
<type>skin_js</type>
|
86 |
+
<name>dropfin/fbconnect/js/jquery-1.10.2.min.js</name>
|
87 |
+
</action>
|
88 |
+
<action method="addItem" ifconfig="dropfin_fbconnect/general/login">
|
89 |
+
<type>skin_js</type>
|
90 |
+
<name>dropfin/fbconnect/js/fbconnect.js</name>
|
91 |
+
</action>
|
92 |
+
</reference>
|
93 |
+
<reference name="customer_form_register">
|
94 |
+
<action method="setTemplate" ifconfig="dropfin_fbconnect/general/login">
|
95 |
+
<template>dropfin/fbconnect/form/register.phtml</template>
|
96 |
+
</action>
|
97 |
+
<block type="dropfin_fbconnect/login_button" name="dropfin.fbbutton" as="dropfin_fbbutton" template="dropfin/fbconnect/form/button.phtml" />
|
98 |
+
</reference>
|
99 |
+
</customer_account_create>
|
100 |
+
|
101 |
+
<checkout_onepage_index translate="label">
|
102 |
+
<reference name="head">
|
103 |
+
<action method="addItem" ifconfig="dropfin_fbconnect/general/login">
|
104 |
+
<type>skin_css</type>
|
105 |
+
<name>dropfin/fbconnect/css/styles.css</name>
|
106 |
+
</action>
|
107 |
+
<action method="addItem" ifconfig="dropfin_fbconnect/general/login">
|
108 |
+
<type>skin_js</type>
|
109 |
+
<name>dropfin/fbconnect/js/jquery-1.10.2.min.js</name>
|
110 |
+
</action>
|
111 |
+
<action method="addItem" ifconfig="dropfin_fbconnect/general/login">
|
112 |
+
<type>skin_js</type>
|
113 |
+
<name>dropfin/fbconnect/js/fbconnect.js</name>
|
114 |
+
</action>
|
115 |
+
</reference>
|
116 |
+
<reference name="checkout.onepage.login">
|
117 |
+
<action method="setTemplate" ifconfig="dropfin_fbconnect/general/login">
|
118 |
+
<template>dropfin/fbconnect/form/onepage/login.phtml</template>
|
119 |
+
</action>
|
120 |
+
<block type="dropfin_fbconnect/login_button" name="dropfin.fbbutton" as="dropfin_fbbutton" template="dropfin/fbconnect/form/button.phtml" />
|
121 |
+
</reference>
|
122 |
+
</checkout_onepage_index>
|
123 |
+
|
124 |
+
</layout>
|
app/design/frontend/base/default/template/dropfin/fbconnect/fbcomment.phtml
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Dropfin
|
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 |
+
* DISCLAIMER
|
17 |
+
*
|
18 |
+
* Do not edit or add to this file if you wish to upgrade
|
19 |
+
* this extension to newer versions in the future.
|
20 |
+
*
|
21 |
+
* @category Dropfin
|
22 |
+
* @package Facebook Connect
|
23 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
24 |
+
*/
|
25 |
+
|
26 |
+
$fbconnect = $this->helper('dropfin_fbconnect');
|
27 |
+
|
28 |
+
if($fbconnect->isEnable() && $fbconnect->showCommmentBox()){
|
29 |
+
?>
|
30 |
+
<div id="fb-root"></div>
|
31 |
+
<script>
|
32 |
+
(function(d, s, id) {
|
33 |
+
var js, fjs = d.getElementsByTagName(s)[0];
|
34 |
+
if (d.getElementById(id)) return;
|
35 |
+
js = d.createElement(s); js.id = id;
|
36 |
+
js.src = "//connect.facebook.net/<?php echo $fbconnect->getLanguage();?>/all.js#xfbml=1&appId=<?php echo $fbconnect->getAppId();?>";
|
37 |
+
fjs.parentNode.insertBefore(js, fjs);
|
38 |
+
}(document, 'script', 'facebook-jssdk'));
|
39 |
+
</script>
|
40 |
+
<div class="fb-comments" data-href="<?php echo Mage::helper('core/url')->getCurrentUrl();?>" data-numposts="<?php echo $fbconnect->getCommentBoxNo();?>" data-width="<?php echo $fbconnect->getCommmentBoxWidth();?>" data-colorscheme="<?php echo $fbconnect->getCommmentBoxColor();?>" data-mobile="false"></div>
|
41 |
+
<?php
|
42 |
+
}
|
app/design/frontend/base/default/template/dropfin/fbconnect/fblikebox.phtml
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Dropfin
|
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 |
+
* DISCLAIMER
|
17 |
+
*
|
18 |
+
* Do not edit or add to this file if you wish to upgrade
|
19 |
+
* this extension to newer versions in the future.
|
20 |
+
*
|
21 |
+
* @category Dropfin
|
22 |
+
* @package Facebook Connect
|
23 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
24 |
+
*/
|
25 |
+
|
26 |
+
$fbconnect = $this->helper('dropfin_fbconnect');
|
27 |
+
if($fbconnect->isEnable() && $fbconnect->showFanBox()){
|
28 |
+
$language = (trim($fbconnect->getLanguage()) != '') ? $fbconnect->getLanguage() : 'en_GB';
|
29 |
+
?>
|
30 |
+
<div id="fb-root"></div>
|
31 |
+
<script>
|
32 |
+
(function(d, s, id) {
|
33 |
+
var js, fjs = d.getElementsByTagName(s)[0];
|
34 |
+
if (d.getElementById(id)) return;
|
35 |
+
js = d.createElement(s); js.id = id;
|
36 |
+
js.src = "//connect.facebook.net/<?php echo $language;?>/sdk.js#xfbml=1&version=v2.4";
|
37 |
+
fjs.parentNode.insertBefore(js, fjs);
|
38 |
+
}(document, 'script', 'facebook-jssdk'));
|
39 |
+
</script>
|
40 |
+
<div class="fb-page" data-href="https://www.facebook.com/<?php echo $fbconnect->getFanboxPageId();?>" data-width="<?php echo $fbconnect->getFanboxWidth();?>" data-height="<?php echo $fbconnect->getFanboxHeight();?>" data-small-header="false" data-adapt-container-width="true" data-hide-cover="<?php echo $fbconnect->showCover();?>" data-show-facepile="<?php echo $fbconnect->showFaces();?>" data-show-posts="<?php echo $fbconnect->showStream();?>"><div class="fb-xfbml-parse-ignore"><blockquote cite="https://www.facebook.com/<?php echo $fbconnect->getFanboxPageId();?>"><a href="https://www.facebook.com/<?php echo $fbconnect->getFanboxPageId();?>"><?php echo $fbconnect->getFanboxPageId();?></a></blockquote></div></div>
|
41 |
+
<?php
|
42 |
+
}
|
app/design/frontend/base/default/template/dropfin/fbconnect/form/button.phtml
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Dropfin
|
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 |
+
* DISCLAIMER
|
17 |
+
*
|
18 |
+
* Do not edit or add to this file if you wish to upgrade
|
19 |
+
* this extension to newer versions in the future.
|
20 |
+
*
|
21 |
+
* @category Dropfin
|
22 |
+
* @package Facebook Connect
|
23 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
24 |
+
*/
|
25 |
+
|
26 |
+
$fbconnect = $this->helper('dropfin_fbconnect');
|
27 |
+
if($fbconnect->isEnable() && $fbconnect->isLoginEnable()){
|
28 |
+
?>
|
29 |
+
<div class="buttons-set">
|
30 |
+
<button onclick="window.open('<?php echo $this->escapeUrl($this->_getButtonUrl()); ?>', '_blank', 'toolbar=yes, scrollbars=yes, resizable=yes, top=500, left=500, width=400, height=400')" title="<?php echo $fbconnect->getLoginButtonText();?>" class="button"><span><?php echo $fbconnect->getLoginButtonText();?></span></button>
|
31 |
+
</div>
|
32 |
+
<?php
|
33 |
+
}
|
app/design/frontend/base/default/template/dropfin/fbconnect/form/fblogin.phtml
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Dropfin
|
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 |
+
* DISCLAIMER
|
17 |
+
*
|
18 |
+
* Do not edit or add to this file if you wish to upgrade
|
19 |
+
* this extension to newer versions in the future.
|
20 |
+
*
|
21 |
+
* @category Dropfin
|
22 |
+
* @package Facebook Connect
|
23 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
24 |
+
*/
|
25 |
+
|
26 |
+
$fbconnect = $this->helper('dropfin_fbconnect');
|
27 |
+
if($fbconnect->isEnable() && $fbconnect->isLoginEnable()){
|
28 |
+
?>
|
29 |
+
<div class="account-login facebook-login fbconnect">
|
30 |
+
<div class="page-title">
|
31 |
+
<h1><?php echo $this->__('Connect with Facebook');?></h1>
|
32 |
+
</div>
|
33 |
+
<div class="col1-set">
|
34 |
+
<div class="col-1">
|
35 |
+
<div class="content new-users">
|
36 |
+
<h2><?php echo $fbconnect->getLoginBlockTitle();?></h2>
|
37 |
+
<p><?php echo $fbconnect->getLoginBlockContent();?></p>
|
38 |
+
</div>
|
39 |
+
<?php echo $this->getChildHtml('dropfin_fbbutton'); ?>
|
40 |
+
</div>
|
41 |
+
</div>
|
42 |
+
</div>
|
43 |
+
<?php
|
44 |
+
}
|
app/design/frontend/base/default/template/dropfin/fbconnect/form/onepage/login.phtml
ADDED
@@ -0,0 +1,168 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Dropfin
|
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 |
+
* DISCLAIMER
|
17 |
+
*
|
18 |
+
* Do not edit or add to this file if you wish to upgrade
|
19 |
+
* this extension to newer versions in the future.
|
20 |
+
*
|
21 |
+
* @category Dropfin
|
22 |
+
* @package Facebook Connect
|
23 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
24 |
+
*/
|
25 |
+
|
26 |
+
$fbconnect = $this->helper('dropfin_fbconnect');
|
27 |
+
?>
|
28 |
+
<?php echo $this->getChildHtml('login_before') ?>
|
29 |
+
<div class="col2-set<?php if (!$this->helper('customer')->isRegistrationAllowed() && !$this->getQuote()->isAllowedGuestCheckout()) echo ' login-only' ?>">
|
30 |
+
<div class="col-1">
|
31 |
+
<h3>
|
32 |
+
<?php if( $this->getQuote()->isAllowedGuestCheckout() && $this->helper('customer')->isRegistrationAllowed() ): ?>
|
33 |
+
<?php echo $this->__('Checkout as a Guest or Register') ?>
|
34 |
+
<?php elseif ( $this->getQuote()->isAllowedGuestCheckout() && !$this->helper('customer')->isRegistrationAllowed() ): ?>
|
35 |
+
<?php echo $this->__('Checkout as a Guest') ?>
|
36 |
+
<?php else: ?>
|
37 |
+
<?php echo $this->__('Register to Create an Account') ?>
|
38 |
+
<?php endif; ?>
|
39 |
+
</h3>
|
40 |
+
<?php if( !$this->getQuote()->isAllowedGuestCheckout() && $this->helper('customer')->isRegistrationAllowed() ): ?>
|
41 |
+
<p class="description"><?php echo $this->__('Register and save time!') ?></strong><br />
|
42 |
+
<?php echo $this->__('Register with us for future convenience:') ?></p>
|
43 |
+
<ul>
|
44 |
+
<li><?php echo $this->__('Fast and easy check out') ?></li>
|
45 |
+
<li><?php echo $this->__('Easy access to your order history and status') ?></li>
|
46 |
+
</ul>
|
47 |
+
<?php elseif( $this->getQuote()->isAllowedGuestCheckout() && $this->helper('customer')->isRegistrationAllowed() ): ?>
|
48 |
+
<p class="description"><?php echo $this->__('Register with us for future convenience:') ?></p>
|
49 |
+
<?php endif ?>
|
50 |
+
<?php if( $this->getQuote()->isAllowedGuestCheckout() ): ?>
|
51 |
+
<ul class="form-list">
|
52 |
+
<?php if( $this->getQuote()->isAllowedGuestCheckout() ): ?>
|
53 |
+
<li class="control">
|
54 |
+
<input type="radio" name="checkout_method" id="login:guest" value="guest"<?php if($this->getQuote()->getCheckoutMethod()!=Mage_Checkout_Model_Type_Onepage::METHOD_REGISTER): ?> checked="checked"<?php endif; ?> class="radio" /><label for="login:guest"><?php echo $this->__('Checkout as Guest') ?></label>
|
55 |
+
</li>
|
56 |
+
<?php endif; ?>
|
57 |
+
<?php if( $this->helper('customer')->isRegistrationAllowed() ): ?>
|
58 |
+
<li class="control">
|
59 |
+
<input type="radio" name="checkout_method" id="login:register" value="register"<?php if($this->getQuote()->getCheckoutMethod()==Mage_Checkout_Model_Type_Onepage::METHOD_REGISTER || !$this->getQuote()->isAllowedGuestCheckout()): ?> checked="checked"<?php endif ?> class="radio" />
|
60 |
+
<label for="login:register"><?php echo $this->__('Register and Checkout') ?></label>
|
61 |
+
</li>
|
62 |
+
<?php endif; ?>
|
63 |
+
</ul>
|
64 |
+
<?php else: ?>
|
65 |
+
<input type="hidden" name="checkout_method" id="login:register" value="register" checked="checked" />
|
66 |
+
<?php endif; ?>
|
67 |
+
<div class="buttons-set">
|
68 |
+
<p class="required"> </p>
|
69 |
+
<?php if ($this->getQuote()->isAllowedGuestCheckout()): ?>
|
70 |
+
<button id="onepage-guest-register-button" type="button" class="button" onclick="checkout.setMethod();"><span><span><?php echo $this->__('Continue') ?></span></span></button>
|
71 |
+
<?php elseif ($this->helper('checkout')->isCustomerMustBeLogged()): ?>
|
72 |
+
<button id="onepage-guest-register-button" type="button" class="button" onclick="window.location='<?php echo $this->helper('checkout/url')->getRegistrationUrl();?>'"><span><span><?php echo $this->__('Register') ?></span></span></button>
|
73 |
+
<?php else: ?>
|
74 |
+
<form action="<?php echo $this->getUrl('persistent/index/saveMethod'); ?>">
|
75 |
+
<button id="onepage-guest-register-button" type="submit" class="button"><span><span><?php echo $this->__('Register') ?></span></span></button>
|
76 |
+
</form>
|
77 |
+
<?php endif; ?>
|
78 |
+
</div>
|
79 |
+
</div>
|
80 |
+
<div class="col-2">
|
81 |
+
<h3><?php echo $this->__('Returning Customers') ?></h3>
|
82 |
+
<?php echo $this->getMessagesBlock()->toHtml() ?>
|
83 |
+
<form id="login-form" action="<?php echo $this->getPostAction() ?>" method="post">
|
84 |
+
<div class="fieldset">
|
85 |
+
<?php echo $this->getBlockHtml('formkey'); ?>
|
86 |
+
<p class="description"><?php echo $this->__('Sign in to speed up your checkout process') ?></p>
|
87 |
+
<p class="required"><?php echo $this->__('* Required Fields') ?></p>
|
88 |
+
<ul class="form-list">
|
89 |
+
<li>
|
90 |
+
<label for="login-email" class="required"><em>*</em><?php echo $this->__('Email Address') ?></label>
|
91 |
+
<div class="input-box">
|
92 |
+
<input type="email" autocapitalize="off" autocorrect="off" spellcheck="false" class="input-text required-entry validate-email" id="login-email" name="login[username]" value="<?php echo $this->escapeHtml($this->getUsername()) ?>" />
|
93 |
+
</div>
|
94 |
+
</li>
|
95 |
+
<li>
|
96 |
+
<label for="login-password" class="required"><em>*</em><?php echo $this->__('Password') ?></label>
|
97 |
+
<div class="input-box">
|
98 |
+
<input type="password" class="input-text validate-password required-entry" id="login-password" name="login[password]" />
|
99 |
+
</div>
|
100 |
+
</li>
|
101 |
+
<li>
|
102 |
+
<a href="<?php echo $this->getUrl('customer/account/forgotpassword') ?>" class="f-left"><?php echo $this->__('Forgot your password?') ?></a>
|
103 |
+
</li>
|
104 |
+
<?php echo $this->getChildHtml('form.additional.info'); ?>
|
105 |
+
<?php echo $this->getChildHtml('persistent.remember.me'); ?>
|
106 |
+
</ul>
|
107 |
+
<?php echo $this->getChildHtml('persistent.remember.me.tooltip'); ?>
|
108 |
+
<input name="context" type="hidden" value="checkout" />
|
109 |
+
</div>
|
110 |
+
</form>
|
111 |
+
<div class="buttons-set">
|
112 |
+
<button type="submit" class="button" onclick="onepageLogin(this)"><span><span><?php echo $this->__('Login') ?></span></span></button>
|
113 |
+
</div>
|
114 |
+
<?php if($fbconnect->isEnable() && $fbconnect->isLoginEnable()): ?>
|
115 |
+
<div class="fblogin-separator">
|
116 |
+
<table>
|
117 |
+
<tr>
|
118 |
+
<td><div class="border-line"></div></td>
|
119 |
+
<td class="border-text"><?php echo $this->__('OR'); ?></td>
|
120 |
+
<td><div class="border-line"></div></td>
|
121 |
+
</tr>
|
122 |
+
</table>
|
123 |
+
</div>
|
124 |
+
<div class="content">
|
125 |
+
<h3><?php echo $fbconnect->getLoginBlockTitle();?></h3>
|
126 |
+
<p class="description"><?php echo $fbconnect->getLoginBlockContent();?></p>
|
127 |
+
</div>
|
128 |
+
<div class="facebook-login">
|
129 |
+
<?php echo $this->getChildHtml('dropfin_fbbutton'); ?>
|
130 |
+
</div>
|
131 |
+
<?php endif; ?>
|
132 |
+
</div>
|
133 |
+
</div>
|
134 |
+
|
135 |
+
<script type="text/javascript">
|
136 |
+
//<![CDATA[
|
137 |
+
var loginForm = new VarienForm('login-form', true);
|
138 |
+
$('login-email').observe('keypress', bindLoginPost);
|
139 |
+
$('login-password').observe('keypress', bindLoginPost);
|
140 |
+
function bindLoginPost(evt){
|
141 |
+
if (evt.keyCode == Event.KEY_RETURN) {
|
142 |
+
loginForm.submit();
|
143 |
+
}
|
144 |
+
}
|
145 |
+
function onepageLogin(button)
|
146 |
+
{
|
147 |
+
if(loginForm.validator && loginForm.validator.validate()){
|
148 |
+
button.disabled = true;
|
149 |
+
loginForm.submit();
|
150 |
+
}
|
151 |
+
}
|
152 |
+
//]]>
|
153 |
+
</script>
|
154 |
+
<?php
|
155 |
+
$registerParam = $this->getRequest()->getParam('register');
|
156 |
+
if ($registerParam || $registerParam === ''):
|
157 |
+
?>
|
158 |
+
<script type="text/javascript">
|
159 |
+
//<![CDATA[
|
160 |
+
document.observe("dom:loaded", function() {
|
161 |
+
if($('login:register')) {
|
162 |
+
$('login:register').checked = true;
|
163 |
+
checkout.setMethod();
|
164 |
+
}
|
165 |
+
})
|
166 |
+
//]]>
|
167 |
+
</script>
|
168 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/dropfin/fbconnect/form/register.phtml
ADDED
@@ -0,0 +1,198 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Dropfin
|
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
|
18 |
+
* this extension to newer versions in the future.
|
19 |
+
*
|
20 |
+
* @category Dropfin
|
21 |
+
* @package Facebook Connect
|
22 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
23 |
+
*/
|
24 |
+
|
25 |
+
$fbconnect = $this->helper('dropfin_fbconnect');
|
26 |
+
?>
|
27 |
+
<div class="account-create">
|
28 |
+
<div class="page-title">
|
29 |
+
<h1><?php echo $this->__('Create an Account') ?></h1>
|
30 |
+
</div>
|
31 |
+
<?php echo $this->getChildHtml('form_fields_before')?>
|
32 |
+
<?php if($fbconnect->isEnable() && $fbconnect->isLoginEnable()): ?>
|
33 |
+
<div class="content">
|
34 |
+
<h2><?php echo $fbconnect->getLoginBlockTitle();?></h2>
|
35 |
+
<p><?php echo $fbconnect->getLoginBlockContent();?></p>
|
36 |
+
</div>
|
37 |
+
<div class="facebook-login">
|
38 |
+
<?php echo $this->getChildHtml('dropfin_fbbutton'); ?>
|
39 |
+
</div>
|
40 |
+
<div class="fblogin-separator">
|
41 |
+
<table>
|
42 |
+
<tr>
|
43 |
+
<td><div class="border-line"></div></td>
|
44 |
+
<td class="border-text"><?php echo $this->__('OR'); ?></td>
|
45 |
+
<td><div class="border-line"></div></td>
|
46 |
+
</tr>
|
47 |
+
</table>
|
48 |
+
</div>
|
49 |
+
<?php endif; ?>
|
50 |
+
<?php echo $this->getMessagesBlock()->toHtml() ?>
|
51 |
+
<form action="<?php echo $this->getPostActionUrl() ?>" method="post" id="form-validate" class="scaffold-form" enctype="multipart/form-data">
|
52 |
+
<div class="fieldset">
|
53 |
+
<input type="hidden" name="success_url" value="<?php echo $this->getSuccessUrl() ?>" />
|
54 |
+
<input type="hidden" name="error_url" value="<?php echo $this->getErrorUrl() ?>" />
|
55 |
+
<p class="form-instructions"><?php echo $this->__('Please enter the following information to create your account.') ?></p>
|
56 |
+
<p class="required"><?php echo $this->__('* Required Fields') ?></p>
|
57 |
+
<ul class="form-list">
|
58 |
+
<li class="fields">
|
59 |
+
<?php echo $this->getLayout()->createBlock('customer/widget_name')->setObject($this->getFormData())->setForceUseCustomerAttributes(true)->toHtml() ?>
|
60 |
+
</li>
|
61 |
+
<li>
|
62 |
+
<label for="email_address" class="required"><em>*</em><?php echo $this->__('Email Address') ?></label>
|
63 |
+
<div class="input-box">
|
64 |
+
<input type="email" autocapitalize="off" autocorrect="off" spellcheck="false" name="email" id="email_address" value="<?php echo $this->escapeHtml($this->getFormData()->getEmail()) ?>" title="<?php echo $this->quoteEscape($this->__('Email Address')) ?>" class="input-text validate-email required-entry" />
|
65 |
+
</div>
|
66 |
+
</li>
|
67 |
+
<?php $_dob = $this->getLayout()->createBlock('customer/widget_dob') ?>
|
68 |
+
<?php if ($_dob->isEnabled()): ?>
|
69 |
+
<li><?php echo $_dob->setDate($this->getFormData()->getDob())->toHtml() ?></li>
|
70 |
+
<?php endif ?>
|
71 |
+
<?php $_taxvat = $this->getLayout()->createBlock('customer/widget_taxvat') ?>
|
72 |
+
<?php if ($_taxvat->isEnabled()): ?>
|
73 |
+
<li><?php echo $_taxvat->setTaxvat($this->getFormData()->getTaxvat())->toHtml() ?></li>
|
74 |
+
<?php endif ?>
|
75 |
+
<?php $_gender = $this->getLayout()->createBlock('customer/widget_gender') ?>
|
76 |
+
<?php if ($_gender->isEnabled()): ?>
|
77 |
+
<li><?php echo $_gender->setGender($this->getFormData()->getGender())->toHtml() ?></li>
|
78 |
+
<?php endif ?>
|
79 |
+
|
80 |
+
<?php if($this->getShowAddressFields()): ?>
|
81 |
+
<li class="hidden">
|
82 |
+
<input type="hidden" name="create_address" value="1" />
|
83 |
+
</li>
|
84 |
+
<li class="fields">
|
85 |
+
<div class="field">
|
86 |
+
<label for="company"><?php echo $this->__('Company') ?></label>
|
87 |
+
<div class="input-box">
|
88 |
+
<input type="text" name="company" id="company" value="<?php echo $this->escapeHtml($this->getFormData()->getCompany()) ?>" title="<?php echo $this->quoteEscape($this->__('Company')) ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('company') ?>" />
|
89 |
+
</div>
|
90 |
+
</div>
|
91 |
+
<div class="field">
|
92 |
+
<label for="telephone" class="required"><em>*</em><?php echo $this->__('Telephone') ?></label>
|
93 |
+
<div class="input-box">
|
94 |
+
<input type="tel" name="telephone" id="telephone" value="<?php echo $this->escapeHtml($this->getFormData()->getTelephone()) ?>" title="<?php echo $this->quoteEscape($this->__('Telephone')) ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('telephone') ?>" />
|
95 |
+
</div>
|
96 |
+
</div>
|
97 |
+
</li>
|
98 |
+
<?php $_streetValidationClass = $this->helper('customer/address')->getAttributeValidationClass('street'); ?>
|
99 |
+
<li class="wide">
|
100 |
+
<label for="street_1" class="required"><em>*</em><?php echo $this->__('Street Address') ?></label>
|
101 |
+
<div class="input-box">
|
102 |
+
<input type="text" name="street[]" value="<?php echo $this->escapeHtml($this->getFormData()->getStreet(0)) ?>" title="<?php echo $this->quoteEscape($this->__('Street Address')) ?>" id="street_1" class="input-text <?php echo $_streetValidationClass ?>" />
|
103 |
+
</div>
|
104 |
+
</li>
|
105 |
+
<?php $_streetValidationClass = trim(str_replace('required-entry', '', $_streetValidationClass)); ?>
|
106 |
+
<?php for ($_i = 2, $_n = $this->helper('customer/address')->getStreetLines(); $_i <= $_n; $_i++): ?>
|
107 |
+
<li class="wide">
|
108 |
+
<label for="billing:street<?php echo $_i ?>"><?php echo $this->__('Street Address %s', $_i) ?></label>
|
109 |
+
<div class="input-box">
|
110 |
+
<input type="text" name="street[]" value="<?php echo $this->escapeHtml($this->getFormData()->getStreet($_i - 1)) ?>" title="<?php echo $this->quoteEscape($this->__('Street Address %s', $_i)) ?>" id="street_<?php echo $_i ?>" class="input-text <?php echo $_streetValidationClass ?>" />
|
111 |
+
</div>
|
112 |
+
</li>
|
113 |
+
<?php endfor; ?>
|
114 |
+
<li class="fields">
|
115 |
+
<div class="field">
|
116 |
+
<label for="city" class="required"><em>*</em><?php echo $this->__('City') ?></label>
|
117 |
+
<div class="input-box">
|
118 |
+
<input type="text" name="city" value="<?php echo $this->escapeHtml($this->getFormData()->getCity()) ?>" title="<?php echo $this->quoteEscape($this->__('City')) ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('city') ?>" id="city" />
|
119 |
+
</div>
|
120 |
+
</div>
|
121 |
+
<div class="field">
|
122 |
+
<label for="region_id" class="required"><em>*</em><?php echo $this->__('State/Province') ?></label>
|
123 |
+
<div class="input-box">
|
124 |
+
<select id="region_id" name="region_id" title="<?php echo $this->quoteEscape($this->__('State/Province')) ?>" class="validate-select" style="display:none;">
|
125 |
+
<option value=""><?php echo $this->__('Please select region, state or province') ?></option>
|
126 |
+
</select>
|
127 |
+
<script type="text/javascript">
|
128 |
+
//<![CDATA[
|
129 |
+
$('region_id').setAttribute('defaultValue', "<?php echo $this->getFormData()->getRegionId() ?>");
|
130 |
+
//]]>
|
131 |
+
</script>
|
132 |
+
<input type="text" id="region" name="region" value="<?php echo $this->escapeHtml($this->getRegion()) ?>" title="<?php echo $this->quoteEscape($this->__('State/Province')) ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('region') ?>" style="display:none;" />
|
133 |
+
</div>
|
134 |
+
</div>
|
135 |
+
</li>
|
136 |
+
<li class="fields">
|
137 |
+
<div class="field">
|
138 |
+
<label for="zip" class="required"><em>*</em><?php echo $this->__('Zip/Postal Code') ?></label>
|
139 |
+
<div class="input-box">
|
140 |
+
<input type="text" name="postcode" value="<?php echo $this->escapeHtml($this->getFormData()->getPostcode()) ?>" title="<?php echo $this->quoteEscape($this->__('Zip/Postal Code')) ?>" id="zip" class="input-text validate-zip-international <?php echo $this->helper('customer/address')->getAttributeValidationClass('postcode') ?>" />
|
141 |
+
</div>
|
142 |
+
</div>
|
143 |
+
<div class="field">
|
144 |
+
<label for="country" class="required"><em>*</em><?php echo $this->__('Country') ?></label>
|
145 |
+
<div class="input-box">
|
146 |
+
<?php echo $this->getCountryHtmlSelect() ?>
|
147 |
+
</div>
|
148 |
+
</div>
|
149 |
+
</li>
|
150 |
+
<li class="hidden">
|
151 |
+
<input type="hidden" name="default_billing" value="1" />
|
152 |
+
<input type="hidden" name="default_shipping" value="1" />
|
153 |
+
</li>
|
154 |
+
<?php endif; ?>
|
155 |
+
<li class="fields">
|
156 |
+
<div class="field">
|
157 |
+
<label for="password" class="required"><em>*</em><?php echo $this->__('Password') ?></label>
|
158 |
+
<div class="input-box">
|
159 |
+
<input type="password" name="password" id="password" title="<?php echo $this->quoteEscape($this->__('Password')) ?>" class="input-text required-entry validate-password" />
|
160 |
+
</div>
|
161 |
+
</div>
|
162 |
+
<div class="field">
|
163 |
+
<label for="confirmation" class="required"><em>*</em><?php echo $this->__('Confirm Password') ?></label>
|
164 |
+
<div class="input-box">
|
165 |
+
<input type="password" name="confirmation" title="<?php echo $this->quoteEscape($this->__('Confirm Password')) ?>" id="confirmation" class="input-text required-entry validate-cpassword" />
|
166 |
+
</div>
|
167 |
+
</div>
|
168 |
+
</li>
|
169 |
+
<?php echo $this->getChildHtml('form.additional.info'); ?>
|
170 |
+
<?php if ($this->isNewsletterEnabled()): ?>
|
171 |
+
<li class="control">
|
172 |
+
<div class="input-box">
|
173 |
+
<input type="checkbox" name="is_subscribed" title="<?php echo $this->quoteEscape($this->__('Sign Up for Newsletter')) ?>" value="1" id="is_subscribed"<?php if($this->getFormData()->getIsSubscribed()): ?> checked="checked"<?php endif; ?> class="checkbox" />
|
174 |
+
</div>
|
175 |
+
<label for="is_subscribed"><?php echo $this->__('Sign Up for Newsletter') ?></label>
|
176 |
+
</li>
|
177 |
+
<?php endif ?>
|
178 |
+
<?php echo $this->getChildHtml('persistent.remember.me'); ?>
|
179 |
+
</ul>
|
180 |
+
<?php echo $this->getChildHtml('persistent.remember.me.tooltip'); ?>
|
181 |
+
</div>
|
182 |
+
<div class="buttons-set">
|
183 |
+
<p class="back-link"><a href="<?php echo $this->escapeUrl($this->getBackUrl()) ?>" class="back-link"><small>« </small><?php echo $this->__('Back') ?></a></p>
|
184 |
+
<button type="submit" title="<?php echo $this->quoteEscape($this->__('Register')) ?>" class="button"><span><span><?php echo $this->__('Register') ?></span></span></button>
|
185 |
+
</div>
|
186 |
+
<?php if (Mage::helper('checkout')->isContextCheckout()): ?>
|
187 |
+
<input name="context" type="hidden" value="checkout" />
|
188 |
+
<?php endif; ?>
|
189 |
+
</form>
|
190 |
+
<script type="text/javascript">
|
191 |
+
//<![CDATA[
|
192 |
+
var dataForm = new VarienForm('form-validate', true);
|
193 |
+
<?php if($this->getShowAddressFields()): ?>
|
194 |
+
new RegionUpdater('country', 'region', 'region_id', <?php echo $this->helper('directory')->getRegionJson() ?>, undefined, 'zip');
|
195 |
+
<?php endif; ?>
|
196 |
+
//]]>
|
197 |
+
</script>
|
198 |
+
</div>
|
app/etc/modules/Dropfin_Fbconnect.xml
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Dropfin
|
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 |
+
* DISCLAIMER
|
17 |
+
*
|
18 |
+
* Do not edit or add to this file if you wish to upgrade
|
19 |
+
* this extension to newer versions in the future.
|
20 |
+
*
|
21 |
+
* @category Dropfin
|
22 |
+
* @package Facebook Connect
|
23 |
+
* @copyright Copyright (c) Dropfin (http://www.dropfin.com)
|
24 |
+
*/
|
25 |
+
-->
|
26 |
+
<config>
|
27 |
+
<modules>
|
28 |
+
<Dropfin_Fbconnect>
|
29 |
+
<active>true</active>
|
30 |
+
<codePool>community</codePool>
|
31 |
+
</Dropfin_Fbconnect>
|
32 |
+
</modules>
|
33 |
+
</config>
|
app/locale/en_US/Dropfin_Fbconnect.csv
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"Facebook connect process aborted.", "Facebook connect process aborted."
|
2 |
+
"Sorry, Please try again.", "Sorry, Please try again."
|
3 |
+
"Your facebook account is already connected to the store accounts.", "Your facebook account is already connected to the store accounts."
|
4 |
+
"Your facebook account is now connected to the store accout.", "Your facebook account is now connected to the store accout."
|
5 |
+
"You have successfully logged in using your facebook account.", "You have successfully logged in using your facebook account."
|
6 |
+
"We have discovered you already have an account at our store. Your facebook account is now connected to the store account.", "We have discovered you already have an account at our store. Your facebook account is now connected to the store account."
|
7 |
+
"Sorry, could not retrieve your facebook first name. Please try again.", "Sorry, could not retrieve your facebook first name. Please try again."
|
8 |
+
"Sorry, could not retrieve your facebook last name. Please try again.", "Sorry, could not retrieve your facebook last name. Please try again."
|
9 |
+
"Your facebook account is now connected to our store.", "Your facebook account is now connected to our store."
|
10 |
+
"OR", "OR"
|
11 |
+
"Connect with Facebook", "Connect with Facebook"
|
12 |
+
"Facebook Connect", "Facebook Connect"
|
13 |
+
"Facebook Configurations", "Facebook Configurations"
|
14 |
+
"App Id", "App Id"
|
15 |
+
"App Secret", "App Secret"
|
16 |
+
"Language", "Language"
|
17 |
+
"Enable Login", "Enable Login"
|
18 |
+
"Block Title", "Block Title"
|
19 |
+
"Block Content", "Block Content"
|
20 |
+
"Facebook Login Button Text", "Facebook Login Button Text"
|
21 |
+
"Enable Fanbox", "Enable Fanbox"
|
22 |
+
"Facebook Page Id", "Facebook Page Id"
|
23 |
+
"Fanbox's Width", "Fanbox's Width"
|
24 |
+
"Fanbox's Height", "Fanbox's Height"
|
25 |
+
"Show Faces in Fanbox", "Show Faces in Fanbox"
|
26 |
+
"Show Stream in Fanbox", "Show Stream in Fanbox"
|
27 |
+
"Show Cover Photo in Fanbox", "Show Cover Photo in Fanbox"
|
28 |
+
"Facebook Comment for Product", "Facebook Comment for Product"
|
29 |
+
"Comment Box's Color Theme", "Comment Box's Color Theme"
|
30 |
+
"Comment Box's Width", "Comment Box's Width"
|
31 |
+
"Number of Post", "Number of Post"
|
32 |
+
"Width in pixels", "Width in pixels"
|
33 |
+
"Height in pixels", "Height in pixels"
|
34 |
+
"Comment Box will Show in Product View Page", "Comment Box will Show in Product View Page"
|
package.xml
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<package>
|
3 |
+
<name>Dropfin_Fbconnect</name>
|
4 |
+
<version>1.0.0</version>
|
5 |
+
<stability>stable</stability>
|
6 |
+
<license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
|
7 |
+
<channel>community</channel>
|
8 |
+
<extends/>
|
9 |
+
<summary>Facebook Connect</summary>
|
10 |
+
<description>Facebook connect extension will help the site owner to integrate facebook features (Login/Registration for Customer using Facebook Account, Facebook Comment for Product and Facebook Fanbox) to his website.</description>
|
11 |
+
<notes>Facebook Connect - 1.0.0</notes>
|
12 |
+
<authors><author><name>Dropfin</name><user>Dropfin</user><email>t.balamani88@gmail.com</email></author></authors>
|
13 |
+
<date>2015-11-18</date>
|
14 |
+
<time>12:29:59</time>
|
15 |
+
<contents><target name="magecommunity"><dir name="Dropfin"><dir name="Fbconnect"><dir name="Block"><dir name="Login"><file name="Button.php" hash="c0747ef00932525c02d1e1a59796ec86"/></dir><file name="Login.php" hash="723b0a86a0f9af55eacf9957585c5b55"/></dir><dir name="Helper"><file name="Data.php" hash="6c573a0c623f74f2e05b98a8e6634b45"/><file name="Facebook.php" hash="72e883e1d8e0a0f5fffd28f66e9fbc24"/></dir><dir name="Model"><dir name="Facebook"><file name="Connect.php" hash="fa0d0e9ed2214f84f12e58fdf4f2528e"/></dir><dir name="Resource"><file name="Setup.php" hash="7bc5636395099d8d888061de9ff958dc"/></dir><dir name="System"><dir name="Config"><file name="Language.php" hash="173028d24155ee7aff01ac63235d79cf"/><file name="Themes.php" hash="bdeb8d746bda221fed20362dcd5d9a68"/></dir></dir></dir><dir name="controllers"><file name="AccountController.php" hash="774fa16d04ebe71157b33f2684cd42e9"/></dir><dir name="etc"><file name="config.xml" hash="f500d344d5e72b762c8cf73bf0ed4f5c"/><file name="system.xml" hash="3707553d43ea24c072e695766642acb6"/></dir><dir name="sql"><dir name="fbconnect_setup"><file name="install-1.0.0.php" hash="b9ed5842759013de7d3129d44d192bc2"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="dropfin"><file name="fbconnect.xml" hash="83317fb852f18a3784a82a68bd1ced2a"/></dir></dir><dir name="template"><dir name="dropfin"><dir name="fbconnect"><file name="fbcomment.phtml" hash="97143429c1b319d6f67d86ae2179fd0c"/><file name="fblikebox.phtml" hash="a2fb34da17795f014e23aed28b85f897"/><dir name="form"><file name="button.phtml" hash="742d839235738bd54152ad1c28b74fdf"/><file name="fblogin.phtml" hash="39b3e9b7dac5ae7c4efe778aa8a0e4ab"/><dir name="onepage"><file name="login.phtml" hash="0cdd9079bd71343b05d61513e0100327"/></dir><file name="register.phtml" hash="fc974ffeae16ee3aa6d5534f9042460e"/></dir></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Dropfin_Fbconnect.xml" hash="142338ffb48ae927ab6180271c24befe"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="dropfin"><dir name="fbconnect"><dir name="css"><file name="styles.css" hash="1ab2dc85ba880452792cfc3745a3bad7"/></dir><dir name="images"><file name="loader.gif" hash="f48ee069890b16455c3ddcacee9b5f75"/></dir><dir name="js"><file name="fbconnect.js" hash="c6573569a629cf6e43c7c18f4c8e26ff"/><file name="jquery-1.10.2.min.js" hash="f38a7bdc00cdbebc686dec448a6142db"/></dir></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Dropfin_Fbconnect.csv" hash="025aeeae84804096d60626111ddaba07"/></dir></target></contents>
|
16 |
+
<compatible/>
|
17 |
+
<dependencies><required><php><min>5.0.0</min><max>6.0.0</max></php></required></dependencies>
|
18 |
+
</package>
|
skin/frontend/base/default/dropfin/fbconnect/css/styles.css
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.facebook-login {margin-top: 20px;}
|
2 |
+
.account-create .facebook-login .buttons-set{margin: 10px 0px;max-width: 100%;}
|
3 |
+
.fblogin-separator {display: block; margin: 10px auto; position: relative; text-align: center; line-height: 16px!important; top: auto; left: auto; height: auto; width: auto; line-height: normal; overflow: visible; font-size: 13px; }
|
4 |
+
.fblogin-separator table { width: 100%; }
|
5 |
+
.fblogin-separator table td {vertical-align: middle; }
|
6 |
+
.fblogin-separator .border-line { border-top: 1px solid #e5e2e2; width: 100%; }
|
7 |
+
.fblogin-separator .border-text { color: #636363;; text-align: center; font-size: 11px; width: 25px!important; }
|
8 |
+
.fbconnect.account-login .content {min-height: inherit;}
|
skin/frontend/base/default/dropfin/fbconnect/images/loader.gif
ADDED
Binary file
|
skin/frontend/base/default/dropfin/fbconnect/js/fbconnect.js
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery(document).ready(function() {
|
2 |
+
var popupWindow = null;
|
3 |
+
var width = 650;
|
4 |
+
var height = 350;
|
5 |
+
var left = parseInt((jQuery(window).width() - width) / 2);
|
6 |
+
var top = parseInt((jQuery(window).height() - height) / 2);
|
7 |
+
var params = [
|
8 |
+
'resizable=yes',
|
9 |
+
'scrollbars=no',
|
10 |
+
'toolbar=no',
|
11 |
+
'menubar=no',
|
12 |
+
'location=no',
|
13 |
+
'directories=no',
|
14 |
+
'status=yes',
|
15 |
+
'width='+ width,
|
16 |
+
'height='+ height,
|
17 |
+
'left='+ left,
|
18 |
+
'top='+ top
|
19 |
+
];
|
20 |
+
if(popupWindow) {
|
21 |
+
popupWindow.close();
|
22 |
+
}
|
23 |
+
jQuery(document).on('click', '.a-fbconnect', function() {
|
24 |
+
var $link = jQuery(this);
|
25 |
+
if($link.attr('href')) {
|
26 |
+
popupWindow = window.open($link.attr('href'), 'login_popup', params.join(','));
|
27 |
+
popupWindow.focus();
|
28 |
+
var loaderText = 'Loading...';
|
29 |
+
var html = '<!DOCTYPE html><html style="height: 100%;"><head><meta name="viewport" content="width=device-width, initial-scale=1"><title>'+ loaderText +'</title></head>';
|
30 |
+
html += '<body style="height: 100%; margin: 0; padding: 0;">';
|
31 |
+
html += '<div style="text-align: center; height: 100%;"><div id="loader" style="top: 50%; position: relative; margin-top: -50px; color: #646464; height:25px; font-size: 25px; text-align: center; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">'+ loaderText +'</div></div>';
|
32 |
+
html += '</body></html>';
|
33 |
+
jQuery(popupWindow.document).contents().html(html);
|
34 |
+
}
|
35 |
+
return false;
|
36 |
+
});
|
37 |
+
});
|
skin/frontend/base/default/dropfin/fbconnect/js/jquery-1.10.2.min.js
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
|
2 |
+
//@ sourceMappingURL=jquery-1.10.2.min.map
|
3 |
+
*/
|
4 |
+
var noConfict = typeof(jQuery) != 'undefined';
|
5 |
+
(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
|
6 |
+
}({});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);
|
7 |
+
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);
|
8 |
+
jQuery.noConflict(noConfict);
|