Version Description
- Initial release.
Download this release
Release Info
Developer | keywordrush |
Plugin | Content Egg |
Version | 1.6.0 |
Comparing to | |
See all releases |
Version 1.6.0
- .htaccess +7 -0
- application/Installer.php +126 -0
- application/ModuleUpdater.php +142 -0
- application/ModuleViewer.php +106 -0
- application/Plugin.php +114 -0
- application/Shortcode.php +139 -0
- application/admin/EggMetabox.php +244 -0
- application/admin/FeaturedImage.php +123 -0
- application/admin/GeneralConfig.php +111 -0
- application/admin/PluginAdmin.php +92 -0
- application/admin/index.php +1 -0
- application/admin/views/_metabox_results.php +20 -0
- application/admin/views/_metabox_search_results.php +12 -0
- application/admin/views/_metabox_search_results_images.php +7 -0
- application/admin/views/metabox_general.php +21 -0
- application/admin/views/metabox_module.php +86 -0
- application/admin/views/settings.php +120 -0
- application/components/AffiliateParserModule.php +44 -0
- application/components/AffiliateParserModuleConfig.php +51 -0
- application/components/Config.php +297 -0
- application/components/Content.php +21 -0
- application/components/ContentManager.php +143 -0
- application/components/ContentProduct.php +26 -0
- application/components/ExtraData.php +41 -0
- application/components/Module.php +176 -0
- application/components/ModuleApi.php +84 -0
- application/components/ModuleConfig.php +69 -0
- application/components/ModuleManager.php +225 -0
- application/components/ModuleTemplateManager.php +191 -0
- application/components/ParserModule.php +78 -0
- application/components/ParserModuleConfig.php +77 -0
- application/components/index.php +1 -0
- application/helpers/ArrayHelper.php +42 -0
- application/helpers/FormValidator.php +560 -0
- application/helpers/ImageHelper.php +93 -0
- application/helpers/InputHelper.php +31 -0
- application/helpers/TemplateHelper.php +106 -0
- application/helpers/TextHelper.php +341 -0
- application/helpers/index.php +1 -0
- application/index.php +1 -0
- application/libs/ParserClient.php +198 -0
- application/libs/RestClient.php +262 -0
- application/libs/WpHttpClient.php +460 -0
- application/libs/amazon/AmazonProduct.php +430 -0
- application/libs/google/FreebaseRest.php +133 -0
- application/libs/google/ImagesSearch.php +75 -0
- application/libs/google/YouTubeSearch.php +82 -0
- application/libs/index.php +1 -0
- application/modules/Amazon/AmazonConfig.php +289 -0
- application/modules/Amazon/AmazonModule.php +458 -0
- application/modules/Amazon/ExtraAmazonCustomerReviews.php +21 -0
- application/modules/Amazon/ExtraDataAmazon.php +141 -0
- application/modules/Amazon/index.php +1 -0
- application/modules/Amazon/templates/data_grid.php +64 -0
- application/modules/Amazon/templates/data_item.php +122 -0
- application/modules/Amazon/templates/data_list.php +53 -0
- application/modules/Amazon/views/search_panel.php +16 -0
- application/modules/Freebase/ExtraDataFreebase.php +27 -0
- application/modules/Freebase/FreebaseConfig.php +72 -0
- application/modules/Freebase/FreebaseModule.php +168 -0
- application/modules/Freebase/index.php +1 -0
- application/modules/Freebase/templates/data_simple.php +37 -0
- application/modules/GoogleImages/ExtraDataGoogleImages.php +16 -0
- application/modules/GoogleImages/GoogleImagesConfig.php +155 -0
- application/modules/GoogleImages/GoogleImagesModule.php +119 -0
- application/modules/GoogleImages/index.php +1 -0
- application/modules/GoogleImages/js/module.js +6 -0
- application/modules/GoogleImages/templates/data_image.php +20 -0
- application/modules/GoogleImages/templates/data_justified_gallery.php +47 -0
- application/modules/GoogleImages/templates/data_simple.php +27 -0
- application/modules/GoogleImages/views/search_panel.php +16 -0
- application/modules/Youtube/ExtraDataYoutube.php +19 -0
- application/modules/Youtube/YoutubeConfig.php +88 -0
- application/modules/Youtube/YoutubeModule.php +122 -0
- application/modules/Youtube/index.php +1 -0
- application/modules/Youtube/js/module.js +60 -0
- application/modules/Youtube/templates/data_responsive_embed.php +24 -0
- application/modules/Youtube/templates/data_simple.php +26 -0
- application/modules/Youtube/templates/data_tile.php +24 -0
- application/modules/Youtube/views/search_panel.php +13 -0
- application/modules/Youtube/views/search_results.php +14 -0
- application/modules/index.php +1 -0
- application/vendor/CVarDumper.php +142 -0
- application/vendor/index.php +1 -0
- content-egg.php +35 -0
- index.php +1 -0
- languages/content-egg-en_US.mo +0 -0
- languages/content-egg-en_US.po +1856 -0
- languages/content-egg.pot +1572 -0
- languages/index.php +2 -0
- languages/tpl/content-egg-tpl-RU.mo +0 -0
- languages/tpl/content-egg-tpl-RU.po +218 -0
- languages/tpl/content-egg-tpl.pot +229 -0
- loader.php +87 -0
- readme.txt +108 -0
- res/app/ModuleService.js +46 -0
- res/app/app.js +253 -0
- res/app/vendor/angular-ui-bootstrap/ui-bootstrap-tpls-0.13.3.min.js +10 -0
- res/bootstrap/css/egg-bootstrap.css +5319 -0
- res/bootstrap/js/bootstrap.js +2317 -0
- res/bootstrap/js/bootstrap.min.js +7 -0
- res/colorbox/colorbox.css +70 -0
- res/colorbox/images/border.png +0 -0
- res/colorbox/images/controls.png +0 -0
- res/colorbox/images/loading.gif +0 -0
- res/colorbox/images/loading_background.png +0 -0
- res/colorbox/images/overlay.png +0 -0
- res/colorbox/jquery.colorbox-min.js +6 -0
- res/css/admin.css +116 -0
- res/css/products.css +125 -0
- res/img/loader.gif +0 -0
- res/img/loader2.gif +0 -0
- res/img/status-active.png +0 -0
- res/img/status-inactive.png +0 -0
- res/justified_gallery/jquery.justifiedGallery.min.js +7 -0
- res/justified_gallery/justifiedGallery.min.css +7 -0
.htaccess
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Order Deny,Allow
|
2 |
+
Deny from All
|
3 |
+
|
4 |
+
<FilesMatch ".(js|css|gif|jpe?g|png)$">
|
5 |
+
order allow,deny
|
6 |
+
allow from all
|
7 |
+
</FilesMatch>
|
application/Installer.php
ADDED
@@ -0,0 +1,126 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application;
|
4 |
+
|
5 |
+
use ContentEgg\application\Plugin;
|
6 |
+
use ContentEgg\application\Autoupdate;
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Installer class file
|
10 |
+
*
|
11 |
+
* @author keywordrush.com <support@keywordrush.com>
|
12 |
+
* @link http://www.keywordrush.com/
|
13 |
+
* @copyright Copyright © 2015 keywordrush.com
|
14 |
+
*/
|
15 |
+
class Installer {
|
16 |
+
|
17 |
+
const db_version = 1;
|
18 |
+
|
19 |
+
private static $instance = null;
|
20 |
+
|
21 |
+
public static function getInstance()
|
22 |
+
{
|
23 |
+
|
24 |
+
if (self::$instance == null)
|
25 |
+
self::$instance = new self;
|
26 |
+
|
27 |
+
return self::$instance;
|
28 |
+
}
|
29 |
+
|
30 |
+
private function __construct()
|
31 |
+
{
|
32 |
+
|
33 |
+
if (!empty($GLOBALS['pagenow']) && $GLOBALS['pagenow'] == 'plugins.php')
|
34 |
+
{
|
35 |
+
\add_action('admin_init', array($this, 'requirements'), 0);
|
36 |
+
}
|
37 |
+
|
38 |
+
\add_action('admin_init', array($this, 'upgrade'));
|
39 |
+
\add_action('admin_init', array($this, 'redirect_after_activation'));
|
40 |
+
}
|
41 |
+
|
42 |
+
static public function dbVesrion()
|
43 |
+
{
|
44 |
+
return self::db_version;
|
45 |
+
}
|
46 |
+
|
47 |
+
public static function activate()
|
48 |
+
{
|
49 |
+
if (!\current_user_can('activate_plugins'))
|
50 |
+
return;
|
51 |
+
|
52 |
+
self::requirements();
|
53 |
+
|
54 |
+
\add_option(Plugin::slug . '_do_activation_redirect', true);
|
55 |
+
self::upgrade_tables();
|
56 |
+
}
|
57 |
+
|
58 |
+
public static function deactivate()
|
59 |
+
{
|
60 |
+
|
61 |
+
}
|
62 |
+
|
63 |
+
public static function requirements()
|
64 |
+
{
|
65 |
+
$php_min_version = '5.3';
|
66 |
+
$extensions = array(
|
67 |
+
'simplexml',
|
68 |
+
'mbstring',
|
69 |
+
);
|
70 |
+
|
71 |
+
$errors = array();
|
72 |
+
$name = get_file_data(\ContentEgg\PLUGIN_FILE, array('Plugin Name'), 'plugin');
|
73 |
+
|
74 |
+
global $wp_version;
|
75 |
+
if (version_compare(Plugin::wp_requires, $wp_version, '>'))
|
76 |
+
$errors[] = sprintf(__("Вы используете Wordpress %s. <em>%s</em> требует минимум <strong>Wordpress %s</strong>.", 'content-egg'), $wp_version, $name[0], Plugin::wp_requires);
|
77 |
+
|
78 |
+
$php_current_version = phpversion();
|
79 |
+
if (version_compare($php_min_version, $php_current_version, '>'))
|
80 |
+
$errors[] = sprintf(__("На вашем сервере установлен PHP %s. <em>%s</em> требует минимум <strong>PHP %s</strong>.", 'content-egg'), $php_current_version, $name[0], $php_min_version);
|
81 |
+
|
82 |
+
foreach ($extensions as $extension)
|
83 |
+
{
|
84 |
+
if (!extension_loaded($extension))
|
85 |
+
$errors[] = sprintf(__("Требуется расширение <strong>%s</strong>.", 'content-egg'), $extension);
|
86 |
+
}
|
87 |
+
if (!$errors)
|
88 |
+
return;
|
89 |
+
unset($_GET['activate']);
|
90 |
+
deactivate_plugins(plugin_basename(\ContentEgg\PLUGIN_FILE));
|
91 |
+
$e = sprintf('<div class="error"><p>%1$s</p><p><em>%2$s</em> ' . __('не может быть установлен!', 'content-egg') . '</p></div>', join('</p><p>', $errors), $name[0]);
|
92 |
+
wp_die($e);
|
93 |
+
}
|
94 |
+
|
95 |
+
private static function upgrade_tables()
|
96 |
+
{
|
97 |
+
update_option(Plugin::slug . '_db_version', self::dbVesrion());
|
98 |
+
}
|
99 |
+
|
100 |
+
public static function uninstall()
|
101 |
+
{
|
102 |
+
global $wpdb;
|
103 |
+
if (!current_user_can('activate_plugins'))
|
104 |
+
return;
|
105 |
+
|
106 |
+
delete_option(Plugin::slug . '_db_version');
|
107 |
+
delete_option(LicConfig::getInstance()->option_name());
|
108 |
+
}
|
109 |
+
|
110 |
+
public static function upgrade()
|
111 |
+
{
|
112 |
+
$db_version = get_option(Plugin::slug . '_db_version');
|
113 |
+
if ($db_version >= self::dbVesrion())
|
114 |
+
return;
|
115 |
+
self::upgrade_tables();
|
116 |
+
}
|
117 |
+
|
118 |
+
public function redirect_after_activation()
|
119 |
+
{
|
120 |
+
if (\get_option(Plugin::slug . '_do_activation_redirect', false))
|
121 |
+
{
|
122 |
+
\delete_option(Plugin::slug . '_do_activation_redirect');
|
123 |
+
\wp_redirect(\get_admin_url(\get_current_blog_id(), 'admin.php?page=' . Plugin::slug));
|
124 |
+
}
|
125 |
+
}
|
126 |
+
}
|
application/ModuleUpdater.php
ADDED
@@ -0,0 +1,142 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application;
|
4 |
+
|
5 |
+
use ContentEgg\application\components\ModuleManager;
|
6 |
+
use ContentEgg\application\components\ContentManager;
|
7 |
+
use ContentEgg\application\admin\EggMetabox;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* ModuleUpdater class file
|
11 |
+
*
|
12 |
+
* @author keywordrush.com <support@keywordrush.com>
|
13 |
+
* @link http://www.keywordrush.com/
|
14 |
+
* @copyright Copyright © 2015 keywordrush.com
|
15 |
+
*/
|
16 |
+
class ModuleUpdater {
|
17 |
+
|
18 |
+
private static $instance = null;
|
19 |
+
|
20 |
+
public static function getInstance()
|
21 |
+
{
|
22 |
+
if (self::$instance == null)
|
23 |
+
self::$instance = new self;
|
24 |
+
|
25 |
+
return self::$instance;
|
26 |
+
}
|
27 |
+
|
28 |
+
private function __construct()
|
29 |
+
{
|
30 |
+
|
31 |
+
}
|
32 |
+
|
33 |
+
public function init()
|
34 |
+
{
|
35 |
+
// priority = 10 because ModuleViewer added with a priority of 12
|
36 |
+
// & do_shortcode() is registered as a default filter on 'the_content' with a priority of 11.
|
37 |
+
\add_filter('the_content', array($this, 'update'), 10);
|
38 |
+
}
|
39 |
+
|
40 |
+
public function update($content)
|
41 |
+
{
|
42 |
+
if (!is_single())
|
43 |
+
return $content;
|
44 |
+
|
45 |
+
$this->updateByKeyword();
|
46 |
+
$this->updateItems();
|
47 |
+
return $content;
|
48 |
+
}
|
49 |
+
|
50 |
+
private function updateByKeyword()
|
51 |
+
{
|
52 |
+
global $post;
|
53 |
+
|
54 |
+
foreach (ModuleManager::getInstance()->getModules(true) as $module)
|
55 |
+
{
|
56 |
+
if (!$module->isAffiliateParser())
|
57 |
+
continue;
|
58 |
+
|
59 |
+
$ttl = $module->config('ttl');
|
60 |
+
if (!$ttl)
|
61 |
+
continue;
|
62 |
+
|
63 |
+
$keyword = \get_post_meta($post->ID, ContentManager::META_PREFIX_KEYWORD . $module->getId(), true);
|
64 |
+
if (!$keyword)
|
65 |
+
continue;
|
66 |
+
|
67 |
+
$last_update = (int) \get_post_meta($post->ID, ContentManager::META_PREFIX_LAST_BYKEYWORD_UPDATE . $module->getId(), true);
|
68 |
+
if ($last_update && time() - $last_update < $ttl)
|
69 |
+
continue;
|
70 |
+
|
71 |
+
try
|
72 |
+
{
|
73 |
+
$data = $module->doRequest($keyword, array(), true);
|
74 |
+
|
75 |
+
// nodata!
|
76 |
+
if (!$data)
|
77 |
+
{
|
78 |
+
ContentManager::touchUpdateTime($post->ID, $module->getId());
|
79 |
+
continue;
|
80 |
+
}
|
81 |
+
} catch (\Exception $e)
|
82 |
+
{
|
83 |
+
// error
|
84 |
+
ContentManager::touchUpdateTime($post->ID, $module->getId());
|
85 |
+
continue;
|
86 |
+
}
|
87 |
+
|
88 |
+
$data = array_map(array('self', 'object2Array'), $data);
|
89 |
+
ContentManager::saveData($data, $module->getId(), $post->ID);
|
90 |
+
}
|
91 |
+
}
|
92 |
+
|
93 |
+
private function updateItems()
|
94 |
+
{
|
95 |
+
global $post;
|
96 |
+
|
97 |
+
foreach (ModuleManager::getInstance()->getModules(true) as $module)
|
98 |
+
{
|
99 |
+
if (!$module->isAffiliateParser() || !$module->isItemsUpdateAvailable())
|
100 |
+
continue;
|
101 |
+
|
102 |
+
$ttl_items = $module->config('ttl_items');
|
103 |
+
if (!$ttl_items)
|
104 |
+
continue;
|
105 |
+
|
106 |
+
$last_items_update = (int) \get_post_meta($post->ID, ContentManager::META_PREFIX_LAST_ITEMS_UPDATE . $module->getId(), true);
|
107 |
+
|
108 |
+
if (!$last_items_update || time() - $last_items_update < $ttl_items)
|
109 |
+
continue;
|
110 |
+
|
111 |
+
$items = \get_post_meta($post->ID, ContentManager::META_PREFIX_DATA . $module->getId(), true);
|
112 |
+
if (!$items)
|
113 |
+
continue;
|
114 |
+
|
115 |
+
try
|
116 |
+
{
|
117 |
+
$updated_data = $module->doRequestItems($items);
|
118 |
+
} catch (\Exception $e)
|
119 |
+
{
|
120 |
+
// error
|
121 |
+
ContentManager::touchUpdateItemsTime($post->ID, $module->getId());
|
122 |
+
continue;
|
123 |
+
}
|
124 |
+
|
125 |
+
// save & update time
|
126 |
+
ContentManager::saveData($updated_data, $module->getId(), $post->ID);
|
127 |
+
ContentManager::touchUpdateItemsTime($post->ID, $module->getId());
|
128 |
+
}
|
129 |
+
}
|
130 |
+
|
131 |
+
|
132 |
+
/**
|
133 |
+
* Full depth recursive conversion to array
|
134 |
+
* @param type $object
|
135 |
+
* @return array
|
136 |
+
*/
|
137 |
+
public static function object2Array($object)
|
138 |
+
{
|
139 |
+
return json_decode(json_encode($object), true);
|
140 |
+
}
|
141 |
+
|
142 |
+
}
|
application/ModuleViewer.php
ADDED
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application;
|
4 |
+
|
5 |
+
use ContentEgg\application\components\ModuleManager;
|
6 |
+
use ContentEgg\application\components\ContentManager;
|
7 |
+
use ContentEgg\application\components\ModuleTemplateManager;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* ModuleViewer class file
|
11 |
+
*
|
12 |
+
* @author keywordrush.com <support@keywordrush.com>
|
13 |
+
* @link http://www.keywordrush.com/
|
14 |
+
* @copyright Copyright © 2015 keywordrush.com
|
15 |
+
*/
|
16 |
+
class ModuleViewer {
|
17 |
+
|
18 |
+
private static $instance = null;
|
19 |
+
private $module_data_pointer = array();
|
20 |
+
|
21 |
+
public static function getInstance()
|
22 |
+
{
|
23 |
+
|
24 |
+
if (self::$instance == null)
|
25 |
+
self::$instance = new self;
|
26 |
+
|
27 |
+
return self::$instance;
|
28 |
+
}
|
29 |
+
|
30 |
+
private function __construct()
|
31 |
+
{
|
32 |
+
|
33 |
+
}
|
34 |
+
|
35 |
+
public function init()
|
36 |
+
{
|
37 |
+
// priority = 12 because do_shortcode() is registered as a default filter on 'the_content' with a priority of 11.
|
38 |
+
\add_filter('the_content', array($this, 'viewData'), 12);
|
39 |
+
}
|
40 |
+
|
41 |
+
public function viewData($content)
|
42 |
+
{
|
43 |
+
/*
|
44 |
+
if (!is_single())
|
45 |
+
return $content;
|
46 |
+
*
|
47 |
+
*/
|
48 |
+
foreach (ModuleManager::getInstance()->getModules(true) as $module)
|
49 |
+
{
|
50 |
+
$embed_at = $module->config('embed_at');
|
51 |
+
if ($embed_at != 'post_bottom' && $embed_at != 'post_top')
|
52 |
+
continue;
|
53 |
+
|
54 |
+
if (Shortcode::isShortcoded($module->getId()))
|
55 |
+
continue;
|
56 |
+
|
57 |
+
$render = $this->viewModuleData($module->getId());
|
58 |
+
if ($embed_at == 'post_bottom')
|
59 |
+
$content = $content . $render;
|
60 |
+
elseif ($embed_at == 'post_top')
|
61 |
+
$content = $render . $content;
|
62 |
+
}
|
63 |
+
return $content;
|
64 |
+
}
|
65 |
+
|
66 |
+
public function viewModuleData($module_id, $post_id = null, $params = array())
|
67 |
+
{
|
68 |
+
if (!$post_id)
|
69 |
+
{
|
70 |
+
global $post;
|
71 |
+
$post_id = $post->ID;
|
72 |
+
}
|
73 |
+
$module = ModuleManager::factory($module_id);
|
74 |
+
$data = \get_post_meta($post_id, ContentManager::META_PREFIX_DATA . $module->getId(), true);
|
75 |
+
if (!$data)
|
76 |
+
return '';
|
77 |
+
|
78 |
+
// next param
|
79 |
+
if (!empty($params['next']))
|
80 |
+
{
|
81 |
+
if (!isset($this->module_data_pointer[$module_id]))
|
82 |
+
$this->module_data_pointer[$module_id] = 0;
|
83 |
+
$data = array_splice($data, $this->module_data_pointer[$module_id], $params['next']);
|
84 |
+
if (count($data) < $params['next'])
|
85 |
+
$params['next'] = count($data);
|
86 |
+
$this->module_data_pointer[$module_id] += $params['next'];
|
87 |
+
} elseif (!empty($params['limit']))
|
88 |
+
{
|
89 |
+
if (!isset($params['offset']))
|
90 |
+
$params['offset'] = 0;
|
91 |
+
|
92 |
+
$data = array_splice($data, $params['offset'], $params['limit']);
|
93 |
+
$this->module_data_pointer[$module_id] = $params['offset'] + $params['limit'];
|
94 |
+
}
|
95 |
+
|
96 |
+
// template
|
97 |
+
$tpl_manager = new ModuleTemplateManager($module->getId());
|
98 |
+
if (!empty($params['template']) && $tpl_manager->isDataTemplateExists($params['template']))
|
99 |
+
$template = $params['template'];
|
100 |
+
else
|
101 |
+
$template = $module->config('template');
|
102 |
+
|
103 |
+
return $tpl_manager->render($template, array('items' => $data, 'title' => $module->config('tpl_title')));
|
104 |
+
}
|
105 |
+
|
106 |
+
}
|
application/Plugin.php
ADDED
@@ -0,0 +1,114 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application;
|
4 |
+
|
5 |
+
use ContentEgg\application\admin\GeneralConfig;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Plugin class file
|
9 |
+
*
|
10 |
+
* @author keywordrush.com <support@keywordrush.com>
|
11 |
+
* @link http://www.keywordrush.com/
|
12 |
+
* @copyright Copyright © 2015 keywordrush.com
|
13 |
+
*/
|
14 |
+
class Plugin {
|
15 |
+
|
16 |
+
const version = '1.6.0';
|
17 |
+
const wp_requires = '4.2.2';
|
18 |
+
const slug = 'content-egg';
|
19 |
+
const api_base = 'http://www.keywordrush.com/api/v1';
|
20 |
+
const product_id = 302;
|
21 |
+
|
22 |
+
private static $instance = null;
|
23 |
+
private static $is_pro = null;
|
24 |
+
|
25 |
+
public static function getInstance()
|
26 |
+
{
|
27 |
+
if (self::$instance == null)
|
28 |
+
self::$instance = new self;
|
29 |
+
|
30 |
+
return self::$instance;
|
31 |
+
}
|
32 |
+
|
33 |
+
private function __construct()
|
34 |
+
{
|
35 |
+
$this->loadTextdomain();
|
36 |
+
if (self::isFree() || (self::isPro() && self::isActivated()))
|
37 |
+
{
|
38 |
+
\add_action('wp_enqueue_scripts', array($this, 'registerScripts'));
|
39 |
+
Shortcode::getInstance();
|
40 |
+
ModuleViewer::getInstance()->init();
|
41 |
+
ModuleUpdater::getInstance()->init();
|
42 |
+
}
|
43 |
+
if (Plugin::isPro() && Plugin::isActivated())
|
44 |
+
{
|
45 |
+
new Autoupdate(Plugin::version(), plugin_basename(\ContentEgg\PLUGIN_FILE), Plugin::getApiBase(), Plugin::slug);
|
46 |
+
}
|
47 |
+
}
|
48 |
+
|
49 |
+
public function registerScripts()
|
50 |
+
{
|
51 |
+
\wp_register_style('egg-bootstrap', \ContentEgg\PLUGIN_RES . '/bootstrap/css/egg-bootstrap.css');
|
52 |
+
\wp_register_script('bootstrap', \ContentEgg\PLUGIN_RES . '/bootstrap/js/bootstrap.min.js', array('jquery'), null, false);
|
53 |
+
\wp_register_style('content-egg-products', \ContentEgg\PLUGIN_RES . '/css/products.css');
|
54 |
+
}
|
55 |
+
|
56 |
+
static public function version()
|
57 |
+
{
|
58 |
+
return self::version;
|
59 |
+
}
|
60 |
+
|
61 |
+
static public function slug()
|
62 |
+
{
|
63 |
+
return self::slug;
|
64 |
+
}
|
65 |
+
|
66 |
+
public static function getApiBase()
|
67 |
+
{
|
68 |
+
return self::api_base;
|
69 |
+
}
|
70 |
+
|
71 |
+
public static function isFree()
|
72 |
+
{
|
73 |
+
return !self::isPro();
|
74 |
+
}
|
75 |
+
|
76 |
+
public static function isPro()
|
77 |
+
{
|
78 |
+
if (self::$is_pro === null)
|
79 |
+
{
|
80 |
+
if (class_exists("\\ContentEgg\\application\\Autoupdate", true))
|
81 |
+
self::$is_pro = true;
|
82 |
+
else
|
83 |
+
self::$is_pro = false;
|
84 |
+
}
|
85 |
+
return self::$is_pro;
|
86 |
+
}
|
87 |
+
|
88 |
+
public static function isActivated()
|
89 |
+
{
|
90 |
+
if (self::isPro() && \ContentEgg\application\admin\LicConfig::getInstance()->option('license_key'))
|
91 |
+
return true;
|
92 |
+
else
|
93 |
+
return false;
|
94 |
+
}
|
95 |
+
|
96 |
+
private function loadTextdomain()
|
97 |
+
{
|
98 |
+
// plugin backend
|
99 |
+
$locale = \get_locale();
|
100 |
+
$mo_file = \ContentEgg\PLUGIN_PATH . 'languages/content-egg-' . $locale . '.mo';
|
101 |
+
if (file_exists($mo_file) && is_readable($mo_file))
|
102 |
+
\load_textdomain('content-egg', $mo_file);
|
103 |
+
elseif (!in_array($locale, array('ru_RU', 'uk')))
|
104 |
+
\load_textdomain('content-egg', \ContentEgg\PLUGIN_PATH . 'languages/content-egg-en_US.mo');
|
105 |
+
|
106 |
+
// frontend templates
|
107 |
+
$lang = GeneralConfig::getInstance()->option('lang');
|
108 |
+
$lang = strtoupper($lang);
|
109 |
+
$mo_file = \ContentEgg\PLUGIN_PATH . 'languages/tpl/content-egg-tpl-' . $lang . '.mo';
|
110 |
+
if (file_exists($mo_file) && is_readable($mo_file))
|
111 |
+
$v = \load_textdomain('content-egg-tpl', $mo_file);
|
112 |
+
}
|
113 |
+
|
114 |
+
}
|
application/Shortcode.php
ADDED
@@ -0,0 +1,139 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application;
|
4 |
+
|
5 |
+
use ContentEgg\application\components\ModuleManager;
|
6 |
+
use ContentEgg\application\components\ModuleTemplateManager;
|
7 |
+
use ContentEgg\application\helpers\TextHelper;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Shortcode class file
|
11 |
+
*
|
12 |
+
* @author keywordrush.com <support@keywordrush.com>
|
13 |
+
* @link http://www.keywordrush.com/
|
14 |
+
* @copyright Copyright © 2015 keywordrush.com
|
15 |
+
*/
|
16 |
+
class Shortcode {
|
17 |
+
|
18 |
+
const shortcode = 'content-egg';
|
19 |
+
|
20 |
+
private static $instance = null;
|
21 |
+
|
22 |
+
//private $items = array();
|
23 |
+
//private $item_pointer = array();
|
24 |
+
|
25 |
+
private static $shortcoded_module_ids = array();
|
26 |
+
|
27 |
+
public static function getInstance()
|
28 |
+
{
|
29 |
+
if (self::$instance == null)
|
30 |
+
self::$instance = new self;
|
31 |
+
return self::$instance;
|
32 |
+
}
|
33 |
+
|
34 |
+
private function __construct()
|
35 |
+
{
|
36 |
+
\add_shortcode(self::shortcode, array($this, 'viewData'));
|
37 |
+
\add_filter( 'term_description', 'shortcode_unautop');
|
38 |
+
\add_filter( 'term_description', 'do_shortcode' );
|
39 |
+
}
|
40 |
+
|
41 |
+
private function prepareAttr($atts)
|
42 |
+
{
|
43 |
+
$a = shortcode_atts(array(
|
44 |
+
'module' => null,
|
45 |
+
'limit' => 0,
|
46 |
+
'offset' => 0,
|
47 |
+
'next' => 0,
|
48 |
+
'template' => '',
|
49 |
+
//'order' => 'asc',
|
50 |
+
), $atts);
|
51 |
+
//$order_allowed = array('rand', 'title', 'price', 'manufacturer', 'in_stock', 'create_date', 'last_update', 'last_in_stock', 'shop_id');
|
52 |
+
|
53 |
+
$a['next'] = (int) $a['next'];
|
54 |
+
$a['limit'] = (int) $a['limit'];
|
55 |
+
$a['offset'] = (int) $a['offset'];
|
56 |
+
|
57 |
+
if (ModuleTemplateManager::isCunstomTemplate($a['template']))
|
58 |
+
{
|
59 |
+
$is_custom = true;
|
60 |
+
// del 'custom/' prefix
|
61 |
+
$a['template'] = substr($a['template'], 7);
|
62 |
+
} else
|
63 |
+
$is_custom = false;
|
64 |
+
|
65 |
+
$a['template'] = TextHelper::clear($a['template']);
|
66 |
+
if ($is_custom)
|
67 |
+
$a['template'] = 'custom/' . $a['template'];
|
68 |
+
|
69 |
+
if ($a['template'])
|
70 |
+
{
|
71 |
+
$a['template'] = ModuleTemplateManager::getFullTemplateId($a['template']);
|
72 |
+
}
|
73 |
+
|
74 |
+
/*
|
75 |
+
if ($a['order'])
|
76 |
+
{
|
77 |
+
$a['order'] = strtolower($a['order']);
|
78 |
+
$o_split = explode(' ', $a['order']);
|
79 |
+
$a['order'] = trim($o_split[0]);
|
80 |
+
if (isset($o_split[1]))
|
81 |
+
{
|
82 |
+
$o_split[1] = trim($o_split[1]);
|
83 |
+
if ($o_split[1] == 'desc')
|
84 |
+
$a['order_asc_desc'] = $o_split[1];
|
85 |
+
}
|
86 |
+
if (!in_array($a['order'], $order_allowed))
|
87 |
+
$a['order'] = '';
|
88 |
+
}
|
89 |
+
*
|
90 |
+
*/
|
91 |
+
|
92 |
+
return $a;
|
93 |
+
}
|
94 |
+
|
95 |
+
public function viewData($atts, $content = "")
|
96 |
+
{
|
97 |
+
$a = $this->prepareAttr($atts);
|
98 |
+
|
99 |
+
if (empty($a['module']))
|
100 |
+
return;
|
101 |
+
$module_id = $a['module'];
|
102 |
+
if (!ModuleManager::getInstance()->isModuleActive($module_id))
|
103 |
+
return;
|
104 |
+
|
105 |
+
self::setShortcodedModule($module_id);
|
106 |
+
return ModuleViewer::getInstance()->viewModuleData($module_id, null, $a);
|
107 |
+
}
|
108 |
+
|
109 |
+
public static function arraySortByColumn(&$arr, $col, $dir = SORT_ASC)
|
110 |
+
{
|
111 |
+
$sort_col = array();
|
112 |
+
foreach ($arr as $key => $row)
|
113 |
+
{
|
114 |
+
$sort_col[$key] = $row[$col];
|
115 |
+
}
|
116 |
+
|
117 |
+
array_multisort($sort_col, $dir, $arr);
|
118 |
+
}
|
119 |
+
|
120 |
+
public static function getShortcodedModuleIds()
|
121 |
+
{
|
122 |
+
return self::$shortcoded_module_ids;
|
123 |
+
}
|
124 |
+
|
125 |
+
public static function setShortcodedModule($module_id)
|
126 |
+
{
|
127 |
+
self::$shortcoded_module_ids[$module_id] = $module_id;
|
128 |
+
}
|
129 |
+
|
130 |
+
|
131 |
+
public static function isShortcoded($module_id)
|
132 |
+
{
|
133 |
+
if (isset(self::$shortcoded_module_ids[$module_id]))
|
134 |
+
return true;
|
135 |
+
else
|
136 |
+
return false;
|
137 |
+
}
|
138 |
+
|
139 |
+
}
|
application/admin/EggMetabox.php
ADDED
@@ -0,0 +1,244 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\admin;
|
4 |
+
|
5 |
+
use ContentEgg\application\components\ModuleManager;
|
6 |
+
use ContentEgg\application\helpers\InputHelper;
|
7 |
+
use ContentEgg\application\helpers\TextHelper;
|
8 |
+
use ContentEgg\application\components\ContentManager;
|
9 |
+
|
10 |
+
/**
|
11 |
+
* EggMetabox class file
|
12 |
+
*
|
13 |
+
* @author keywordrush.com <support@keywordrush.com>
|
14 |
+
* @link http://www.keywordrush.com/
|
15 |
+
* @copyright Copyright © 2015 keywordrush.com
|
16 |
+
*/
|
17 |
+
class EggMetabox {
|
18 |
+
|
19 |
+
private $app_params = array();
|
20 |
+
|
21 |
+
public function __construct()
|
22 |
+
{
|
23 |
+
\add_action('add_meta_boxes', array($this, 'addMetabox'));
|
24 |
+
\add_action('save_post', array($this, 'saveMeta'));
|
25 |
+
}
|
26 |
+
|
27 |
+
private function addAppParam($param, $value)
|
28 |
+
{
|
29 |
+
$this->app_params[$param] = $value;
|
30 |
+
}
|
31 |
+
|
32 |
+
private function getAppParams()
|
33 |
+
{
|
34 |
+
return $this->app_params;
|
35 |
+
}
|
36 |
+
|
37 |
+
public function addMetabox($post_type)
|
38 |
+
{
|
39 |
+
if (!in_array($post_type, array('post', 'page')))
|
40 |
+
return;
|
41 |
+
|
42 |
+
if (!ModuleManager::getInstance()->getModules(true))
|
43 |
+
{
|
44 |
+
\add_meta_box('content_meta_box', 'Content Egg', array($this, 'renderBlankMetabox'), $post_type, 'normal', 'high');
|
45 |
+
return;
|
46 |
+
}
|
47 |
+
$this->modulesOptionsInit();
|
48 |
+
$this->metadataInit();
|
49 |
+
\add_meta_box('content_meta_box', 'Content Egg', array($this, 'renderMetabox'), $post_type, 'normal', 'high');
|
50 |
+
$this->angularInit();
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Render Meta Box content.
|
55 |
+
*
|
56 |
+
* @param WP_Post $post The post object.
|
57 |
+
*/
|
58 |
+
public function renderMetabox($post)
|
59 |
+
{
|
60 |
+
echo '<div ng-app="contentEgg" class="egg-container" id="content-egg" ng-cloak>';
|
61 |
+
echo '<div ng-controller="ContentEggController" class="container-fluid">';
|
62 |
+
|
63 |
+
PluginAdmin::render('metabox_general');
|
64 |
+
|
65 |
+
foreach (ModuleManager::getInstance()->getModules(true) as $module)
|
66 |
+
{
|
67 |
+
$module->enqueueScripts();
|
68 |
+
PluginAdmin::render('metabox_module', array('module_id' => $module->getId(), 'module' => $module));
|
69 |
+
}
|
70 |
+
echo '</div>';
|
71 |
+
echo '</div>';
|
72 |
+
}
|
73 |
+
|
74 |
+
public function renderBlankMetabox($post)
|
75 |
+
{
|
76 |
+
_e('Настройте и активируйте модули Content Egg плагин.', 'content-egg');
|
77 |
+
}
|
78 |
+
|
79 |
+
private function metadataInit()
|
80 |
+
{
|
81 |
+
global $post;
|
82 |
+
|
83 |
+
$modules = ModuleManager::getInstance()->getModules(true);
|
84 |
+
|
85 |
+
// modules data
|
86 |
+
$init_data = array();
|
87 |
+
foreach ($modules as $module)
|
88 |
+
{
|
89 |
+
$post_meta = \get_post_meta($post->ID, ContentManager::META_PREFIX_DATA . $module->getId(), true);
|
90 |
+
if (!$post_meta)
|
91 |
+
continue;
|
92 |
+
foreach ($post_meta as $key => $meta)
|
93 |
+
{
|
94 |
+
if ($meta['description'])
|
95 |
+
$post_meta[$key]['description'] = TextHelper::br2nl($meta['description']);
|
96 |
+
}
|
97 |
+
$init_data[$module->getId()] = array_values($post_meta);
|
98 |
+
}
|
99 |
+
$this->addAppParam('initData', $init_data);
|
100 |
+
|
101 |
+
// keywords
|
102 |
+
$init_keywords = array();
|
103 |
+
foreach ($modules as $module)
|
104 |
+
{
|
105 |
+
if (!$module->isAffiliateParser())
|
106 |
+
continue;
|
107 |
+
$keywords_meta = \get_post_meta($post->ID, ContentManager::META_PREFIX_KEYWORD . $module->getId(), true);
|
108 |
+
if (!$keywords_meta)
|
109 |
+
continue;
|
110 |
+
$init_keywords[$module->getId()] = $keywords_meta;
|
111 |
+
}
|
112 |
+
$this->addAppParam('initKeywords', $init_keywords);
|
113 |
+
}
|
114 |
+
|
115 |
+
private function modulesOptionsInit()
|
116 |
+
{
|
117 |
+
$options = array();
|
118 |
+
foreach (ModuleManager::getInstance()->getModules(true) as $module)
|
119 |
+
{
|
120 |
+
$options[$module->getId()] = $module->getConfigInstance()->getOptionValues();
|
121 |
+
}
|
122 |
+
$this->addAppParam('modulesOptions', $options);
|
123 |
+
}
|
124 |
+
|
125 |
+
private function angularInit()
|
126 |
+
{
|
127 |
+
// Justified gallery jquery plugin
|
128 |
+
\wp_enqueue_script('justified-gallery', \ContentEgg\PLUGIN_RES . '/justified_gallery/jquery.justifiedGallery.min.js', array('jquery'), null, false);
|
129 |
+
\wp_enqueue_style('justified-gallery', \ContentEgg\PLUGIN_RES . '/justified_gallery/justifiedGallery.min.css');
|
130 |
+
|
131 |
+
// Angular core
|
132 |
+
\wp_enqueue_script('angularjs', '//ajax.googleapis.com/ajax/libs/angularjs/1.4.0-rc.1/angular.min.js', array('jquery'), null, false);
|
133 |
+
|
134 |
+
// ContentEgg angular application
|
135 |
+
\wp_enqueue_style('contentegg-admin', \ContentEgg\PLUGIN_RES . '/css/admin.css');
|
136 |
+
\wp_enqueue_script('angular-ui-bootstrap', \ContentEgg\PLUGIN_RES . '/app/vendor/angular-ui-bootstrap/ui-bootstrap-tpls-0.13.3.min.js', array('angularjs'), null, false);
|
137 |
+
\wp_register_script('contentegg-metabox-app', \ContentEgg\PLUGIN_RES . '/app/app.js', array('angularjs'), null, false);
|
138 |
+
\wp_enqueue_script('contentegg-metabox-service', \ContentEgg\PLUGIN_RES . '/app/ModuleService.js', array('contentegg-metabox-app'), null, false);
|
139 |
+
|
140 |
+
// Bootstrap
|
141 |
+
\wp_enqueue_style('egg-bootstrap', \ContentEgg\PLUGIN_RES . '/bootstrap/css/egg-bootstrap.css');
|
142 |
+
\wp_enqueue_script('bootstrap', \ContentEgg\PLUGIN_RES . '/bootstrap/js/bootstrap.min.js', array('jquery'), null, false);
|
143 |
+
|
144 |
+
// ContentEgg appliction params
|
145 |
+
$this->addAppParam('active_modules', ModuleManager::getInstance()->getModulesIdList(true));
|
146 |
+
$this->addAppParam('nonce', \wp_create_nonce('contentegg-metabox'));
|
147 |
+
|
148 |
+
\wp_localize_script('contentegg-metabox-app', 'contentegg_params', $this->getAppParams());
|
149 |
+
}
|
150 |
+
|
151 |
+
/**
|
152 |
+
* Save the meta when the post is saved.
|
153 |
+
*
|
154 |
+
* @param int $post_id The ID of the post being saved.
|
155 |
+
*/
|
156 |
+
public function saveMeta($post_id)
|
157 |
+
{
|
158 |
+
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
|
159 |
+
return;
|
160 |
+
|
161 |
+
if (!isset($_POST['contentegg_nonce']))
|
162 |
+
return;
|
163 |
+
|
164 |
+
/*
|
165 |
+
* why shouldn't i save metadata when its a revision?
|
166 |
+
*
|
167 |
+
* Apparently *_post_meta functions will automatically change
|
168 |
+
* to parent post id if passed revision post id. So you might modify original post,
|
169 |
+
* thinking you are modifying revision.
|
170 |
+
*
|
171 |
+
if (\wp_is_post_revision($post_id))
|
172 |
+
return;
|
173 |
+
*
|
174 |
+
*/
|
175 |
+
|
176 |
+
\check_admin_referer('contentegg_metabox', 'contentegg_nonce');
|
177 |
+
|
178 |
+
// Check the user's permissions.
|
179 |
+
if ($_POST['post_type'] == 'page')
|
180 |
+
{
|
181 |
+
if (!current_user_can('edit_page', $post_id))
|
182 |
+
return;
|
183 |
+
} else
|
184 |
+
{
|
185 |
+
if (!current_user_can('edit_post', $post_id))
|
186 |
+
return;
|
187 |
+
}
|
188 |
+
|
189 |
+
// need stripslashes? wp bug with revision post type?
|
190 |
+
if (\wp_is_post_revision($post_id))
|
191 |
+
$stripslashes = false;
|
192 |
+
else
|
193 |
+
$stripslashes = true;
|
194 |
+
|
195 |
+
// keywords for automatic updates
|
196 |
+
$keywords = InputHelper::post('cegg_updateKeywords', array(), $stripslashes);
|
197 |
+
foreach ($keywords as $module_id => $keyword)
|
198 |
+
{
|
199 |
+
if (!ModuleManager::getInstance()->moduleExists($module_id) || !ModuleManager::getInstance()->isModuleActive($module_id))
|
200 |
+
continue;
|
201 |
+
|
202 |
+
$module = ModuleManager::getInstance()->factory($module_id);
|
203 |
+
if (!$module->isAffiliateParser())
|
204 |
+
continue;
|
205 |
+
|
206 |
+
$keyword = \sanitize_text_field($keyword);
|
207 |
+
if ($keyword)
|
208 |
+
{
|
209 |
+
\update_post_meta($post_id, ContentManager::META_PREFIX_KEYWORD . $module_id, $keyword);
|
210 |
+
} else
|
211 |
+
{
|
212 |
+
\delete_post_meta($post_id, ContentManager::META_PREFIX_KEYWORD . $module_id);
|
213 |
+
}
|
214 |
+
}
|
215 |
+
|
216 |
+
// save content data
|
217 |
+
$content = InputHelper::post('cegg_data', array(), $stripslashes);
|
218 |
+
if (!is_array($content))
|
219 |
+
return;
|
220 |
+
|
221 |
+
foreach ($content as $module_id => $data)
|
222 |
+
{
|
223 |
+
if (!ModuleManager::getInstance()->moduleExists($module_id) || !ModuleManager::getInstance()->isModuleActive($module_id))
|
224 |
+
continue;
|
225 |
+
|
226 |
+
$data = json_decode($data, true);
|
227 |
+
$data = $this->dataPrepare($data);
|
228 |
+
ContentManager::saveData($data, $module_id, $post_id);
|
229 |
+
}
|
230 |
+
}
|
231 |
+
|
232 |
+
private function dataPrepare($data)
|
233 |
+
{
|
234 |
+
if (!is_array($data))
|
235 |
+
return array();
|
236 |
+
foreach ($data as $key => $d)
|
237 |
+
{
|
238 |
+
if ($key == 'description')
|
239 |
+
$data[$key] = TextHelper::nl2br($d);
|
240 |
+
}
|
241 |
+
return $data;
|
242 |
+
}
|
243 |
+
|
244 |
+
}
|
application/admin/FeaturedImage.php
ADDED
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\admin;
|
4 |
+
|
5 |
+
use ContentEgg\application\components\ModuleManager;
|
6 |
+
use ContentEgg\application\components\ContentManager;
|
7 |
+
use ContentEgg\application\helpers\ImageHelper;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* FeaturedImage class file
|
11 |
+
*
|
12 |
+
* @author keywordrush.com <support@keywordrush.com>
|
13 |
+
* @link http://www.keywordrush.com/
|
14 |
+
* @copyright Copyright © 2015 keywordrush.com
|
15 |
+
*/
|
16 |
+
class FeaturedImage {
|
17 |
+
|
18 |
+
private $app_params = array();
|
19 |
+
|
20 |
+
public function __construct()
|
21 |
+
{
|
22 |
+
// priority 11 - after meta save
|
23 |
+
\add_action('save_post', array($this, 'setImage'), 11, 2);
|
24 |
+
}
|
25 |
+
|
26 |
+
public function setImage($post_id, $post)
|
27 |
+
{
|
28 |
+
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
|
29 |
+
return;
|
30 |
+
|
31 |
+
if (\get_post_status($post_id) == 'auto-draft' || \wp_is_post_revision($post_id))
|
32 |
+
return;
|
33 |
+
|
34 |
+
if (\has_post_thumbnail($post_id))
|
35 |
+
return;
|
36 |
+
|
37 |
+
$modules_ids = ModuleManager::getInstance()->getParserModulesIdList();
|
38 |
+
foreach ($modules_ids as $module_id)
|
39 |
+
{
|
40 |
+
if (self::setFuturedImageByModule($post_id, $module_id))
|
41 |
+
return;
|
42 |
+
}
|
43 |
+
}
|
44 |
+
|
45 |
+
public static function setFuturedImageByModule($post_id, $module_id)
|
46 |
+
{
|
47 |
+
$module = ModuleManager::factory($module_id);
|
48 |
+
$featured_image = $module->config('featured_image', false);
|
49 |
+
if (!$featured_image)
|
50 |
+
return false;
|
51 |
+
|
52 |
+
$data = \get_post_meta($post_id, ContentManager::META_PREFIX_DATA . $module->getId(), true);
|
53 |
+
if (!$data)
|
54 |
+
return false;
|
55 |
+
|
56 |
+
if ($featured_image == 'second' && isset($data[1]))
|
57 |
+
unset($data[0]);
|
58 |
+
elseif ($featured_image == 'last')
|
59 |
+
$data = array_reverse($data);
|
60 |
+
elseif ($featured_image == 'rand')
|
61 |
+
shuffle($data);
|
62 |
+
|
63 |
+
require_once( \ABSPATH . 'wp-admin/includes/image.php' );
|
64 |
+
|
65 |
+
foreach ($data as $d)
|
66 |
+
{
|
67 |
+
$img_file = self::getImgFile($d);
|
68 |
+
if (!$img_file)
|
69 |
+
continue;
|
70 |
+
$filetype = \wp_check_filetype(basename($img_file), null);
|
71 |
+
$attachment = array(
|
72 |
+
'guid' => $img_file,
|
73 |
+
'post_mime_type' => $filetype['type'],
|
74 |
+
'post_title' => $d['title'],
|
75 |
+
'post_content' => '',
|
76 |
+
'post_status' => 'inherit'
|
77 |
+
);
|
78 |
+
$attach_id = \wp_insert_attachment($attachment, $img_file, $post_id);
|
79 |
+
$attach_data = \wp_generate_attachment_metadata($attach_id, $img_file);
|
80 |
+
\wp_update_attachment_metadata($attach_id, $attach_data);
|
81 |
+
\set_post_thumbnail($post_id, $attach_id);
|
82 |
+
|
83 |
+
return true;
|
84 |
+
} //data foreach
|
85 |
+
|
86 |
+
return false;
|
87 |
+
}
|
88 |
+
|
89 |
+
private static function getImgFile($item)
|
90 |
+
{
|
91 |
+
if (empty($item['img']))
|
92 |
+
return false;
|
93 |
+
|
94 |
+
// already saved? dublicate image file
|
95 |
+
if (isset($item['img_file']) && $item['img_file'])
|
96 |
+
{
|
97 |
+
$img_file = ImageHelper::getFullImgPath($item['img_file']);
|
98 |
+
if (!is_file($img_file))
|
99 |
+
return false;
|
100 |
+
|
101 |
+
$uploads = \wp_upload_dir();
|
102 |
+
$dublicate_name = \wp_unique_filename($uploads['path'], basename($item['img_file']));
|
103 |
+
$dublicate_file = $uploads['path'] . '/' . $dublicate_name;
|
104 |
+
|
105 |
+
if (!copy($img_file, $dublicate_file))
|
106 |
+
return false;
|
107 |
+
|
108 |
+
return $dublicate_file;
|
109 |
+
} else
|
110 |
+
{
|
111 |
+
// save image localy
|
112 |
+
$file_name = ImageHelper::saveImgLocaly($item['img'], $item['title']);
|
113 |
+
if (!$file_name)
|
114 |
+
return false;
|
115 |
+
$uploads = \wp_upload_dir();
|
116 |
+
$image = ltrim(trailingslashit($uploads['subdir']), '\/') . $file_name;
|
117 |
+
return ImageHelper::getFullImgPath($image);
|
118 |
+
}
|
119 |
+
|
120 |
+
return $img_file;
|
121 |
+
}
|
122 |
+
|
123 |
+
}
|
application/admin/GeneralConfig.php
ADDED
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\admin;
|
4 |
+
|
5 |
+
use ContentEgg\application\components\Config;
|
6 |
+
use ContentEgg\application\Plugin;
|
7 |
+
use ContentEgg\application\admin\PluginAdmin;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* GeneralSettings class file
|
11 |
+
*
|
12 |
+
* @author keywordrush.com <support@keywordrush.com>
|
13 |
+
* @link http://www.keywordrush.com/
|
14 |
+
* @copyright Copyright © 2015 keywordrush.com
|
15 |
+
*/
|
16 |
+
class GeneralConfig extends Config {
|
17 |
+
|
18 |
+
public function page_slug()
|
19 |
+
{
|
20 |
+
return Plugin::slug() . '';
|
21 |
+
}
|
22 |
+
|
23 |
+
public function option_name()
|
24 |
+
{
|
25 |
+
return 'contentegg_options';
|
26 |
+
}
|
27 |
+
|
28 |
+
public function add_admin_menu()
|
29 |
+
{
|
30 |
+
\add_submenu_page(Plugin::slug, __('Настройки', 'content-egg') . ' ‹ Content Egg', __('Настройки', 'content-egg'), 'manage_options', $this->page_slug, array($this, 'settings_page'));
|
31 |
+
}
|
32 |
+
|
33 |
+
public static function langs()
|
34 |
+
{
|
35 |
+
return array(
|
36 |
+
'ar' => 'Arabic',
|
37 |
+
'bg' => 'Bulgarian',
|
38 |
+
'ca' => 'Catalan',
|
39 |
+
//'zh_CN' => 'Chinese (simplified)',
|
40 |
+
//'zh_TW' => 'Chinese (traditional)',
|
41 |
+
'hr' => 'Croatian',
|
42 |
+
'cs' => 'Czech',
|
43 |
+
'da' => 'Danish',
|
44 |
+
'nl' => 'Dutch',
|
45 |
+
'en' => 'English',
|
46 |
+
'et' => 'Estonian',
|
47 |
+
'tl' => 'Filipino',
|
48 |
+
'fi' => 'Finnish',
|
49 |
+
'fr' => 'French',
|
50 |
+
'de' => 'German',
|
51 |
+
'el' => 'Greek',
|
52 |
+
'iw' => 'Hebrew',
|
53 |
+
'hi' => 'Hindi',
|
54 |
+
'hu' => 'Hungarian',
|
55 |
+
'is' => 'Icelandic',
|
56 |
+
'id' => 'Indonesian',
|
57 |
+
'it' => 'Italian',
|
58 |
+
'ja' => 'Japanese',
|
59 |
+
'ko' => 'Korean',
|
60 |
+
'lv' => 'Latvian',
|
61 |
+
'lt' => 'Lithuanian',
|
62 |
+
'ms' => 'Malay',
|
63 |
+
'no' => 'Norwegian',
|
64 |
+
'fa' => 'Persian',
|
65 |
+
'pl' => 'Polish',
|
66 |
+
'pt' => 'Portuguese',
|
67 |
+
'ro' => 'Romanian',
|
68 |
+
'ru' => 'Russian',
|
69 |
+
'sr' => 'Serbian',
|
70 |
+
'sk' => 'Slovak',
|
71 |
+
'sl' => 'Slovenian',
|
72 |
+
'es' => 'Spanish',
|
73 |
+
'sv' => 'Swedish',
|
74 |
+
'th' => 'Thai',
|
75 |
+
'tr' => 'Turkish',
|
76 |
+
'uk' => 'Ukrainian',
|
77 |
+
'ur' => 'Urdu',
|
78 |
+
'vi' => 'Vietnamese',
|
79 |
+
);
|
80 |
+
}
|
81 |
+
|
82 |
+
protected function options()
|
83 |
+
{
|
84 |
+
return array(
|
85 |
+
'lang' => array(
|
86 |
+
'title' => __('Язык сайта', 'content-egg'),
|
87 |
+
'description' => __('Модули, которые имеют поддержку мультиязычности, будут отдавать предпочтение контенту на этом языке. Также эта настройка указывает на язык для локализации шаблонов.', 'content-egg'),
|
88 |
+
'dropdown_options' => self::langs(),
|
89 |
+
'callback' => array($this, 'render_dropdown'),
|
90 |
+
'default' => self::getDefaultLang(),
|
91 |
+
'section' => 'default',
|
92 |
+
),
|
93 |
+
);
|
94 |
+
}
|
95 |
+
|
96 |
+
public static function getDefaultLang()
|
97 |
+
{
|
98 |
+
$locale = \get_locale();
|
99 |
+
$lang = explode('_', $locale);
|
100 |
+
if (array_key_exists($lang[0], self::langs()))
|
101 |
+
return $lang[0];
|
102 |
+
else
|
103 |
+
return 'en';
|
104 |
+
}
|
105 |
+
|
106 |
+
public function settings_page()
|
107 |
+
{
|
108 |
+
PluginAdmin::render('settings', array('page_slug' => $this->page_slug()));
|
109 |
+
}
|
110 |
+
|
111 |
+
}
|
application/admin/PluginAdmin.php
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\admin;
|
4 |
+
|
5 |
+
use ContentEgg\application\Plugin;
|
6 |
+
use ContentEgg\application\helpers\TextHelper;
|
7 |
+
use ContentEgg\application\admin\GeneralConfig;
|
8 |
+
use ContentEgg\application\components\ModuleManager;
|
9 |
+
use ContentEgg\application\components\ModuleApi;
|
10 |
+
|
11 |
+
/**
|
12 |
+
* PluginAdmin class file
|
13 |
+
*
|
14 |
+
* @author keywordrush.com <support@keywordrush.com>
|
15 |
+
* @link http://www.keywordrush.com/
|
16 |
+
* @copyright Copyright © 2015 keywordrush.com
|
17 |
+
*/
|
18 |
+
class PluginAdmin {
|
19 |
+
|
20 |
+
protected static $instance = null;
|
21 |
+
|
22 |
+
public static function getInstance()
|
23 |
+
{
|
24 |
+
if (self::$instance == null)
|
25 |
+
self::$instance = new self;
|
26 |
+
|
27 |
+
return self::$instance;
|
28 |
+
}
|
29 |
+
|
30 |
+
private function __construct()
|
31 |
+
{
|
32 |
+
if (!\is_admin())
|
33 |
+
die('You are not authorized to perform the requested action.');
|
34 |
+
|
35 |
+
\add_action('admin_menu', array($this, 'add_admin_menu'));
|
36 |
+
\add_action('admin_enqueue_scripts', array($this, 'admin_load_scripts'));
|
37 |
+
|
38 |
+
if (isset($GLOBALS['pagenow']) && $GLOBALS['pagenow'] == 'plugins.php')
|
39 |
+
{
|
40 |
+
\add_filter('plugin_row_meta', array($this, 'add_plugin_row_meta'), 10, 2);
|
41 |
+
}
|
42 |
+
|
43 |
+
if (Plugin::isFree() || (Plugin::isPro() && Plugin::isActivated()))
|
44 |
+
{
|
45 |
+
GeneralConfig::getInstance()->adminInit();
|
46 |
+
ModuleManager::getInstance()->adminInit();
|
47 |
+
new EggMetabox;
|
48 |
+
new ModuleApi;
|
49 |
+
new FeaturedImage;
|
50 |
+
}
|
51 |
+
if (Plugin::isPro())
|
52 |
+
LicConfig::getInstance()->adminInit();
|
53 |
+
}
|
54 |
+
|
55 |
+
function admin_load_scripts()
|
56 |
+
{
|
57 |
+
//\wp_enqueue_style('egg-bootstrap', \ContentEgg\PLUGIN_RES . '/bootstrap/css/egg-bootstrap.css');
|
58 |
+
\wp_enqueue_style('contentegg-admin', \ContentEgg\PLUGIN_RES . '/css/admin.css');
|
59 |
+
|
60 |
+
}
|
61 |
+
|
62 |
+
public function add_plugin_row_meta(array $links, $file)
|
63 |
+
{
|
64 |
+
if ($file == plugin_basename(\ContentEgg\PLUGIN_FILE) && LicConfig::getInstance()->option('license_key'))
|
65 |
+
{
|
66 |
+
return array_merge(
|
67 |
+
$links, array(
|
68 |
+
'<a href="' . get_bloginfo('wpurl') . '/wp-admin/admin.php?page=content-egg">' . __('Настройки', 'content-egg') . '</a>',
|
69 |
+
)
|
70 |
+
);
|
71 |
+
}
|
72 |
+
return $links;
|
73 |
+
}
|
74 |
+
|
75 |
+
public function add_admin_menu()
|
76 |
+
{
|
77 |
+
\add_menu_page('Content Egg', 'Content Egg', 'publish_posts', Plugin::slug, null, 'dashicons-screenoptions');
|
78 |
+
}
|
79 |
+
|
80 |
+
public static function render($view_name, $_data = null)
|
81 |
+
{
|
82 |
+
if (is_array($_data))
|
83 |
+
extract($_data, EXTR_PREFIX_SAME, 'data');
|
84 |
+
else
|
85 |
+
$data = $_data;
|
86 |
+
|
87 |
+
include \ContentEgg\PLUGIN_PATH . 'application/admin/views/' . TextHelper::clear($view_name) . '.php';
|
88 |
+
}
|
89 |
+
|
90 |
+
|
91 |
+
|
92 |
+
}
|
application/admin/index.php
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<?php // Silence is golden.
|
application/admin/views/_metabox_results.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="data_results" ng-if="models.<?php echo $module_id; ?>.added.length">
|
2 |
+
<div class="row">
|
3 |
+
<div class="col-md-12 added_data" ng-repeat="data in models.<?php echo $module_id; ?>.added">
|
4 |
+
<div class="row" style="padding: 5px;">
|
5 |
+
<div class="col-md-2">
|
6 |
+
<img ng-src="{{data.img}}" class="img-responsive" style="max-height: 160px;" />
|
7 |
+
</div>
|
8 |
+
<div class="col-md-9">
|
9 |
+
<input type="text" placeholder="<?php _e('Заголовок', 'content-egg'); ?>" ng-model="data.title" class="form-control"><br>
|
10 |
+
<textarea type="text" placeholder="<?php _e('Описание', 'content-egg'); ?>" rows="2" ng-model="data.description" class="col-sm-12 "></textarea>
|
11 |
+
</div>
|
12 |
+
<div class="col-md-1">
|
13 |
+
<a href="{{data.url}}" target="_blank"><?php _e('Перейти', 'content-egg'); ?></a><br><br>
|
14 |
+
<a ng-click="delete(data, '<?php echo $module_id; ?>')"><?php _e('Удалить', 'content-egg'); ?></a>
|
15 |
+
</div>
|
16 |
+
|
17 |
+
</div>
|
18 |
+
</div>
|
19 |
+
</div>
|
20 |
+
</div>
|
application/admin/views/_metabox_search_results.php
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="search_results" ng-show="models.<?php echo $module_id; ?>.results.length > 0 && !models.<?php echo $module_id; ?>.processing">
|
2 |
+
<div class="row search_results_row" ng-class="{'result_added' : result.added}" ng-click="add(result, '<?php echo $module_id; ?>')" repeat-done ng-repeat="result in models.<?php echo $module_id; ?>.results">
|
3 |
+
<div class="col-md-1">
|
4 |
+
<img ng-src="{{result.img}}" ng-if="result.img" class="img-thumbnail" />
|
5 |
+
</div>
|
6 |
+
<div class="col-md-11">
|
7 |
+
<strong ng-show="result.title">{{result.title}}</strong>
|
8 |
+
<p ng-show="result.description">{{result.description | limitTo: 200}}{{result.description.length > 200 ? '…' : ''}}</p>
|
9 |
+
<p ng-show="result.price">{{result.currencyCode}} <strike ng-show="result.priceOld">{{result.priceOld}}</strike> {{result.price}}</p>
|
10 |
+
</div>
|
11 |
+
</div>
|
12 |
+
</div>
|
application/admin/views/_metabox_search_results_images.php
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="search_results" ng-show="models.<?php echo $module_id; ?>.results.length > 0 && !models.<?php echo $module_id; ?>.processing">
|
2 |
+
<div justified-gallery="{rowHeight: 160}">
|
3 |
+
<a ng-class="{'result_added' : result.added}" ng-click="add(result, '<?php echo $module_id; ?>')" repeat-done ng-repeat="result in models.<?php echo $module_id; ?>.results">
|
4 |
+
<img alt="{{result.title}}" ng-src="{{result.img}}"/>
|
5 |
+
</a>
|
6 |
+
</div>
|
7 |
+
</div>
|
application/admin/views/metabox_general.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php \wp_nonce_field('contentegg_metabox', 'contentegg_nonce'); ?>
|
2 |
+
|
3 |
+
<div clas="row">
|
4 |
+
<div class="col-sm-5">
|
5 |
+
<div class="input-group">
|
6 |
+
|
7 |
+
|
8 |
+
<input ng-disabled="processCounter" type="text" ng-model="global_keywords" select-on-click on-enter="global_findAll()" class="form-control col-md-6" placeholder="<?php _e('Введите ключевое слово', 'content-egg'); ?>" aria-label="<?php _e('Введите ключевое слово', 'content-egg'); ?>">
|
9 |
+
<div class="input-group-btn">
|
10 |
+
<button ng-disabled='processCounter || !global_keywords' ng-click="global_findAll()" type="button" class="btn btn-info"><?php _e('Найти все', 'content-egg'); ?></button>
|
11 |
+
</div>
|
12 |
+
</div>
|
13 |
+
</div>
|
14 |
+
<div class="col-sm-7 text-right">
|
15 |
+
<button ng-show='!processCounter && global_isSearchResults()' ng-click="global_addAll()" type="button" class="btn btn-default btn-sm"><?php _e('Добавить все', 'content-egg'); ?></button>
|
16 |
+
<button ng-show='global_isAddedResults()' ng-click="global_deleteAll()" ng-confirm-click="<?php _e('Вы действительно хотите удалить результаты всех модулей?', 'content-egg'); ?>" type="button" class="btn btn-default btn-sm"><?php _e('Удалить все', 'content-egg'); ?></button>
|
17 |
+
</div>
|
18 |
+
</div>
|
19 |
+
<div class="row">
|
20 |
+
<div class="col-sm-12"><hr></div>
|
21 |
+
</div>
|
application/admin/views/metabox_module.php
ADDED
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div ng-controllerTMP="<?php echo $module_id; ?>Controller">
|
2 |
+
|
3 |
+
<input type="hidden" name="cegg_data[<?php echo $module_id; ?>]" ng-value="models.<?php echo $module_id; ?>.added | json" />
|
4 |
+
<input type="hidden" name="cegg_updateKeywords[<?php echo $module_id; ?>]" ng-value="updateKeywords.<?php echo $module_id; ?>" />
|
5 |
+
<tabset>
|
6 |
+
<tab active="activeResultTabs.<?php echo $module_id; ?>">
|
7 |
+
<tab-heading>
|
8 |
+
<strong><?php echo $module_id; ?></strong>
|
9 |
+
<span ng-show="models.<?php echo $module_id; ?>.added.length" class="label" ng-class="{'label-danger':models.<?php echo $module_id; ?>.added_changed, 'label-default':!models.<?php echo $module_id; ?>.added_changed}">{{models.<?php echo $module_id; ?>.added.length}}</span>
|
10 |
+
</tab-heading>
|
11 |
+
|
12 |
+
<div class="data_panel">
|
13 |
+
|
14 |
+
<div clas="row">
|
15 |
+
<div class="col-sm-3">
|
16 |
+
<input ng-model="shortcodes.<?php echo $module_id; ?>" select-on-click readonly type="text" class="form-control input-sm" />
|
17 |
+
</div>
|
18 |
+
|
19 |
+
<div class="col-sm-3">
|
20 |
+
<?php
|
21 |
+
$tpl_manager = new ContentEgg\application\components\ModuleTemplateManager($module_id);
|
22 |
+
$templates = $tpl_manager->getDataTemplatesList(true);
|
23 |
+
?>
|
24 |
+
<?php if($templates): ?>
|
25 |
+
<select ng-model="selectedTemplate_<?php echo $module_id; ?>" ng-change="buildShortcode('<?php echo $module_id; ?>', selectedTemplate_<?php echo $module_id; ?>);">
|
26 |
+
<option value="">- <?php _e('Шаблон для шорткода', 'content-egg');?> -</option>
|
27 |
+
<?php foreach ($templates as $id => $name):?>
|
28 |
+
<option value="<?php echo esc_attr($id);?>"><?php echo esc_html($name);?></option>
|
29 |
+
<?php endforeach; ?>
|
30 |
+
</select>
|
31 |
+
<?php endif;?>
|
32 |
+
</div>
|
33 |
+
|
34 |
+
<?php if ($module->isAffiliateParser()): ?>
|
35 |
+
<div class="col-md-3">
|
36 |
+
<input id="updateKeyword_<?php echo $module_id; ?>" type="text" ng-model="updateKeywords.<?php echo $module_id; ?>" class="form-control" placeholder="<?php _e('Ключевое слово для автоматического обновления данных', 'content-egg'); ?>" />
|
37 |
+
</div>
|
38 |
+
<?php endif; ?>
|
39 |
+
<div class="col-sm-<?php if ($module->isAffiliateParser()) echo 3; else echo 6; ?> text-right">
|
40 |
+
<a class='btn btn-default btn-sm' ng-click="deleteAll('<?php echo $module_id; ?>')" ng-confirm-click="<?php _e('Вы действительно хотите удалить все результаты?', 'content-egg'); ?>" ng-show='models.<?php echo $module_id; ?>.added.length'><?php _e('Удалить все', 'content-egg'); ?></a>
|
41 |
+
</div>
|
42 |
+
</div>
|
43 |
+
</div>
|
44 |
+
<div class="clearfix"></div>
|
45 |
+
<p ng-show="!models.<?php echo $module_id; ?>.added.length && !models.<?php echo $module_id; ?>.processing" class="bg-warning text-center"><br><?php _e('Данные не найдены...', 'content-egg'); ?><br><br></p>
|
46 |
+
<?php $module->renderResults(); ?>
|
47 |
+
</tab>
|
48 |
+
|
49 |
+
<tab active="activeSearchTabs.<?php echo $module_id; ?>" heading="<?php _e('Поиск', 'content-egg'); ?>">
|
50 |
+
<div class="search_panel">
|
51 |
+
<div clas="row">
|
52 |
+
<div class="col-md-5">
|
53 |
+
|
54 |
+
<div class="input-group" ng-show="!models.<?php echo $module_id; ?>.processing">
|
55 |
+
<input type="text" select-on-click ng-model="keywords.<?php echo $module_id; ?>" on-enter="find('<?php echo $module_id; ?>')" class="form-control col-md-6" placeholder="<?php _e('Ключевое слово для поиска', 'content-egg'); ?>" />
|
56 |
+
<div class="input-group-btn">
|
57 |
+
<button ng-disabled="!keywords.<?php echo $module_id; ?>" ng-click="find('<?php echo $module_id; ?>')" type="button" class="btn btn-info"><?php _e('Найти', 'content-egg'); ?></button>
|
58 |
+
<?php if ($module->isAffiliateParser()): ?>
|
59 |
+
<button ng-disabled="!keywords.<?php echo $module_id; ?>" ng-click="setUpdateKeyword('<?php echo $module_id; ?>')" type="button" class="btn btn-info">→</button>
|
60 |
+
<?php endif; ?>
|
61 |
+
</div>
|
62 |
+
</div>
|
63 |
+
<img ng-show="models.<?php echo $module_id; ?>.processing" src="<?php echo \ContentEgg\PLUGIN_RES . '/img/loader.gif' ?>" />
|
64 |
+
</div>
|
65 |
+
<div class="col-md-6">
|
66 |
+
<div ng-show="!models.<?php echo $module_id; ?>.processing">
|
67 |
+
<?php $module->renderSearchPanel(); ?>
|
68 |
+
</div>
|
69 |
+
</div>
|
70 |
+
<div class="col-sm-1 text-right">
|
71 |
+
<a class='btn btn-default btn-sm' ng-click="addAll('<?php echo $module_id; ?>')" ng-show='models.<?php echo $module_id; ?>.results.length > 0 && !models.<?php echo $module_id; ?>.processing'><?php _e('Добавить все', 'content-egg'); ?></a>
|
72 |
+
</div>
|
73 |
+
</div>
|
74 |
+
</div>
|
75 |
+
<div class="clearfix"></div>
|
76 |
+
|
77 |
+
<?php $module->renderSearchResults(); ?>
|
78 |
+
|
79 |
+
<p ng-show="!models.<?php echo $module_id; ?>.processing && models.<?php echo $module_id; ?>.loaded && models.<?php echo $module_id; ?>.results.length == 0" class="bg-warning text-center"><br><?php _e('Не найдено...', 'content-egg'); ?><br><br></p>
|
80 |
+
<p ng-show="models.<?php echo $module_id; ?>.error" class="bg-danger text-center"><br><?php _e('Ошибка: ', 'content-egg'); ?> {{models.<?php echo $module_id; ?>.error}}<br><br></p>
|
81 |
+
</tab>
|
82 |
+
</tabset>
|
83 |
+
<div class="row">
|
84 |
+
<div class="col-sm-12"><br></div>
|
85 |
+
</div>
|
86 |
+
</div>
|
application/admin/views/settings.php
ADDED
@@ -0,0 +1,120 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Некоторые иконы Yusuke Kamiyamane. Доступно по лицензии Creative Commons Attribution 3.0.
|
4 |
+
* @link: http://p.yusukekamiyamane.com
|
5 |
+
*/
|
6 |
+
?>
|
7 |
+
|
8 |
+
<?php if (\ContentEgg\application\Plugin::isFree()): ?>
|
9 |
+
<div class="cegg-maincol">
|
10 |
+
<?php endif; ?>
|
11 |
+
<div class="wrap">
|
12 |
+
<h2>
|
13 |
+
<?php _e('Content Egg Настройки', 'content-egg'); ?>
|
14 |
+
<?php if (\ContentEgg\application\Plugin::isPro()): ?>
|
15 |
+
<span class="cegg-pro-label">pro</span>
|
16 |
+
<?php endif; ?>
|
17 |
+
</h2>
|
18 |
+
|
19 |
+
<?php $modules = \ContentEgg\application\components\ModuleManager::getInstance()->getConfigurableModules(); ?>
|
20 |
+
|
21 |
+
<h2 class="nav-tab-wrapper">
|
22 |
+
<a href="?page=content-egg"
|
23 |
+
class="nav-tab<?php if (!empty($_GET['page']) && $_GET['page'] == 'content-egg') echo ' nav-tab-active'; ?>">
|
24 |
+
<?php _e('Общие настройки', 'content-egg'); ?>
|
25 |
+
</a>
|
26 |
+
<?php foreach ($modules as $module): ?>
|
27 |
+
<?php $config = $module->getConfigInstance(); ?>
|
28 |
+
<a href="?page=<?php echo esc_attr($config->page_slug()); ?>"
|
29 |
+
class="nav-tab<?php if (!empty($_GET['page']) && $_GET['page'] == $config->page_slug()) echo ' nav-tab-active'; ?>">
|
30 |
+
<img src="<?php echo ContentEgg\PLUGIN_RES; ?>/img/status-<?php echo $module->isActive() ? 'active' : 'inactive' ?>.png" />
|
31 |
+
<?php echo esc_html($module->getName()); ?>
|
32 |
+
</a>
|
33 |
+
<?php endforeach; ?>
|
34 |
+
</h2>
|
35 |
+
|
36 |
+
<div class="ui-sortable meta-box-sortables">
|
37 |
+
<div class="postbox1">
|
38 |
+
<div class="inside">
|
39 |
+
|
40 |
+
<div class="cegg-wrap">
|
41 |
+
|
42 |
+
<div class="cegg-maincol">
|
43 |
+
|
44 |
+
<h3>
|
45 |
+
<?php
|
46 |
+
if (!empty($_GET['page']) && $_GET['page'] == 'content-egg')
|
47 |
+
_e('Общие настройки', 'content-egg');
|
48 |
+
else
|
49 |
+
echo esc_html($header);
|
50 |
+
?>
|
51 |
+
</h3>
|
52 |
+
|
53 |
+
<?php settings_errors(); ?>
|
54 |
+
<form action="options.php" method="POST">
|
55 |
+
<?php settings_fields($page_slug); ?>
|
56 |
+
<table class="form-table">
|
57 |
+
<?php do_settings_fields($page_slug, 'default'); ?>
|
58 |
+
</table>
|
59 |
+
<?php submit_button(); ?>
|
60 |
+
</form>
|
61 |
+
|
62 |
+
</div>
|
63 |
+
|
64 |
+
<div class="cegg-rightcol">
|
65 |
+
<div>
|
66 |
+
<?php
|
67 |
+
if (!empty($description))
|
68 |
+
echo '<p>' . $description . '</p>';
|
69 |
+
|
70 |
+
if (!empty($api_agreement))
|
71 |
+
echo '<div style="text-align: right;"><small><a href="' . $api_agreement . '" target="_blank">' . __('Условия', 'content-egg') . '</a></small></div>';
|
72 |
+
?>
|
73 |
+
|
74 |
+
</div>
|
75 |
+
</div>
|
76 |
+
</div>
|
77 |
+
|
78 |
+
|
79 |
+
</div>
|
80 |
+
</div>
|
81 |
+
</div>
|
82 |
+
</div>
|
83 |
+
|
84 |
+
|
85 |
+
<?php if (\ContentEgg\application\Plugin::isFree()): ?>
|
86 |
+
</div>
|
87 |
+
<div class="cegg-rightcol">
|
88 |
+
<div class="cegg-box" style="margin-top: 95px;">
|
89 |
+
<h2>
|
90 |
+
Content Egg Pro
|
91 |
+
<span class="cegg-pro-label">pro</span>
|
92 |
+
</h2>
|
93 |
+
|
94 |
+
<p>
|
95 |
+
<?php _e('Множество дополнительных модулей и расширенный функционал.', 'content-egg'); ?>
|
96 |
+
</p>
|
97 |
+
<h3><?php _e('Контент модули:', 'content-egg'); ?></h3>
|
98 |
+
<ul>
|
99 |
+
<li><?php _e('Bing картинки', 'content-egg'); ?></li>
|
100 |
+
<li><?php _e('Flickr фотографии', 'content-egg'); ?></li>
|
101 |
+
<li><?php _e('Google книги', 'content-egg'); ?></li>
|
102 |
+
<li><?php _e('Google новости', 'content-egg'); ?></li>
|
103 |
+
<li><?php _e('Яндекс.Маркет', 'content-egg'); ?></li>
|
104 |
+
<li>Twitter</li>
|
105 |
+
<li><?php _e('ВКонтакте новости', 'content-egg'); ?></li>
|
106 |
+
<li>...</li>
|
107 |
+
</ul>
|
108 |
+
<h3><?php _e('Монетизация:', 'content-egg'); ?></h3>
|
109 |
+
<ul>
|
110 |
+
<li>Aliexpress</li>
|
111 |
+
<li>eBay</li>
|
112 |
+
<li>Zanox</li>
|
113 |
+
<li>...</li>
|
114 |
+
</ul>
|
115 |
+
<p>
|
116 |
+
<a class="button button-primary" href="http://www.keywordrush.com/<?php if(!in_array(\get_locale(), array('ru_RU', 'uk'))) echo 'en/' ?>contentegg"><?php _e('Узнать больше...', 'content-egg'); ?></a>
|
117 |
+
</p>
|
118 |
+
</div>
|
119 |
+
</div>
|
120 |
+
<?php endif; ?>
|
application/components/AffiliateParserModule.php
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\components;
|
4 |
+
|
5 |
+
use ContentEgg\application\helpers\ImageHelper;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* AffiliateParserModule abstract class file
|
9 |
+
*
|
10 |
+
* @author keywordrush.com <support@keywordrush.com>
|
11 |
+
* @link http://www.keywordrush.com/
|
12 |
+
* @copyright Copyright © 2015 keywordrush.com
|
13 |
+
*/
|
14 |
+
abstract class AffiliateParserModule extends ParserModule {
|
15 |
+
|
16 |
+
final public function isAffiliateParser()
|
17 |
+
{
|
18 |
+
return true;
|
19 |
+
}
|
20 |
+
|
21 |
+
public function isItemsUpdateAvailable()
|
22 |
+
{
|
23 |
+
return false;
|
24 |
+
}
|
25 |
+
|
26 |
+
public function doRequestItems(array $items)
|
27 |
+
{
|
28 |
+
throw new \Exception('doRequestItems method not implemented yet');
|
29 |
+
}
|
30 |
+
|
31 |
+
public function presavePrepare($data, $post_id)
|
32 |
+
{
|
33 |
+
$data = parent::presavePrepare($data, $post_id);
|
34 |
+
foreach ($data as $key => $item)
|
35 |
+
{
|
36 |
+
if (!$item['percentageSaved'] && $item['priceOld'] && $item['price'] != $item['priceOld'])
|
37 |
+
{
|
38 |
+
$data[$key]['percentageSaved'] = floor(((float) $item['priceOld'] - (float) $item['price']) / (float) $item['priceOld'] * 100);
|
39 |
+
}
|
40 |
+
}
|
41 |
+
return $data;
|
42 |
+
}
|
43 |
+
|
44 |
+
}
|
application/components/AffiliateParserModuleConfig.php
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\components;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* ParserModuleConfig abstract class file
|
7 |
+
*
|
8 |
+
* @author keywordrush.com <support@keywordrush.com>
|
9 |
+
* @link http://www.keywordrush.com/
|
10 |
+
* @copyright Copyright © 2015 keywordrush.com
|
11 |
+
*/
|
12 |
+
abstract class AffiliateParserModuleConfig extends ParserModuleConfig {
|
13 |
+
|
14 |
+
public function options()
|
15 |
+
{
|
16 |
+
$options = array(
|
17 |
+
'ttl' => array(
|
18 |
+
'title' => __('Автоматическое обновление', 'content-egg'),
|
19 |
+
'description' => __('Время жини кэша в секундах, через которое необходимо обновить товары, если задано ключевое слово для обновления. 0 - никогда не обновлять.', 'content-egg'),
|
20 |
+
'callback' => array($this, 'render_input'),
|
21 |
+
'default' => 2592000,
|
22 |
+
'validator' => array(
|
23 |
+
'trim',
|
24 |
+
'absint',
|
25 |
+
),
|
26 |
+
'section' => 'default',
|
27 |
+
),
|
28 |
+
);
|
29 |
+
|
30 |
+
if ($this->getModuleInstance()->isItemsUpdateAvailable())
|
31 |
+
{
|
32 |
+
$options['ttl_items'] = array(
|
33 |
+
'title' => __('Обновить товары', 'content-egg'),
|
34 |
+
'description' => __('Время в секундах, через которое необходимо обновить цену, наличие и некоторую другую информацию по товарам. 0 - никогда не обновлять.', 'content-egg'),
|
35 |
+
'callback' => array($this, 'render_input'),
|
36 |
+
'default' => 604800,
|
37 |
+
'validator' => array(
|
38 |
+
'trim',
|
39 |
+
'absint',
|
40 |
+
),
|
41 |
+
'section' => 'default',
|
42 |
+
);
|
43 |
+
}
|
44 |
+
|
45 |
+
return
|
46 |
+
array_merge(
|
47 |
+
parent::options(), $options
|
48 |
+
);
|
49 |
+
}
|
50 |
+
|
51 |
+
}
|
application/components/Config.php
ADDED
@@ -0,0 +1,297 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\components;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Config class file
|
7 |
+
*
|
8 |
+
* @author keywordrush.com <support@keywordrush.com>
|
9 |
+
* @link http://www.keywordrush.com/
|
10 |
+
* @copyright Copyright © 2015 keywordrush.com
|
11 |
+
*/
|
12 |
+
abstract class Config {
|
13 |
+
|
14 |
+
protected $page_slug;
|
15 |
+
protected $option_name;
|
16 |
+
protected $option_values = array();
|
17 |
+
protected $options = array();
|
18 |
+
private static $_instances = array();
|
19 |
+
|
20 |
+
public static function getInstance()
|
21 |
+
{
|
22 |
+
$class = get_called_class();
|
23 |
+
if (!isset(self::$_instances[$class]))
|
24 |
+
{
|
25 |
+
self::$_instances[$class] = new $class();
|
26 |
+
}
|
27 |
+
return self::$_instances[$class];
|
28 |
+
}
|
29 |
+
|
30 |
+
protected function __construct()
|
31 |
+
{
|
32 |
+
$this->option_name = $this->option_name();
|
33 |
+
$this->options = $this->options();
|
34 |
+
$this->option_values = get_option($this->option_name);
|
35 |
+
$this->page_slug = $this->page_slug();
|
36 |
+
}
|
37 |
+
|
38 |
+
public function option($opt_name)
|
39 |
+
{
|
40 |
+
return $this->get_current($opt_name);
|
41 |
+
}
|
42 |
+
|
43 |
+
public function adminInit()
|
44 |
+
{
|
45 |
+
global $pagenow;
|
46 |
+
add_action('admin_menu', array($this, 'add_admin_menu'));
|
47 |
+
|
48 |
+
if ($pagenow == 'options.php' || (!empty($_GET['page']) && $_GET['page'] == $this->page_slug))
|
49 |
+
{
|
50 |
+
add_action('admin_init', array($this, 'register_settings'));
|
51 |
+
}
|
52 |
+
}
|
53 |
+
|
54 |
+
abstract public function page_slug();
|
55 |
+
|
56 |
+
abstract public function option_name();
|
57 |
+
|
58 |
+
abstract protected function options();
|
59 |
+
|
60 |
+
abstract public function add_admin_menu();
|
61 |
+
|
62 |
+
public function get_page_slug()
|
63 |
+
{
|
64 |
+
return $this->page_slug;
|
65 |
+
}
|
66 |
+
|
67 |
+
protected function get_default($option)
|
68 |
+
{
|
69 |
+
if (isset($this->options[$option]) && isset($this->options[$option]['default']))
|
70 |
+
return $this->options[$option]['default'];
|
71 |
+
else
|
72 |
+
return '';
|
73 |
+
}
|
74 |
+
|
75 |
+
protected function get_validator($option)
|
76 |
+
{
|
77 |
+
if (isset($this->options[$option]) && isset($this->options[$option]['validator']))
|
78 |
+
return $this->options[$option]['validator'];
|
79 |
+
else
|
80 |
+
return null;
|
81 |
+
}
|
82 |
+
|
83 |
+
protected function get_current($option)
|
84 |
+
{
|
85 |
+
if (isset($this->option_values[$option]))
|
86 |
+
return $this->option_values[$option];
|
87 |
+
elseif ($this->option_values && $this->is_checkbox($option))
|
88 |
+
{
|
89 |
+
return false;
|
90 |
+
} else
|
91 |
+
return $this->get_default($option);
|
92 |
+
}
|
93 |
+
|
94 |
+
public function register_settings()
|
95 |
+
{
|
96 |
+
register_setting(
|
97 |
+
$this->page_slug, // group, used for settings_fields()
|
98 |
+
$this->option_name, // option name, used as key in database
|
99 |
+
array($this, 'validate') // validation callback
|
100 |
+
);
|
101 |
+
|
102 |
+
foreach ($this->options as $id => $field)
|
103 |
+
{
|
104 |
+
$params = array(
|
105 |
+
'name' => $id, // value for 'name' attribute
|
106 |
+
'title' => $field['title'],
|
107 |
+
'description' => $field['description'],
|
108 |
+
'value' => $this->get_current($id),
|
109 |
+
'option_name' => $this->option_name,
|
110 |
+
'label_for' => 'label-' . $id,
|
111 |
+
);
|
112 |
+
if (!empty($field['dropdown_options']))
|
113 |
+
$params['dropdown_options'] = $field['dropdown_options'];
|
114 |
+
|
115 |
+
if (!empty($field['render_after']))
|
116 |
+
$params['render_after'] = $field['render_after'];
|
117 |
+
if (empty($field['section']))
|
118 |
+
$field['section'] = 'default';
|
119 |
+
add_settings_field(
|
120 |
+
$id, $field['title'], $field['callback'], $this->page_slug, // menu slug
|
121 |
+
$field['section'], $params
|
122 |
+
);
|
123 |
+
}
|
124 |
+
}
|
125 |
+
|
126 |
+
public function render_input($args)
|
127 |
+
{
|
128 |
+
echo '<input name="' . esc_attr($args['option_name']) . '['
|
129 |
+
. esc_attr($args['name']) . ']" id="'
|
130 |
+
. esc_attr($args['label_for']) . '" value="'
|
131 |
+
. esc_attr($args['value']) . '" class="regular-text" />';
|
132 |
+
if (!empty($args['render_after']))
|
133 |
+
echo $args['render_after'];
|
134 |
+
if ($args['description'])
|
135 |
+
{
|
136 |
+
echo '<p class="description">' . $args['description'] . '</p>';
|
137 |
+
}
|
138 |
+
}
|
139 |
+
|
140 |
+
public function render_checkbox($args)
|
141 |
+
{
|
142 |
+
if ((bool) $args['value'])
|
143 |
+
$checked = ' checked="checked" ';
|
144 |
+
else
|
145 |
+
$checked = '';
|
146 |
+
echo '<label for="' . esc_attr($args['label_for']) . '">';
|
147 |
+
echo '<input type="checkbox" name="' . esc_attr($args['option_name']) . '['
|
148 |
+
. esc_attr($args['name']) . ']" id="'
|
149 |
+
. esc_attr($args['label_for']), '"'
|
150 |
+
. $checked . ' value="1" />';
|
151 |
+
if ($args['description'])
|
152 |
+
{
|
153 |
+
echo ' ' . $args['description'];
|
154 |
+
}
|
155 |
+
echo '</label>';
|
156 |
+
}
|
157 |
+
|
158 |
+
public function render_dropdown($args)
|
159 |
+
{
|
160 |
+
echo '<select name="' . esc_attr($args['option_name']) . '['
|
161 |
+
. esc_attr($args['name']) . ']" id="'
|
162 |
+
. esc_attr($args['label_for']) . '" value="'
|
163 |
+
. esc_attr($args['value']) . '" >';
|
164 |
+
foreach ($args['dropdown_options'] as $option_value => $option_name)
|
165 |
+
{
|
166 |
+
if ($option_value === $args['value'])
|
167 |
+
$selected = ' selected="selected" ';
|
168 |
+
else
|
169 |
+
$selected = '';
|
170 |
+
echo '<option value="' . esc_attr($option_value) . '"' . $selected . '>' . esc_html($option_name) . '</option>';
|
171 |
+
}
|
172 |
+
echo '</select>';
|
173 |
+
|
174 |
+
if (!empty($args['render_after']))
|
175 |
+
echo $args['render_after'];
|
176 |
+
if ($args['description'])
|
177 |
+
{
|
178 |
+
echo '<p class="description">' . $args['description'] . '</p>';
|
179 |
+
}
|
180 |
+
}
|
181 |
+
|
182 |
+
public function option_exists($option)
|
183 |
+
{
|
184 |
+
if (array_key_exists($option, $this->options))
|
185 |
+
return true;
|
186 |
+
else
|
187 |
+
return false;
|
188 |
+
}
|
189 |
+
|
190 |
+
public function validate($input)
|
191 |
+
{
|
192 |
+
if (!is_array($input))
|
193 |
+
return;
|
194 |
+
$out = array();
|
195 |
+
foreach ($input as $option => $value)
|
196 |
+
{
|
197 |
+
if (!$this->option_exists($option))
|
198 |
+
continue;
|
199 |
+
|
200 |
+
$value = trim($value);
|
201 |
+
|
202 |
+
if ($validator = $this->get_validator($option))
|
203 |
+
{
|
204 |
+
if (!is_array($validator))
|
205 |
+
continue;
|
206 |
+
foreach ($validator as $v)
|
207 |
+
{
|
208 |
+
if (!is_array($v))
|
209 |
+
{
|
210 |
+
if ($v == 'allow_empty')
|
211 |
+
{
|
212 |
+
if ($value === '')
|
213 |
+
break;
|
214 |
+
else
|
215 |
+
continue;
|
216 |
+
}
|
217 |
+
|
218 |
+
// filter
|
219 |
+
$value = call_user_func($v, $value);
|
220 |
+
} else
|
221 |
+
{
|
222 |
+
// check 'when' condition
|
223 |
+
if (!empty($v['when']))
|
224 |
+
{
|
225 |
+
$when_value = $this->get_submitted_value($v['when'], $input, $out);
|
226 |
+
if (!$when_value)
|
227 |
+
continue;
|
228 |
+
}
|
229 |
+
// validator
|
230 |
+
if (empty($v['arg']))
|
231 |
+
$res = call_user_func($v['call'], $value);
|
232 |
+
else
|
233 |
+
$res = call_user_func($v['call'], $value, $v['arg']);
|
234 |
+
if (!$res)
|
235 |
+
{
|
236 |
+
add_settings_error($option, $option, $v['message']);
|
237 |
+
$value = $this->get_current($option);
|
238 |
+
|
239 |
+
if (!empty($v['when']))
|
240 |
+
{
|
241 |
+
$out[$v['when']] = $this->get_current($v['when']);
|
242 |
+
}
|
243 |
+
|
244 |
+
break;
|
245 |
+
}
|
246 |
+
}
|
247 |
+
}
|
248 |
+
}
|
249 |
+
$out[$option] = $value;
|
250 |
+
}
|
251 |
+
return $out;
|
252 |
+
}
|
253 |
+
|
254 |
+
public function is_checkbox($option)
|
255 |
+
{
|
256 |
+
if ($this->options[$option]['callback'][1] == 'render_checkbox')
|
257 |
+
return true;
|
258 |
+
else
|
259 |
+
return false;
|
260 |
+
}
|
261 |
+
|
262 |
+
/**
|
263 |
+
* Current submitted value
|
264 |
+
*/
|
265 |
+
private function get_submitted_value($option, $input, $out)
|
266 |
+
{
|
267 |
+
if (!$this->option_exists($option))
|
268 |
+
throw new \Exception('Options "' . $option . '" does not exists.');
|
269 |
+
|
270 |
+
if (!isset($input[$option]) && $this->is_checkbox($option))
|
271 |
+
return false;
|
272 |
+
|
273 |
+
if (!isset($input[$option]))
|
274 |
+
throw new \Exception('Options "' . $option . '" does not exists.');
|
275 |
+
|
276 |
+
if (isset($out[$option]))
|
277 |
+
return $out[$option];
|
278 |
+
else
|
279 |
+
return $input[$option];
|
280 |
+
}
|
281 |
+
|
282 |
+
public function getOptionsList()
|
283 |
+
{
|
284 |
+
return array_keys($this->options());
|
285 |
+
}
|
286 |
+
|
287 |
+
public function getOptionValues()
|
288 |
+
{
|
289 |
+
$result = array();
|
290 |
+
foreach ($this->getOptionsList() as $option_name)
|
291 |
+
{
|
292 |
+
$result[$option_name] = $this->get_current($option_name);
|
293 |
+
}
|
294 |
+
return $result;
|
295 |
+
}
|
296 |
+
|
297 |
+
}
|
application/components/Content.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\components;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Content class file
|
7 |
+
*
|
8 |
+
* @author keywordrush.com <support@keywordrush.com>
|
9 |
+
* @link http://www.keywordrush.com/
|
10 |
+
* @copyright Copyright © 2015 keywordrush.com
|
11 |
+
*/
|
12 |
+
class Content {
|
13 |
+
|
14 |
+
public $unique_id;
|
15 |
+
public $title;
|
16 |
+
public $description;
|
17 |
+
public $img;
|
18 |
+
public $last_update;
|
19 |
+
public $extra;
|
20 |
+
|
21 |
+
}
|
application/components/ContentManager.php
ADDED
@@ -0,0 +1,143 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\components;
|
4 |
+
|
5 |
+
use ContentEgg\application\helpers\ImageHelper;
|
6 |
+
use ContentEgg\application\helpers\TextHelper;
|
7 |
+
|
8 |
+
/**
|
9 |
+
* ContentManager class file
|
10 |
+
*
|
11 |
+
* @author keywordrush.com <support@keywordrush.com>
|
12 |
+
* @link http://www.keywordrush.com/
|
13 |
+
* @copyright Copyright © 2015 keywordrush.com
|
14 |
+
*/
|
15 |
+
class ContentManager {
|
16 |
+
|
17 |
+
const META_PREFIX_DATA = '_cegg_data_';
|
18 |
+
const META_PREFIX_LAST_ITEMS_UPDATE = '_cegg_last_update_';
|
19 |
+
const META_PREFIX_KEYWORD = '_cegg_keyword';
|
20 |
+
const META_PREFIX_LAST_BYKEYWORD_UPDATE = '_cegg_last_bykeyword_update';
|
21 |
+
|
22 |
+
public static function saveData(array $data, $module_id, $post_id)
|
23 |
+
{
|
24 |
+
if (!$data)
|
25 |
+
{
|
26 |
+
self::deleteData($module_id, $post_id);
|
27 |
+
return;
|
28 |
+
}
|
29 |
+
$data = self::setIds($data);
|
30 |
+
|
31 |
+
$old_data = \get_post_meta($post_id, self::META_PREFIX_DATA . $module_id, true);
|
32 |
+
if (!$old_data)
|
33 |
+
$old_data = array();
|
34 |
+
$outdated = array();
|
35 |
+
$data_changed = true;
|
36 |
+
|
37 |
+
if ($old_data)
|
38 |
+
{
|
39 |
+
$outdated = array_diff_key($old_data, $data);
|
40 |
+
$new = array_diff_key($data, $old_data);
|
41 |
+
|
42 |
+
if (!$outdated && !$new)
|
43 |
+
$data_changed = false;
|
44 |
+
|
45 |
+
/*
|
46 |
+
* we need force data update because title or description can be edited manually or items price update
|
47 |
+
if (!$data_changed)
|
48 |
+
return;
|
49 |
+
*
|
50 |
+
*/
|
51 |
+
}
|
52 |
+
// Sanitize content for allowed HTML tags and more.
|
53 |
+
array_walk_recursive($data, array('self', 'sanitizeData'));
|
54 |
+
$module = ModuleManager::getInstance()->factory($module_id);
|
55 |
+
$data = $module->presavePrepare($data, $post_id);
|
56 |
+
|
57 |
+
// save data
|
58 |
+
\update_post_meta($post_id, self::META_PREFIX_DATA . $module_id, $data);
|
59 |
+
|
60 |
+
self::clearData($outdated);
|
61 |
+
|
62 |
+
// touch last update time only if data changed?
|
63 |
+
if ($data_changed)
|
64 |
+
{
|
65 |
+
self::touchUpdateTime($post_id, $module_id);
|
66 |
+
}
|
67 |
+
|
68 |
+
\do_action('content_egg_save_data', $data, $module_id);
|
69 |
+
}
|
70 |
+
|
71 |
+
public static function deleteData($module_id, $post_id)
|
72 |
+
{
|
73 |
+
$data = \get_post_meta($post_id, self::META_PREFIX_DATA . $module_id, true);
|
74 |
+
if (!$data)
|
75 |
+
return;
|
76 |
+
|
77 |
+
\delete_post_meta($post_id, self::META_PREFIX_DATA . $module_id);
|
78 |
+
\delete_post_meta($post_id, self::META_PREFIX_LAST_BYKEYWORD_UPDATE . $module_id);
|
79 |
+
\delete_post_meta($post_id, self::META_PREFIX_LAST_ITEMS_UPDATE . $module_id);
|
80 |
+
|
81 |
+
self::clearData($data);
|
82 |
+
|
83 |
+
\do_action('content_egg_save_data', array(), $module_id);
|
84 |
+
}
|
85 |
+
|
86 |
+
private static function clearData($data)
|
87 |
+
{
|
88 |
+
// delete old img files if needed
|
89 |
+
foreach ($data as $d)
|
90 |
+
{
|
91 |
+
if (empty($d['img_file']))
|
92 |
+
continue;
|
93 |
+
$img_file = ImageHelper::getFullImgPath($d['img_file']);
|
94 |
+
if (is_file($img_file))
|
95 |
+
@unlink($img_file);
|
96 |
+
}
|
97 |
+
}
|
98 |
+
|
99 |
+
private static function setIds($data)
|
100 |
+
{
|
101 |
+
$results = array();
|
102 |
+
foreach ($data as $d)
|
103 |
+
{
|
104 |
+
$results[$d['unique_id']] = $d;
|
105 |
+
}
|
106 |
+
return $results;
|
107 |
+
}
|
108 |
+
|
109 |
+
public static function touchUpdateTime($post_id, $module_id)
|
110 |
+
{
|
111 |
+
$time = time();
|
112 |
+
\update_post_meta($post_id, self::META_PREFIX_LAST_BYKEYWORD_UPDATE . $module_id, $time);
|
113 |
+
self::touchUpdateItemsTime($post_id, $module_id, $time);
|
114 |
+
}
|
115 |
+
|
116 |
+
public static function touchUpdateItemsTime($post_id, $module_id, $time = null)
|
117 |
+
{
|
118 |
+
if (!$time)
|
119 |
+
$time = time();
|
120 |
+
\update_post_meta($post_id, self::META_PREFIX_LAST_ITEMS_UPDATE . $module_id, $time);
|
121 |
+
}
|
122 |
+
|
123 |
+
private static function sanitizeData(&$data, $key)
|
124 |
+
{
|
125 |
+
if (in_array((string) $key, array('img', 'url', 'IFrameURL', 'orig_url')))
|
126 |
+
{
|
127 |
+
//$data = \esc_url_raw($data);
|
128 |
+
//@todo... This filter allows all letters, digits and $-_.+!*'(),{}|\\^~[]`"><#%;/?:@&=
|
129 |
+
$data = filter_var($data, FILTER_SANITIZE_URL);
|
130 |
+
} elseif ($key === 'description')
|
131 |
+
{
|
132 |
+
$data = \wp_kses_post($data);
|
133 |
+
} elseif ($key === 'title')
|
134 |
+
{
|
135 |
+
$data = \sanitize_text_field($data);
|
136 |
+
} elseif ($key === 'last_update' && !$data)
|
137 |
+
{
|
138 |
+
$data = time();
|
139 |
+
} else
|
140 |
+
$data = \strip_tags($data);
|
141 |
+
}
|
142 |
+
|
143 |
+
}
|
application/components/ContentProduct.php
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\components;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* ContentProduct class file
|
7 |
+
*
|
8 |
+
* @author keywordrush.com <support@keywordrush.com>
|
9 |
+
* @link http://www.keywordrush.com/
|
10 |
+
* @copyright Copyright © 2015 keywordrush.com
|
11 |
+
*/
|
12 |
+
class ContentProduct extends Content {
|
13 |
+
|
14 |
+
public $price;
|
15 |
+
public $priceOld;
|
16 |
+
public $percentageSaved;
|
17 |
+
public $currency;
|
18 |
+
public $currencyCode;
|
19 |
+
public $manufacturer;
|
20 |
+
public $category;
|
21 |
+
public $merchant;
|
22 |
+
public $rating;
|
23 |
+
public $reviewsCount;
|
24 |
+
public $availability;
|
25 |
+
public $orig_url;
|
26 |
+
}
|
application/components/ExtraData.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\components;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* ExtraData class file
|
7 |
+
*
|
8 |
+
* @author keywordrush.com <support@keywordrush.com>
|
9 |
+
* @link http://www.keywordrush.com/
|
10 |
+
* @copyright Copyright © 2015 keywordrush.com
|
11 |
+
*/
|
12 |
+
class ExtraData {
|
13 |
+
|
14 |
+
public $date;
|
15 |
+
public $author;
|
16 |
+
public $source;
|
17 |
+
|
18 |
+
//public $price;
|
19 |
+
//public $currency;
|
20 |
+
//public $currencyCode;
|
21 |
+
|
22 |
+
|
23 |
+
public static function fillAttributes($object_or_array, array $data)
|
24 |
+
{
|
25 |
+
foreach ($data as $key => $d)
|
26 |
+
{
|
27 |
+
if (is_object($object_or_array) && property_exists($object_or_array, $key))
|
28 |
+
{
|
29 |
+
if (is_array($d) && !is_array($object_or_array->$key))
|
30 |
+
continue; //?
|
31 |
+
$object_or_array->$key = $d;
|
32 |
+
} elseif (is_array($object_or_array))
|
33 |
+
{
|
34 |
+
$object_or_array[$key] = $d;
|
35 |
+
}
|
36 |
+
}
|
37 |
+
|
38 |
+
return $object_or_array;
|
39 |
+
}
|
40 |
+
|
41 |
+
}
|
application/components/Module.php
ADDED
@@ -0,0 +1,176 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\components;
|
4 |
+
|
5 |
+
use ContentEgg\application\components\ModuleManager;
|
6 |
+
use ContentEgg\application\helpers\TextHelper;
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Module abstract class file
|
10 |
+
*
|
11 |
+
* @author keywordrush.com <support@keywordrush.com>
|
12 |
+
* @link http://www.keywordrush.com/
|
13 |
+
* @copyright Copyright © 2015 keywordrush.com
|
14 |
+
*/
|
15 |
+
abstract class Module {
|
16 |
+
|
17 |
+
private $id;
|
18 |
+
private $dir;
|
19 |
+
protected $is_active;
|
20 |
+
protected $name;
|
21 |
+
protected $api_agreement;
|
22 |
+
protected $description;
|
23 |
+
private $is_custom;
|
24 |
+
private $is_configurable;
|
25 |
+
|
26 |
+
public function __construct()
|
27 |
+
{
|
28 |
+
$parts = explode('\\', get_class($this));
|
29 |
+
$this->id = $parts[count($parts) - 2];
|
30 |
+
|
31 |
+
$info = $this->info();
|
32 |
+
if (!empty($info['name']))
|
33 |
+
$this->name = $info['name'];
|
34 |
+
else
|
35 |
+
$this->name = $this->id;
|
36 |
+
if (!empty($info['api_agreement']))
|
37 |
+
$this->api_agreement = $info['api_agreement'];
|
38 |
+
if (!empty($info['description']))
|
39 |
+
$this->description = $info['description'];
|
40 |
+
}
|
41 |
+
|
42 |
+
public function info()
|
43 |
+
{
|
44 |
+
return array();
|
45 |
+
}
|
46 |
+
|
47 |
+
final public function getId()
|
48 |
+
{
|
49 |
+
return $this->id;
|
50 |
+
}
|
51 |
+
|
52 |
+
public function getName()
|
53 |
+
{
|
54 |
+
return $this->name;
|
55 |
+
}
|
56 |
+
|
57 |
+
public function getDir()
|
58 |
+
{
|
59 |
+
if ($this->dir === null)
|
60 |
+
{
|
61 |
+
$rc = new \ReflectionClass(get_class($this));
|
62 |
+
$this->dir = dirname($rc->getFileName()) . DIRECTORY_SEPARATOR;
|
63 |
+
}
|
64 |
+
return $this->dir;
|
65 |
+
}
|
66 |
+
|
67 |
+
public function isActive()
|
68 |
+
{
|
69 |
+
if ($this->is_active === null)
|
70 |
+
{
|
71 |
+
// @todo
|
72 |
+
$this->is_active = true;
|
73 |
+
}
|
74 |
+
return $this->is_active;
|
75 |
+
}
|
76 |
+
|
77 |
+
final public function isCustom()
|
78 |
+
{
|
79 |
+
if ($this->is_custom === null)
|
80 |
+
{
|
81 |
+
// @todo
|
82 |
+
$this->is_custom = false;
|
83 |
+
}
|
84 |
+
return $this->is_custom;
|
85 |
+
}
|
86 |
+
|
87 |
+
public function isConfigurable()
|
88 |
+
{
|
89 |
+
if ($this->is_configurable === null)
|
90 |
+
{
|
91 |
+
if (is_file($this->getDir() . $this->getId() . 'Config.php'))
|
92 |
+
$this->is_configurable = true;
|
93 |
+
else
|
94 |
+
$this->is_configurable = false;
|
95 |
+
}
|
96 |
+
return $this->is_configurable;
|
97 |
+
}
|
98 |
+
|
99 |
+
public function isFree()
|
100 |
+
{
|
101 |
+
return false;
|
102 |
+
}
|
103 |
+
|
104 |
+
public function renderResults()
|
105 |
+
{
|
106 |
+
|
107 |
+
}
|
108 |
+
|
109 |
+
public function renderSearchResults()
|
110 |
+
{
|
111 |
+
|
112 |
+
}
|
113 |
+
|
114 |
+
public function renderSearchPanel()
|
115 |
+
{
|
116 |
+
|
117 |
+
}
|
118 |
+
|
119 |
+
public function enqueueScripts()
|
120 |
+
{
|
121 |
+
|
122 |
+
}
|
123 |
+
|
124 |
+
public function presavePrepare($data, $post_id)
|
125 |
+
{
|
126 |
+
return $data;
|
127 |
+
}
|
128 |
+
|
129 |
+
public function getConfigInstance()
|
130 |
+
{
|
131 |
+
return ModuleManager::configFactory($this->getId());
|
132 |
+
}
|
133 |
+
|
134 |
+
public function config($opt_name, $default = null)
|
135 |
+
{
|
136 |
+
if (!$this->getConfigInstance()->option_exists($opt_name))
|
137 |
+
return $default;
|
138 |
+
else
|
139 |
+
return $this->getConfigInstance()->option($opt_name);
|
140 |
+
}
|
141 |
+
|
142 |
+
public function render($view_name, $_data = null)
|
143 |
+
{
|
144 |
+
if (is_array($_data))
|
145 |
+
extract($_data, EXTR_PREFIX_SAME, 'data');
|
146 |
+
else
|
147 |
+
$data = $_data;
|
148 |
+
|
149 |
+
include \ContentEgg\PLUGIN_PATH . 'application/modules/' . $this->getId() . '/views/' . TextHelper::clear($view_name) . '.php';
|
150 |
+
}
|
151 |
+
|
152 |
+
public function getJsUri()
|
153 |
+
{
|
154 |
+
return \plugins_url('\application\modules\\' . $this->getId() . '\js', \ContentEgg\PLUGIN_FILE);
|
155 |
+
}
|
156 |
+
|
157 |
+
public function getApiAgreement()
|
158 |
+
{
|
159 |
+
return $this->api_agreement;
|
160 |
+
}
|
161 |
+
|
162 |
+
public function getDescription()
|
163 |
+
{
|
164 |
+
return $this->description;
|
165 |
+
}
|
166 |
+
|
167 |
+
public function isAffiliateParser()
|
168 |
+
{
|
169 |
+
return false;
|
170 |
+
}
|
171 |
+
|
172 |
+
public function isParser()
|
173 |
+
{
|
174 |
+
return false;
|
175 |
+
}
|
176 |
+
}
|
application/components/ModuleApi.php
ADDED
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\components;
|
4 |
+
|
5 |
+
use ContentEgg\application\Plugin;
|
6 |
+
use ContentEgg\application\components\ModuleManager;
|
7 |
+
use ContentEgg\application\helpers\TextHelper;
|
8 |
+
use ContentEgg\application\helpers\InputHelper;
|
9 |
+
|
10 |
+
/**
|
11 |
+
* ModuleApi class file
|
12 |
+
*
|
13 |
+
* @author keywordrush.com <support@keywordrush.com>
|
14 |
+
* @link http://www.keywordrush.com/
|
15 |
+
* @copyright Copyright © 2015 keywordrush.com
|
16 |
+
*/
|
17 |
+
class ModuleApi {
|
18 |
+
|
19 |
+
const API_BASE = '-module-api';
|
20 |
+
|
21 |
+
public function __construct()
|
22 |
+
{
|
23 |
+
\add_action('wp_ajax_content-egg-module-api', array($this, 'addApiEntry'));
|
24 |
+
}
|
25 |
+
|
26 |
+
public static function apiBase()
|
27 |
+
{
|
28 |
+
return Plugin::slug . self::API_BASE;
|
29 |
+
}
|
30 |
+
|
31 |
+
public function addApiEntry()
|
32 |
+
{
|
33 |
+
if (!\current_user_can('edit_posts'))
|
34 |
+
throw new \Exception("Access denied.");
|
35 |
+
|
36 |
+
if (empty($_GET['module']))
|
37 |
+
throw new \Exception("Module is undefined.");
|
38 |
+
|
39 |
+
$module_id = TextHelper::clear($_GET['module']);
|
40 |
+
|
41 |
+
\check_ajax_referer('contentegg-metabox', '_contentegg_nonce');
|
42 |
+
|
43 |
+
$parser = ModuleManager::getInstance()->parserFactory($module_id);
|
44 |
+
|
45 |
+
if (!$parser->isActive())
|
46 |
+
throw new \Exception("Parser module " . $parser->getId() . " is inactive.");
|
47 |
+
|
48 |
+
$query = stripslashes (InputHelper::get('query', ''));
|
49 |
+
$query = json_decode($query, true);
|
50 |
+
|
51 |
+
if (!$query)
|
52 |
+
throw new \Exception("Error: 'query' parameter cannot be empty.");
|
53 |
+
if (empty($query['keyword']) || !($keyword = TextHelper::clear_utf8($query['keyword'])))
|
54 |
+
throw new \Exception("Error: 'keyword' parameter cannot be empty.");
|
55 |
+
|
56 |
+
try
|
57 |
+
{
|
58 |
+
$data = $parser->doRequest($keyword, $query);
|
59 |
+
foreach ($data as $key => $item)
|
60 |
+
{
|
61 |
+
if (!$item->unique_id)
|
62 |
+
throw new \Exception('Item data "unique_id" must be specified.');
|
63 |
+
|
64 |
+
if ($item->description)
|
65 |
+
{
|
66 |
+
$item->description = TextHelper::br2nl($item->description);
|
67 |
+
$item->description = TextHelper::removeExtraBreaks($item->description);
|
68 |
+
}
|
69 |
+
}
|
70 |
+
$this->formatJson(array('results' => $data, 'error' => ''));
|
71 |
+
} catch (\Exception $e)
|
72 |
+
{
|
73 |
+
$this->formatJson(array('error' => $e->getMessage()));
|
74 |
+
}
|
75 |
+
}
|
76 |
+
|
77 |
+
public function formatJson($data)
|
78 |
+
{
|
79 |
+
header('Content-Type: application/json; charset=UTF-8');
|
80 |
+
echo json_encode($data);
|
81 |
+
\wp_die();
|
82 |
+
}
|
83 |
+
|
84 |
+
}
|
application/components/ModuleConfig.php
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\components;
|
4 |
+
|
5 |
+
use ContentEgg\application\Plugin;
|
6 |
+
use ContentEgg\application\admin\PluginAdmin;
|
7 |
+
|
8 |
+
/**
|
9 |
+
* ModuleConfig abstract class file
|
10 |
+
*
|
11 |
+
* @author keywordrush.com <support@keywordrush.com>
|
12 |
+
* @link http://www.keywordrush.com/
|
13 |
+
* @copyright Copyright © 2015 keywordrush.com
|
14 |
+
*/
|
15 |
+
abstract class ModuleConfig extends Config {
|
16 |
+
|
17 |
+
protected $module_id;
|
18 |
+
|
19 |
+
protected function __construct()
|
20 |
+
{
|
21 |
+
$parts = explode('\\', get_class($this));
|
22 |
+
$this->module_id = $parts[count($parts) - 2];
|
23 |
+
parent::__construct();
|
24 |
+
}
|
25 |
+
|
26 |
+
public function getModuleId()
|
27 |
+
{
|
28 |
+
return $this->module_id;
|
29 |
+
}
|
30 |
+
|
31 |
+
public function getModuleName()
|
32 |
+
{
|
33 |
+
return $this->getModuleInstance()->getName();
|
34 |
+
}
|
35 |
+
|
36 |
+
public function getModuleInstance()
|
37 |
+
{
|
38 |
+
return ModuleManager::factory($this->getModuleId());
|
39 |
+
}
|
40 |
+
|
41 |
+
public function page_slug()
|
42 |
+
{
|
43 |
+
return Plugin::slug() . '-' . $this->getModuleId();
|
44 |
+
}
|
45 |
+
|
46 |
+
public function option_name()
|
47 |
+
{
|
48 |
+
return Plugin::slug() . '_' . $this->getModuleId();
|
49 |
+
}
|
50 |
+
|
51 |
+
public function add_admin_menu()
|
52 |
+
{
|
53 |
+
\add_submenu_page(null, $this->getModuleId() . ' ' . __('настройки', 'content-egg') . ' ‹ Content Egg', '', 'manage_options', $this->page_slug, array($this, 'settings_page'));
|
54 |
+
}
|
55 |
+
|
56 |
+
public function settings_page()
|
57 |
+
{
|
58 |
+
PluginAdmin::render('settings', array('page_slug' => $this->page_slug(),
|
59 |
+
'header' => $this->getModuleName() . ' ' . __('настройки', 'content-egg'),
|
60 |
+
'api_agreement' => $this->getModuleInstance()->getApiAgreement(),
|
61 |
+
'description' => $this->getModuleInstance()->getDescription(),
|
62 |
+
));
|
63 |
+
}
|
64 |
+
|
65 |
+
public function options(){
|
66 |
+
return array();
|
67 |
+
}
|
68 |
+
|
69 |
+
}
|
application/components/ModuleManager.php
ADDED
@@ -0,0 +1,225 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\components;
|
4 |
+
|
5 |
+
use \ContentEgg\application\Plugin;
|
6 |
+
use \ContentEgg\application\helpers\TextHelper;
|
7 |
+
|
8 |
+
/**
|
9 |
+
* ModuleManager class file
|
10 |
+
*
|
11 |
+
* @author keywordrush.com <support@keywordrush.com>
|
12 |
+
* @link http://www.keywordrush.com/
|
13 |
+
* @copyright Copyright © 2015 keywordrush.com
|
14 |
+
*/
|
15 |
+
class ModuleManager {
|
16 |
+
|
17 |
+
const MODULES_DIR = 'application/modules';
|
18 |
+
|
19 |
+
private static $modules = array();
|
20 |
+
private static $active_modules = array();
|
21 |
+
private static $configs = array();
|
22 |
+
private static $instance = null;
|
23 |
+
|
24 |
+
public static function getInstance()
|
25 |
+
{
|
26 |
+
if (self::$instance == null)
|
27 |
+
self::$instance = new self;
|
28 |
+
|
29 |
+
return self::$instance;
|
30 |
+
}
|
31 |
+
|
32 |
+
private function __construct()
|
33 |
+
{
|
34 |
+
$this->scanForModules();
|
35 |
+
$this->fillActiveModules();
|
36 |
+
}
|
37 |
+
|
38 |
+
public function adminInit()
|
39 |
+
{
|
40 |
+
\add_action('parent_file', array($this, 'highlightAdminMenu'));
|
41 |
+
foreach ($this->getConfigurableModules() as $module)
|
42 |
+
{
|
43 |
+
$config = self::configFactory($module->getId());
|
44 |
+
$config->adminInit();
|
45 |
+
}
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Highlight the proper submenu item
|
50 |
+
*/
|
51 |
+
public function highlightAdminMenu($parent_file)
|
52 |
+
{
|
53 |
+
global $plugin_page;
|
54 |
+
if (!$parent_file)
|
55 |
+
$plugin_page = Plugin::slug;
|
56 |
+
return $parent_file;
|
57 |
+
}
|
58 |
+
|
59 |
+
private function scanForModules($path = null)
|
60 |
+
{
|
61 |
+
if (!$path)
|
62 |
+
$path = \ContentEgg\PLUGIN_PATH . self::MODULES_DIR . DIRECTORY_SEPARATOR;
|
63 |
+
|
64 |
+
$folder_handle = @opendir($path);
|
65 |
+
if ($folder_handle === false)
|
66 |
+
return;
|
67 |
+
|
68 |
+
$founded_modules = array();
|
69 |
+
while (($m_dir = readdir($folder_handle)) !== false)
|
70 |
+
{
|
71 |
+
if ($m_dir == '.' || $m_dir == '..')
|
72 |
+
continue;
|
73 |
+
$module_path = $path . $m_dir;
|
74 |
+
if (!is_dir($module_path))
|
75 |
+
continue;
|
76 |
+
|
77 |
+
$module_id = $m_dir;
|
78 |
+
$founded_modules[] = TextHelper::clear($module_id);
|
79 |
+
}
|
80 |
+
closedir($folder_handle);
|
81 |
+
$founded_modules = \apply_filters('content_egg_modules', $founded_modules);
|
82 |
+
|
83 |
+
foreach ($founded_modules as $module_id)
|
84 |
+
{
|
85 |
+
// create module
|
86 |
+
self::factory($module_id);
|
87 |
+
}
|
88 |
+
ksort(self::$modules);
|
89 |
+
}
|
90 |
+
|
91 |
+
private function fillActiveModules()
|
92 |
+
{
|
93 |
+
foreach (self::$modules as $module)
|
94 |
+
{
|
95 |
+
if ($module->isActive())
|
96 |
+
self::$active_modules[$module->getId()] = $module;
|
97 |
+
}
|
98 |
+
}
|
99 |
+
|
100 |
+
public static function factory($module_id)
|
101 |
+
{
|
102 |
+
if (!isset(self::$modules[$module_id]))
|
103 |
+
{
|
104 |
+
$module_class = "\\ContentEgg\\application\\modules\\" . $module_id . "\\" . $module_id . 'Module';
|
105 |
+
if (class_exists($module_class, true) === false)
|
106 |
+
{
|
107 |
+
throw new \Exception("Unable to load module class: '{$module_class}'.");
|
108 |
+
}
|
109 |
+
|
110 |
+
$module = new $module_class;
|
111 |
+
|
112 |
+
if (!($module instanceof \ContentEgg\application\components\Module))
|
113 |
+
{
|
114 |
+
throw new \Exception("The module '{$module_id}' must inherit from Module.");
|
115 |
+
}
|
116 |
+
|
117 |
+
if (Plugin::isFree() && !$module->isFree())
|
118 |
+
return false;
|
119 |
+
|
120 |
+
self::$modules[$module_id] = $module;
|
121 |
+
}
|
122 |
+
return self::$modules[$module_id];
|
123 |
+
}
|
124 |
+
|
125 |
+
public static function parserFactory($module_id)
|
126 |
+
{
|
127 |
+
$module = self::factory($module_id);
|
128 |
+
if (!($module instanceof \ContentEgg\application\components\ParserModule))
|
129 |
+
{
|
130 |
+
throw new \Exception("The parser module '{$module_id}' must inherit from ParserModule.");
|
131 |
+
}
|
132 |
+
return $module;
|
133 |
+
}
|
134 |
+
|
135 |
+
public static function configFactory($module_id)
|
136 |
+
{
|
137 |
+
if (!isset(self::$configs[$module_id]))
|
138 |
+
{
|
139 |
+
|
140 |
+
$config_class = "\\ContentEgg\\application\\modules\\" . $module_id . "\\" . $module_id . 'Config';
|
141 |
+
if (class_exists($config_class, true) === false)
|
142 |
+
{
|
143 |
+
throw new \Exception("Unable to load module config class: '{$config_class}'.");
|
144 |
+
}
|
145 |
+
|
146 |
+
$config = $config_class::getInstance();
|
147 |
+
|
148 |
+
if (self::factory($module_id)->isParser())
|
149 |
+
{
|
150 |
+
if (!($config instanceof \ContentEgg\application\components\ParserModuleConfig))
|
151 |
+
{
|
152 |
+
throw new \Exception("The parser module config '{$config_class}' must inherit from ParserModuleConfig.");
|
153 |
+
}
|
154 |
+
} else
|
155 |
+
{
|
156 |
+
if (!($config instanceof \ContentEgg\application\components\ModuleConfig))
|
157 |
+
{
|
158 |
+
throw new \Exception("The module config '{$config_class}' must inherit from ModuleConfig.");
|
159 |
+
}
|
160 |
+
}
|
161 |
+
|
162 |
+
self::$configs[$module_id] = $config;
|
163 |
+
}
|
164 |
+
|
165 |
+
return self::$configs[$module_id];
|
166 |
+
}
|
167 |
+
|
168 |
+
public function getModules($only_active = false)
|
169 |
+
{
|
170 |
+
if ($only_active)
|
171 |
+
return self::$active_modules;
|
172 |
+
else
|
173 |
+
return self::$modules;
|
174 |
+
}
|
175 |
+
|
176 |
+
public function getModulesIdList($only_active = false)
|
177 |
+
{
|
178 |
+
return array_keys($this->getModules($only_active));
|
179 |
+
}
|
180 |
+
|
181 |
+
public function getParserModules($only_active = false)
|
182 |
+
{
|
183 |
+
$modules = $this->getModules($only_active);
|
184 |
+
$parsers = array();
|
185 |
+
foreach ($modules as $module)
|
186 |
+
{
|
187 |
+
if ($module->isParser())
|
188 |
+
$parsers[$module->getId()] = $module;
|
189 |
+
}
|
190 |
+
return $parsers;
|
191 |
+
}
|
192 |
+
|
193 |
+
public function getParserModulesIdList($only_active = false)
|
194 |
+
{
|
195 |
+
return array_keys($this->getParserModules($only_active));
|
196 |
+
}
|
197 |
+
|
198 |
+
public function getConfigurableModules()
|
199 |
+
{
|
200 |
+
$result = array();
|
201 |
+
foreach ($this->getModules() as $module)
|
202 |
+
{
|
203 |
+
if ($module->isConfigurable())
|
204 |
+
$result[] = $module;
|
205 |
+
}
|
206 |
+
return $result;
|
207 |
+
}
|
208 |
+
|
209 |
+
public function moduleExists($module_id)
|
210 |
+
{
|
211 |
+
if (isset(self::$modules[$module_id]))
|
212 |
+
return true;
|
213 |
+
else
|
214 |
+
return false;
|
215 |
+
}
|
216 |
+
|
217 |
+
public function isModuleActive($module_id)
|
218 |
+
{
|
219 |
+
if (isset(self::$active_modules[$module_id]))
|
220 |
+
return true;
|
221 |
+
else
|
222 |
+
return false;
|
223 |
+
}
|
224 |
+
|
225 |
+
}
|
application/components/ModuleTemplateManager.php
ADDED
@@ -0,0 +1,191 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\components;
|
4 |
+
|
5 |
+
use ContentEgg\application\helpers\TextHelper;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* ModuleTemplateManager class file
|
9 |
+
*
|
10 |
+
* @author keywordrush.com <support@keywordrush.com>
|
11 |
+
* @link http://www.keywordrush.com/
|
12 |
+
* @copyright Copyright © 2015 keywordrush.com
|
13 |
+
*/
|
14 |
+
class ModuleTemplateManager {
|
15 |
+
|
16 |
+
const TEMPLATE_DIR = 'templates';
|
17 |
+
const CUSTOM_TEMPLATE_DIR = 'content-egg-templates';
|
18 |
+
const TEMPLATE_PREFIX_DATA = 'data_';
|
19 |
+
|
20 |
+
private $module_id;
|
21 |
+
private $templates_data = null;
|
22 |
+
|
23 |
+
public function __construct($module_id)
|
24 |
+
{
|
25 |
+
$this->module_id = $module_id;
|
26 |
+
}
|
27 |
+
|
28 |
+
public function getTempateDir()
|
29 |
+
{
|
30 |
+
return \ContentEgg\PLUGIN_PATH . 'application/modules/' . $this->module_id . '/' . self::TEMPLATE_DIR;
|
31 |
+
}
|
32 |
+
|
33 |
+
public function getModuleId()
|
34 |
+
{
|
35 |
+
return $this->module_id;
|
36 |
+
}
|
37 |
+
|
38 |
+
public function getCustomTempateDirs()
|
39 |
+
{
|
40 |
+
return array(
|
41 |
+
\get_stylesheet_directory() . '/' . self::CUSTOM_TEMPLATE_DIR . '/' . $this->module_id, //child theme
|
42 |
+
\get_template_directory() . '/' . self::CUSTOM_TEMPLATE_DIR . '/' . $this->module_id, // theme
|
43 |
+
\ABSPATH . 'wp-content/' . self::CUSTOM_TEMPLATE_DIR . '/' . $this->module_id,
|
44 |
+
);
|
45 |
+
}
|
46 |
+
|
47 |
+
public function getTemplatesList($prefix)
|
48 |
+
{
|
49 |
+
$templates = array();
|
50 |
+
foreach ($this->getCustomTempateDirs() as $dir)
|
51 |
+
{
|
52 |
+
$templates = array_merge($templates, $this->scanTemplates($dir, $prefix, true));
|
53 |
+
}
|
54 |
+
$templates = array_merge($templates, $this->scanTemplates($this->getTempateDir(), $prefix, false));
|
55 |
+
$templates = \apply_filters('content_egg_module_templates', $templates, $this->getModuleId());
|
56 |
+
return $templates;
|
57 |
+
}
|
58 |
+
|
59 |
+
private function scanTemplates($path, $prefix, $custom = false)
|
60 |
+
{
|
61 |
+
if ($custom && !is_dir($path))
|
62 |
+
return array();
|
63 |
+
|
64 |
+
$tpl_files = glob($path . '/' . $prefix . '*.php');
|
65 |
+
if (!$tpl_files)
|
66 |
+
return array();
|
67 |
+
|
68 |
+
$templates = array();
|
69 |
+
foreach ($tpl_files as $file)
|
70 |
+
{
|
71 |
+
$template_id = basename($file, '.php');
|
72 |
+
if ($custom)
|
73 |
+
$template_id = 'custom/' . $template_id;
|
74 |
+
|
75 |
+
$data = get_file_data($file, array('name' => 'Name'));
|
76 |
+
if ($data && !empty($data['name']))
|
77 |
+
$templates[$template_id] = strip_tags($data['name']);
|
78 |
+
else
|
79 |
+
$templates[$template_id] = $template_id;
|
80 |
+
if ($custom)
|
81 |
+
$templates[$template_id] .= ' ' . __('[пользовательский]', 'content-egg');
|
82 |
+
}
|
83 |
+
return $templates;
|
84 |
+
}
|
85 |
+
|
86 |
+
public function render($view_name, $_data = null)
|
87 |
+
{
|
88 |
+
if (is_array($_data))
|
89 |
+
extract($_data, EXTR_PREFIX_SAME, 'data');
|
90 |
+
else
|
91 |
+
$data = $_data;
|
92 |
+
|
93 |
+
$file = $this->getViewPath($view_name);
|
94 |
+
if (!$file)
|
95 |
+
return '';
|
96 |
+
|
97 |
+
ob_start();
|
98 |
+
ob_implicit_flush(false);
|
99 |
+
include $file;
|
100 |
+
$res = ob_get_clean();
|
101 |
+
return $res;
|
102 |
+
}
|
103 |
+
|
104 |
+
private function getViewPath($view_name)
|
105 |
+
{
|
106 |
+
$view_name = str_replace('.', '', $view_name);
|
107 |
+
if (substr($view_name, 0, 7) == 'custom/')
|
108 |
+
{
|
109 |
+
$view_name = substr($view_name, 7);
|
110 |
+
foreach ($this->getCustomTempateDirs() as $custom_dir)
|
111 |
+
{
|
112 |
+
$tpl_path = $custom_dir;
|
113 |
+
$file = $tpl_path . DIRECTORY_SEPARATOR . TextHelper::clear($view_name) . '.php';
|
114 |
+
if (is_file($file) && is_readable($file))
|
115 |
+
return $file;
|
116 |
+
}
|
117 |
+
|
118 |
+
return false;
|
119 |
+
} else
|
120 |
+
{
|
121 |
+
$tpl_path = $this->getTempateDir();
|
122 |
+
$file = $tpl_path . DIRECTORY_SEPARATOR . TextHelper::clear($view_name) . '.php';
|
123 |
+
if (is_file($file) && is_readable($file))
|
124 |
+
return $file;
|
125 |
+
else
|
126 |
+
return false;
|
127 |
+
}
|
128 |
+
}
|
129 |
+
|
130 |
+
public function getDataTemplatesList($short_mode = false)
|
131 |
+
{
|
132 |
+
if ($this->templates_data === null)
|
133 |
+
{
|
134 |
+
$this->templates_data = self::getTemplatesList(self::TEMPLATE_PREFIX_DATA);
|
135 |
+
}
|
136 |
+
|
137 |
+
if ($short_mode)
|
138 |
+
{
|
139 |
+
$list = array();
|
140 |
+
foreach ($this->templates_data as $id => $name)
|
141 |
+
{
|
142 |
+
$custom = '';
|
143 |
+
if (self::isCunstomTemplate($id))
|
144 |
+
{
|
145 |
+
$parts = explode('/', $id);
|
146 |
+
$custom = 'custom/';
|
147 |
+
$id = $parts[1];
|
148 |
+
}
|
149 |
+
|
150 |
+
// del 'data_' prefix
|
151 |
+
$list[$custom . substr($id, 5)] = $name;
|
152 |
+
}
|
153 |
+
return $list;
|
154 |
+
}
|
155 |
+
|
156 |
+
return $this->templates_data;
|
157 |
+
}
|
158 |
+
|
159 |
+
public static function getFullTemplateId($short_id)
|
160 |
+
{
|
161 |
+
$custom = '';
|
162 |
+
if (self::isCunstomTemplate($short_id))
|
163 |
+
{
|
164 |
+
$parts = explode('/', $short_id);
|
165 |
+
$custom = 'custom/';
|
166 |
+
$id = $parts[1];
|
167 |
+
} else
|
168 |
+
$id = $short_id;
|
169 |
+
|
170 |
+
// check _data prefix
|
171 |
+
if (substr($id, 0, 5) !== self::TEMPLATE_PREFIX_DATA)
|
172 |
+
{
|
173 |
+
$id = self::TEMPLATE_PREFIX_DATA . $id;
|
174 |
+
}
|
175 |
+
return $custom . $id;
|
176 |
+
}
|
177 |
+
|
178 |
+
public static function isCunstomTemplate($template_id)
|
179 |
+
{
|
180 |
+
if (substr($template_id, 0, 7) == 'custom/')
|
181 |
+
return true;
|
182 |
+
else
|
183 |
+
return false;
|
184 |
+
}
|
185 |
+
|
186 |
+
public function isDataTemplateExists($tpl)
|
187 |
+
{
|
188 |
+
return array_key_exists($tpl, $this->getDataTemplatesList());
|
189 |
+
}
|
190 |
+
|
191 |
+
}
|
application/components/ParserModule.php
ADDED
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\components;
|
4 |
+
|
5 |
+
use ContentEgg\application\helpers\ImageHelper;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* ParserModule abstract class file
|
9 |
+
*
|
10 |
+
* @author keywordrush.com <support@keywordrush.com>
|
11 |
+
* @link http://www.keywordrush.com/
|
12 |
+
* @copyright Copyright © 2015 keywordrush.com
|
13 |
+
*/
|
14 |
+
abstract class ParserModule extends Module {
|
15 |
+
|
16 |
+
abstract public function doRequest($keyword, $query_params = array(), $is_autoupdate = false);
|
17 |
+
|
18 |
+
public function isActive()
|
19 |
+
{
|
20 |
+
if ($this->is_active === null)
|
21 |
+
{
|
22 |
+
if ($this->getConfigInstance()->option('is_active'))
|
23 |
+
$this->is_active = true;
|
24 |
+
else
|
25 |
+
$this->is_active = false;
|
26 |
+
}
|
27 |
+
return $this->is_active;
|
28 |
+
}
|
29 |
+
|
30 |
+
final public function isParser()
|
31 |
+
{
|
32 |
+
return true;
|
33 |
+
}
|
34 |
+
|
35 |
+
public function presavePrepare($data, $post_id)
|
36 |
+
{
|
37 |
+
global $post;
|
38 |
+
|
39 |
+
$data = parent::presavePrepare($data, $post_id);
|
40 |
+
|
41 |
+
// do not save images for revisions
|
42 |
+
if ($post && wp_is_post_revision($post_id))
|
43 |
+
return $data;
|
44 |
+
|
45 |
+
foreach ($data as $key => $item)
|
46 |
+
{
|
47 |
+
// save img
|
48 |
+
if ($this->config('save_img') && !wp_is_post_revision($post_id))
|
49 |
+
{
|
50 |
+
// check old_data also. need for fix behavior with "preview changes" button
|
51 |
+
if ($item['img'] && empty($item['img_file']) && empty($old_data[$key]['img_file']))
|
52 |
+
{
|
53 |
+
$local_img_name = ImageHelper::saveImgLocaly($item['img'], $item['title']);
|
54 |
+
if ($local_img_name)
|
55 |
+
{
|
56 |
+
$uploads = \wp_upload_dir();
|
57 |
+
$item['img'] = $uploads['url'] . '/' . $local_img_name;
|
58 |
+
$item['img_file'] = ltrim(trailingslashit($uploads['subdir']), '\/') . $local_img_name;
|
59 |
+
}
|
60 |
+
$data[$key] = $item;
|
61 |
+
}
|
62 |
+
}
|
63 |
+
}
|
64 |
+
return $data;
|
65 |
+
}
|
66 |
+
|
67 |
+
public static function getFullImgPath($img_path)
|
68 |
+
{
|
69 |
+
$uploads = \wp_upload_dir();
|
70 |
+
return trailingslashit($uploads['basedir']) . $img_path;
|
71 |
+
}
|
72 |
+
|
73 |
+
public function defaultTemplateName()
|
74 |
+
{
|
75 |
+
return 'data_simple';
|
76 |
+
}
|
77 |
+
|
78 |
+
}
|
application/components/ParserModuleConfig.php
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\components;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* ParserModuleConfig abstract class file
|
7 |
+
*
|
8 |
+
* @author keywordrush.com <support@keywordrush.com>
|
9 |
+
* @link http://www.keywordrush.com/
|
10 |
+
* @copyright Copyright © 2015 keywordrush.com
|
11 |
+
*/
|
12 |
+
abstract class ParserModuleConfig extends ModuleConfig {
|
13 |
+
|
14 |
+
public function options()
|
15 |
+
{
|
16 |
+
$tpl_manager = new ModuleTemplateManager($this->module_id);
|
17 |
+
$options = array(
|
18 |
+
'is_active' => array(
|
19 |
+
'title' => __('Включить модуль', 'content-egg'),
|
20 |
+
'description' => '',
|
21 |
+
'callback' => array($this, 'render_checkbox'),
|
22 |
+
'default' => 0,
|
23 |
+
'section' => 'default',
|
24 |
+
),
|
25 |
+
'embed_at' => array(
|
26 |
+
'title' => __('Добавить', 'content-egg'),
|
27 |
+
'description' => __('Куда добавить контент этого модуля? Шорткоды работают всегда в независимости от настройки.', 'content-egg'),
|
28 |
+
'callback' => array($this, 'render_dropdown'),
|
29 |
+
'dropdown_options' => array(
|
30 |
+
'post_bottom' => __('В конец поста', 'content-egg'),
|
31 |
+
'post_top' => __('В начало поста', 'content-egg'),
|
32 |
+
'shortcode' => __('Только шорткоды', 'content-egg'),
|
33 |
+
),
|
34 |
+
'default' => 'post_bottom',
|
35 |
+
'section' => 'default',
|
36 |
+
),
|
37 |
+
'template' => array(
|
38 |
+
'title' => __('Шаблон', 'content-egg'),
|
39 |
+
'description' => __('Шаблон по-умолчанию.', 'content-egg'),
|
40 |
+
'callback' => array($this, 'render_dropdown'),
|
41 |
+
'dropdown_options' => $tpl_manager->getDataTemplatesList(),
|
42 |
+
'default' => $this->getModuleInstance()->defaultTemplateName(),
|
43 |
+
'section' => 'default',
|
44 |
+
),
|
45 |
+
'tpl_title' => array(
|
46 |
+
'title' => __('Заголовок', 'content-egg'),
|
47 |
+
'description' => __('Шаблоны могут использовать заголовок при выводе данных.', 'content-egg'),
|
48 |
+
'callback' => array($this, 'render_input'),
|
49 |
+
'default' => '',
|
50 |
+
'validator' => array(
|
51 |
+
'trim',
|
52 |
+
),
|
53 |
+
'section' => 'default',
|
54 |
+
),
|
55 |
+
'featured_image' => array(
|
56 |
+
'title' => 'Featured image',
|
57 |
+
'description' => __('Автоматически установить Featured image для поста.', 'content-egg'),
|
58 |
+
'callback' => array($this, 'render_dropdown'),
|
59 |
+
'dropdown_options' => array(
|
60 |
+
'' => __('Не устанавливать', 'content-egg'),
|
61 |
+
'first' => __('Первый элемент', 'content-egg'),
|
62 |
+
'second' => __('Второй элемент', 'content-egg'),
|
63 |
+
'rand' => __('Случайный элемент', 'content-egg'),
|
64 |
+
'last' => __('Последний элемент', 'content-egg'),
|
65 |
+
),
|
66 |
+
'default' => '',
|
67 |
+
'section' => 'default',
|
68 |
+
),
|
69 |
+
);
|
70 |
+
|
71 |
+
return
|
72 |
+
array_merge(
|
73 |
+
parent::options(), $options
|
74 |
+
);
|
75 |
+
}
|
76 |
+
|
77 |
+
}
|
application/components/index.php
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<?php // Silence is golden.
|
application/helpers/ArrayHelper.php
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\helpers;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* ArrayHelper class file
|
7 |
+
*
|
8 |
+
* @author keywordrush.com <support@keywordrush.com>
|
9 |
+
* @link http://www.keywordrush.com/
|
10 |
+
* @copyright Copyright © 2015 keywordrush.com
|
11 |
+
*
|
12 |
+
*/
|
13 |
+
class ArrayHelper {
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @link: http://php.net/manual/ru/function.array-diff-assoc.php#111675
|
17 |
+
*/
|
18 |
+
public static function array_diff_assoc_recursive($array1, $array2)
|
19 |
+
{
|
20 |
+
$difference = array();
|
21 |
+
foreach ($array1 as $key => $value)
|
22 |
+
{
|
23 |
+
if (is_array($value))
|
24 |
+
{
|
25 |
+
if (!isset($array2[$key]) || !is_array($array2[$key]))
|
26 |
+
{
|
27 |
+
$difference[$key] = $value;
|
28 |
+
} else
|
29 |
+
{
|
30 |
+
$new_diff = array_diff_assoc_recursive($value, $array2[$key]);
|
31 |
+
if (!empty($new_diff))
|
32 |
+
$difference[$key] = $new_diff;
|
33 |
+
}
|
34 |
+
} else if (!array_key_exists($key, $array2) || $array2[$key] !== $value)
|
35 |
+
{
|
36 |
+
$difference[$key] = $value;
|
37 |
+
}
|
38 |
+
}
|
39 |
+
return $difference;
|
40 |
+
}
|
41 |
+
|
42 |
+
}
|
application/helpers/FormValidator.php
ADDED
@@ -0,0 +1,560 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace ContentEgg\application\helpers;
|
3 |
+
|
4 |
+
/**
|
5 |
+
* FormValidator class file
|
6 |
+
*
|
7 |
+
* Modified version of: CodeIgniter CI_Form_validation
|
8 |
+
*
|
9 |
+
* @author keywordrush.com <support@keywordrush.com>
|
10 |
+
* @link http://www.keywordrush.com/
|
11 |
+
* @copyright Copyright © 2014 keywordrush.com
|
12 |
+
*
|
13 |
+
*
|
14 |
+
*/
|
15 |
+
|
16 |
+
/**
|
17 |
+
* CodeIgniter
|
18 |
+
*
|
19 |
+
* An open source application development framework for PHP 5.2.4 or newer
|
20 |
+
*
|
21 |
+
* NOTICE OF LICENSE
|
22 |
+
*
|
23 |
+
* Licensed under the Open Software License version 3.0
|
24 |
+
*
|
25 |
+
* This source file is subject to the Open Software License (OSL 3.0) that is
|
26 |
+
* bundled with this package in the files license.txt / license.rst. It is
|
27 |
+
* also available through the world wide web at this URL:
|
28 |
+
* http://opensource.org/licenses/OSL-3.0
|
29 |
+
* If you did not receive a copy of the license and are unable to obtain it
|
30 |
+
* through the world wide web, please send an email to
|
31 |
+
* licensing@ellislab.com so we can send you a copy immediately.
|
32 |
+
*
|
33 |
+
* @package CodeIgniter
|
34 |
+
* @author EllisLab Dev Team
|
35 |
+
* @copyright Copyright (c) 2008 - 2013, EllisLab, Inc. (http://ellislab.com/)
|
36 |
+
* @license http://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
|
37 |
+
* @link http://codeigniter.com
|
38 |
+
* @since Version 1.0
|
39 |
+
* @filesource
|
40 |
+
*/
|
41 |
+
class FormValidator {
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Required
|
45 |
+
*
|
46 |
+
* @param string
|
47 |
+
* @return bool
|
48 |
+
*/
|
49 |
+
public static function required($str)
|
50 |
+
{
|
51 |
+
return is_array($str) ? (bool) count($str) : (trim($str) !== '');
|
52 |
+
}
|
53 |
+
|
54 |
+
// --------------------------------------------------------------------
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Performs a Regular Expression match test.
|
58 |
+
*
|
59 |
+
* @param string
|
60 |
+
* @param string regex
|
61 |
+
* @return bool
|
62 |
+
*/
|
63 |
+
public static function regex_match($str, $regex)
|
64 |
+
{
|
65 |
+
return (bool) preg_match($regex, $str);
|
66 |
+
}
|
67 |
+
|
68 |
+
// --------------------------------------------------------------------
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Match one field to another
|
72 |
+
*
|
73 |
+
* @param string $str string to compare against
|
74 |
+
* @param string $field
|
75 |
+
* @return bool
|
76 |
+
*/
|
77 |
+
public static function matches($str, $field)
|
78 |
+
{
|
79 |
+
return isset($this->_field_data[$field], $this->_field_data[$field]['postdata']) ? ($str === $this->_field_data[$field]['postdata']) : FALSE;
|
80 |
+
}
|
81 |
+
|
82 |
+
// --------------------------------------------------------------------
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Differs from another field
|
86 |
+
*
|
87 |
+
* @param string
|
88 |
+
* @param string field
|
89 |
+
* @return bool
|
90 |
+
*/
|
91 |
+
public static function differs($str, $field)
|
92 |
+
{
|
93 |
+
return !(isset($this->_field_data[$field]) && $this->_field_data[$field]['postdata'] === $str);
|
94 |
+
}
|
95 |
+
|
96 |
+
// --------------------------------------------------------------------
|
97 |
+
|
98 |
+
/**
|
99 |
+
* Minimum Length
|
100 |
+
*
|
101 |
+
* @param string
|
102 |
+
* @param string
|
103 |
+
* @return bool
|
104 |
+
*/
|
105 |
+
public static function min_length($str, $val)
|
106 |
+
{
|
107 |
+
if (!is_numeric($val))
|
108 |
+
{
|
109 |
+
return FALSE;
|
110 |
+
} else
|
111 |
+
{
|
112 |
+
$val = (int) $val;
|
113 |
+
}
|
114 |
+
|
115 |
+
return (MB_ENABLED === TRUE) ? ($val <= mb_strlen($str)) : ($val <= strlen($str));
|
116 |
+
}
|
117 |
+
|
118 |
+
// --------------------------------------------------------------------
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Max Length
|
122 |
+
*
|
123 |
+
* @param string
|
124 |
+
* @param string
|
125 |
+
* @return bool
|
126 |
+
*/
|
127 |
+
public static function max_length($str, $val)
|
128 |
+
{
|
129 |
+
if (!is_numeric($val))
|
130 |
+
{
|
131 |
+
return FALSE;
|
132 |
+
} else
|
133 |
+
{
|
134 |
+
$val = (int) $val;
|
135 |
+
}
|
136 |
+
|
137 |
+
return (MB_ENABLED === TRUE) ? ($val >= mb_strlen($str)) : ($val >= strlen($str));
|
138 |
+
}
|
139 |
+
|
140 |
+
// --------------------------------------------------------------------
|
141 |
+
|
142 |
+
/**
|
143 |
+
* Exact Length
|
144 |
+
*
|
145 |
+
* @param string
|
146 |
+
* @param string
|
147 |
+
* @return bool
|
148 |
+
*/
|
149 |
+
public static function exact_length($str, $val)
|
150 |
+
{
|
151 |
+
if (!is_numeric($val))
|
152 |
+
{
|
153 |
+
return FALSE;
|
154 |
+
} else
|
155 |
+
{
|
156 |
+
$val = (int) $val;
|
157 |
+
}
|
158 |
+
|
159 |
+
return (MB_ENABLED === TRUE) ? (mb_strlen($str) === $val) : (strlen($str) === $val);
|
160 |
+
}
|
161 |
+
|
162 |
+
// --------------------------------------------------------------------
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Valid URL
|
166 |
+
*
|
167 |
+
* @param string $str
|
168 |
+
* @return bool
|
169 |
+
*/
|
170 |
+
public static function valid_url($str)
|
171 |
+
{
|
172 |
+
if (empty($str))
|
173 |
+
return FALSE;
|
174 |
+
|
175 |
+
$pattern='/^(http|https):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)/i';
|
176 |
+
|
177 |
+
if (is_string($str) && strlen($str) < 2000)
|
178 |
+
{
|
179 |
+
if (preg_match($pattern, $str))
|
180 |
+
return true;
|
181 |
+
}
|
182 |
+
return false;
|
183 |
+
|
184 |
+
/*
|
185 |
+
if (empty($str))
|
186 |
+
{
|
187 |
+
return FALSE;
|
188 |
+
} elseif (preg_match('/^(?:([^:]*)\:)?\/\/(.+)$/', $str, $matches))
|
189 |
+
{
|
190 |
+
if (empty($matches[2]))
|
191 |
+
{
|
192 |
+
return FALSE;
|
193 |
+
} elseif (!in_array($matches[1], array('http', 'https'), TRUE))
|
194 |
+
{
|
195 |
+
return FALSE;
|
196 |
+
}
|
197 |
+
|
198 |
+
$str = $matches[2];
|
199 |
+
}
|
200 |
+
|
201 |
+
$str = 'http://' . $str;
|
202 |
+
|
203 |
+
// There's a bug affecting PHP 5.2.13, 5.3.2 that considers the
|
204 |
+
// underscore to be a valid hostname character instead of a dash.
|
205 |
+
// Reference: https://bugs.php.net/bug.php?id=51192
|
206 |
+
if (version_compare(PHP_VERSION, '5.2.13', '==') === 0 OR version_compare(PHP_VERSION, '5.3.2', '==') === 0)
|
207 |
+
{
|
208 |
+
sscanf($str, 'http://%[^/]', $host);
|
209 |
+
$str = substr_replace($str, strtr($host, array('_' => '-', '-' => '_')), 7, strlen($host));
|
210 |
+
}
|
211 |
+
|
212 |
+
return (filter_var($str, FILTER_VALIDATE_URL) !== FALSE);
|
213 |
+
*
|
214 |
+
*/
|
215 |
+
}
|
216 |
+
|
217 |
+
// --------------------------------------------------------------------
|
218 |
+
|
219 |
+
/**
|
220 |
+
* Valid Email
|
221 |
+
*
|
222 |
+
* @param string
|
223 |
+
* @return bool
|
224 |
+
*/
|
225 |
+
public static function valid_email($str)
|
226 |
+
{
|
227 |
+
return (bool) filter_var($str, FILTER_VALIDATE_EMAIL);
|
228 |
+
}
|
229 |
+
|
230 |
+
// --------------------------------------------------------------------
|
231 |
+
|
232 |
+
/**
|
233 |
+
* Valid Emails
|
234 |
+
*
|
235 |
+
* @param string
|
236 |
+
* @return bool
|
237 |
+
*/
|
238 |
+
public static function valid_emails($str)
|
239 |
+
{
|
240 |
+
if (strpos($str, ',') === FALSE)
|
241 |
+
{
|
242 |
+
return $this->valid_email(trim($str));
|
243 |
+
}
|
244 |
+
|
245 |
+
foreach (explode(',', $str) as $email)
|
246 |
+
{
|
247 |
+
if (trim($email) !== '' && $this->valid_email(trim($email)) === FALSE)
|
248 |
+
{
|
249 |
+
return FALSE;
|
250 |
+
}
|
251 |
+
}
|
252 |
+
|
253 |
+
return TRUE;
|
254 |
+
}
|
255 |
+
|
256 |
+
// --------------------------------------------------------------------
|
257 |
+
|
258 |
+
/**
|
259 |
+
* Validate IP Address
|
260 |
+
*
|
261 |
+
* @param string
|
262 |
+
* @param string 'ipv4' or 'ipv6' to validate a specific IP format
|
263 |
+
* @return bool
|
264 |
+
*/
|
265 |
+
public static function valid_ip($ip, $which = '')
|
266 |
+
{
|
267 |
+
return $this->CI->input->valid_ip($ip, $which);
|
268 |
+
}
|
269 |
+
|
270 |
+
// --------------------------------------------------------------------
|
271 |
+
|
272 |
+
/**
|
273 |
+
* Alpha
|
274 |
+
*
|
275 |
+
* @param string
|
276 |
+
* @return bool
|
277 |
+
*/
|
278 |
+
public static function alpha($str)
|
279 |
+
{
|
280 |
+
return ctype_alpha($str);
|
281 |
+
}
|
282 |
+
|
283 |
+
// --------------------------------------------------------------------
|
284 |
+
|
285 |
+
/**
|
286 |
+
* Alpha-numeric
|
287 |
+
*
|
288 |
+
* @param string
|
289 |
+
* @return bool
|
290 |
+
*/
|
291 |
+
public static function alpha_numeric($str)
|
292 |
+
{
|
293 |
+
return ctype_alnum((string) $str);
|
294 |
+
}
|
295 |
+
|
296 |
+
// --------------------------------------------------------------------
|
297 |
+
|
298 |
+
/**
|
299 |
+
* Alpha-numeric w/ spaces
|
300 |
+
*
|
301 |
+
* @param string
|
302 |
+
* @return bool
|
303 |
+
*/
|
304 |
+
public static function alpha_numeric_spaces($str)
|
305 |
+
{
|
306 |
+
return (bool) preg_match('/^[A-Z0-9 ]+$/i', $str);
|
307 |
+
}
|
308 |
+
|
309 |
+
// --------------------------------------------------------------------
|
310 |
+
|
311 |
+
/**
|
312 |
+
* Alpha-numeric with underscores and dashes
|
313 |
+
*
|
314 |
+
* @param string
|
315 |
+
* @return bool
|
316 |
+
*/
|
317 |
+
public static function alpha_dash($str)
|
318 |
+
{
|
319 |
+
return (bool) preg_match('/^[a-z0-9_-]+$/i', $str);
|
320 |
+
}
|
321 |
+
|
322 |
+
// --------------------------------------------------------------------
|
323 |
+
|
324 |
+
/**
|
325 |
+
* Numeric
|
326 |
+
*
|
327 |
+
* @param string
|
328 |
+
* @return bool
|
329 |
+
*/
|
330 |
+
public static function numeric($str)
|
331 |
+
{
|
332 |
+
return (bool) preg_match('/^[\-+]?[0-9]*\.?[0-9]+$/', $str);
|
333 |
+
}
|
334 |
+
|
335 |
+
// --------------------------------------------------------------------
|
336 |
+
|
337 |
+
/**
|
338 |
+
* Integer
|
339 |
+
*
|
340 |
+
* @param string
|
341 |
+
* @return bool
|
342 |
+
*/
|
343 |
+
public static function integer($str)
|
344 |
+
{
|
345 |
+
return (bool) preg_match('/^[\-+]?[0-9]+$/', $str);
|
346 |
+
}
|
347 |
+
|
348 |
+
// --------------------------------------------------------------------
|
349 |
+
|
350 |
+
/**
|
351 |
+
* Decimal number
|
352 |
+
*
|
353 |
+
* @param string
|
354 |
+
* @return bool
|
355 |
+
*/
|
356 |
+
public static function decimal($str)
|
357 |
+
{
|
358 |
+
return (bool) preg_match('/^[\-+]?[0-9]+\.[0-9]+$/', $str);
|
359 |
+
}
|
360 |
+
|
361 |
+
// --------------------------------------------------------------------
|
362 |
+
|
363 |
+
/**
|
364 |
+
* Greater than
|
365 |
+
*
|
366 |
+
* @param string
|
367 |
+
* @param int
|
368 |
+
* @return bool
|
369 |
+
*/
|
370 |
+
public static function greater_than($str, $min)
|
371 |
+
{
|
372 |
+
return is_numeric($str) ? ($str > $min) : FALSE;
|
373 |
+
}
|
374 |
+
|
375 |
+
// --------------------------------------------------------------------
|
376 |
+
|
377 |
+
/**
|
378 |
+
* Equal to or Greater than
|
379 |
+
*
|
380 |
+
* @param string
|
381 |
+
* @param int
|
382 |
+
* @return bool
|
383 |
+
*/
|
384 |
+
public static function greater_than_equal_to($str, $min)
|
385 |
+
{
|
386 |
+
return is_numeric($str) ? ($str >= $min) : FALSE;
|
387 |
+
}
|
388 |
+
|
389 |
+
// --------------------------------------------------------------------
|
390 |
+
|
391 |
+
/**
|
392 |
+
* Less than
|
393 |
+
*
|
394 |
+
* @param string
|
395 |
+
* @param int
|
396 |
+
* @return bool
|
397 |
+
*/
|
398 |
+
public static function less_than($str, $max)
|
399 |
+
{
|
400 |
+
return is_numeric($str) ? ($str < $max) : FALSE;
|
401 |
+
}
|
402 |
+
|
403 |
+
// --------------------------------------------------------------------
|
404 |
+
|
405 |
+
/**
|
406 |
+
* Equal to or Less than
|
407 |
+
*
|
408 |
+
* @param string
|
409 |
+
* @param int
|
410 |
+
* @return bool
|
411 |
+
*/
|
412 |
+
public static function less_than_equal_to($str, $max)
|
413 |
+
{
|
414 |
+
return is_numeric($str) ? ($str <= $max) : FALSE;
|
415 |
+
}
|
416 |
+
|
417 |
+
// --------------------------------------------------------------------
|
418 |
+
|
419 |
+
/**
|
420 |
+
* Is a Natural number (0,1,2,3, etc.)
|
421 |
+
*
|
422 |
+
* @param string
|
423 |
+
* @return bool
|
424 |
+
*/
|
425 |
+
public static function is_natural($str)
|
426 |
+
{
|
427 |
+
return ctype_digit((string) $str);
|
428 |
+
}
|
429 |
+
|
430 |
+
// --------------------------------------------------------------------
|
431 |
+
|
432 |
+
/**
|
433 |
+
* Is a Natural number, but not a zero (1,2,3, etc.)
|
434 |
+
*
|
435 |
+
* @param string
|
436 |
+
* @return bool
|
437 |
+
*/
|
438 |
+
public static function is_natural_no_zero($str)
|
439 |
+
{
|
440 |
+
return ($str != 0 && ctype_digit((string) $str));
|
441 |
+
}
|
442 |
+
|
443 |
+
// --------------------------------------------------------------------
|
444 |
+
|
445 |
+
/**
|
446 |
+
* Valid Base64
|
447 |
+
*
|
448 |
+
* Tests a string for characters outside of the Base64 alphabet
|
449 |
+
* as defined by RFC 2045 http://www.faqs.org/rfcs/rfc2045
|
450 |
+
*
|
451 |
+
* @param string
|
452 |
+
* @return bool
|
453 |
+
*/
|
454 |
+
public static function valid_base64($str)
|
455 |
+
{
|
456 |
+
return (base64_encode(base64_decode($str)) === $str);
|
457 |
+
}
|
458 |
+
|
459 |
+
// --------------------------------------------------------------------
|
460 |
+
|
461 |
+
/**
|
462 |
+
* Prep data for form
|
463 |
+
*
|
464 |
+
* This function allows HTML to be safely shown in a form.
|
465 |
+
* Special characters are converted.
|
466 |
+
*
|
467 |
+
* @param string
|
468 |
+
* @return string
|
469 |
+
*/
|
470 |
+
public static function prep_for_form($data = '')
|
471 |
+
{
|
472 |
+
if ($this->_safe_form_data === FALSE OR empty($data))
|
473 |
+
{
|
474 |
+
return $data;
|
475 |
+
}
|
476 |
+
|
477 |
+
if (is_array($data))
|
478 |
+
{
|
479 |
+
foreach ($data as $key => $val)
|
480 |
+
{
|
481 |
+
$data[$key] = $this->prep_for_form($val);
|
482 |
+
}
|
483 |
+
|
484 |
+
return $data;
|
485 |
+
}
|
486 |
+
|
487 |
+
return str_replace(array("'", '"', '<', '>'), array(''', '"', '<', '>'), stripslashes($data));
|
488 |
+
}
|
489 |
+
|
490 |
+
// --------------------------------------------------------------------
|
491 |
+
|
492 |
+
/**
|
493 |
+
* Prep URL
|
494 |
+
*
|
495 |
+
* @param string
|
496 |
+
* @return string
|
497 |
+
*/
|
498 |
+
public static function prep_url($str = '')
|
499 |
+
{
|
500 |
+
if ($str === 'http://' OR $str === '')
|
501 |
+
{
|
502 |
+
return '';
|
503 |
+
}
|
504 |
+
|
505 |
+
if (strpos($str, 'http://') !== 0 && strpos($str, 'https://') !== 0)
|
506 |
+
{
|
507 |
+
return 'http://' . $str;
|
508 |
+
}
|
509 |
+
|
510 |
+
return $str;
|
511 |
+
}
|
512 |
+
|
513 |
+
// --------------------------------------------------------------------
|
514 |
+
|
515 |
+
/**
|
516 |
+
* Strip Image Tags
|
517 |
+
*
|
518 |
+
* @param string
|
519 |
+
* @return string
|
520 |
+
*/
|
521 |
+
public static function strip_image_tags($str)
|
522 |
+
{
|
523 |
+
return $this->CI->security->strip_image_tags($str);
|
524 |
+
}
|
525 |
+
|
526 |
+
// --------------------------------------------------------------------
|
527 |
+
|
528 |
+
/**
|
529 |
+
* XSS Clean
|
530 |
+
*
|
531 |
+
* @param string
|
532 |
+
* @return string
|
533 |
+
*/
|
534 |
+
public static function xss_clean($str)
|
535 |
+
{
|
536 |
+
return $this->CI->security->xss_clean($str);
|
537 |
+
}
|
538 |
+
|
539 |
+
// --------------------------------------------------------------------
|
540 |
+
|
541 |
+
/**
|
542 |
+
* Convert PHP tags to entities
|
543 |
+
*
|
544 |
+
* @param string
|
545 |
+
* @return string
|
546 |
+
*/
|
547 |
+
public static function encode_php_tags($str)
|
548 |
+
{
|
549 |
+
return str_replace(array('<?', '?>'), array('<?', '?>'), $str);
|
550 |
+
}
|
551 |
+
|
552 |
+
}
|
553 |
+
|
554 |
+
if (!function_exists('affegg_intval_bool'))
|
555 |
+
{
|
556 |
+
function affegg_intval_bool($str)
|
557 |
+
{
|
558 |
+
return intval((bool) $str);
|
559 |
+
}
|
560 |
+
}
|
application/helpers/ImageHelper.php
ADDED
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\helpers;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* ImageHelper class file
|
7 |
+
*
|
8 |
+
* @author keywordrush.com <support@keywordrush.com>
|
9 |
+
* @link http://www.keywordrush.com/
|
10 |
+
* @copyright Copyright © 2015 keywordrush.com
|
11 |
+
*
|
12 |
+
*/
|
13 |
+
class ImageHelper {
|
14 |
+
|
15 |
+
public static function saveImgLocaly($img_uri, $title = '', $check_image_type = true)
|
16 |
+
{
|
17 |
+
if (!defined('FS_CHMOD_FILE'))
|
18 |
+
define('FS_CHMOD_FILE', ( fileperms(ABSPATH . 'index.php') & 0777 | 0644));
|
19 |
+
|
20 |
+
$uploads = \wp_upload_dir();
|
21 |
+
|
22 |
+
$ext = pathinfo(basename($img_uri), PATHINFO_EXTENSION);
|
23 |
+
$newfilename = TextHelper::truncate($title);
|
24 |
+
$newfilename = TextHelper::rus2latin($newfilename);
|
25 |
+
$newfilename = preg_replace('/[^a-zA-Z0-9\-]/', '', $newfilename);
|
26 |
+
$newfilename = strtolower($newfilename);
|
27 |
+
if (!$newfilename)
|
28 |
+
$newfilename = time();
|
29 |
+
|
30 |
+
$response = \wp_remote_get($img_uri, array('timeout' => 3, 'redirection' => 1));
|
31 |
+
if (\is_wp_error($response) || (int) \wp_remote_retrieve_response_code($response) !== 200)
|
32 |
+
return false;
|
33 |
+
|
34 |
+
if (!$ext)
|
35 |
+
{
|
36 |
+
$headers = \wp_remote_retrieve_headers($response);
|
37 |
+
if (empty($headers['content-type']))
|
38 |
+
return false;
|
39 |
+
$types = array_search($headers['content-type'], \wp_get_mime_types());
|
40 |
+
if (!$types)
|
41 |
+
return false;
|
42 |
+
|
43 |
+
$exts = explode('|', $types);
|
44 |
+
$ext = $exts[0];
|
45 |
+
}
|
46 |
+
|
47 |
+
$newfilename .= '.' . $ext;
|
48 |
+
$newfilename = \wp_unique_filename($uploads['path'], $newfilename);
|
49 |
+
|
50 |
+
if ($check_image_type)
|
51 |
+
{
|
52 |
+
$filetype = \wp_check_filetype($newfilename, null);
|
53 |
+
if (substr($filetype['type'], 0, 5) != 'image')
|
54 |
+
return false;
|
55 |
+
}
|
56 |
+
|
57 |
+
$image_string = \wp_remote_retrieve_body($response);
|
58 |
+
$file_path = $uploads['path'] . DIRECTORY_SEPARATOR . $newfilename;
|
59 |
+
if (!file_put_contents($file_path, $image_string))
|
60 |
+
return false;
|
61 |
+
|
62 |
+
if ($check_image_type)
|
63 |
+
{
|
64 |
+
if (!self::isImage($file_path))
|
65 |
+
{
|
66 |
+
@unlink($file_path);
|
67 |
+
return false;
|
68 |
+
}
|
69 |
+
}
|
70 |
+
|
71 |
+
@chmod($file_path, FS_CHMOD_FILE);
|
72 |
+
return $newfilename;
|
73 |
+
}
|
74 |
+
|
75 |
+
public static function isImage($path)
|
76 |
+
{
|
77 |
+
$a = getimagesize($path);
|
78 |
+
$image_type = $a[2];
|
79 |
+
|
80 |
+
if (in_array($image_type, array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_BMP)))
|
81 |
+
{
|
82 |
+
return true;
|
83 |
+
}
|
84 |
+
return false;
|
85 |
+
}
|
86 |
+
|
87 |
+
public static function getFullImgPath($img_path)
|
88 |
+
{
|
89 |
+
$uploads = \wp_upload_dir();
|
90 |
+
return trailingslashit($uploads['basedir']) . $img_path;
|
91 |
+
}
|
92 |
+
|
93 |
+
}
|
application/helpers/InputHelper.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\helpers;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* InputHelper class file
|
7 |
+
*
|
8 |
+
* @author keywordrush.com <support@keywordrush.com>
|
9 |
+
* @link http://www.keywordrush.com/
|
10 |
+
* @copyright Copyright © 2015 keywordrush.com
|
11 |
+
*
|
12 |
+
*/
|
13 |
+
class InputHelper {
|
14 |
+
|
15 |
+
public static function get($var, $default = null, $stripslashes = false)
|
16 |
+
{
|
17 |
+
if (!isset($_GET[$var]))
|
18 |
+
return $default;
|
19 |
+
else
|
20 |
+
return $stripslashes ? \stripslashes_deep($_GET[$var]) : $_GET[$var];
|
21 |
+
}
|
22 |
+
|
23 |
+
public static function post($var, $default = null, $stripslashes = false)
|
24 |
+
{
|
25 |
+
if (!isset($_POST[$var]))
|
26 |
+
return $default;
|
27 |
+
else
|
28 |
+
return $stripslashes ? \stripslashes_deep($_POST[$var]) : $_POST[$var];
|
29 |
+
}
|
30 |
+
|
31 |
+
}
|
application/helpers/TemplateHelper.php
ADDED
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\helpers;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* TemplateHelper class file
|
7 |
+
*
|
8 |
+
* @author keywordrush.com <support@keywordrush.com>
|
9 |
+
* @link http://www.keywordrush.com/
|
10 |
+
* @copyright Copyright © 2015 keywordrush.com
|
11 |
+
*
|
12 |
+
*/
|
13 |
+
class TemplateHelper {
|
14 |
+
|
15 |
+
static public function currencyTyping($c)
|
16 |
+
{
|
17 |
+
$types = array("RUB" => "руб.", "UAH" => "грн.", "USD" => "$", "CAD" => "C$", "GBP" => "£", "EUR" => "€", "JPY" => "¥", "CNY" => "¥", "INR" => "Rs.", "AUD" => "AU $");
|
18 |
+
if (key_exists($c, $types))
|
19 |
+
return $types[$c];
|
20 |
+
else
|
21 |
+
return $c;
|
22 |
+
}
|
23 |
+
|
24 |
+
public static function number_format_i18n($number, $decimals = 0)
|
25 |
+
{
|
26 |
+
$decimal_point = __('number_format_decimal_point', 'content-egg-tpl');
|
27 |
+
$thousands_sep = __('number_format_thousands_sep', 'content-egg-tpl');
|
28 |
+
|
29 |
+
if ($decimal_point == 'number_format_decimal_point')
|
30 |
+
$decimal_point = '.';
|
31 |
+
|
32 |
+
if ($thousands_sep == 'number_format_thousands_sep')
|
33 |
+
$thousands_sep = ',';
|
34 |
+
|
35 |
+
return number_format($number, absint($decimals), $decimal_point, $thousands_sep);
|
36 |
+
}
|
37 |
+
|
38 |
+
public static function price_format_i18n($number)
|
39 |
+
{
|
40 |
+
return self::number_format_i18n($number, 2);
|
41 |
+
}
|
42 |
+
|
43 |
+
public static function truncate($string, $length = 80, $etc = '...', $charset = 'UTF-8', $break_words = false, $middle = false)
|
44 |
+
{
|
45 |
+
if ($length == 0)
|
46 |
+
return '';
|
47 |
+
|
48 |
+
if (mb_strlen($string, 'UTF-8') > $length)
|
49 |
+
{
|
50 |
+
$length -= min($length, mb_strlen($etc, 'UTF-8'));
|
51 |
+
if (!$break_words && !$middle)
|
52 |
+
{
|
53 |
+
$string = preg_replace('/\s+?(\S+)?$/', '', mb_substr($string, 0, $length + 1, $charset));
|
54 |
+
}
|
55 |
+
if (!$middle)
|
56 |
+
{
|
57 |
+
return mb_substr($string, 0, $length, $charset) . $etc;
|
58 |
+
} else
|
59 |
+
{
|
60 |
+
return mb_substr($string, 0, $length / 2, $charset) . $etc . mb_substr($string, -$length / 2, $charset);
|
61 |
+
}
|
62 |
+
} else
|
63 |
+
{
|
64 |
+
return $string;
|
65 |
+
}
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Возвращает количтсво дней, секунд и минут с текущего момента
|
70 |
+
* до окончания события
|
71 |
+
* @param string $end_time_gmt GNU формат даты
|
72 |
+
* @param bool $return_array вернуть в виде массива или форматированной строки?
|
73 |
+
* @return mixed false - если $timeleft < 0, массив или строку
|
74 |
+
*/
|
75 |
+
static public function getTimeLeft($end_time_gmt, $return_array = false)
|
76 |
+
{
|
77 |
+
|
78 |
+
$current_time = strtotime(gmdate("M d Y H:i:s"));
|
79 |
+
$timeleft = strtotime($end_time_gmt) - $current_time;
|
80 |
+
if ($timeleft < 0)
|
81 |
+
return '';
|
82 |
+
|
83 |
+
$days_left = floor($timeleft / 86400);
|
84 |
+
$hours_left = floor(($timeleft - $days_left * 86400) / 3600);
|
85 |
+
$min_left = floor(($timeleft - $days_left * 86400 - $hours_left * 3600) / 60);
|
86 |
+
// Если нужно вернуть в виде массива
|
87 |
+
if ($return_array)
|
88 |
+
{
|
89 |
+
return array(
|
90 |
+
'days' => $days_left,
|
91 |
+
'hours' => $hours_left,
|
92 |
+
'min' => $min_left,
|
93 |
+
);
|
94 |
+
}
|
95 |
+
|
96 |
+
if ($days_left)
|
97 |
+
return $days_left . __('d', 'content-egg-tpl') . ' ';
|
98 |
+
elseif ($hours_left)
|
99 |
+
return $hours_left . __('h', 'content-egg-tpl') . ' ';
|
100 |
+
elseif ($min_left)
|
101 |
+
return $min_left . __('m', 'content-egg-tpl');
|
102 |
+
else
|
103 |
+
return '<1' . __('m', 'content-egg-tpl');
|
104 |
+
}
|
105 |
+
|
106 |
+
}
|
application/helpers/TextHelper.php
ADDED
@@ -0,0 +1,341 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\helpers;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* TextHelper class file
|
7 |
+
*
|
8 |
+
* @author keywordrush.com <support@keywordrush.com>
|
9 |
+
* @link http://www.keywordrush.com/
|
10 |
+
* @copyright Copyright © 2014 keywordrush.com
|
11 |
+
*/
|
12 |
+
class TextHelper {
|
13 |
+
|
14 |
+
public static function truncate($string, $length = 80, $etc = '...', $charset = 'UTF-8', $break_words = false, $middle = false)
|
15 |
+
{
|
16 |
+
if ($length == 0)
|
17 |
+
return '';
|
18 |
+
|
19 |
+
if (mb_strlen($string, 'UTF-8') > $length)
|
20 |
+
{
|
21 |
+
$length -= min($length, mb_strlen($etc, 'UTF-8'));
|
22 |
+
if (!$break_words && !$middle)
|
23 |
+
{
|
24 |
+
$string = preg_replace('/\s+?(\S+)?$/', '', mb_substr($string, 0, $length + 1, $charset));
|
25 |
+
}
|
26 |
+
if (!$middle)
|
27 |
+
{
|
28 |
+
return mb_substr($string, 0, $length, $charset) . $etc;
|
29 |
+
} else
|
30 |
+
{
|
31 |
+
return mb_substr($string, 0, $length / 2, $charset) . $etc . mb_substr($string, -$length / 2, $charset);
|
32 |
+
}
|
33 |
+
} else
|
34 |
+
{
|
35 |
+
return $string;
|
36 |
+
}
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Truncates text.
|
41 |
+
* Modified version of cakephp truncate.
|
42 |
+
*
|
43 |
+
* Cuts a string to the length of $length and replaces the last characters
|
44 |
+
* with the ellipsis if the text is longer than length.
|
45 |
+
*
|
46 |
+
* ### Options:
|
47 |
+
*
|
48 |
+
* - `ellipsis` Will be used as Ending and appended to the trimmed string (`ending` is deprecated)
|
49 |
+
* - `exact` If false, $text will not be cut mid-word
|
50 |
+
* - `html` If true, HTML tags would be handled correctly
|
51 |
+
*
|
52 |
+
* @param string $text String to truncate.
|
53 |
+
* @param int $length Length of returned string, including ellipsis.
|
54 |
+
* @param array $options An array of html attributes and options.
|
55 |
+
* @return string Trimmed string.
|
56 |
+
* @link http://book.cakephp.org/2.0/en/core-libraries/helpers/text.html#TextHelper::truncate
|
57 |
+
*/
|
58 |
+
public static function truncateHtml($text, $length = 100, $options = array())
|
59 |
+
{
|
60 |
+
$defaults = array(
|
61 |
+
'ellipsis' => '...', 'exact' => false, 'html' => true
|
62 |
+
);
|
63 |
+
if (isset($options['ending']))
|
64 |
+
{
|
65 |
+
$defaults['ellipsis'] = $options['ending'];
|
66 |
+
} elseif (!empty($options['html']))
|
67 |
+
{
|
68 |
+
$defaults['ellipsis'] = "\xe2\x80\xa6";
|
69 |
+
}
|
70 |
+
$options += $defaults;
|
71 |
+
extract($options);
|
72 |
+
|
73 |
+
if (!function_exists('mb_strlen'))
|
74 |
+
{
|
75 |
+
class_exists('Multibyte');
|
76 |
+
}
|
77 |
+
|
78 |
+
if ($html)
|
79 |
+
{
|
80 |
+
if (mb_strlen(preg_replace('/<.*?>/', '', $text), 'UTF-8') <= $length)
|
81 |
+
{
|
82 |
+
return $text;
|
83 |
+
}
|
84 |
+
$totalLength = mb_strlen(strip_tags($ellipsis), 'UTF-8');
|
85 |
+
$openTags = array();
|
86 |
+
$truncate = '';
|
87 |
+
|
88 |
+
preg_match_all('/(<\/?([\w+]+)[^>]*>)?([^<>]*)/', $text, $tags, PREG_SET_ORDER);
|
89 |
+
foreach ($tags as $tag)
|
90 |
+
{
|
91 |
+
if (!preg_match('/img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param/s', $tag[2]))
|
92 |
+
{
|
93 |
+
if (preg_match('/<[\w]+[^>]*>/s', $tag[0]))
|
94 |
+
{
|
95 |
+
array_unshift($openTags, $tag[2]);
|
96 |
+
} elseif (preg_match('/<\/([\w]+)[^>]*>/s', $tag[0], $closeTag))
|
97 |
+
{
|
98 |
+
$pos = array_search($closeTag[1], $openTags);
|
99 |
+
if ($pos !== false)
|
100 |
+
{
|
101 |
+
array_splice($openTags, $pos, 1);
|
102 |
+
}
|
103 |
+
}
|
104 |
+
}
|
105 |
+
$truncate .= $tag[1];
|
106 |
+
|
107 |
+
$contentLength = mb_strlen(preg_replace('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i', ' ', $tag[3]), 'UTF-8');
|
108 |
+
if ($contentLength + $totalLength > $length)
|
109 |
+
{
|
110 |
+
$left = $length - $totalLength;
|
111 |
+
$entitiesLength = 0;
|
112 |
+
if (preg_match_all('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i', $tag[3], $entities, PREG_OFFSET_CAPTURE))
|
113 |
+
{
|
114 |
+
foreach ($entities[0] as $entity)
|
115 |
+
{
|
116 |
+
if ($entity[1] + 1 - $entitiesLength <= $left)
|
117 |
+
{
|
118 |
+
$left--;
|
119 |
+
$entitiesLength += mb_strlen($entity[0], 'UTF-8');
|
120 |
+
} else
|
121 |
+
{
|
122 |
+
break;
|
123 |
+
}
|
124 |
+
}
|
125 |
+
}
|
126 |
+
|
127 |
+
$truncate .= mb_substr($tag[3], 0, $left + $entitiesLength, 'UTF-8');
|
128 |
+
break;
|
129 |
+
} else
|
130 |
+
{
|
131 |
+
$truncate .= $tag[3];
|
132 |
+
$totalLength += $contentLength;
|
133 |
+
}
|
134 |
+
if ($totalLength >= $length)
|
135 |
+
{
|
136 |
+
break;
|
137 |
+
}
|
138 |
+
}
|
139 |
+
} else
|
140 |
+
{
|
141 |
+
if (mb_strlen($text, 'UTF-8') <= $length)
|
142 |
+
{
|
143 |
+
return $text;
|
144 |
+
}
|
145 |
+
$truncate = mb_substr($text, 0, $length - mb_strlen($ellipsis, 'UTF-8'), 'UTF-8');
|
146 |
+
}
|
147 |
+
if (!$exact)
|
148 |
+
{
|
149 |
+
$spacepos = mb_strrpos($truncate, ' ', 'UTF-8');
|
150 |
+
if ($html)
|
151 |
+
{
|
152 |
+
$truncateCheck = mb_substr($truncate, 0, $spacepos, 'UTF-8');
|
153 |
+
$lastOpenTag = mb_strrpos($truncateCheck, '<', 'UTF-8');
|
154 |
+
$lastCloseTag = mb_strrpos($truncateCheck, '>', 'UTF-8');
|
155 |
+
if ($lastOpenTag > $lastCloseTag)
|
156 |
+
{
|
157 |
+
preg_match_all('/<[\w]+[^>]*>/s', $truncate, $lastTagMatches);
|
158 |
+
$lastTag = array_pop($lastTagMatches[0]);
|
159 |
+
$spacepos = mb_strrpos($truncate, $lastTag, 'UTF-8') + mb_strlen($lastTag, 'UTF-8');
|
160 |
+
}
|
161 |
+
$bits = mb_substr($truncate, $spacepos, 'UTF-8');
|
162 |
+
preg_match_all('/<\/([a-z]+)>/', $bits, $droppedTags, PREG_SET_ORDER);
|
163 |
+
if (!empty($droppedTags))
|
164 |
+
{
|
165 |
+
if (!empty($openTags))
|
166 |
+
{
|
167 |
+
foreach ($droppedTags as $closingTag)
|
168 |
+
{
|
169 |
+
if (!in_array($closingTag[1], $openTags))
|
170 |
+
{
|
171 |
+
array_unshift($openTags, $closingTag[1]);
|
172 |
+
}
|
173 |
+
}
|
174 |
+
} else
|
175 |
+
{
|
176 |
+
foreach ($droppedTags as $closingTag)
|
177 |
+
{
|
178 |
+
$openTags[] = $closingTag[1];
|
179 |
+
}
|
180 |
+
}
|
181 |
+
}
|
182 |
+
}
|
183 |
+
$truncate = mb_substr($truncate, 0, $spacepos, 'UTF-8');
|
184 |
+
}
|
185 |
+
$truncate .= $ellipsis;
|
186 |
+
|
187 |
+
if ($html)
|
188 |
+
{
|
189 |
+
foreach ($openTags as $tag)
|
190 |
+
{
|
191 |
+
$truncate .= '</' . $tag . '>';
|
192 |
+
}
|
193 |
+
}
|
194 |
+
|
195 |
+
return $truncate;
|
196 |
+
}
|
197 |
+
|
198 |
+
static function rus2latin($str)
|
199 |
+
{
|
200 |
+
$iso = array(
|
201 |
+
"Є" => "YE", "І" => "I", "Ѓ" => "G", "і" => "i", "№" => "#", "є" => "ye", "ѓ" => "g",
|
202 |
+
"А" => "A", "Б" => "B", "В" => "V", "Г" => "G", "Д" => "D",
|
203 |
+
"Е" => "E", "Ё" => "YO", "Ж" => "ZH",
|
204 |
+
"З" => "Z", "И" => "I", "Й" => "J", "К" => "K", "Л" => "L",
|
205 |
+
"М" => "M", "Н" => "N", "О" => "O", "П" => "P", "Р" => "R",
|
206 |
+
"С" => "S", "Т" => "T", "У" => "U", "Ф" => "F", "Х" => "X",
|
207 |
+
"Ц" => "C", "Ч" => "CH", "Ш" => "SH", "Щ" => "SHH", "Ъ" => "'",
|
208 |
+
"Ы" => "Y", "Ь" => "", "Э" => "E", "Ю" => "YU", "Я" => "YA",
|
209 |
+
"а" => "a", "б" => "b", "в" => "v", "г" => "g", "д" => "d",
|
210 |
+
"е" => "e", "ё" => "yo", "ж" => "zh",
|
211 |
+
"з" => "z", "и" => "i", "й" => "j", "к" => "k", "л" => "l",
|
212 |
+
"м" => "m", "н" => "n", "о" => "o", "п" => "p", "р" => "r",
|
213 |
+
"с" => "s", "т" => "t", "у" => "u", "ф" => "f", "х" => "x",
|
214 |
+
"ц" => "c", "ч" => "ch", "ш" => "sh", "щ" => "shh", "ъ" => "",
|
215 |
+
"ы" => "y", "ь" => "", "э" => "e", "ю" => "yu", "я" => "ya",
|
216 |
+
"'" => "", "\"" => "", " " => "-"
|
217 |
+
);
|
218 |
+
|
219 |
+
return strtr($str, $iso);
|
220 |
+
}
|
221 |
+
|
222 |
+
static public function clear($str)
|
223 |
+
{
|
224 |
+
return preg_replace('/[^a-zA-Z0-9_]/', '', $str);
|
225 |
+
}
|
226 |
+
|
227 |
+
public static function clear_utf8($str)
|
228 |
+
{
|
229 |
+
$str = preg_replace("/[^\pL\s\d\-\.\+_]+/ui", '', $str);
|
230 |
+
$str = preg_replace("/\s+/ui", ' ', $str);
|
231 |
+
return $str;
|
232 |
+
}
|
233 |
+
|
234 |
+
private static function get_random($matches)
|
235 |
+
{
|
236 |
+
$rand = array_rand($split = explode("|", $matches[1]));
|
237 |
+
return $split[$rand];
|
238 |
+
}
|
239 |
+
|
240 |
+
public static function spin($str)
|
241 |
+
{
|
242 |
+
//$new_str = preg_replace_callback('/\{([^{}]*)\}/uim', array('TextHelper', 'get_random'), $str);
|
243 |
+
$new_str = preg_replace_callback(
|
244 |
+
'/\{([^{}]*)\}/uim', function ($matches) {
|
245 |
+
$rand = array_rand($split = explode("|", $matches[1]));
|
246 |
+
return $split[$rand];
|
247 |
+
}
|
248 |
+
, $str);
|
249 |
+
if ($new_str !== $str)
|
250 |
+
$str = TextHelper::spin($new_str);
|
251 |
+
return $str;
|
252 |
+
}
|
253 |
+
|
254 |
+
/* bool/array unserialize_xml ( string $input [ , callback $callback ] )
|
255 |
+
* Unserializes an XML string, returning a multi-dimensional associative array, optionally runs a callback on all non-array data
|
256 |
+
* Returns false on all failure
|
257 |
+
* Notes:
|
258 |
+
* Root XML tags are stripped
|
259 |
+
* Due to its recursive nature, unserialize_xml() will also support SimpleXMLElement objects and arrays as input
|
260 |
+
* Uses simplexml_load_string() for XML parsing, see SimpleXML documentation for more info
|
261 |
+
*/
|
262 |
+
|
263 |
+
static public function unserialize_xml($input, $callback = null, $recurse = false)
|
264 |
+
{
|
265 |
+
//Отключение ошибок libxml
|
266 |
+
libxml_use_internal_errors(false);
|
267 |
+
|
268 |
+
// Get input, loading an xml string with simplexml if its the top level of recursion
|
269 |
+
$data = ((!$recurse) && is_string($input)) ? @simplexml_load_string($input, '\SimpleXMLElement', LIBXML_NOCDATA) : $input;
|
270 |
+
// Convert SimpleXMLElements to array
|
271 |
+
if ($data instanceof \SimpleXMLElement)
|
272 |
+
$data = (array) $data;
|
273 |
+
|
274 |
+
// Recurse into arrays
|
275 |
+
if (is_array($data))
|
276 |
+
foreach ($data as &$item)
|
277 |
+
$item = self::unserialize_xml($item, $callback, true);
|
278 |
+
// Run callback and return
|
279 |
+
return (!is_array($data) && is_callable($callback)) ? call_user_func($callback, $data) : $data;
|
280 |
+
}
|
281 |
+
|
282 |
+
static public function br2nl($str)
|
283 |
+
{
|
284 |
+
return str_ireplace(array("<br />", "<br>", "<br/>"), "\r\n", $str);
|
285 |
+
}
|
286 |
+
|
287 |
+
static public function nl2br($str)
|
288 |
+
{
|
289 |
+
return str_replace(array("\r\n", "\r", "\n"), "<br />", $str);
|
290 |
+
}
|
291 |
+
|
292 |
+
static public function removeExtraBreaks($str)
|
293 |
+
{
|
294 |
+
return trim(preg_replace("/(\r\n)+/i", "\r\n", $str));
|
295 |
+
}
|
296 |
+
|
297 |
+
/**
|
298 |
+
* 10.55 -> 1055 & 1055 -> 10.55
|
299 |
+
*/
|
300 |
+
static public function pricePenniesDenomination($p, $to_int = true)
|
301 |
+
{
|
302 |
+
if ($to_int)
|
303 |
+
$p = number_format($p, 2, '', '');
|
304 |
+
else
|
305 |
+
$p = number_format(preg_replace("/(\d+)(\d{2}$)/msi", '${1}.${2}', $p), 2, '.', '');
|
306 |
+
|
307 |
+
return $p;
|
308 |
+
}
|
309 |
+
|
310 |
+
static public function currencyTyping($c)
|
311 |
+
{
|
312 |
+
return TemplateHelper::currencyTyping($c);
|
313 |
+
}
|
314 |
+
|
315 |
+
public static function safeHtml($html, $type)
|
316 |
+
{
|
317 |
+
switch ($type)
|
318 |
+
{
|
319 |
+
case 'allow_all':
|
320 |
+
return $html;
|
321 |
+
// Безопасный HTML
|
322 |
+
case 'safe_html':
|
323 |
+
return \wp_kses_post($html);
|
324 |
+
// Разрешенные HTML теги
|
325 |
+
case 'allowed_tags':
|
326 |
+
return \wp_kses($html, array('p', 'h1', 'h2', 'h3', 'h4', 'h5', 'b', 'i', 'strong', 'em', 'ul', 'ol', 'li', 'br', 'hr'));
|
327 |
+
default:
|
328 |
+
// @todo: add safe strip_tags
|
329 |
+
return strip_tags($html);
|
330 |
+
}
|
331 |
+
}
|
332 |
+
|
333 |
+
/*
|
334 |
+
public static function sanitizeUrl($url) {
|
335 |
+
|
336 |
+
return preg_replace('/[^\-A-Za-z0-9+&@#/\%\?=~_|!:,\.;\(\)\[\]]/', '', $url);
|
337 |
+
|
338 |
+
}
|
339 |
+
*
|
340 |
+
*/
|
341 |
+
}
|
application/helpers/index.php
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<?php // Silence is golden.
|
application/index.php
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<?php // Silence is golden.
|
application/libs/ParserClient.php
ADDED
@@ -0,0 +1,198 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\libs;
|
4 |
+
|
5 |
+
use ContentEgg\application\helpers\TextHelper;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* ParserClient class file
|
9 |
+
*
|
10 |
+
* @author keywordrush.com <support@keywordrush.com>
|
11 |
+
* @link http://www.keywordrush.com/
|
12 |
+
* @copyright Copyright © 2015 keywordrush.com
|
13 |
+
*
|
14 |
+
*/
|
15 |
+
class ParserClient {
|
16 |
+
|
17 |
+
protected $charset = 'utf-8';
|
18 |
+
protected $xpath;
|
19 |
+
protected $url;
|
20 |
+
protected static $_httpClient = null;
|
21 |
+
|
22 |
+
public function __construct($url = null)
|
23 |
+
{
|
24 |
+
if ($url)
|
25 |
+
$this->setUrl($url);
|
26 |
+
}
|
27 |
+
|
28 |
+
public function setUrl($url)
|
29 |
+
{
|
30 |
+
$this->url = $url;
|
31 |
+
//$this->xpath = null;
|
32 |
+
//$this->loadXPath($url);
|
33 |
+
}
|
34 |
+
|
35 |
+
public function getUrl()
|
36 |
+
{
|
37 |
+
return $this->url;
|
38 |
+
}
|
39 |
+
|
40 |
+
public function getCharset()
|
41 |
+
{
|
42 |
+
return $this->charset;
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Gets the HTTP client object.
|
47 |
+
*/
|
48 |
+
public static function getHttpClient($opts = array())
|
49 |
+
{
|
50 |
+
$_opts = array(
|
51 |
+
'sslverify' => false,
|
52 |
+
'redirection' => 3,
|
53 |
+
'timeout' => 5,
|
54 |
+
'user-agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9',
|
55 |
+
);
|
56 |
+
if ($opts)
|
57 |
+
$_opts = $opts + $_opts;
|
58 |
+
|
59 |
+
if (self::$_httpClient == null)
|
60 |
+
{
|
61 |
+
//Get WP http client
|
62 |
+
self::$_httpClient = new WpHttpClient();
|
63 |
+
self::$_httpClient->setHeaders('Accept-Charset', 'ISO-8859-1,utf-8');
|
64 |
+
|
65 |
+
self::$_httpClient->setUserAgent($_opts['user-agent']);
|
66 |
+
self::$_httpClient->setRedirection($_opts['redirection']);
|
67 |
+
self::$_httpClient->setTimeout($_opts['timeout']);
|
68 |
+
self::$_httpClient->setSslVerify($_opts['sslverify']);
|
69 |
+
}
|
70 |
+
|
71 |
+
return self::$_httpClient;
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Sets the HTTP client object to use for retrieving the feeds. If none
|
76 |
+
* is set, the default Http_Client will be used.
|
77 |
+
*/
|
78 |
+
public static function setHttpClient($httpClient)
|
79 |
+
{
|
80 |
+
self::$_httpClient = $httpClient;
|
81 |
+
}
|
82 |
+
|
83 |
+
public function loadXPath($url, $query = null)
|
84 |
+
{
|
85 |
+
$this->xpath = $this->getXPath($url, $query);
|
86 |
+
}
|
87 |
+
|
88 |
+
public function getXPath($url, $query = null)
|
89 |
+
{
|
90 |
+
return $xpath = new \DomXPath($this->getDom($url, $query));
|
91 |
+
}
|
92 |
+
|
93 |
+
public function getDom($url, $query = null)
|
94 |
+
{
|
95 |
+
$dom = new \DomDocument();
|
96 |
+
$dom->preserveWhiteSpace = false;
|
97 |
+
libxml_use_internal_errors(true);
|
98 |
+
if (!$dom->loadHTML($this->restGet($url, $query)))
|
99 |
+
throw new \Exception('Can\'t load DOM Document.');
|
100 |
+
return $dom;
|
101 |
+
}
|
102 |
+
|
103 |
+
public function restGet($uri, $query = null)
|
104 |
+
{
|
105 |
+
$client = self::getHttpClient();
|
106 |
+
$client->resetParameters();
|
107 |
+
$client->setUri($uri);
|
108 |
+
if ($query)
|
109 |
+
$client->setParameterGet($query);
|
110 |
+
$body = $this->getResult($client->request('GET'));
|
111 |
+
echo $body;
|
112 |
+
exit;
|
113 |
+
return $this->decodeCharset($body);
|
114 |
+
|
115 |
+
|
116 |
+
/*
|
117 |
+
$this->xpath = null;
|
118 |
+
$args = array(
|
119 |
+
'timeout' => 5,
|
120 |
+
'sslverify' => false,
|
121 |
+
'user-agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9'
|
122 |
+
);
|
123 |
+
|
124 |
+
$response = \wp_remote_get($url, $args);
|
125 |
+
|
126 |
+
if (\is_wp_error($response))
|
127 |
+
{
|
128 |
+
$error_message = $response->get_error_message();
|
129 |
+
throw new \Exception($error_message);
|
130 |
+
}
|
131 |
+
$response_code = (int) \wp_remote_retrieve_response_code($response);
|
132 |
+
if ($response_code != 200)
|
133 |
+
throw new \Exception('Error in url request. HTTP response code: ' . $response_code);
|
134 |
+
|
135 |
+
$body = \wp_remote_retrieve_body($response);
|
136 |
+
|
137 |
+
return $this->decodeCharset($body);
|
138 |
+
*
|
139 |
+
*/
|
140 |
+
}
|
141 |
+
|
142 |
+
protected function getResult($response)
|
143 |
+
{
|
144 |
+
if (\is_wp_error($response))
|
145 |
+
{
|
146 |
+
$error_mess = "HTTP request fails: " . $response->get_error_code() . " - " . $response->get_error_message() . '.';
|
147 |
+
throw new \Exception($error_mess);
|
148 |
+
}
|
149 |
+
|
150 |
+
$response_code = (int) \wp_remote_retrieve_response_code($response);
|
151 |
+
|
152 |
+
if ($response_code != 200)
|
153 |
+
{
|
154 |
+
$response_message = \wp_remote_retrieve_response_message($response);
|
155 |
+
$error_mess = "HTTP request status fails: " . $response_code . " - " . $response_message . '.';
|
156 |
+
$error_mess .= ' Server replay: ' . \wp_remote_retrieve_body($response);
|
157 |
+
throw new \Exception($error_mess);
|
158 |
+
}
|
159 |
+
|
160 |
+
return \wp_remote_retrieve_body($response);
|
161 |
+
}
|
162 |
+
|
163 |
+
public function decodeCharset($str)
|
164 |
+
{
|
165 |
+
$encoding_hint = '<?xml encoding="UTF-8">';
|
166 |
+
|
167 |
+
if (strtolower($this->charset) != 'utf-8')
|
168 |
+
{
|
169 |
+
$str = $encoding_hint . '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />' . $str;
|
170 |
+
return iconv($this->charset, 'utf-8', $str);
|
171 |
+
} else
|
172 |
+
return $encoding_hint . $str;
|
173 |
+
}
|
174 |
+
|
175 |
+
protected function xpathScalar($path)
|
176 |
+
{
|
177 |
+
$res = $this->xpath->query($path);
|
178 |
+
if ($res && $res->length > 0)
|
179 |
+
return trim(strip_tags($res->item(0)->nodeValue));
|
180 |
+
else
|
181 |
+
return null;
|
182 |
+
}
|
183 |
+
|
184 |
+
protected function xpathArray($path)
|
185 |
+
{
|
186 |
+
$res = $this->xpath->query($path);
|
187 |
+
$return = array();
|
188 |
+
if ($res && $res->length > 0)
|
189 |
+
{
|
190 |
+
foreach ($res as $r)
|
191 |
+
{
|
192 |
+
$return[] = trim(strip_tags($r->nodeValue));
|
193 |
+
}
|
194 |
+
}
|
195 |
+
return $return;
|
196 |
+
}
|
197 |
+
|
198 |
+
}
|
application/libs/RestClient.php
ADDED
@@ -0,0 +1,262 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\libs;
|
4 |
+
|
5 |
+
use ContentEgg\application\helpers\TextHelper;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* RestClient class file
|
9 |
+
*
|
10 |
+
* @author keywordrush.com <support@keywordrush.com>
|
11 |
+
* @link http://www.keywordrush.com/
|
12 |
+
* @copyright Copyright © 2015 keywordrush.com
|
13 |
+
*
|
14 |
+
* Simple Rest Client
|
15 |
+
* @todo: PUT/DELETE Request
|
16 |
+
*/
|
17 |
+
class RestClient {
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Endpoint uri of this web service
|
21 |
+
* @var string
|
22 |
+
*/
|
23 |
+
protected $_uri = null;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* @var String Return Type
|
27 |
+
*/
|
28 |
+
protected $_responseType = null;
|
29 |
+
|
30 |
+
/**
|
31 |
+
* @var array Response Format Types
|
32 |
+
*/
|
33 |
+
protected $_responseTypes = array();
|
34 |
+
protected $_custom_header = array();
|
35 |
+
protected static $_httpClient = null;
|
36 |
+
|
37 |
+
public function __construct($uri = null)
|
38 |
+
{
|
39 |
+
if (!empty($uri))
|
40 |
+
{
|
41 |
+
$this->setUri($uri);
|
42 |
+
}
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Set responseType
|
47 |
+
*/
|
48 |
+
public function setResponseType($responseType = 'json')
|
49 |
+
{
|
50 |
+
if (!in_array($responseType, $this->_responseTypes, TRUE))
|
51 |
+
{
|
52 |
+
throw new \Exception('Invalid Response Type');
|
53 |
+
}
|
54 |
+
$this->_responseType = $responseType;
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Retrieve responseType
|
59 |
+
*/
|
60 |
+
public function getResponseType()
|
61 |
+
{
|
62 |
+
return $this->_responseType;
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Sets the HTTP client object to use for retrieving the feeds. If none
|
67 |
+
* is set, the default Http_Client will be used.
|
68 |
+
*/
|
69 |
+
public static function setHttpClient($httpClient)
|
70 |
+
{
|
71 |
+
self::$_httpClient = $httpClient;
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Gets the HTTP client object.
|
76 |
+
*/
|
77 |
+
public static function getHttpClient($opts = array())
|
78 |
+
{
|
79 |
+
$_opts = array(
|
80 |
+
'sslverify' => false,
|
81 |
+
'redirection' => 3,
|
82 |
+
'timeout' => 8,
|
83 |
+
'user-agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9',
|
84 |
+
);
|
85 |
+
if ($opts)
|
86 |
+
$_opts = $opts + $_opts;
|
87 |
+
|
88 |
+
if (self::$_httpClient == null)
|
89 |
+
{
|
90 |
+
//Get WP http client
|
91 |
+
self::$_httpClient = new WpHttpClient();
|
92 |
+
self::$_httpClient->setHeaders('Accept-Charset', 'ISO-8859-1,utf-8');
|
93 |
+
|
94 |
+
|
95 |
+
|
96 |
+
|
97 |
+
|
98 |
+
self::$_httpClient->setRedirection($_opts['redirection']);
|
99 |
+
self::$_httpClient->setTimeout($_opts['timeout']);
|
100 |
+
self::$_httpClient->setSslVerify($_opts['sslverify']);
|
101 |
+
self::$_httpClient->setUserAgent($_opts['user-agent']);
|
102 |
+
}
|
103 |
+
|
104 |
+
return self::$_httpClient;
|
105 |
+
}
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Set the URI to use in the request
|
109 |
+
*/
|
110 |
+
public function setUri($uri)
|
111 |
+
{
|
112 |
+
$this->_uri = $uri;
|
113 |
+
}
|
114 |
+
|
115 |
+
public function getUri()
|
116 |
+
{
|
117 |
+
return $this->_uri;
|
118 |
+
}
|
119 |
+
|
120 |
+
public function setCustomHeaders($headers = array())
|
121 |
+
{
|
122 |
+
$this->_custom_header = $headers;
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* Performs an HTTP GET request
|
127 |
+
* @param string $path
|
128 |
+
* @param array $query Array of GET parameters
|
129 |
+
*/
|
130 |
+
public function restGet($path, array $query = null)
|
131 |
+
{
|
132 |
+
$this->_prepareRest($path);
|
133 |
+
$client = self::getHttpClient();
|
134 |
+
$client->setParameterGet($query);
|
135 |
+
return $this->_getResult($client->request('GET'));
|
136 |
+
}
|
137 |
+
|
138 |
+
private function _prepareRest($path)
|
139 |
+
{
|
140 |
+
|
141 |
+
if (strstr($path, 'http://') || strstr($path, 'https://'))
|
142 |
+
{
|
143 |
+
$uri = $path;
|
144 |
+
} else
|
145 |
+
{
|
146 |
+
$uri = $this->getUri();
|
147 |
+
if ($path && $path[0] != '/' && $uri[strlen($uri) - 1] != '/')
|
148 |
+
{
|
149 |
+
$path = '/' . $path;
|
150 |
+
}
|
151 |
+
$uri = $uri . $path;
|
152 |
+
}
|
153 |
+
|
154 |
+
$client = self::getHttpClient();
|
155 |
+
|
156 |
+
// Обнуляем параметры
|
157 |
+
$client->resetParameters();
|
158 |
+
$client->setUri($uri);
|
159 |
+
|
160 |
+
// Установка custom headers
|
161 |
+
foreach ($this->_custom_header as $header => $value)
|
162 |
+
{
|
163 |
+
$client->setHeaders($header, $value);
|
164 |
+
}
|
165 |
+
}
|
166 |
+
|
167 |
+
/**
|
168 |
+
* Performs an HTTP POST request
|
169 |
+
* @param string $path
|
170 |
+
* @param mixed $data Raw data to send
|
171 |
+
* @param string $enctype
|
172 |
+
*/
|
173 |
+
public function restPost($path, $data = null, $enctype = null, $opts = array())
|
174 |
+
{
|
175 |
+
$this->_prepareRest($path);
|
176 |
+
$client = self::getHttpClient($opts);
|
177 |
+
if (is_string($data))
|
178 |
+
{
|
179 |
+
$client->setRawData($data, $enctype);
|
180 |
+
} elseif (is_array($data) || is_object($data))
|
181 |
+
{
|
182 |
+
$client->setParameterPost((array) $data);
|
183 |
+
}
|
184 |
+
return $this->_getResult($client->request('POST'));
|
185 |
+
}
|
186 |
+
|
187 |
+
final public function get($path, array $query = null)
|
188 |
+
{
|
189 |
+
return $this->restGet($path, $query);
|
190 |
+
}
|
191 |
+
|
192 |
+
protected function _getResult($response)
|
193 |
+
{
|
194 |
+
if (\is_wp_error($response))
|
195 |
+
{
|
196 |
+
$error_mess = "HTTP request fails: " . $response->get_error_code() . " - " . $response->get_error_message() . '.';
|
197 |
+
throw new \Exception($error_mess);
|
198 |
+
}
|
199 |
+
|
200 |
+
$response_code = (int) \wp_remote_retrieve_response_code($response);
|
201 |
+
|
202 |
+
if ($response_code != 200)
|
203 |
+
{
|
204 |
+
$response_message = \wp_remote_retrieve_response_message($response);
|
205 |
+
$error_mess = "HTTP request status fails: " . $response_code . " - " . $response_message . '.';
|
206 |
+
$error_mess .= ' Server replay: ' . \wp_remote_retrieve_body($response);
|
207 |
+
throw new \Exception($error_mess);
|
208 |
+
}
|
209 |
+
|
210 |
+
return \wp_remote_retrieve_body($response);
|
211 |
+
}
|
212 |
+
|
213 |
+
protected function _decodeResponse($response, $responseType = null)
|
214 |
+
{
|
215 |
+
if ($responseType == null)
|
216 |
+
$responseType = $this->_responseType;
|
217 |
+
|
218 |
+
switch ($responseType)
|
219 |
+
{
|
220 |
+
case 'php':
|
221 |
+
case 'php_serial':
|
222 |
+
$res = @unserialize($response);
|
223 |
+
if ($res === false)
|
224 |
+
throw new \Exception('Response serialization error.');
|
225 |
+
break;
|
226 |
+
case 'json':
|
227 |
+
$res = json_decode($response, true);
|
228 |
+
break;
|
229 |
+
case 'xml':
|
230 |
+
case 'rss':
|
231 |
+
case 'atom':
|
232 |
+
$res = TextHelper::unserialize_xml($response);
|
233 |
+
break;
|
234 |
+
default :
|
235 |
+
$res = $response;
|
236 |
+
}
|
237 |
+
if (is_array($res))
|
238 |
+
array_walk_recursive($res, array($this, '_fixUtf8'));
|
239 |
+
elseif (is_scalar($res))
|
240 |
+
$this->_fixUtf8($res);
|
241 |
+
|
242 |
+
return $res;
|
243 |
+
}
|
244 |
+
|
245 |
+
protected function _fixUtf8(&$text)
|
246 |
+
{
|
247 |
+
$regex = '/
|
248 |
+
(
|
249 |
+
(?: [\x00-\x7F] # single-byte sequences 0xxxxxxx
|
250 |
+
| [\xC2-\xDF][\x80-\xBF] # double-byte sequences 110xxxxx 10xxxxxx
|
251 |
+
| \xE0[\xA0-\xBF][\x80-\xBF] # triple-byte sequences 1110xxxx 10xxxxxx * 2
|
252 |
+
| [\xE1-\xEC][\x80-\xBF]{2}
|
253 |
+
| \xED[\x80-\x9F][\x80-\xBF]
|
254 |
+
| [\xEE-\xEF][\x80-\xBF]{2}';
|
255 |
+
$regex .= '){1,40} # ...one or more times
|
256 |
+
)
|
257 |
+
| . # anything else
|
258 |
+
/x';
|
259 |
+
$text = preg_replace($regex, '$1', $text);
|
260 |
+
}
|
261 |
+
|
262 |
+
}
|
application/libs/WpHttpClient.php
ADDED
@@ -0,0 +1,460 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\libs;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* WpHttpClient class file
|
7 |
+
*
|
8 |
+
* Same code from Zend_Http_Client
|
9 |
+
* @link: http://framework.zend.com/manual/1.12/ru/zend.http.client.html
|
10 |
+
*
|
11 |
+
* @author keywordrush.com <support@keywordrush.com>
|
12 |
+
* @link http://www.keywordrush.com/
|
13 |
+
* @copyright Copyright © 2015 keywordrush.com
|
14 |
+
*
|
15 |
+
*/
|
16 |
+
class WpHttpClient {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* HTTP request methods
|
20 |
+
*/
|
21 |
+
const GET = 'GET';
|
22 |
+
const POST = 'POST';
|
23 |
+
const PUT = 'PUT';
|
24 |
+
const HEAD = 'HEAD';
|
25 |
+
const DELETE = 'DELETE';
|
26 |
+
const TRACE = 'TRACE';
|
27 |
+
const OPTIONS = 'OPTIONS';
|
28 |
+
const CONNECT = 'CONNECT';
|
29 |
+
|
30 |
+
/**
|
31 |
+
* POST data encoding methods
|
32 |
+
*/
|
33 |
+
const ENC_URLENCODED = 'application/x-www-form-urlencoded';
|
34 |
+
const ENC_FORMDATA = 'multipart/form-data';
|
35 |
+
|
36 |
+
private $timeout;
|
37 |
+
private $sslverify;
|
38 |
+
private $useragent;
|
39 |
+
private $redirection;
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Request URI
|
43 |
+
*/
|
44 |
+
protected $uri;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Associative array of request headers
|
48 |
+
*
|
49 |
+
* @var array
|
50 |
+
*/
|
51 |
+
protected $headers = array();
|
52 |
+
|
53 |
+
/**
|
54 |
+
* HTTP request method
|
55 |
+
*
|
56 |
+
* @var string
|
57 |
+
*/
|
58 |
+
protected $method = self::GET;
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Associative array of GET parameters
|
62 |
+
*
|
63 |
+
* @var array
|
64 |
+
*/
|
65 |
+
protected $paramsGet = array();
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Assiciative array of POST parameters
|
69 |
+
*
|
70 |
+
* @var array
|
71 |
+
*/
|
72 |
+
protected $paramsPost = array();
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Request body content type (for POST requests)
|
76 |
+
*
|
77 |
+
* @var string
|
78 |
+
*/
|
79 |
+
protected $enctype = null;
|
80 |
+
|
81 |
+
/**
|
82 |
+
* The raw post data to send. Could be set by setRawData($data, $enctype).
|
83 |
+
*
|
84 |
+
* @var string
|
85 |
+
*/
|
86 |
+
protected $raw_post_data = null;
|
87 |
+
|
88 |
+
/**
|
89 |
+
* The last HTTP response received by the client
|
90 |
+
*
|
91 |
+
* @var EHttpResponse
|
92 |
+
*/
|
93 |
+
protected $last_response = null;
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Set the URI for the next request
|
97 |
+
*/
|
98 |
+
public function setUri($uri)
|
99 |
+
{
|
100 |
+
$this->uri = $uri;
|
101 |
+
}
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Get the URI for the next request
|
105 |
+
*/
|
106 |
+
public function getUri($as_string = false)
|
107 |
+
{
|
108 |
+
return $this->uri;
|
109 |
+
}
|
110 |
+
|
111 |
+
public function setHeaders($name, $value = null)
|
112 |
+
{
|
113 |
+
// If we got an array, go recusive!
|
114 |
+
if (is_array($name))
|
115 |
+
{
|
116 |
+
foreach ($name as $k => $v)
|
117 |
+
{
|
118 |
+
if (is_string($k))
|
119 |
+
{
|
120 |
+
$this->setHeaders($k, $v);
|
121 |
+
} else
|
122 |
+
{
|
123 |
+
$this->setHeaders($v, null);
|
124 |
+
}
|
125 |
+
}
|
126 |
+
} else
|
127 |
+
{
|
128 |
+
// Check if $name needs to be split
|
129 |
+
if ($value === null && (strpos($name, ':') > 0))
|
130 |
+
list($name, $value) = explode(':', $name, 2);
|
131 |
+
|
132 |
+
// Make sure the name is valid if we are in strict mode
|
133 |
+
if (!preg_match('/^[a-zA-Z0-9-]+$/', $name))
|
134 |
+
{
|
135 |
+
throw new \Exception("{$name} is not a valid HTTP header name");
|
136 |
+
}
|
137 |
+
|
138 |
+
$normalized_name = strtolower($name);
|
139 |
+
|
140 |
+
// If $value is null or false, unset the header
|
141 |
+
if ($value === null || $value === false)
|
142 |
+
{
|
143 |
+
unset($this->headers[$normalized_name]);
|
144 |
+
} else
|
145 |
+
{
|
146 |
+
// Header names are storred lowercase internally.
|
147 |
+
if (is_string($value))
|
148 |
+
$value = trim($value);
|
149 |
+
$this->headers[$normalized_name] = array($name, $value);
|
150 |
+
}
|
151 |
+
}
|
152 |
+
}
|
153 |
+
|
154 |
+
/**
|
155 |
+
* Get the value of a specific header
|
156 |
+
*
|
157 |
+
* Note that if the header has more than one value, an array
|
158 |
+
* will be returned.
|
159 |
+
*
|
160 |
+
* @param string $key
|
161 |
+
* @return string|array|null The header value or null if it is not set
|
162 |
+
*/
|
163 |
+
public function getHeader($key)
|
164 |
+
{
|
165 |
+
$key = strtolower($key);
|
166 |
+
if (isset($this->headers[$key]))
|
167 |
+
{
|
168 |
+
return $this->headers[$key][1];
|
169 |
+
} else
|
170 |
+
{
|
171 |
+
return null;
|
172 |
+
}
|
173 |
+
}
|
174 |
+
|
175 |
+
/**
|
176 |
+
* Set the next request's method
|
177 |
+
*/
|
178 |
+
public function setMethod($method = self::GET)
|
179 |
+
{
|
180 |
+
|
181 |
+
if ($method !== self::GET && $method !== self::POST)
|
182 |
+
throw new \Exception('Only GET and POST methods avalible.');
|
183 |
+
|
184 |
+
$this->method = $method;
|
185 |
+
}
|
186 |
+
|
187 |
+
/**
|
188 |
+
* Set a GET parameter for the request. Wrapper around _setParameter
|
189 |
+
*
|
190 |
+
* @param string|array $name
|
191 |
+
* @param string $value
|
192 |
+
* @return EHttpClient
|
193 |
+
*/
|
194 |
+
public function setParameterGet($name, $value = null)
|
195 |
+
{
|
196 |
+
if (is_array($name))
|
197 |
+
{
|
198 |
+
foreach ($name as $k => $v)
|
199 |
+
$this->_setParameter('GET', $k, $v);
|
200 |
+
} else
|
201 |
+
{
|
202 |
+
$this->_setParameter('GET', $name, $value);
|
203 |
+
}
|
204 |
+
}
|
205 |
+
|
206 |
+
/**
|
207 |
+
* Set a POST parameter for the request. Wrapper around _setParameter
|
208 |
+
*
|
209 |
+
* @param string|array $name
|
210 |
+
* @param string $value
|
211 |
+
*/
|
212 |
+
public function setParameterPost($name, $value = null)
|
213 |
+
{
|
214 |
+
if (is_array($name))
|
215 |
+
{
|
216 |
+
foreach ($name as $k => $v)
|
217 |
+
$this->_setParameter('POST', $k, $v);
|
218 |
+
} else
|
219 |
+
{
|
220 |
+
$this->_setParameter('POST', $name, $value);
|
221 |
+
}
|
222 |
+
}
|
223 |
+
|
224 |
+
/**
|
225 |
+
* Set a GET or POST parameter - used by SetParameterGet and SetParameterPost
|
226 |
+
*
|
227 |
+
* @param string $type GET or POST
|
228 |
+
* @param string $name
|
229 |
+
* @param string $value
|
230 |
+
* @return null
|
231 |
+
*/
|
232 |
+
protected function _setParameter($type, $name, $value)
|
233 |
+
{
|
234 |
+
$parray = array();
|
235 |
+
$type = strtolower($type);
|
236 |
+
switch ($type)
|
237 |
+
{
|
238 |
+
case 'get':
|
239 |
+
$parray = &$this->paramsGet;
|
240 |
+
break;
|
241 |
+
case 'post':
|
242 |
+
$parray = &$this->paramsPost;
|
243 |
+
break;
|
244 |
+
}
|
245 |
+
|
246 |
+
if ($value === null)
|
247 |
+
{
|
248 |
+
if (isset($parray[$name]))
|
249 |
+
unset($parray[$name]);
|
250 |
+
} else
|
251 |
+
{
|
252 |
+
$parray[$name] = $value;
|
253 |
+
}
|
254 |
+
}
|
255 |
+
|
256 |
+
public function setTimeout($value)
|
257 |
+
{
|
258 |
+
$this->timeout = $value;
|
259 |
+
}
|
260 |
+
|
261 |
+
public function setSslVerify($value)
|
262 |
+
{
|
263 |
+
$this->sslverify = $value;
|
264 |
+
}
|
265 |
+
|
266 |
+
public function setUserAgent($value)
|
267 |
+
{
|
268 |
+
$this->useragent = $value;
|
269 |
+
}
|
270 |
+
|
271 |
+
public function setRedirection($value)
|
272 |
+
{
|
273 |
+
$this->redirection = $value;
|
274 |
+
}
|
275 |
+
|
276 |
+
/**
|
277 |
+
* Prepare the request body (for POST and PUT requests)
|
278 |
+
*
|
279 |
+
* @return string
|
280 |
+
*/
|
281 |
+
protected function _prepareBody()
|
282 |
+
{
|
283 |
+
// According to RFC2616, a TRACE request should not have a body.
|
284 |
+
if ($this->method == self::TRACE)
|
285 |
+
{
|
286 |
+
return '';
|
287 |
+
}
|
288 |
+
|
289 |
+
// If we have raw_post_data set, just use it as the body.
|
290 |
+
if (isset($this->raw_post_data))
|
291 |
+
{
|
292 |
+
$this->setHeaders('Content-length', strlen($this->raw_post_data));
|
293 |
+
return $this->raw_post_data;
|
294 |
+
}
|
295 |
+
|
296 |
+
$body = '';
|
297 |
+
|
298 |
+
// If we have POST parameters, encode and add them to the body
|
299 |
+
if (count($this->paramsPost) > 0)
|
300 |
+
{
|
301 |
+
|
302 |
+
// Encode body as application/x-www-form-urlencoded
|
303 |
+
$this->setHeaders('Content-type', self::ENC_URLENCODED);
|
304 |
+
$body = http_build_query($this->paramsPost, '', '&');
|
305 |
+
}
|
306 |
+
|
307 |
+
// Set the content-length if we have a body or if request is POST/PUT
|
308 |
+
if ($body || $this->method == self::POST || $this->method == self::PUT)
|
309 |
+
{
|
310 |
+
$this->setHeaders('Content-length', strlen($body));
|
311 |
+
}
|
312 |
+
|
313 |
+
return $body;
|
314 |
+
}
|
315 |
+
|
316 |
+
/**
|
317 |
+
* Prepare the request headers
|
318 |
+
*
|
319 |
+
* @return array
|
320 |
+
*/
|
321 |
+
protected function _prepareHeaders()
|
322 |
+
{
|
323 |
+
$headers = array();
|
324 |
+
// Set the host header
|
325 |
+
if (!isset($this->headers['host']))
|
326 |
+
{
|
327 |
+
$host = parse_url($this->uri, PHP_URL_HOST);
|
328 |
+
$headers['Host'] = "{$host}";
|
329 |
+
}
|
330 |
+
|
331 |
+
// Set the connection header
|
332 |
+
if (!isset($this->headers['connection']))
|
333 |
+
{
|
334 |
+
$headers['Connection'] = "close";
|
335 |
+
}
|
336 |
+
|
337 |
+
// Set the Accept-encoding header if not set - depending on whether
|
338 |
+
// zlib is available or not.
|
339 |
+
if (!isset($this->headers['accept-encoding']))
|
340 |
+
{
|
341 |
+
if (function_exists('gzinflate'))
|
342 |
+
{
|
343 |
+
$headers['Accept-encoding'] = 'gzip, deflate';
|
344 |
+
} else
|
345 |
+
{
|
346 |
+
$headers['Accept-encoding'] = 'identity';
|
347 |
+
}
|
348 |
+
}
|
349 |
+
|
350 |
+
// Set the content-type header
|
351 |
+
if ($this->method == self::POST &&
|
352 |
+
(!isset($this->headers['content-type']) && isset($this->enctype)))
|
353 |
+
{
|
354 |
+
|
355 |
+
$headers['Content-type'] = "{$this->enctype}";
|
356 |
+
}
|
357 |
+
|
358 |
+
// Add all other user defined headers
|
359 |
+
foreach ($this->headers as $header)
|
360 |
+
{
|
361 |
+
list($name, $value) = $header;
|
362 |
+
if (is_array($value))
|
363 |
+
$value = implode(', ', $value);
|
364 |
+
|
365 |
+
$headers[$name] = $value;
|
366 |
+
}
|
367 |
+
return $headers;
|
368 |
+
}
|
369 |
+
|
370 |
+
protected function _prepareParams()
|
371 |
+
{
|
372 |
+
$options = array();
|
373 |
+
$options['method'] = $this->method;
|
374 |
+
|
375 |
+
if ($this->timeout !== null)
|
376 |
+
$options['timeout'] = $this->timeout;
|
377 |
+
if ($this->sslverify !== null)
|
378 |
+
$options['sslverify'] = $this->sslverify;
|
379 |
+
if ($this->useragent !== null)
|
380 |
+
$options['user-agent'] = $this->useragent;
|
381 |
+
if ($this->redirection !== null)
|
382 |
+
$options['redirection'] = $this->redirection;
|
383 |
+
|
384 |
+
$options['headers'] = $this->_prepareHeaders();
|
385 |
+
$options['body'] = $this->_prepareBody();
|
386 |
+
return $options;
|
387 |
+
}
|
388 |
+
|
389 |
+
public function request($method = null)
|
390 |
+
{
|
391 |
+
if (!$this->uri)
|
392 |
+
throw new \Exception('No valid URI has been passed to the client');
|
393 |
+
|
394 |
+
if ($method)
|
395 |
+
$this->setMethod($method);
|
396 |
+
|
397 |
+
// Add the additional GET parameters to uri
|
398 |
+
if (!empty($this->paramsGet))
|
399 |
+
{
|
400 |
+
$query = parse_url($this->uri, PHP_URL_QUERY);
|
401 |
+
if (!empty($query))
|
402 |
+
$this->uri .= '&';
|
403 |
+
else
|
404 |
+
$this->uri .= '?';
|
405 |
+
$this->uri .= http_build_query($this->paramsGet, null, '&');
|
406 |
+
}
|
407 |
+
|
408 |
+
$this->last_response = \wp_remote_request($this->uri, $this->_prepareParams());
|
409 |
+
return $this->last_response;
|
410 |
+
}
|
411 |
+
|
412 |
+
public function setRawData($data, $enctype = null)
|
413 |
+
{
|
414 |
+
$this->raw_post_data = $data;
|
415 |
+
//$this->setEncType($enctype);
|
416 |
+
}
|
417 |
+
|
418 |
+
/**
|
419 |
+
* Clear all GET and POST parameters
|
420 |
+
*
|
421 |
+
* Should be used to reset the request parameters if the client is
|
422 |
+
* used for several concurrent requests.
|
423 |
+
*
|
424 |
+
*/
|
425 |
+
public function resetParameters()
|
426 |
+
{
|
427 |
+
// Reset parameter data
|
428 |
+
$this->paramsGet = array();
|
429 |
+
$this->paramsPost = array();
|
430 |
+
$this->raw_post_data = null;
|
431 |
+
|
432 |
+
// Reset headers
|
433 |
+
$allowed_headers = array('accept-charset');
|
434 |
+
foreach ($this->headers as $header => $val)
|
435 |
+
{
|
436 |
+
if (!in_array($header, $allowed_headers))
|
437 |
+
unset($this->headers[$header]);
|
438 |
+
}
|
439 |
+
}
|
440 |
+
|
441 |
+
/**
|
442 |
+
* Get the last HTTP request as string
|
443 |
+
*/
|
444 |
+
/*
|
445 |
+
public function getLastRequest()
|
446 |
+
{
|
447 |
+
return $this->last_request;
|
448 |
+
}
|
449 |
+
*
|
450 |
+
*/
|
451 |
+
|
452 |
+
/**
|
453 |
+
* Get the last HTTP response received by this client
|
454 |
+
*/
|
455 |
+
public function getLastResponse()
|
456 |
+
{
|
457 |
+
return $this->last_response;
|
458 |
+
}
|
459 |
+
|
460 |
+
}
|
application/libs/amazon/AmazonProduct.php
ADDED
@@ -0,0 +1,430 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\libs\amazon;
|
4 |
+
|
5 |
+
use ContentEgg\application\libs\RestClient;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* PHP interface to Amazon Product Advertising API
|
9 |
+
* Modified version of Services_Amazon pear class
|
10 |
+
*
|
11 |
+
* @author keywordrush.com <support@keywordrush.com>
|
12 |
+
* @link http://www.keywordrush.com/
|
13 |
+
* @copyright Copyright © 2015 keywordrush.com
|
14 |
+
*
|
15 |
+
* @link http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/ Amazon Product Advertising API
|
16 |
+
*/
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Original PEAR License:
|
20 |
+
*
|
21 |
+
* LICENSE: Copyright 2004-2009 John Downey. All rights reserved.
|
22 |
+
*
|
23 |
+
* Redistribution and use in source and binary forms, with or without
|
24 |
+
* modification, are permitted provided that the following conditions are met:
|
25 |
+
*
|
26 |
+
* o Redistributions of source code must retain the above copyright notice, this
|
27 |
+
* list of conditions and the following disclaimer.
|
28 |
+
* o Redistributions in binary form must reproduce the above copyright notice,
|
29 |
+
* this list of conditions and the following disclaimer in the documentation
|
30 |
+
* and/or other materials provided with the distribution.
|
31 |
+
*
|
32 |
+
* THIS SOFTWARE IS PROVIDED BY THE FREEBSD PROJECT "AS IS" AND ANY EXPRESS OR
|
33 |
+
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
34 |
+
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
35 |
+
* EVENT SHALL THE FREEBSD PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
36 |
+
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
37 |
+
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
38 |
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
39 |
+
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
40 |
+
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
41 |
+
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
42 |
+
*
|
43 |
+
* The views and conclusions contained in the software and documentation are
|
44 |
+
* those of the authors and should not be interpreted as representing official
|
45 |
+
* policies, either expressed or implied, of The PEAR Group.
|
46 |
+
*
|
47 |
+
* @category Web Services
|
48 |
+
* @package Services_Amazon
|
49 |
+
* @author John Downey <jdowney@gmail.com>
|
50 |
+
* @author Tatsuya Tsuruoka <tatsuya.tsuruoka@gmail.com>
|
51 |
+
* @copyright 2004-2009 John Downey
|
52 |
+
* @license http://www.freebsd.org/copyright/freebsd-license.html 2 Clause BSD License
|
53 |
+
* @version CVS: $Id: Amazon.php,v 1.4 2007/12/16 17:27:44 ttsuruoka Exp $
|
54 |
+
* @link http://pear.php.net/package/Services_Amazon/
|
55 |
+
* @filesource
|
56 |
+
*/
|
57 |
+
class AmazonProduct extends RestClient {
|
58 |
+
|
59 |
+
const API_VERSION = '2011-08-01';
|
60 |
+
|
61 |
+
private $_access_key_id;
|
62 |
+
private $_secret_access_key;
|
63 |
+
private $_associate_tag;
|
64 |
+
private $_timestamp = null;
|
65 |
+
private $_locale;
|
66 |
+
|
67 |
+
/**
|
68 |
+
* @var array Response Format Types
|
69 |
+
*/
|
70 |
+
protected $_responseTypes = array(
|
71 |
+
'xml',
|
72 |
+
);
|
73 |
+
|
74 |
+
//private static $_httpClient;
|
75 |
+
|
76 |
+
public function __construct($access_key_id, $secret_access_key, $associate_tag)
|
77 |
+
{
|
78 |
+
$this->_access_key_id = $access_key_id;
|
79 |
+
$this->_secret_access_key = $secret_access_key;
|
80 |
+
$this->_associate_tag = $associate_tag;
|
81 |
+
$this->setLocale('us');
|
82 |
+
$this->setResponseType('xml');
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Sets the locale passed when making a query to Amazon
|
87 |
+
* Currently us, uk, de, jp, fr, ca, cn, it, es are supported
|
88 |
+
* @param string $locale The new locale to use
|
89 |
+
* @link: http://docs.aws.amazon.com/AWSECommerceService/latest/DG/Locales.html
|
90 |
+
*/
|
91 |
+
public function setLocale($locale)
|
92 |
+
{
|
93 |
+
//не все urls соответствуют документации
|
94 |
+
$urls = array(
|
95 |
+
'us' => 'http://ecs.amazonaws.com/onca/xml',
|
96 |
+
'uk' => 'http://ecs.amazonaws.co.uk/onca/xml',
|
97 |
+
'de' => 'http://ecs.amazonaws.de/onca/xml',
|
98 |
+
'jp' => 'http://webservices.amazon.co.jp/onca/xml',
|
99 |
+
'cn' => 'http://webservices.amazon.cn/onca/xml',
|
100 |
+
'fr' => 'http://ecs.amazonaws.fr/onca/xml',
|
101 |
+
'it' => 'http://webservices.amazon.it/onca/xml',
|
102 |
+
'es' => 'http://webservices.amazon.es/onca/xml',
|
103 |
+
'ca' => 'http://ecs.amazonaws.ca/onca/xml',
|
104 |
+
'br' => 'http://ecs.amazonaws.br/onca/xml',
|
105 |
+
'in' => 'http://ecs.amazonaws.in/onca/xml',
|
106 |
+
);
|
107 |
+
if (!isset($urls[$locale]))
|
108 |
+
{
|
109 |
+
throw new \Exception('Invalid amazon locale');
|
110 |
+
}
|
111 |
+
$this->_locale = $locale;
|
112 |
+
$this->setUri($urls[$locale]);
|
113 |
+
return true;
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Sets a timestamp (for debugging)
|
118 |
+
*
|
119 |
+
* @param integer $time A timestamp
|
120 |
+
*/
|
121 |
+
public function setTimestamp($time)
|
122 |
+
{
|
123 |
+
$this->_timestamp = $time;
|
124 |
+
}
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Searches for products
|
128 |
+
*
|
129 |
+
* Example:
|
130 |
+
* <code>
|
131 |
+
* <?php
|
132 |
+
* $amazon = new Services_Amazon('[your Access Key ID here]', '[your Secret Access key here]');
|
133 |
+
* $options = array();
|
134 |
+
* $options['Keywords'] = 'sushi';
|
135 |
+
* $options['Sort'] = 'salesrank';
|
136 |
+
* $options['ResponseGroup'] = 'ItemIds,ItemAttributes,Images';
|
137 |
+
* $result = $amazon->ItemSearch('Books', $options);
|
138 |
+
* ?>
|
139 |
+
* </code>
|
140 |
+
*
|
141 |
+
* @access public
|
142 |
+
* @param string $search_index A search index
|
143 |
+
* @param array $options The optional parameters
|
144 |
+
* @return array The array of information returned by the query
|
145 |
+
*/
|
146 |
+
public function ItemSearch($search_index, $options = array())
|
147 |
+
{
|
148 |
+
$params = $options;
|
149 |
+
$params['Operation'] = 'ItemSearch';
|
150 |
+
$params['SearchIndex'] = $search_index;
|
151 |
+
|
152 |
+
$response = $this->signedGet('', $params);
|
153 |
+
$decoded = $this->_decodeResponse($response);
|
154 |
+
return $this->_parseResult($decoded);
|
155 |
+
}
|
156 |
+
|
157 |
+
/**
|
158 |
+
* Retrieves information for products
|
159 |
+
*
|
160 |
+
* Example:
|
161 |
+
* <code>
|
162 |
+
* <?php
|
163 |
+
* $amazon = new Services_Amazon('[your Access Key ID here]', '[your Secret Access key here]');
|
164 |
+
* $options = array();
|
165 |
+
* $options['ResponseGroup'] = 'Large';
|
166 |
+
* $result = $amazon->ItemLookup('[ASIN(s)]', $options);
|
167 |
+
* ?>
|
168 |
+
* </code>
|
169 |
+
*
|
170 |
+
* @access public
|
171 |
+
* @param string $item_id Product IDs
|
172 |
+
* @param array $options The optional parameters
|
173 |
+
* @return array The array of information returned by the query
|
174 |
+
* @see ItemSearch()
|
175 |
+
*/
|
176 |
+
function ItemLookup($item_id, $options = array())
|
177 |
+
{
|
178 |
+
$params = $options;
|
179 |
+
$params['Operation'] = 'ItemLookup';
|
180 |
+
if (is_array($item_id))
|
181 |
+
{
|
182 |
+
$item_id = implode(',', $item_id);
|
183 |
+
}
|
184 |
+
$params['ItemId'] = $item_id;
|
185 |
+
|
186 |
+
$response = $this->signedGet('', $params);
|
187 |
+
$decoded = $this->_decodeResponse($response);
|
188 |
+
return $this->_parseResult($decoded);
|
189 |
+
}
|
190 |
+
|
191 |
+
/**
|
192 |
+
* Encode URL according to RFC 3986
|
193 |
+
* @param string $str UTF-8 string
|
194 |
+
* @return string Encoded string
|
195 |
+
*/
|
196 |
+
private function _urlencode($str)
|
197 |
+
{
|
198 |
+
return str_replace('%7E', '~', rawurlencode($str));
|
199 |
+
}
|
200 |
+
|
201 |
+
/**
|
202 |
+
* Create an HMAC-SHA256
|
203 |
+
* @param string $string_to_sign
|
204 |
+
* @param string $secret_access_key
|
205 |
+
* @return string hash
|
206 |
+
*/
|
207 |
+
private function _hash($string_to_sign, $secret_access_key)
|
208 |
+
{
|
209 |
+
if (function_exists('hash_hmac'))
|
210 |
+
{
|
211 |
+
return hash_hmac('sha256', $string_to_sign, $secret_access_key, true);
|
212 |
+
} elseif (function_exists('mhash'))
|
213 |
+
{
|
214 |
+
return mhash(MHASH_SHA256, $string_to_sign, $secret_access_key);
|
215 |
+
} else
|
216 |
+
{
|
217 |
+
throw new \Exception('hash_hmac or mhash function is required.');
|
218 |
+
}
|
219 |
+
}
|
220 |
+
|
221 |
+
/**
|
222 |
+
* Builds a URL
|
223 |
+
*
|
224 |
+
* @access private
|
225 |
+
* @param array $params
|
226 |
+
* @return string URL
|
227 |
+
*/
|
228 |
+
function _buildUrl($params)
|
229 |
+
{
|
230 |
+
$params['Service'] = 'AWSECommerceService';
|
231 |
+
$params['AWSAccessKeyId'] = $this->_access_key_id;
|
232 |
+
if (!empty($this->_associate_tag))
|
233 |
+
{
|
234 |
+
$params['AssociateTag'] = $this->_associate_tag;
|
235 |
+
}
|
236 |
+
$params['Timestamp'] = gmdate('Y-m-d\TH:i:s\Z', is_null($this->_timestamp) ? time() : $this->_timestamp);
|
237 |
+
$params['Version'] = self::API_VERSION;
|
238 |
+
|
239 |
+
// sort parameters
|
240 |
+
ksort($params);
|
241 |
+
|
242 |
+
// create a canonical string
|
243 |
+
$canonical_string = '';
|
244 |
+
foreach ($params as $k => $v)
|
245 |
+
{
|
246 |
+
$canonical_string .= '&' . $this->_urlencode($k) . '=' . $this->_urlencode($v);
|
247 |
+
}
|
248 |
+
$canonical_string = substr($canonical_string, 1);
|
249 |
+
|
250 |
+
// create a signature for request
|
251 |
+
$parsed_url = parse_url($this->getUri());
|
252 |
+
$string_to_sign = "GET\n{$parsed_url['host']}\n{$parsed_url['path']}\n{$canonical_string}";
|
253 |
+
$signature = $this->_hash($string_to_sign, $this->_secret_access_key);
|
254 |
+
$signature = base64_encode($signature);
|
255 |
+
|
256 |
+
// create a signed url
|
257 |
+
$url = $this->getUri() . '?' . $canonical_string . '&Signature=' . $this->_urlencode($signature);
|
258 |
+
|
259 |
+
return $url;
|
260 |
+
}
|
261 |
+
|
262 |
+
public function signedGet($path, array $query = null)
|
263 |
+
{
|
264 |
+
$url = $this->_buildUrl($query);
|
265 |
+
return $this->restGet($url, $query);
|
266 |
+
}
|
267 |
+
|
268 |
+
/**
|
269 |
+
* Parses raw XML result
|
270 |
+
*
|
271 |
+
* @param string $raw_result
|
272 |
+
* @return array amazon items.
|
273 |
+
*/
|
274 |
+
private function _parseResult($data)
|
275 |
+
{
|
276 |
+
// Обработка ошибки
|
277 |
+
if (isset($data['Items']['Request']['Errors']['Error']))
|
278 |
+
{
|
279 |
+
$err_message = 'Unknown error';
|
280 |
+
$errors = $data['Items']['Request']['Errors']['Error'];
|
281 |
+
if (isset($errors['Message']))
|
282 |
+
$err_message = $errors['Message'];
|
283 |
+
|
284 |
+
throw new \Exception($err_message);
|
285 |
+
}
|
286 |
+
|
287 |
+
if (!isset($data['Items']['Item']))
|
288 |
+
return array();
|
289 |
+
if (!isset($data['Items']['Item'][0]) && isset($data['Items']['Item']['ASIN']))
|
290 |
+
$data['Items']['Item'] = array($data['Items']['Item']);
|
291 |
+
|
292 |
+
return $data;
|
293 |
+
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
* Parses error from XML result
|
297 |
+
*
|
298 |
+
* @param string $raw_result
|
299 |
+
* @return string Error message.
|
300 |
+
*/
|
301 |
+
/*
|
302 |
+
private function _parseRawError($raw_result)
|
303 |
+
{
|
304 |
+
|
305 |
+
$data = Helper::unserialize_xml($raw_result);
|
306 |
+
$error = '';
|
307 |
+
if (isset($data['Error']['Code']))
|
308 |
+
$error = $data['Error']['Code'];
|
309 |
+
|
310 |
+
if (isset($data['Error']['Message']))
|
311 |
+
$error .= ' : ' . $data['Error']['Message'];
|
312 |
+
return $error;
|
313 |
+
}
|
314 |
+
*
|
315 |
+
*/
|
316 |
+
|
317 |
+
/**
|
318 |
+
* Amazon customer reviews parser
|
319 |
+
* @param string $url iframe reviews url
|
320 |
+
*/
|
321 |
+
public function parseCustomerReviews($url, $locale = 'us')
|
322 |
+
{
|
323 |
+
try
|
324 |
+
{
|
325 |
+
$html = $this->restGet($url);
|
326 |
+
} catch (\Exception $e)
|
327 |
+
{
|
328 |
+
return array();
|
329 |
+
}
|
330 |
+
if (!$html)
|
331 |
+
return array();
|
332 |
+
|
333 |
+
// Исправим кодировку
|
334 |
+
// US, UK - ISO-8859-1
|
335 |
+
// DE, FR, CA - ISO-8859-15
|
336 |
+
// JP - Shift_JIS
|
337 |
+
if ($locale == "jp" && function_exists('iconv'))
|
338 |
+
$html = iconv("Shift_JIS", "utf-8", $html);
|
339 |
+
else
|
340 |
+
$html = utf8_encode($html);
|
341 |
+
|
342 |
+
if (strstr($html, 'There are no customer reviews for this item'))
|
343 |
+
return array();
|
344 |
+
$result = array();
|
345 |
+
|
346 |
+
// Сначала парсим общую информацию по обзорам
|
347 |
+
$totalreviews = $avarage_rating = 0;
|
348 |
+
preg_match("/=\"crIFrameHeaderLeftColumn.+?=\"crIFrameHeaderHistogram/msi", $html, $header_html);
|
349 |
+
if ($header_html)
|
350 |
+
{
|
351 |
+
$header_html = $header_html[0];
|
352 |
+
|
353 |
+
//prnx($header_html);
|
354 |
+
// Total Reviews
|
355 |
+
preg_match('/>([\d,]+)\s.+?\)<\/span>/', $header_html, $matches);
|
356 |
+
$totalreviews = $matches ? $matches[1] : 0;
|
357 |
+
|
358 |
+
// Avarage Rating
|
359 |
+
preg_match('/<img.+?alt="(\d\.\d).+?"/', $header_html, $matches);
|
360 |
+
$avarage_rating = $matches ? $matches[1] : 0;
|
361 |
+
unset($header_html);
|
362 |
+
}
|
363 |
+
$result['AverageRating'] = $avarage_rating;
|
364 |
+
$result['TotalReviews'] = $totalreviews;
|
365 |
+
|
366 |
+
// Парсим блоки с Review
|
367 |
+
preg_match_all("/<\!\-\-\sBOUNDARY\s\-\->(.+?)<div\sstyle=\"padding-top:\s10px;\sclear:\sboth;\swidth:\s100%;\">/msi", $html, $matches);
|
368 |
+
unset($html);
|
369 |
+
if (!$matches)
|
370 |
+
return array();
|
371 |
+
|
372 |
+
$reviews = array();
|
373 |
+
$i = 0;
|
374 |
+
foreach ($matches[1] as $review_blok)
|
375 |
+
{
|
376 |
+
$reviews[$i] = array();
|
377 |
+
|
378 |
+
// Reviews Content
|
379 |
+
preg_match("/class=\"reviewText\">(.+?)<\/div>/msi", $review_blok, $matches);
|
380 |
+
if (!$matches)
|
381 |
+
preg_match("/^.+<\/div>?(.+?)\z/msi", $review_blok, $matches);
|
382 |
+
if (!$matches)
|
383 |
+
continue;
|
384 |
+
$content = '';
|
385 |
+
$content = $matches[1];
|
386 |
+
$content = preg_replace("/<a.+?<\/a>/", "", $content);
|
387 |
+
$content = trim(strip_tags($content));
|
388 |
+
$content = preg_replace("/\r/", " ", $content);
|
389 |
+
$content = preg_replace("/\n/", " ", $content);
|
390 |
+
if (!$content)
|
391 |
+
continue;
|
392 |
+
$reviews[$i]['Content'] = $content;
|
393 |
+
|
394 |
+
// Reviews Summary & Date
|
395 |
+
preg_match("/<b>(.+)<\/b>,\s<nobr>(.+)<\/nobr>/", $review_blok, $matches);
|
396 |
+
if ($matches)
|
397 |
+
{
|
398 |
+
$reviews[$i]['Summary'] = trim(strip_tags($matches[1])); //Summary
|
399 |
+
$reviews[$i]['Date'] = strtotime(trim(strip_tags($matches[2]))); //Date
|
400 |
+
if (!$reviews[$i]['Date'])
|
401 |
+
$reviews[$i]['Date'] = time();
|
402 |
+
} else
|
403 |
+
{
|
404 |
+
$reviews[$i]['Summary'] = '';
|
405 |
+
$reviews[$i]['Date'] = time();
|
406 |
+
}
|
407 |
+
|
408 |
+
// Customer Name
|
409 |
+
preg_match("/<span.+?>(.+?)<\/span><\/a>/", $review_blok, $matches);
|
410 |
+
if ($matches)
|
411 |
+
$reviews[$i]['Name'] = trim(strip_tags($matches[1]));
|
412 |
+
else
|
413 |
+
$reviews[$i]['Name'] = '';
|
414 |
+
|
415 |
+
// Rating
|
416 |
+
preg_match('/<img.+?alt="(\d\.\d).+?"/', $review_blok, $matches);
|
417 |
+
if ($matches)
|
418 |
+
$reviews[$i]['Rating'] = trim(strip_tags($matches[1]));
|
419 |
+
else
|
420 |
+
$reviews[$i]['Rating'] = 4.0;
|
421 |
+
|
422 |
+
$i++;
|
423 |
+
}
|
424 |
+
unset($matches);
|
425 |
+
$result['Reviews'] = $reviews;
|
426 |
+
//prnx($result);
|
427 |
+
return $result;
|
428 |
+
}
|
429 |
+
|
430 |
+
}
|
application/libs/google/FreebaseRest.php
ADDED
@@ -0,0 +1,133 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\libs\google;
|
4 |
+
|
5 |
+
use ContentEgg\application\libs\RestClient;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* FreebaseRest class file
|
9 |
+
*
|
10 |
+
* @author keywordrush.com <support@keywordrush.com>
|
11 |
+
* @link http://www.keywordrush.com/
|
12 |
+
* @copyright Copyright © 2014 keywordrush.com
|
13 |
+
*/
|
14 |
+
/**
|
15 |
+
* FreebaseRest класс для работы с Freebase API.
|
16 |
+
* @link: https://developers.google.com/freebase/index
|
17 |
+
*/
|
18 |
+
require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'RestClient.php';
|
19 |
+
|
20 |
+
class FreebaseRest extends RestClient {
|
21 |
+
|
22 |
+
const API_URI_BASE = 'https://www.googleapis.com/freebase/v1';
|
23 |
+
|
24 |
+
private $apiKey;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* @var array Response Format Types
|
28 |
+
*/
|
29 |
+
protected $_responseTypes = array(
|
30 |
+
'json',
|
31 |
+
);
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Constructor
|
35 |
+
* @param string API Key
|
36 |
+
* @param string $responseType
|
37 |
+
*/
|
38 |
+
public function __construct($key)
|
39 |
+
{
|
40 |
+
$this->setUri(self::API_URI_BASE);
|
41 |
+
$this->setApiKey($key);
|
42 |
+
$this->setResponseType('json');
|
43 |
+
}
|
44 |
+
|
45 |
+
public function setApiKey($key)
|
46 |
+
{
|
47 |
+
$this->apiKey = $key;
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Freebase Search API
|
52 |
+
* @link: https://developers.google.com/freebase/v1/search
|
53 |
+
* @param string $query
|
54 |
+
* @param array $params
|
55 |
+
*/
|
56 |
+
public function search($query, $params)
|
57 |
+
{
|
58 |
+
$_query = array();
|
59 |
+
$_query['query'] = $query;
|
60 |
+
$_query['key'] = $this->apiKey;
|
61 |
+
foreach ($params as $key => $param)
|
62 |
+
{
|
63 |
+
switch ($key)
|
64 |
+
{
|
65 |
+
case 'lang':
|
66 |
+
case 'filter':
|
67 |
+
$_query[$key] = $param;
|
68 |
+
break;
|
69 |
+
case 'limit':
|
70 |
+
case 'start':
|
71 |
+
$_query[$key] = ((int) $param > 100) ? 100 : (int) $param;
|
72 |
+
break;
|
73 |
+
}
|
74 |
+
}
|
75 |
+
$response = $this->restGet('/search', $_query);
|
76 |
+
return $this->_decodeResponse($response);
|
77 |
+
}
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Freebase Topic API
|
81 |
+
* @link: https://developers.google.com/freebase/v1/topic-overview
|
82 |
+
* @param string $topic_id Topic ID
|
83 |
+
* @param string $filter
|
84 |
+
*/
|
85 |
+
public function topic($topic_id, $lang = null, $filter = null)
|
86 |
+
{
|
87 |
+
$_query = array();
|
88 |
+
$_query['key'] = $this->apiKey;
|
89 |
+
if ($lang)
|
90 |
+
$_query['lang'] = $lang;
|
91 |
+
if ($filter)
|
92 |
+
$_query['filter'] = $filter;
|
93 |
+
$response = $this->restGet('/topic' . $topic_id, $_query);
|
94 |
+
return $this->_decodeResponse($response);
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Сначала находит ID топиков, а потом запрашивает подробную
|
99 |
+
* инфу по каждому топику.
|
100 |
+
* @param string $query
|
101 |
+
* @param array $params
|
102 |
+
* @param string $filter
|
103 |
+
*/
|
104 |
+
public function fullSearch($query, $params, $filter = null)
|
105 |
+
{
|
106 |
+
|
107 |
+
$results = $this->search($query, $params);
|
108 |
+
if (empty($results['result']))
|
109 |
+
return array();
|
110 |
+
|
111 |
+
$data = array();
|
112 |
+
foreach ($results['result'] as $res)
|
113 |
+
{
|
114 |
+
if (empty($res['mid']))
|
115 |
+
continue;
|
116 |
+
try
|
117 |
+
{
|
118 |
+
if (!empty($params['lang']))
|
119 |
+
$lang = $params['lang'];
|
120 |
+
else
|
121 |
+
$lang = null;
|
122 |
+
$topic = $this->topic($res['mid'], $lang, $filter);
|
123 |
+
} catch (Exception $e)
|
124 |
+
{
|
125 |
+
// Не получили инфу по топику. Пропускаем?
|
126 |
+
continue;
|
127 |
+
}
|
128 |
+
$data[] = $topic;
|
129 |
+
}
|
130 |
+
return $data;
|
131 |
+
}
|
132 |
+
|
133 |
+
}
|
application/libs/google/ImagesSearch.php
ADDED
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\libs\google;
|
4 |
+
|
5 |
+
use ContentEgg\application\libs\RestClient;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* ImagesSearch class file
|
9 |
+
*
|
10 |
+
* @author keywordrush.com <support@keywordrush.com>
|
11 |
+
* @link http://www.keywordrush.com/
|
12 |
+
* @copyright Copyright © 2015 keywordrush.com
|
13 |
+
*
|
14 |
+
* @link: https://developers.google.com/youtube/v3/docs/search/list
|
15 |
+
*
|
16 |
+
*/
|
17 |
+
require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'RestClient.php';
|
18 |
+
|
19 |
+
class ImagesSearch extends RestClient {
|
20 |
+
|
21 |
+
const API_URI_BASE = 'https://ajax.googleapis.com/ajax/services/search';
|
22 |
+
const API_VERSION = '1.0';
|
23 |
+
|
24 |
+
/**
|
25 |
+
* @var array Response Format Types
|
26 |
+
*/
|
27 |
+
protected $_responseTypes = array(
|
28 |
+
'atom',
|
29 |
+
'json',
|
30 |
+
);
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Constructor
|
34 |
+
* @param string $responseType
|
35 |
+
*/
|
36 |
+
public function __construct($responseType = 'json')
|
37 |
+
{
|
38 |
+
$this->setResponseType($responseType);
|
39 |
+
$this->setUri(self::API_URI_BASE);
|
40 |
+
}
|
41 |
+
|
42 |
+
public function search($query, array $params = array())
|
43 |
+
{
|
44 |
+
$_query = array();
|
45 |
+
$_query['v'] = self::API_VERSION;
|
46 |
+
$_query['q'] = $query;
|
47 |
+
|
48 |
+
foreach ($params as $key => $param)
|
49 |
+
{
|
50 |
+
switch ($key)
|
51 |
+
{
|
52 |
+
case 'as_filetype':
|
53 |
+
case 'as_rights':
|
54 |
+
case 'as_sitesearch':
|
55 |
+
case 'hl':
|
56 |
+
case 'imgc':
|
57 |
+
case 'imgcolor':
|
58 |
+
case 'imgsz':
|
59 |
+
case 'imgtype':
|
60 |
+
case 'restrict':
|
61 |
+
case 'safe':
|
62 |
+
case 'start':
|
63 |
+
case 'userip':
|
64 |
+
$_query[$key] = $param;
|
65 |
+
break;
|
66 |
+
case 'rsz':
|
67 |
+
$_query[$key] = ((int) $param > 8) ? 8 : (int) $param;
|
68 |
+
break;
|
69 |
+
}
|
70 |
+
}
|
71 |
+
$response = $this->restGet('/images', $_query);
|
72 |
+
return $this->_decodeResponse($response);
|
73 |
+
}
|
74 |
+
|
75 |
+
}
|
application/libs/google/YouTubeSearch.php
ADDED
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\libs\google;
|
4 |
+
|
5 |
+
use ContentEgg\application\libs\RestClient;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* YouTubeSearch class file
|
9 |
+
*
|
10 |
+
* @author keywordrush.com <support@keywordrush.com>
|
11 |
+
* @link http://www.keywordrush.com/
|
12 |
+
* @copyright Copyright © 2015 keywordrush.com
|
13 |
+
*
|
14 |
+
* @link: https://developers.google.com/youtube/v3/docs/search/list
|
15 |
+
*
|
16 |
+
*/
|
17 |
+
require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'RestClient.php';
|
18 |
+
|
19 |
+
class YouTubeSearch extends RestClient {
|
20 |
+
|
21 |
+
const API_URI_BASE = 'https://www.googleapis.com/youtube/v3';
|
22 |
+
|
23 |
+
/**
|
24 |
+
* @var array Response Format Types
|
25 |
+
*/
|
26 |
+
protected $_responseTypes = array(
|
27 |
+
'atom',
|
28 |
+
'json',
|
29 |
+
);
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Constructor
|
33 |
+
* @param string $responseType
|
34 |
+
*/
|
35 |
+
public function __construct($responseType = 'json')
|
36 |
+
{
|
37 |
+
$this->setResponseType($responseType);
|
38 |
+
$this->setUri(self::API_URI_BASE);
|
39 |
+
}
|
40 |
+
|
41 |
+
public function search($query, array $params = array())
|
42 |
+
{
|
43 |
+
$_query = array();
|
44 |
+
$_query['q'] = $query;
|
45 |
+
$_query['part'] = 'snippet';
|
46 |
+
$_query['videoEmbeddable'] = 'true';
|
47 |
+
$_query['type'] = 'video';
|
48 |
+
|
49 |
+
// Разработчики обычно добавляют &format=5 в свои запросы, чтобы ограничить
|
50 |
+
// результаты теми видео, которые могут быть встроены в их сайты.
|
51 |
+
//$params['format'] = 5;
|
52 |
+
|
53 |
+
foreach ($params as $key => $param)
|
54 |
+
{
|
55 |
+
switch ($key)
|
56 |
+
{
|
57 |
+
case 'relevanceLanguage':
|
58 |
+
case 'order':
|
59 |
+
//case 'format':
|
60 |
+
case 'key':
|
61 |
+
case 'part':
|
62 |
+
case 'safeSearch':
|
63 |
+
case 'channelId':
|
64 |
+
case 'videoEmbeddable':
|
65 |
+
case 'type':
|
66 |
+
case 'videoLicense':
|
67 |
+
$_query[$key] = $param;
|
68 |
+
break;
|
69 |
+
case 'maxResults':
|
70 |
+
case 'pageToken':
|
71 |
+
$_query[$key] = ((int) $param > 50) ? 50 : (int) $param;
|
72 |
+
break;
|
73 |
+
case 'strict':
|
74 |
+
$_query[$key] = ((bool) $param) ? true : false;
|
75 |
+
break;
|
76 |
+
}
|
77 |
+
}
|
78 |
+
$response = $this->restGet('/search', $_query);
|
79 |
+
return $this->_decodeResponse($response);
|
80 |
+
}
|
81 |
+
|
82 |
+
}
|
application/libs/index.php
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<?php // Silence is golden.
|
application/modules/Amazon/AmazonConfig.php
ADDED
@@ -0,0 +1,289 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\modules\Amazon;
|
4 |
+
|
5 |
+
use ContentEgg\application\components\AffiliateParserModuleConfig;
|
6 |
+
use ContentEgg\application\admin\GeneralConfig;
|
7 |
+
|
8 |
+
/**
|
9 |
+
* AmazonConfig class file
|
10 |
+
*
|
11 |
+
* @author keywordrush.com <support@keywordrush.com>
|
12 |
+
* @link http://www.keywordrush.com/
|
13 |
+
* @copyright Copyright © 2015 keywordrush.com
|
14 |
+
*/
|
15 |
+
class AmazonConfig extends AffiliateParserModuleConfig {
|
16 |
+
|
17 |
+
public function options()
|
18 |
+
{
|
19 |
+
$optiosn = array(
|
20 |
+
'access_key_id' => array(
|
21 |
+
'title' => 'Access Key ID <span class="cegg_required">*</span>',
|
22 |
+
'description' => __('Специальный ключ для доступа к Amazon API.', 'content-egg'),
|
23 |
+
'callback' => array($this, 'render_input'),
|
24 |
+
'default' => '',
|
25 |
+
'validator' => array(
|
26 |
+
'trim',
|
27 |
+
array(
|
28 |
+
'call' => array('\ContentEgg\application\helpers\FormValidator', 'required'),
|
29 |
+
'when' => 'is_active',
|
30 |
+
'message' => __('Поле "Access Key ID" не может быть пустым.', 'content-egg'),
|
31 |
+
),
|
32 |
+
),
|
33 |
+
'section' => 'default',
|
34 |
+
),
|
35 |
+
'secret_access_key' => array(
|
36 |
+
'title' => 'Secret Access Key <span class="cegg_required">*</span>',
|
37 |
+
'description' => __('Еще один специальный ключ для доступа к Amazon API.', 'content-egg'),
|
38 |
+
'callback' => array($this, 'render_input'),
|
39 |
+
'default' => '',
|
40 |
+
'validator' => array(
|
41 |
+
'trim',
|
42 |
+
array(
|
43 |
+
'call' => array('\ContentEgg\application\helpers\FormValidator', 'required'),
|
44 |
+
'when' => 'is_active',
|
45 |
+
'message' => __('Поле "Secret Access Key" не может быть пустым.', 'content-egg'),
|
46 |
+
),
|
47 |
+
),
|
48 |
+
'section' => 'default',
|
49 |
+
),
|
50 |
+
'associate_tag' => array(
|
51 |
+
'title' => 'Tracking ID <span class="cegg_required">*</span>',
|
52 |
+
'description' => __('Связь с Вашим аккаунтом в партнерке. Чтобы получать комиссию от продаж, правильно укажите этот параметр.', 'content-egg'),
|
53 |
+
'callback' => array($this, 'render_input'),
|
54 |
+
'default' => '',
|
55 |
+
'validator' => array(
|
56 |
+
'trim',
|
57 |
+
array(
|
58 |
+
'call' => array('\ContentEgg\application\helpers\FormValidator', 'required'),
|
59 |
+
'when' => 'is_active',
|
60 |
+
'message' => __('Поле "Tracking ID" не может быть пустым.', 'content-egg'),
|
61 |
+
),
|
62 |
+
),
|
63 |
+
'section' => 'default',
|
64 |
+
),
|
65 |
+
'entries_per_page' => array(
|
66 |
+
'title' => __('Результатов', 'content-egg'),
|
67 |
+
'description' => __('Количество результатов для одного поискового запроса.', 'content-egg'),
|
68 |
+
'callback' => array($this, 'render_input'),
|
69 |
+
'default' => 10,
|
70 |
+
'validator' => array(
|
71 |
+
'trim',
|
72 |
+
'absint',
|
73 |
+
array(
|
74 |
+
'call' => array('\ContentEgg\application\helpers\FormValidator', 'less_than_equal_to'),
|
75 |
+
'arg' => 10,
|
76 |
+
'message' => __('Поле "Результатов" не может быть больше 10.', 'content-egg'),
|
77 |
+
),
|
78 |
+
),
|
79 |
+
'section' => 'default',
|
80 |
+
),
|
81 |
+
'entries_per_page_update' => array(
|
82 |
+
'title' => __('Результатов для обновления', 'content-egg'),
|
83 |
+
'description' => __('Количество результатов для автоматического обновления.', 'content-egg'),
|
84 |
+
'callback' => array($this, 'render_input'),
|
85 |
+
'default' => 3,
|
86 |
+
'validator' => array(
|
87 |
+
'trim',
|
88 |
+
'absint',
|
89 |
+
array(
|
90 |
+
'call' => array('\ContentEgg\application\helpers\FormValidator', 'less_than_equal_to'),
|
91 |
+
'arg' => 10,
|
92 |
+
'message' => __('Поле "Результатов" не может быть больше 10.', 'content-egg'),
|
93 |
+
),
|
94 |
+
),
|
95 |
+
'section' => 'default',
|
96 |
+
),
|
97 |
+
'locale' => array(
|
98 |
+
'title' => __('Locale', 'content-egg'),
|
99 |
+
'description' => __('Филиал amazon. Для каждого филиала необходима отдельная регистрация в соответствующей партнерской программе.', 'content-egg'),
|
100 |
+
'callback' => array($this, 'render_dropdown'),
|
101 |
+
'dropdown_options' => self::getLocalesList(),
|
102 |
+
'default' => self::getDefaultLocale(),
|
103 |
+
'section' => 'default',
|
104 |
+
),
|
105 |
+
'link_type' => array(
|
106 |
+
'title' => __('Вид ссылок', 'content-egg'),
|
107 |
+
'description' => __('Вид партнерских ссылок. Узнайте больше про amazon <a target="_blank" href="https://affiliate-program.amazon.com/gp/associates/help/t2/a11">90 day cookie</a>.', 'content-egg'),
|
108 |
+
'callback' => array($this, 'render_dropdown'),
|
109 |
+
'dropdown_options' => array(
|
110 |
+
'product' => 'Product page',
|
111 |
+
'add_to_cart' => 'Add to cart',
|
112 |
+
),
|
113 |
+
'default' => 'product',
|
114 |
+
'section' => 'default',
|
115 |
+
),
|
116 |
+
|
117 |
+
'search_index' => array(
|
118 |
+
'title' => __('Категория для поиска', 'content-egg'),
|
119 |
+
'description' => __('Список категорий для US Amazon. Для локальных филиалов некоторые категории могут быть недоступны. Если Вы не зададите категорию для поиска, то никакие другие опции фильтрации кроме поиска по ключевому слову (например, минимальная цена или сортировка) работать не будут.', 'content-egg'),
|
120 |
+
'callback' => array($this, 'render_dropdown'),
|
121 |
+
'dropdown_options' => array('All' => '[ All ]', 'Blended' => '[ Blended ]', 'Music' => '[ Music ]', 'Video' => '[ Video ]', 'Apparel' => 'Apparel', 'Automotive' => 'Automotive', 'Baby' => 'Baby', 'Beauty' => 'Beauty', 'Books' => 'Books', 'Classical' => 'Classical', 'DigitalMusic' => 'DigitalMusic', 'DVD' => 'DVD', 'Electronics' => 'Electronics', 'GourmetFood' => 'GourmetFood', 'Grocery' => 'Grocery', 'HealthPersonalCare' => 'HealthPersonalCare', 'HomeGarden' => 'HomeGarden', 'Industrial' => 'Industrial', 'Jewelry' => 'Jewelry', 'KindleStore' => 'KindleStore', 'Kitchen' => 'Kitchen', 'Magazines' => 'Magazines', 'Merchants' => 'Merchants', 'Miscellaneous' => 'Miscellaneous', 'MP3Downloads' => 'MP3Downloads', 'MusicalInstruments' => 'MusicalInstruments', 'MusicTracks' => 'MusicTracks', 'OfficeProducts' => 'OfficeProducts', 'OutdoorLiving' => 'OutdoorLiving', 'PCHardware' => 'PCHardware', 'PetSupplies' => 'PetSupplies', 'Photo' => 'Photo', 'Shoes' => 'Shoes', 'Software' => 'Software', 'SportingGoods' => 'SportingGoods', 'Tools' => 'Tools', 'Toys' => 'Toys', 'UnboxVideo' => 'UnboxVideo', 'VHS' => 'VHS', 'VideoGames' => 'VideoGames', 'Watches' => 'Watches', 'Wireless' => 'Wireless', 'WirelessAccessories' => 'WirelessAccessories'),
|
122 |
+
'default' => 'All',
|
123 |
+
'section' => 'default',
|
124 |
+
),
|
125 |
+
'sort' => array(
|
126 |
+
'title' => __('Порядок сортировки', 'content-egg'),
|
127 |
+
'description' => __('Варианты сортировки зависят от locale и выбранной категории. Список доступных значений можно найти <a href="http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/index.html?APPNDX_SortValuesArticle.html">здесь</a>.', 'content-egg'),
|
128 |
+
'callback' => array($this, 'render_input'),
|
129 |
+
'default' => '',
|
130 |
+
'validator' => array(
|
131 |
+
'trim',
|
132 |
+
),
|
133 |
+
'section' => 'default',
|
134 |
+
),
|
135 |
+
'brouse_node' => array(
|
136 |
+
'title' => __('Brouse node', 'content-egg'),
|
137 |
+
'description' => __('Целочисленное ID "узла" на amazon. Поиск будет произведен только в этом "узле".', 'content-egg'),
|
138 |
+
'callback' => array($this, 'render_input'),
|
139 |
+
'default' => '',
|
140 |
+
'validator' => array(
|
141 |
+
'trim',
|
142 |
+
),
|
143 |
+
'section' => 'default',
|
144 |
+
),
|
145 |
+
'title' => array(
|
146 |
+
'title' => __('Поиск в названии', 'content-egg'),
|
147 |
+
'description' => __('Поиск будет произведет только по названиям товаров.', 'content-egg'),
|
148 |
+
'callback' => array($this, 'render_checkbox'),
|
149 |
+
'default' => false,
|
150 |
+
'section' => 'default',
|
151 |
+
),
|
152 |
+
'merchant_id' => array(
|
153 |
+
'title' => __('Только Amazon', 'content-egg'),
|
154 |
+
'description' => __('Выбрать товары, которые продает Amazon. Другие продавцы исключаются из поиска.', 'content-egg'),
|
155 |
+
'callback' => array($this, 'render_checkbox'),
|
156 |
+
'default' => false,
|
157 |
+
'section' => 'default',
|
158 |
+
),
|
159 |
+
'minimum_price' => array(
|
160 |
+
'title' => __('Минимальная цена', 'content-egg'),
|
161 |
+
'description' => __('Например, 8.99', 'content-egg'),
|
162 |
+
'callback' => array($this, 'render_input'),
|
163 |
+
'default' => '',
|
164 |
+
'validator' => array(
|
165 |
+
'trim',
|
166 |
+
),
|
167 |
+
'section' => 'default',
|
168 |
+
),
|
169 |
+
'maximum_price' => array(
|
170 |
+
'title' => __('Максимальная цена', 'content-egg'),
|
171 |
+
'description' => __('Например, 98.50', 'content-egg'),
|
172 |
+
'callback' => array($this, 'render_input'),
|
173 |
+
'default' => '',
|
174 |
+
'validator' => array(
|
175 |
+
'trim',
|
176 |
+
),
|
177 |
+
'section' => 'default',
|
178 |
+
),
|
179 |
+
'min_percentage_off' => array(
|
180 |
+
'title' => __('Минимальная скидка', 'content-egg'),
|
181 |
+
'description' => __('Выбрать товары со скидкой. Обязательно должна быть задана категория. Обратите внимание, эта опция работает не для всех категорий.', 'content-egg'),
|
182 |
+
'callback' => array($this, 'render_dropdown'),
|
183 |
+
'dropdown_options' => array(
|
184 |
+
'' => __('Неважно', 'content-egg'),
|
185 |
+
'5%' => '5%',
|
186 |
+
'10%' => '10%',
|
187 |
+
'15%' => '15%',
|
188 |
+
'20%' => '20%',
|
189 |
+
'25%' => '25%',
|
190 |
+
'30%' => '30%',
|
191 |
+
'35%' => '35%',
|
192 |
+
'40%' => '40%',
|
193 |
+
'45%' => '45%',
|
194 |
+
'50%' => '50%',
|
195 |
+
'60%' => '60%',
|
196 |
+
'70%' => '70%',
|
197 |
+
'80%' => '80%',
|
198 |
+
'90%' => '90%',
|
199 |
+
'95%' => '95%',
|
200 |
+
),
|
201 |
+
'default' => '',
|
202 |
+
'section' => 'default',
|
203 |
+
),
|
204 |
+
'customer_reviews' => array(
|
205 |
+
'title' => __('Парсить отзывы', 'content-egg'),
|
206 |
+
'description' => __('Парсить отзывы покупателей по товарам. Это замедляет получение данных.', 'content-egg'),
|
207 |
+
'callback' => array($this, 'render_checkbox'),
|
208 |
+
'default' => false,
|
209 |
+
'section' => 'default',
|
210 |
+
),
|
211 |
+
'customer_reviews_iframe' => array(
|
212 |
+
'title' => __('Отзывы в iframe.', 'content-egg'),
|
213 |
+
'description' => __('Показывать отзывы покупателей в iframe с amazon (отключение этой опции, возможно, нарушает правила партнерской программы amazon).', 'content-egg'),
|
214 |
+
'callback' => array($this, 'render_checkbox'),
|
215 |
+
'default' => true,
|
216 |
+
'section' => 'default',
|
217 |
+
),
|
218 |
+
'truncate_reviews_at' => array(
|
219 |
+
'title' => __('Обрезать отзывы', 'content-egg'),
|
220 |
+
'description' => __('Количество символов для одного отзыва. 0 - максимально возможная длина текста.', 'content-egg'),
|
221 |
+
'callback' => array($this, 'render_input'),
|
222 |
+
'default' => 250,
|
223 |
+
'validator' => array(
|
224 |
+
'trim',
|
225 |
+
'absint',
|
226 |
+
),
|
227 |
+
'section' => 'default',
|
228 |
+
),
|
229 |
+
'review_products_number' => array(
|
230 |
+
'title' => __('Товар с отзывами', 'content-egg'),
|
231 |
+
'description' => __('Парсить отзывы только для заданного количества товаров.', 'content-egg'),
|
232 |
+
'callback' => array($this, 'render_input'),
|
233 |
+
'default' => 1,
|
234 |
+
'validator' => array(
|
235 |
+
'trim',
|
236 |
+
'absint',
|
237 |
+
),
|
238 |
+
'section' => 'default',
|
239 |
+
),
|
240 |
+
'editorial_reviews' => array(
|
241 |
+
'title' => __('Парсить отписание', 'content-egg'),
|
242 |
+
'description' => __('Парсить описание товаров от продавца.', 'content-egg'),
|
243 |
+
'callback' => array($this, 'render_checkbox'),
|
244 |
+
'default' => false,
|
245 |
+
'section' => 'default',
|
246 |
+
),
|
247 |
+
'editorial_reviews_type' => array(
|
248 |
+
'title' => __('Вид описания', 'content-egg'),
|
249 |
+
'description' => '',
|
250 |
+
'callback' => array($this, 'render_dropdown'),
|
251 |
+
'dropdown_options' => array(
|
252 |
+
'allow_all' => __('Как на Amazon', 'content-egg'),
|
253 |
+
'safe_html' => __('Безопасный HTML', 'content-egg'),
|
254 |
+
'allowed_tags' => __('Только разрешенные теги HTML', 'content-egg'),
|
255 |
+
'text' => __('Только текст', 'content-egg'),
|
256 |
+
),
|
257 |
+
'default' => 'All',
|
258 |
+
'section' => 'default',
|
259 |
+
),
|
260 |
+
'editorial_reviews_size' => array(
|
261 |
+
'title' => __('Размер описания', 'content-egg'),
|
262 |
+
'description' => __('Максимальный размер описания товара. 0 - не обрезать.', 'content-egg'),
|
263 |
+
'callback' => array($this, 'render_input'),
|
264 |
+
'default' => 1000,
|
265 |
+
'validator' => array(
|
266 |
+
'trim',
|
267 |
+
'absint',
|
268 |
+
),
|
269 |
+
'section' => 'default',
|
270 |
+
),
|
271 |
+
);
|
272 |
+
return array_merge(parent::options(), $optiosn);
|
273 |
+
}
|
274 |
+
|
275 |
+
public static function getLocalesList()
|
276 |
+
{
|
277 |
+
return array('us' => 'US', 'uk' => 'UK', 'de' => 'DE', 'jp' => 'JP', 'cn' => 'CN', 'fr' => 'FR', 'it' => 'IT', 'es' => 'ES', 'ca' => 'CA', 'br' => 'BR', 'in' => 'IN');
|
278 |
+
}
|
279 |
+
|
280 |
+
public static function getDefaultLocale()
|
281 |
+
{
|
282 |
+
$lang = GeneralConfig::getInstance()->option('lang');
|
283 |
+
if (array_key_exists($lang, self::getLocalesList()))
|
284 |
+
return $lang;
|
285 |
+
else
|
286 |
+
return 'us';
|
287 |
+
}
|
288 |
+
|
289 |
+
}
|
application/modules/Amazon/AmazonModule.php
ADDED
@@ -0,0 +1,458 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\modules\Amazon;
|
4 |
+
|
5 |
+
use ContentEgg\application\components\AffiliateParserModule;
|
6 |
+
use ContentEgg\application\libs\amazon\AmazonProduct;
|
7 |
+
use ContentEgg\application\components\ContentProduct;
|
8 |
+
use ContentEgg\application\admin\PluginAdmin;
|
9 |
+
use ContentEgg\application\components\ExtraData;
|
10 |
+
use ContentEgg\application\helpers\TextHelper;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* AmazonModule class file
|
14 |
+
*
|
15 |
+
* @author keywordrush.com <support@keywordrush.com>
|
16 |
+
* @link http://www.keywordrush.com/
|
17 |
+
* @copyright Copyright © 2015 keywordrush.com
|
18 |
+
*/
|
19 |
+
class AmazonModule extends AffiliateParserModule {
|
20 |
+
|
21 |
+
private $api_client = null;
|
22 |
+
|
23 |
+
public function info()
|
24 |
+
{
|
25 |
+
return array(
|
26 |
+
'name' => 'Amazon',
|
27 |
+
'api_agreement' => 'https://affiliate-program.amazon.com/gp/advertising/api/detail/agreement.html',
|
28 |
+
'description' => __('Добавляет товары amazon.', 'content-egg'),
|
29 |
+
);
|
30 |
+
}
|
31 |
+
|
32 |
+
public function defaultTemplateName()
|
33 |
+
{
|
34 |
+
return 'data_item';
|
35 |
+
}
|
36 |
+
|
37 |
+
public function isItemsUpdateAvailable()
|
38 |
+
{
|
39 |
+
return true;
|
40 |
+
}
|
41 |
+
|
42 |
+
public function isFree()
|
43 |
+
{
|
44 |
+
return true;
|
45 |
+
}
|
46 |
+
|
47 |
+
public function doRequest($keyword, $query_params = array(), $is_autoupdate = false)
|
48 |
+
{
|
49 |
+
$options = array();
|
50 |
+
|
51 |
+
|
52 |
+
$search_index = $this->config('search_index');
|
53 |
+
// Если не задана категория для поиска, то все остальные опции фильтрации работать не будут!
|
54 |
+
if ($search_index != 'All' && $search_index != 'Blended')
|
55 |
+
{
|
56 |
+
if ($this->config('title'))
|
57 |
+
$options['Title'] = $keyword;
|
58 |
+
else
|
59 |
+
$options['Keywords'] = $keyword;
|
60 |
+
|
61 |
+
$options['Sort'] = $this->config('sort');
|
62 |
+
if ((int) $this->config('brouse_node'))
|
63 |
+
$options['BrowseNode'] = (int) $this->config('brouse_node');
|
64 |
+
|
65 |
+
// Specifies the minimum price of the items to return. Prices are in
|
66 |
+
// terms of the lowest currency denomination, for example, pennies,
|
67 |
+
// for example, 3241 represents $32.41.
|
68 |
+
if ($this->config('minimum_price'))
|
69 |
+
$options['MinimumPrice'] = TextHelper::pricePenniesDenomination($this->config('minimum_price'));
|
70 |
+
if ($this->config('maximum_price'))
|
71 |
+
$options['MaximumPrice'] = TextHelper::pricePenniesDenomination($this->config('maximum_price'));
|
72 |
+
|
73 |
+
// Specifies the minimum percentage off for the items to return.
|
74 |
+
// @link: http://docs.aws.amazon.com/AWSECommerceService/latest/DG/LocaleUS.html
|
75 |
+
if ($query_params['min_percentage_off'])
|
76 |
+
$options['MinPercentageOff'] = (int) $query_params['min_percentage_off'];
|
77 |
+
elseif ($this->config('min_percentage_off'))
|
78 |
+
$options['MinPercentageOff'] = (int) $this->config('min_percentage_off');
|
79 |
+
} else
|
80 |
+
$options['Keywords'] = $keyword; // Для категории "All" работает только поиск по ключевому слову
|
81 |
+
|
82 |
+
if ($this->config('merchant_id'))
|
83 |
+
$options['MerchantId'] = "Amazon";
|
84 |
+
|
85 |
+
$options['ResponseGroup'] = 'ItemIds,Offers,ItemAttributes,Images';
|
86 |
+
|
87 |
+
// Customer Reviews
|
88 |
+
if ($this->config('customer_reviews'))
|
89 |
+
{
|
90 |
+
$options['ResponseGroup'] .= ',Reviews';
|
91 |
+
$options['TruncateReviewsAt'] = $this->config('truncate_reviews_at');
|
92 |
+
//$options['ReviewSort'] = $this->config('review_sort');
|
93 |
+
$options['IncludeReviewsSummary'] = true;
|
94 |
+
}
|
95 |
+
// Editorial Reviews
|
96 |
+
if ($this->config('editorial_reviews'))
|
97 |
+
{
|
98 |
+
$options['ResponseGroup'] .= ',EditorialReview';
|
99 |
+
}
|
100 |
+
|
101 |
+
$results = $this->getAmazonClient()->ItemSearch($this->config('search_index'), $options);
|
102 |
+
|
103 |
+
if (!is_array($results))
|
104 |
+
return array();
|
105 |
+
|
106 |
+
return $this->prepareResults($results['Items']['Item'], $is_autoupdate);
|
107 |
+
}
|
108 |
+
|
109 |
+
public function doRequestItems(array $items)
|
110 |
+
{
|
111 |
+
$options = array();
|
112 |
+
|
113 |
+
$item_ids = array();
|
114 |
+
foreach ($items as $item)
|
115 |
+
{
|
116 |
+
$item_ids[] = $item['unique_id'];
|
117 |
+
}
|
118 |
+
|
119 |
+
$options['ResponseGroup'] = 'Offers';
|
120 |
+
|
121 |
+
// update iframe url for customer reviews
|
122 |
+
if ($this->config('customer_reviews') && $this->config('customer_reviews_iframe'))
|
123 |
+
{
|
124 |
+
$options['ResponseGroup'] .= ',Reviews';
|
125 |
+
$options['TruncateReviewsAt'] = $this->config('truncate_reviews_at');
|
126 |
+
$options['IncludeReviewsSummary'] = true;
|
127 |
+
}
|
128 |
+
|
129 |
+
|
130 |
+
$results = $this->getAmazonClient()->ItemLookup($item_ids, $options);
|
131 |
+
|
132 |
+
if (!isset($results['Items']))
|
133 |
+
throw new \Exception('ItemLookup request error.');
|
134 |
+
|
135 |
+
$results = $results['Items']['Item'];
|
136 |
+
|
137 |
+
$i = 0;
|
138 |
+
foreach ($items as $key => $item)
|
139 |
+
{
|
140 |
+
if ($item['unique_id'] != $results[$i]['ASIN'])
|
141 |
+
continue;
|
142 |
+
|
143 |
+
// offer
|
144 |
+
$items[$key] = self::fillOfferVars($results[$i], $item, $item['extra']);
|
145 |
+
if (!empty($results[$i]['CustomerReviews']))
|
146 |
+
{
|
147 |
+
$items[$key]['extra']['customerReviews'] = (array) new ExtraAmazonCustomerReviews;
|
148 |
+
$items[$key]['extra']['customerReviews'] = ExtraData::fillAttributes($items[$key]['extra']['customerReviews'], $results[$i]['CustomerReviews']);
|
149 |
+
}
|
150 |
+
|
151 |
+
$i++;
|
152 |
+
}
|
153 |
+
return $items;
|
154 |
+
}
|
155 |
+
|
156 |
+
private function prepareResults($results, $is_autoupdate)
|
157 |
+
{
|
158 |
+
// Обрезаем количество результатов (амазон не имеет такого параметра для API).
|
159 |
+
if ($is_autoupdate)
|
160 |
+
$results = array_slice($results, 0, $this->config('entries_per_page_update'));
|
161 |
+
else
|
162 |
+
$results = array_slice($results, 0, $this->config('entries_per_page'));
|
163 |
+
|
164 |
+
$data = array();
|
165 |
+
foreach ($results as $key => $r)
|
166 |
+
{
|
167 |
+
$content = new ContentProduct;
|
168 |
+
$extra = new ExtraDataAmazon;
|
169 |
+
ExtraData::fillAttributes($extra, $r);
|
170 |
+
|
171 |
+
if (isset($r['ItemLinks']) && isset($r['ItemLinks']['ItemLink']))
|
172 |
+
{
|
173 |
+
foreach ($r['ItemLinks']['ItemLink'] as $link_r)
|
174 |
+
{
|
175 |
+
$link = new ExtraAmazonItemLinks;
|
176 |
+
ExtraData::fillAttributes($link, $link_r);
|
177 |
+
$extra->itemLinks[] = $link;
|
178 |
+
}
|
179 |
+
}
|
180 |
+
|
181 |
+
if (!empty($r['ImageSets']) && !empty($r['ImageSets']['ImageSet']))
|
182 |
+
{
|
183 |
+
if (!isset($r['ImageSets']['ImageSet'][0]))
|
184 |
+
$r['ImageSets'] = array($r['ImageSets']['ImageSet']);
|
185 |
+
else
|
186 |
+
$r['ImageSets'] = $r['ImageSets']['ImageSet'];
|
187 |
+
|
188 |
+
|
189 |
+
foreach ($r['ImageSets'] as $image_r)
|
190 |
+
{
|
191 |
+
$image = new ExtraAmazonImageSet;
|
192 |
+
$image->attributes = $image_r['@attributes'];
|
193 |
+
$image->SwatchImage = $image_r['SwatchImage']['URL'];
|
194 |
+
$image->SmallImage = $image_r['SmallImage']['URL'];
|
195 |
+
$image->ThumbnailImage = $image_r['ThumbnailImage']['URL'];
|
196 |
+
$image->TinyImage = $image_r['TinyImage']['URL'];
|
197 |
+
$image->MediumImage = $image_r['MediumImage']['URL'];
|
198 |
+
$image->LargeImage = $image_r['LargeImage']['URL'];
|
199 |
+
$extra->imageSet[] = $image;
|
200 |
+
}
|
201 |
+
}
|
202 |
+
|
203 |
+
if (isset($r['ItemAttributes']['Feature']) && !is_array($r['ItemAttributes']['Feature']))
|
204 |
+
$r['ItemAttributes']['Feature'] = array($r['ItemAttributes']['Feature']);
|
205 |
+
|
206 |
+
$extra->itemAttributes = new ExtraAmazonItemAttributes;
|
207 |
+
ExtraData::fillAttributes($extra->itemAttributes, $r['ItemAttributes']);
|
208 |
+
|
209 |
+
if (isset($r['ItemAttributes']['Category']))
|
210 |
+
$content->category = $r['ItemAttributes']['Category'];
|
211 |
+
if (isset($r['ItemAttributes']['Manufacturer']))
|
212 |
+
$content->manufacturer = $r['ItemAttributes']['Manufacturer'];
|
213 |
+
if (isset($r['ItemAttributes']['Author']))
|
214 |
+
$extra->author = $r['ItemAttributes']['Author'];
|
215 |
+
|
216 |
+
// Offers
|
217 |
+
self::fillOfferVars($r, $content, $extra);
|
218 |
+
|
219 |
+
// Customer Reviews
|
220 |
+
if (isset($r['CustomerReviews']) && $key < $this->config('review_products_number'))
|
221 |
+
{
|
222 |
+
$extra->customerReviews = new ExtraAmazonCustomerReviews;
|
223 |
+
ExtraData::fillAttributes($extra->customerReviews, $r['CustomerReviews']);
|
224 |
+
if ($this->config('customer_reviews') &&
|
225 |
+
!$this->config('customer_reviews_iframe') &&
|
226 |
+
$key < $this->config('review_products_number'))
|
227 |
+
{
|
228 |
+
$customer_reviews = $this->getAmazonClient()->parseCustomerReviews($r['CustomerReviews']['IFrameURL'], $this->config('locale'));
|
229 |
+
ExtraData::fillAttributes($extra->customerReviews, $customer_reviews);
|
230 |
+
|
231 |
+
if (isset($customer_reviews['Reviews']) && $customer_reviews['Reviews'])
|
232 |
+
{
|
233 |
+
foreach ($customer_reviews['Reviews'] as $review)
|
234 |
+
{
|
235 |
+
$customer_review = new ExtraAmazonCustomerReview;
|
236 |
+
ExtraData::fillAttributes($customer_review, $review);
|
237 |
+
$extra->customerReviews->reviews[] = $customer_review;
|
238 |
+
}
|
239 |
+
}
|
240 |
+
}
|
241 |
+
|
242 |
+
if ($extra->customerReviews->AverageRating)
|
243 |
+
$content->rating = round($extra->customerReviews->AverageRating);
|
244 |
+
}
|
245 |
+
|
246 |
+
|
247 |
+
// Editorial Reviews
|
248 |
+
if (isset($r['EditorialReviews']['EditorialReview']))
|
249 |
+
{
|
250 |
+
if (!isset($r['EditorialReviews']['EditorialReview'][0]))
|
251 |
+
$r['EditorialReviews']['EditorialReview'] = array($r['EditorialReviews']['EditorialReview']);
|
252 |
+
|
253 |
+
foreach ($r['EditorialReviews']['EditorialReview'] as $editorialReview_r)
|
254 |
+
{
|
255 |
+
$editorialReview = new ExtraAmazonEditorialReviews;
|
256 |
+
ExtraData::fillAttributes($editorialReview, $editorialReview_r);
|
257 |
+
|
258 |
+
// safe html
|
259 |
+
$editorialReview->Content = TextHelper::safeHtml($editorialReview->Content, $this->config('editorial_reviews_type'));
|
260 |
+
|
261 |
+
//размер
|
262 |
+
if ($this->config('editorial_reviews_size'))
|
263 |
+
{
|
264 |
+
$editorialReview->Content = TextHelper::truncateHtml($editorialReview->Content, $this->config('editorial_reviews_size'));
|
265 |
+
}
|
266 |
+
$extra->editorialReviews[] = $editorialReview;
|
267 |
+
}
|
268 |
+
}
|
269 |
+
|
270 |
+
// Заполняем стандартные поля: title, description, url, price
|
271 |
+
// все остальные данные в extra
|
272 |
+
|
273 |
+
$content->url = $r['DetailPageURL'];
|
274 |
+
|
275 |
+
if (isset($r['ItemAttributes']['Title']))
|
276 |
+
$content->title = $r['ItemAttributes']['Title'];
|
277 |
+
|
278 |
+
//MediumImage может и не быть, а только ImageSets, тогда берем картинки с ImageSets
|
279 |
+
if (isset($r['MediumImage']))
|
280 |
+
{
|
281 |
+
$extra->smallImage = $r['SmallImage']['URL'];
|
282 |
+
$extra->mediumImage = $r['MediumImage']['URL'];
|
283 |
+
$extra->largeImage = $r['LargeImage']['URL'];
|
284 |
+
} elseif (!empty($r['ImageSets']))
|
285 |
+
{
|
286 |
+
$extra->smallImage = $r['ImageSets'][0]['SmallImage']['URL'];
|
287 |
+
$extra->mediumImage = $r['ImageSets'][0]['MediumImage']['URL'];
|
288 |
+
$extra->largeImage = $r['ImageSets'][0]['LargeImage']['URL'];
|
289 |
+
}
|
290 |
+
|
291 |
+
if (isset($r['LargeImage']))
|
292 |
+
$content->img = $r['LargeImage']['URL'];
|
293 |
+
elseif ($extra->largeImage)
|
294 |
+
$content->img = $extra->largeImage;
|
295 |
+
|
296 |
+
$extra->addToCartUrl = $this->getAmazonAddToCartUrl() .
|
297 |
+
'?ASIN.1=' . $extra->ASIN . '&Quantity.1=1' .
|
298 |
+
'&AssociateTag=' . $this->config('associate_tag');
|
299 |
+
|
300 |
+
if ($this->config('link_type') == 'add_to_cart')
|
301 |
+
{
|
302 |
+
$content->orig_url = $content->url;
|
303 |
+
$content->url = $extra->addToCartUrl;
|
304 |
+
}
|
305 |
+
|
306 |
+
$content->extra = $extra;
|
307 |
+
$content->unique_id = $extra->ASIN;
|
308 |
+
|
309 |
+
$data[] = $content;
|
310 |
+
}
|
311 |
+
return $data;
|
312 |
+
}
|
313 |
+
|
314 |
+
private function getAmazonClient()
|
315 |
+
{
|
316 |
+
if ($this->api_client === null)
|
317 |
+
{
|
318 |
+
$access_key_id = $this->config('access_key_id');
|
319 |
+
$secret_access_key = $this->config('secret_access_key');
|
320 |
+
$associate_tag = $this->config('associate_tag');
|
321 |
+
$this->api_client = new AmazonProduct($access_key_id, $secret_access_key, $associate_tag);
|
322 |
+
$this->api_client->setLocale($this->config('locale'));
|
323 |
+
}
|
324 |
+
return $this->api_client;
|
325 |
+
}
|
326 |
+
|
327 |
+
static private function fillOfferVars($r, $content, $extra)
|
328 |
+
{
|
329 |
+
// dirty tricks with object2array conversation for doRequestItems
|
330 |
+
$return_array = false;
|
331 |
+
if (!is_object($content))
|
332 |
+
{
|
333 |
+
$return_array = true;
|
334 |
+
unset($content['extra']);
|
335 |
+
$content = json_decode(json_encode($content), FALSE);
|
336 |
+
$extra = json_decode(json_encode($extra), FALSE);
|
337 |
+
}
|
338 |
+
|
339 |
+
// Offers
|
340 |
+
if (isset($r['Offers']) &&
|
341 |
+
isset($r['Offers']['Offer']) &&
|
342 |
+
isset($r['Offers']['Offer']['OfferListing']))
|
343 |
+
{
|
344 |
+
$r['Price'] = $r['Offers']['Offer']['OfferListing']['Price'];
|
345 |
+
|
346 |
+
if (isset($r['Offers']['Offer']['OfferListing']['AmountSaved']))
|
347 |
+
{
|
348 |
+
$extra->AmountSaved = $r['Offers']['Offer']['OfferListing']['AmountSaved']['FormattedPrice'];
|
349 |
+
if (isset($r['Offers']['Offer']['OfferListing']['PercentageSaved']))
|
350 |
+
$content->percentageSaved = $r['Offers']['Offer']['OfferListing']['PercentageSaved'];
|
351 |
+
}
|
352 |
+
|
353 |
+
//@link: http://docs.aws.amazon.com/AWSECommerceService/latest/DG/AvailabilityValues.html
|
354 |
+
if (isset($r['Offers']['Offer']['OfferListing']['Availability']))
|
355 |
+
{
|
356 |
+
$extra->availability = $r['Offers']['Offer']['OfferListing']['Availability'];
|
357 |
+
}
|
358 |
+
|
359 |
+
if (isset($r['Offers']['Offer']['OfferListing']['IsEligibleForSuperSaverShipping']))
|
360 |
+
$extra->IsEligibleForSuperSaverShipping = $r['Offers']['Offer']['OfferListing']['IsEligibleForSuperSaverShipping'];
|
361 |
+
}elseif (isset($r['OfferSummary']['LowestNewPrice']))
|
362 |
+
$r['Price'] = $r['OfferSummary']['LowestNewPrice'];
|
363 |
+
|
364 |
+
|
365 |
+
if ((!isset($r['Price']) || !$r['Price']) && isset($r['ItemAttributes']['ListPrice']))
|
366 |
+
$r['Price'] = $r['ItemAttributes']['ListPrice'];
|
367 |
+
|
368 |
+
if (isset($r['ItemAttributes']['ListPrice']) &&
|
369 |
+
$r['ItemAttributes']['ListPrice']['Amount'] &&
|
370 |
+
( (isset($r['Price']['Amount']) && $r['ItemAttributes']['ListPrice']['Amount'] > $r['Price']['Amount']) || $r['Price']['FormattedPrice'] == 'Too low to display'))
|
371 |
+
{
|
372 |
+
$content->priceOld = TextHelper::pricePenniesDenomination($r['ItemAttributes']['ListPrice']['Amount'], false);
|
373 |
+
$content->currencyCode = $r['ItemAttributes']['ListPrice']['CurrencyCode'];
|
374 |
+
$content->currency = TextHelper::currencyTyping($content->currencyCode);
|
375 |
+
}
|
376 |
+
|
377 |
+
if (isset($r['Price']['FormattedPrice']) && $r['Price']['FormattedPrice'] == 'Too low to display')
|
378 |
+
$extra->toLowToDisplay = true;
|
379 |
+
|
380 |
+
if (!empty($r['Price']['Amount']))
|
381 |
+
{
|
382 |
+
$content->price = TextHelper::pricePenniesDenomination($r['Price']['Amount'], false);
|
383 |
+
$content->currencyCode = $r['Price']['CurrencyCode'];
|
384 |
+
$content->currency = TextHelper::currencyTyping($content->currencyCode);
|
385 |
+
}
|
386 |
+
|
387 |
+
if ($return_array)
|
388 |
+
{
|
389 |
+
$content = json_decode(json_encode($content), true);
|
390 |
+
$extra = json_decode(json_encode($extra), true);
|
391 |
+
$content['extra'] = $extra;
|
392 |
+
return $content;
|
393 |
+
}
|
394 |
+
}
|
395 |
+
|
396 |
+
/**
|
397 |
+
* Add to shopping cart url
|
398 |
+
* @link: http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/AddToCartForm.html
|
399 |
+
* @link: https://affiliate-program.amazon.com/gp/associates/help/t1/a10?ie=UTF8&pf_rd_i=assoc_help_t6_a1&pf_rd_m=ATVPDKIKX0DER&pf_rd_p=&pf_rd_r=&pf_rd_s=assoc-center-1&pf_rd_t=501&ref_=amb_link_177735_1
|
400 |
+
* @link: https://affiliate-program.amazon.com/gp/associates/help/operating
|
401 |
+
* @link: https://affiliate-program.amazon.com/gp/associates/help/t2/a11
|
402 |
+
*/
|
403 |
+
private function getAmazonAddToCartUrl()
|
404 |
+
{
|
405 |
+
switch ($this->config('locale'))
|
406 |
+
{
|
407 |
+
case 'uk':
|
408 |
+
return 'http://www.amazon.co.uk/gp/aws/cart/add.html';
|
409 |
+
break;
|
410 |
+
case 'de':
|
411 |
+
return 'http://www.amazon.de/gp/aws/cart/add.html';
|
412 |
+
break;
|
413 |
+
case 'fr':
|
414 |
+
return 'http://www.amazon.fr/gp/aws/cart/add.html';
|
415 |
+
break;
|
416 |
+
case 'jp':
|
417 |
+
return 'http://www.amazon.co.jp/gp/aws/cart/add.html';
|
418 |
+
break;
|
419 |
+
case 'cn':
|
420 |
+
return 'http://www.amazon.cn/gp/aws/cart/add.html';
|
421 |
+
break;
|
422 |
+
case 'it':
|
423 |
+
return 'http://www.amazon.it/gp/aws/cart/add.html';
|
424 |
+
break;
|
425 |
+
case 'es':
|
426 |
+
return 'http://www.amazon.es/gp/aws/cart/add.html';
|
427 |
+
break;
|
428 |
+
case 'ca':
|
429 |
+
return 'http://www.amazon.ca/gp/aws/cart/add.html';
|
430 |
+
break;
|
431 |
+
case 'br':
|
432 |
+
return 'http://www.amazon.br/gp/aws/cart/add.html';
|
433 |
+
break;
|
434 |
+
case 'in':
|
435 |
+
return 'http://www.amazon.in/gp/aws/cart/add.html';
|
436 |
+
break;
|
437 |
+
default: //'us'
|
438 |
+
return 'http://www.amazon.com/gp/aws/cart/add.html';
|
439 |
+
break;
|
440 |
+
}
|
441 |
+
}
|
442 |
+
|
443 |
+
public function renderResults()
|
444 |
+
{
|
445 |
+
PluginAdmin::render('_metabox_results', array('module_id' => $this->getId()));
|
446 |
+
}
|
447 |
+
|
448 |
+
public function renderSearchResults()
|
449 |
+
{
|
450 |
+
PluginAdmin::render('_metabox_search_results', array('module_id' => $this->getId()));
|
451 |
+
}
|
452 |
+
|
453 |
+
public function renderSearchPanel()
|
454 |
+
{
|
455 |
+
$this->render('search_panel', array('module_id' => $this->getId()));
|
456 |
+
}
|
457 |
+
|
458 |
+
}
|
application/modules/Amazon/ExtraAmazonCustomerReviews.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\modules\Amazon;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* ExtraAmazonCustomerReviews class file
|
7 |
+
*
|
8 |
+
* @author keywordrush.com <support@keywordrush.com>
|
9 |
+
* @link http://www.keywordrush.com/
|
10 |
+
* @copyright Copyright © 2015 keywordrush.com
|
11 |
+
*/
|
12 |
+
//параметры из AmazonProduct->parseCustomerReviews
|
13 |
+
class ExtraAmazonCustomerReviews {
|
14 |
+
|
15 |
+
public $IFrameURL;
|
16 |
+
public $HasReviews;
|
17 |
+
public $AverageRating;
|
18 |
+
public $TotalReviews;
|
19 |
+
public $reviews = array();
|
20 |
+
|
21 |
+
}
|
application/modules/Amazon/ExtraDataAmazon.php
ADDED
@@ -0,0 +1,141 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\modules\Amazon;
|
4 |
+
|
5 |
+
use ContentEgg\application\components\ExtraData;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* ExtraDataAmazon class file
|
9 |
+
*
|
10 |
+
* @author keywordrush.com <support@keywordrush.com>
|
11 |
+
* @link http://www.keywordrush.com/
|
12 |
+
* @copyright Copyright © 2015 keywordrush.com
|
13 |
+
*/
|
14 |
+
class ExtraDataAmazon extends ExtraData {
|
15 |
+
|
16 |
+
public $itemLinks = array();
|
17 |
+
public $imageSet = array();
|
18 |
+
public $AmountSaved;
|
19 |
+
public $PercentageSaved;
|
20 |
+
public $IsEligibleForSuperSaverShipping;
|
21 |
+
public $customerReviews;
|
22 |
+
public $editorialReviews = array();
|
23 |
+
public $smallImage;
|
24 |
+
public $mediumImage;
|
25 |
+
public $largeImage;
|
26 |
+
public $addToCartUrl;
|
27 |
+
public $ASIN;
|
28 |
+
public $itemAttributes;
|
29 |
+
public $toLowToDisplay;
|
30 |
+
public $availability;
|
31 |
+
}
|
32 |
+
|
33 |
+
class ExtraAmazonItemLinks {
|
34 |
+
|
35 |
+
public $Description;
|
36 |
+
public $URL;
|
37 |
+
|
38 |
+
}
|
39 |
+
|
40 |
+
class ExtraAmazonImageSet {
|
41 |
+
|
42 |
+
public $attributes = array();
|
43 |
+
public $SwatchImage;
|
44 |
+
public $SmallImage;
|
45 |
+
public $ThumbnailImage;
|
46 |
+
public $TinyImage;
|
47 |
+
public $MediumImage;
|
48 |
+
public $LargeImage;
|
49 |
+
|
50 |
+
}
|
51 |
+
|
52 |
+
//параметры из AmazonProduct->parseCustomerReviews
|
53 |
+
class ExtraAmazonCustomerReview {
|
54 |
+
|
55 |
+
public $Content;
|
56 |
+
public $Summary;
|
57 |
+
public $Date;
|
58 |
+
public $Name;
|
59 |
+
public $Rating;
|
60 |
+
|
61 |
+
}
|
62 |
+
|
63 |
+
class ExtraAmazonEditorialReviews {
|
64 |
+
|
65 |
+
public $Source;
|
66 |
+
public $Content;
|
67 |
+
|
68 |
+
}
|
69 |
+
|
70 |
+
class ExtraAmazonItemAttributes {
|
71 |
+
|
72 |
+
public $Actor;
|
73 |
+
public $Artist;
|
74 |
+
public $AspectRatio;
|
75 |
+
public $AudienceRating;
|
76 |
+
public $AudioFormat;
|
77 |
+
public $Binding;
|
78 |
+
public $Brand;
|
79 |
+
public $CEROAgeRating;
|
80 |
+
public $ClothingSize;
|
81 |
+
public $Color;
|
82 |
+
public $Creator;
|
83 |
+
public $Department;
|
84 |
+
public $Director;
|
85 |
+
public $EAN;
|
86 |
+
public $EANList;
|
87 |
+
public $Edition;
|
88 |
+
public $EISBN;
|
89 |
+
public $EpisodeSequence;
|
90 |
+
public $ESRBAgeRating;
|
91 |
+
public $Feature = array();
|
92 |
+
public $Format;
|
93 |
+
public $Genre;
|
94 |
+
public $HardwarePlatform;
|
95 |
+
public $HazardousMaterialType;
|
96 |
+
public $IsAdultProduct;
|
97 |
+
public $IsAutographed;
|
98 |
+
public $ISBN;
|
99 |
+
public $IsEligibleForTradeIn;
|
100 |
+
public $IsMemorabilia;
|
101 |
+
public $IssuesPerYear;
|
102 |
+
public $ItemDimensions;
|
103 |
+
public $ItemPartNumber;
|
104 |
+
public $Label;
|
105 |
+
public $Languages;
|
106 |
+
public $LegalDisclaimer;
|
107 |
+
public $ManufacturerMaximumAge;
|
108 |
+
public $ManufacturerMinimumAge;
|
109 |
+
public $ManufacturerPartsWarrantyDescription;
|
110 |
+
public $MediaType;
|
111 |
+
public $Model;
|
112 |
+
public $MPN;
|
113 |
+
public $NumberOfDiscs;
|
114 |
+
public $NumberOfIssues;
|
115 |
+
public $NumberOfItems;
|
116 |
+
public $NumberOfPages;
|
117 |
+
public $NumberOfTracks;
|
118 |
+
public $OperatingSystem;
|
119 |
+
public $PackageQuantity;
|
120 |
+
public $PartNumber;
|
121 |
+
public $Platform;
|
122 |
+
public $ProductGroup;
|
123 |
+
public $ProductTypeSubcategory;
|
124 |
+
public $PublicationDate;
|
125 |
+
public $Publisher;
|
126 |
+
public $RegionCode;
|
127 |
+
public $ReleaseDate;
|
128 |
+
public $RunningTime;
|
129 |
+
public $SeikodoProductCode;
|
130 |
+
public $Size;
|
131 |
+
public $SKU;
|
132 |
+
public $Studio;
|
133 |
+
public $SubscriptionLength;
|
134 |
+
public $TradeInValue;
|
135 |
+
public $UPC;
|
136 |
+
public $UPCList;
|
137 |
+
public $Warranty;
|
138 |
+
public $WEEETaxValue;
|
139 |
+
public $PackageDimensions;
|
140 |
+
|
141 |
+
}
|
application/modules/Amazon/index.php
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<?php // Silence is golden.
|
application/modules/Amazon/templates/data_grid.php
ADDED
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Name: Grid
|
4 |
+
*/
|
5 |
+
|
6 |
+
__('Grid', 'content-egg-tpl');
|
7 |
+
|
8 |
+
use ContentEgg\application\helpers\TemplateHelper;
|
9 |
+
?>
|
10 |
+
|
11 |
+
<?php
|
12 |
+
\wp_enqueue_style('egg-bootstrap');
|
13 |
+
\wp_enqueue_style('content-egg-products');
|
14 |
+
?>
|
15 |
+
|
16 |
+
<div class="egg-container">
|
17 |
+
<?php if ($title): ?>
|
18 |
+
<h3><?php echo esc_html($title); ?></h3>
|
19 |
+
<?php endif; ?>
|
20 |
+
|
21 |
+
<div class="container-fluid">
|
22 |
+
<?php $i = 0; ?>
|
23 |
+
<?php foreach ($items as $item): ?>
|
24 |
+
|
25 |
+
<a rel="nofollow" target="_blank" href="<?php echo esc_url($item['url']) ?>">
|
26 |
+
<div class="col-md-4 productbox">
|
27 |
+
<?php if ($item['percentageSaved']): ?>
|
28 |
+
<div class="cegg-promotion">
|
29 |
+
<span class="cegg-discount">- <?php echo round($item['percentageSaved']); ?>%</span>
|
30 |
+
</div>
|
31 |
+
<?php endif; ?>
|
32 |
+
|
33 |
+
<?php if ($item['img']): ?>
|
34 |
+
<?php $img = str_replace('.jpg', '._AC_UL250_SR250,250_.jpg', $item['img']) ?>
|
35 |
+
<img class="img-responsive" src="<?php echo esc_attr($img) ?>" alt="<?php echo esc_attr($item['title']); ?>" />
|
36 |
+
<?php endif; ?>
|
37 |
+
|
38 |
+
<div class="producttitle">
|
39 |
+
<?php if ($item['manufacturer']): ?><?php echo esc_html($item['manufacturer']); ?><?php endif; ?>
|
40 |
+
<span><?php echo esc_html(TemplateHelper::truncate($item['title'], 80)); ?></span>
|
41 |
+
</div>
|
42 |
+
|
43 |
+
<?php if ((int) $item['rating'] > 0): ?>
|
44 |
+
<div>
|
45 |
+
<span class="rating_small"><?php echo str_repeat("<span>★</span>", (int) $item['rating']);echo str_repeat("<span>☆</span>", 5 - (int) $item['rating']);?></span>
|
46 |
+
</div>
|
47 |
+
<?php endif; ?>
|
48 |
+
|
49 |
+
<div class="productprice">
|
50 |
+
<?php if ($item['price']): ?>
|
51 |
+
<?php if ($item['priceOld']): ?><strike><?php echo $item['currency']; ?><?php echo TemplateHelper::price_format_i18n($item['priceOld']); ?></strike> <?php endif; ?>
|
52 |
+
<?php echo $item['currency']; ?><?php echo TemplateHelper::price_format_i18n($item['price']); ?>
|
53 |
+
<?php endif; ?>
|
54 |
+
</div>
|
55 |
+
</div>
|
56 |
+
</a>
|
57 |
+
|
58 |
+
<?php $i++;
|
59 |
+
if ($i % 3 == 0): ?>
|
60 |
+
<div class="clearfix"></div>
|
61 |
+
<?php endif; ?>
|
62 |
+
<?php endforeach; ?>
|
63 |
+
</div>
|
64 |
+
</div>
|
application/modules/Amazon/templates/data_item.php
ADDED
@@ -0,0 +1,122 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Name: Product card
|
4 |
+
*/
|
5 |
+
|
6 |
+
__('Product card', 'content-egg-tpl');
|
7 |
+
|
8 |
+
use ContentEgg\application\helpers\TemplateHelper;
|
9 |
+
?>
|
10 |
+
|
11 |
+
<?php
|
12 |
+
\wp_enqueue_style('egg-bootstrap');
|
13 |
+
\wp_enqueue_style('content-egg-products');
|
14 |
+
?>
|
15 |
+
|
16 |
+
|
17 |
+
<div class="egg-container">
|
18 |
+
|
19 |
+
<?php if ($title): ?>
|
20 |
+
<h3><?php echo esc_html($title);?></h3>
|
21 |
+
<?php endif; ?>
|
22 |
+
|
23 |
+
<div class="products">
|
24 |
+
|
25 |
+
<?php foreach ($items as $item): ?>
|
26 |
+
<div class="row">
|
27 |
+
<div class="col-md-5">
|
28 |
+
<?php if ($item['img']): ?>
|
29 |
+
<a rel="nofollow" target="_blank" href="<?php echo $item['url']; ?>">
|
30 |
+
<img src="<?php echo $item['img']; ?>" alt="<?php echo esc_attr($item['title']); ?>" class="img-responsive" />
|
31 |
+
</a>
|
32 |
+
<?php endif; ?>
|
33 |
+
</div>
|
34 |
+
<div class="col-md-7">
|
35 |
+
<h2 class="media-heading"><?php echo $item['title']; ?></h2>
|
36 |
+
<?php if ((int) $item['rating'] > 0): ?>
|
37 |
+
<span class="rating"><?php echo str_repeat("<span>★</span>", (int) $item['rating']);
|
38 |
+
echo str_repeat("<span>☆</span>", 5 - (int) $item['rating']); ?></span>
|
39 |
+
<?php endif; ?>
|
40 |
+
|
41 |
+
<div class="well-lg">
|
42 |
+
|
43 |
+
<div class="row">
|
44 |
+
<div class="col-md-6">
|
45 |
+
<?php if ($item['priceOld']): ?>
|
46 |
+
<span class="text-muted"><strike><small><?php echo $item['currency']; ?></small><?php echo TemplateHelper::price_format_i18n($item['priceOld']); ?></strike></span><br>
|
47 |
+
<?php endif; ?>
|
48 |
+
|
49 |
+
<?php if ($item['price']): ?>
|
50 |
+
<span class="cegg-price"><small><?php echo $item['currency']; ?></small><?php echo TemplateHelper::price_format_i18n($item['price']); ?></span>
|
51 |
+
<?php elseif ($item['extra']['toLowToDisplay']): ?>
|
52 |
+
<span class="text-muted"><?php _e('Too low to display', 'content-egg-tpl'); ?></span>
|
53 |
+
<?php endif; ?>
|
54 |
+
|
55 |
+
|
56 |
+
<?php if ((bool) $item['extra']['IsEligibleForSuperSaverShipping']): ?>
|
57 |
+
<p class="text-muted"><small><?php _e('Free shipping', 'content-egg-tpl'); ?></small></p>
|
58 |
+
<?php endif; ?>
|
59 |
+
</div>
|
60 |
+
<div class="col-md-6 text-center text-muted">
|
61 |
+
<a rel="nofollow" target="_blank" href="<?php echo $item['url']; ?>" class="btn btn-success"><?php _e('BUY THIS ITEM', 'content-egg-tpl'); ?></a>
|
62 |
+
<br>
|
63 |
+
<small>Amazon</small>
|
64 |
+
</div>
|
65 |
+
</div>
|
66 |
+
|
67 |
+
|
68 |
+
|
69 |
+
</div>
|
70 |
+
|
71 |
+
</div>
|
72 |
+
</div>
|
73 |
+
<div class="row">
|
74 |
+
<div class="col-md-12">
|
75 |
+
<?php if ($item['description']): ?>
|
76 |
+
<p><?php echo $item['description']; ?></p>
|
77 |
+
<?php endif; ?>
|
78 |
+
|
79 |
+
<?php if ($item['extra']['itemAttributes']['Feature']): ?>
|
80 |
+
<p>
|
81 |
+
<h3><?php _e('Features', 'content-egg-tpl'); ?></h3>
|
82 |
+
<ul>
|
83 |
+
<?php foreach ($item['extra']['itemAttributes']['Feature'] as $k => $feature): ?>
|
84 |
+
<li><?php echo $feature; ?></li>
|
85 |
+
<?php if($k >= 4) break; ?>
|
86 |
+
<?php endforeach; ?>
|
87 |
+
</ul>
|
88 |
+
</p>
|
89 |
+
<?php endif; ?>
|
90 |
+
|
91 |
+
<?php if ($item['extra']['customerReviews']): ?>
|
92 |
+
|
93 |
+
<?php if (!empty($item['extra']['customerReviews']['reviews'])): ?>
|
94 |
+
<h3><?php _e('Customer reviews', 'content-egg-tpl'); ?></h3>
|
95 |
+
<?php foreach ($item['extra']['customerReviews']['reviews'] as $review): ?>
|
96 |
+
<div>
|
97 |
+
<em><?php echo esc_html($review['Summary']); ?>, <small><?php echo date(get_option('date_format'), $review['Date']); ?></small></em>
|
98 |
+
<span class="rating_small">
|
99 |
+
<?php echo str_repeat("<span>★</span>", (int) $review['Rating']); ?><?php echo str_repeat("<span>☆</span>", 5 - (int) $review['Rating']); ?>
|
100 |
+
</span>
|
101 |
+
</div>
|
102 |
+
<blockquote><?php echo esc_html($review['Content']); ?></blockquote>
|
103 |
+
<?php endforeach; ?>
|
104 |
+
<?php elseif ($item['extra']['customerReviews']['HasReviews'] == 'true'): ?>
|
105 |
+
<iframe src='<?php echo $item['extra']['customerReviews']['IFrameURL']; ?>' width='100%' height='500'></iframe>
|
106 |
+
<?php endif; ?>
|
107 |
+
<?php endif; ?>
|
108 |
+
|
109 |
+
<?php if ($item['extra']['editorialReviews']): ?>
|
110 |
+
<?php foreach ($item['extra']['editorialReviews'] as $review): ?>
|
111 |
+
<h3><?php echo esc_html($review['Source']); ?></h3>
|
112 |
+
<p><?php echo $review['Content']; ?></p>
|
113 |
+
<?php endforeach; ?>
|
114 |
+
<?php endif; ?>
|
115 |
+
|
116 |
+
</div>
|
117 |
+
</div>
|
118 |
+
<br>
|
119 |
+
<br>
|
120 |
+
<?php endforeach; ?>
|
121 |
+
</div>
|
122 |
+
</div>
|
application/modules/Amazon/templates/data_list.php
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Name: List
|
4 |
+
*/
|
5 |
+
|
6 |
+
__('List', 'content-egg-tpl');
|
7 |
+
|
8 |
+
use ContentEgg\application\helpers\TemplateHelper;
|
9 |
+
?>
|
10 |
+
|
11 |
+
<?php
|
12 |
+
\wp_enqueue_style('egg-bootstrap');
|
13 |
+
\wp_enqueue_style('content-egg-products');
|
14 |
+
?>
|
15 |
+
|
16 |
+
<div class="egg-container">
|
17 |
+
<?php if ($title): ?>
|
18 |
+
<h3><?php echo esc_html($title); ?></h3>
|
19 |
+
<?php endif; ?>
|
20 |
+
|
21 |
+
<?php foreach ($items as $item): ?>
|
22 |
+
<div class="row products">
|
23 |
+
<div class="col-md-2">
|
24 |
+
<?php if ($item['img']): ?>
|
25 |
+
<a rel="nofollow" target="_blank" href="<?php echo $item['url']; ?>">
|
26 |
+
<img src="<?php echo $item['img']; ?>" alt="<?php echo esc_attr($item['title']); ?>" />
|
27 |
+
</a>
|
28 |
+
<?php endif; ?>
|
29 |
+
</div>
|
30 |
+
<div class="col-md-8">
|
31 |
+
<a rel="nofollow" target="_blank" href="<?php echo $item['url']; ?>">
|
32 |
+
<h4><?php echo $item['title']; ?></h4>
|
33 |
+
</a>
|
34 |
+
</div>
|
35 |
+
<div class="col-md-2 offer_price">
|
36 |
+
<?php if ($item['priceOld']): ?>
|
37 |
+
<span class="text-muted"><strike><small><?php echo $item['currency']; ?></small><?php echo TemplateHelper::price_format_i18n($item['priceOld']); ?></strike></span><br>
|
38 |
+
<?php endif; ?>
|
39 |
+
|
40 |
+
<?php if ($item['price']): ?>
|
41 |
+
<?php echo $item['currency']; ?><?php echo TemplateHelper::price_format_i18n($item['price']); ?>
|
42 |
+
<?php elseif ($item['extra']['toLowToDisplay']): ?>
|
43 |
+
<span class="text-muted"><?php _e('Too low to display', 'content-egg-tpl'); ?></span>
|
44 |
+
<?php endif; ?>
|
45 |
+
|
46 |
+
|
47 |
+
<?php if ((bool) $item['extra']['IsEligibleForSuperSaverShipping']): ?>
|
48 |
+
<br><span class="text-muted"><?php _e('Free shipping', 'content-egg-tpl'); ?></span>
|
49 |
+
<?php endif; ?>
|
50 |
+
</div>
|
51 |
+
</div>
|
52 |
+
<?php endforeach; ?>
|
53 |
+
</div>
|
application/modules/Amazon/views/search_panel.php
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<select ng-model="query_params.<?php echo $module_id; ?>.min_percentage_off">
|
2 |
+
<option value=""><?php _e('Мин. скидка', 'content-egg'); ?></option>
|
3 |
+
<option value="5%"><?php _e('5%', 'content-egg'); ?></option>
|
4 |
+
<option value="10%"><?php _e('10%', 'content-egg'); ?></option>
|
5 |
+
<option value="15%"><?php _e('15%', 'content-egg'); ?></option>
|
6 |
+
<option value="20%"><?php _e('20%', 'content-egg'); ?></option>
|
7 |
+
<option value="25%"><?php _e('25%', 'content-egg'); ?></option>
|
8 |
+
<option value="30%"><?php _e('30%', 'content-egg'); ?></option>
|
9 |
+
<option value="35%"><?php _e('35%', 'content-egg'); ?></option>
|
10 |
+
<option value="40%"><?php _e('40%', 'content-egg'); ?></option>
|
11 |
+
<option value="50%"><?php _e('50%', 'content-egg'); ?></option>
|
12 |
+
<option value="60%"><?php _e('60%', 'content-egg'); ?></option>
|
13 |
+
<option value="70%"><?php _e('70%', 'content-egg'); ?></option>
|
14 |
+
<option value="80%"><?php _e('80%', 'content-egg'); ?></option>
|
15 |
+
<option value="90%"><?php _e('90%', 'content-egg'); ?></option>
|
16 |
+
</select>
|
application/modules/Freebase/ExtraDataFreebase.php
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\modules\Freebase;
|
4 |
+
|
5 |
+
use ContentEgg\application\components\ExtraData;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* ExtraDataFreebase class file
|
9 |
+
*
|
10 |
+
* @author keywordrush.com <support@keywordrush.com>
|
11 |
+
* @link http://www.keywordrush.com/
|
12 |
+
* @copyright Copyright © 2015 keywordrush.com
|
13 |
+
*/
|
14 |
+
class ExtraDataFreebase extends ExtraData {
|
15 |
+
|
16 |
+
public $article;
|
17 |
+
public $officialWebsite = array();
|
18 |
+
public $topicEquivalentWebpage = array();
|
19 |
+
public $topicalWebpage = array();
|
20 |
+
public $quotations = array();
|
21 |
+
public $notableFor = array();
|
22 |
+
public $notableTypes = array();
|
23 |
+
public $awardNominations = array();
|
24 |
+
public $artistTrack = array();
|
25 |
+
public $dateOfBirth;
|
26 |
+
public $freebaseId;
|
27 |
+
}
|
application/modules/Freebase/FreebaseConfig.php
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\modules\Freebase;
|
4 |
+
|
5 |
+
use ContentEgg\application\components\ParserModuleConfig;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* FreebaseConfig class file
|
9 |
+
*
|
10 |
+
* @author keywordrush.com <support@keywordrush.com>
|
11 |
+
* @link http://www.keywordrush.com/
|
12 |
+
* @copyright Copyright © 2015 keywordrush.com
|
13 |
+
*/
|
14 |
+
class FreebaseConfig extends ParserModuleConfig {
|
15 |
+
|
16 |
+
public function options()
|
17 |
+
{
|
18 |
+
$optiosn = array(
|
19 |
+
'api_key' => array(
|
20 |
+
'title' => 'API Key <span class="cegg_required">*</span>',
|
21 |
+
'description' => __('Ключ для доступа к API. Получить можно в Google <a href="http://code.google.com/apis/console">API консоли</a>.', 'content-egg'),
|
22 |
+
'callback' => array($this, 'render_input'),
|
23 |
+
'default' => '',
|
24 |
+
'validator' => array(
|
25 |
+
'trim',
|
26 |
+
array(
|
27 |
+
'call' => array('\ContentEgg\application\helpers\FormValidator', 'required'),
|
28 |
+
'when' => 'is_active',
|
29 |
+
'message' => __('Поле "API Key" не может быть пустым.', 'content-egg'),
|
30 |
+
),
|
31 |
+
),
|
32 |
+
'section' => 'default',
|
33 |
+
),
|
34 |
+
'entries_per_page' => array(
|
35 |
+
'title' => __('Результатов', 'content-egg'),
|
36 |
+
'description' => __('Количество результатов для одного запроса', 'content-egg'),
|
37 |
+
'callback' => array($this, 'render_input'),
|
38 |
+
'default' => 3,
|
39 |
+
'validator' => array(
|
40 |
+
'trim',
|
41 |
+
'absint',
|
42 |
+
array(
|
43 |
+
'call' => array('\ContentEgg\application\helpers\FormValidator', 'less_than_equal_to'),
|
44 |
+
'arg' => 10,
|
45 |
+
'message' => __('Поле "Результатов" не может быть больше 10.', 'content-egg'),
|
46 |
+
),
|
47 |
+
),
|
48 |
+
'section' => 'default',
|
49 |
+
),
|
50 |
+
'save_img' => array(
|
51 |
+
'title' => __('Сохранять картинки', 'content-egg'),
|
52 |
+
'description' => __('Сохранять картинки на сервер', 'content-egg'),
|
53 |
+
'callback' => array($this, 'render_checkbox'),
|
54 |
+
'default' => false,
|
55 |
+
'section' => 'default',
|
56 |
+
),
|
57 |
+
'description_size' => array(
|
58 |
+
'title' => __('Обрезать описание', 'content-egg'),
|
59 |
+
'description' => __('Размер описания в символах (0 - не обрезать)', 'content-egg'),
|
60 |
+
'callback' => array($this, 'render_input'),
|
61 |
+
'default' => '800',
|
62 |
+
'validator' => array(
|
63 |
+
'trim',
|
64 |
+
'absint',
|
65 |
+
),
|
66 |
+
'section' => 'default',
|
67 |
+
),
|
68 |
+
);
|
69 |
+
return array_merge(parent::options(), $optiosn);
|
70 |
+
}
|
71 |
+
|
72 |
+
}
|
application/modules/Freebase/FreebaseModule.php
ADDED
@@ -0,0 +1,168 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\modules\Freebase;
|
4 |
+
|
5 |
+
use ContentEgg\application\components\ParserModule;
|
6 |
+
use ContentEgg\application\libs\google\FreebaseRest;
|
7 |
+
use ContentEgg\application\components\Content;
|
8 |
+
use ContentEgg\application\helpers\TextHelper;
|
9 |
+
use ContentEgg\application\admin\PluginAdmin;
|
10 |
+
use ContentEgg\application\admin\GeneralConfig;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* FreebaseModule class file
|
14 |
+
*
|
15 |
+
* @author keywordrush.com <support@keywordrush.com>
|
16 |
+
* @link http://www.keywordrush.com/
|
17 |
+
* @copyright Copyright © 2015 keywordrush.com
|
18 |
+
*/
|
19 |
+
class FreebaseModule extends ParserModule {
|
20 |
+
|
21 |
+
const MAX_IMG_WIDTH = 300;
|
22 |
+
const MAX_IMG_HEIGHT = 300;
|
23 |
+
|
24 |
+
public function info()
|
25 |
+
{
|
26 |
+
return array(
|
27 |
+
'name' => 'Freebase',
|
28 |
+
'api_agreement' => 'https://developers.google.com/freebase/terms',
|
29 |
+
);
|
30 |
+
}
|
31 |
+
|
32 |
+
public function isFree()
|
33 |
+
{
|
34 |
+
return true;
|
35 |
+
}
|
36 |
+
|
37 |
+
public function doRequest($keyword, $query_params = array(), $is_autoupdate = false)
|
38 |
+
{
|
39 |
+
$params = array();
|
40 |
+
/**
|
41 |
+
* For a list of all currently supported language codes, visit the following:
|
42 |
+
* @link: https://www.googleapis.com/freebase/v1/search?help=langs&indent=true
|
43 |
+
*/
|
44 |
+
$params['lang'] = GeneralConfig::getInstance()->option('lang');
|
45 |
+
$params['limit'] = $this->config('entries_per_page');
|
46 |
+
|
47 |
+
try
|
48 |
+
{
|
49 |
+
$client = new FreebaseRest($this->config('api_key'));
|
50 |
+
$results = $client->fullSearch($keyword, $params, 'commons');
|
51 |
+
} catch (Exception $e)
|
52 |
+
{
|
53 |
+
throw new \Exception(strip_tags($e->getMessage()));
|
54 |
+
}
|
55 |
+
|
56 |
+
if (!$results || !is_array($results))
|
57 |
+
return array();
|
58 |
+
|
59 |
+
$data = array();
|
60 |
+
foreach ($results as $key => $result)
|
61 |
+
{
|
62 |
+
$result = $result['property'];
|
63 |
+
$content = new Content;
|
64 |
+
|
65 |
+
$content->unique_id = $result['/type/object/mid']['values'][0]['value'];
|
66 |
+
$content->title = self::getLeaf($result, '/type/object/name');
|
67 |
+
if ($description = self::getLeaf($result, '/common/topic/description'))
|
68 |
+
$content->description = nl2br($description);
|
69 |
+
elseif ($description = self::getLeaf($result, '/common/document/text'))
|
70 |
+
$content->description = nl2br($description);
|
71 |
+
else
|
72 |
+
continue;
|
73 |
+
|
74 |
+
if ($max_size = $this->config('description_size'))
|
75 |
+
$content->description = TextHelper::truncate($content->description, $max_size);
|
76 |
+
|
77 |
+
if (!empty($result['/common/topic/description']['values'][0]['citation']['uri']))
|
78 |
+
$content->url = strip_tags($result['/common/topic/description']['values'][0]['citation']['uri']);
|
79 |
+
if (!empty($result['/common/topic/image']))
|
80 |
+
{
|
81 |
+
$content->img = 'https://usercontent.googleapis.com/freebase/v1/image';
|
82 |
+
$content->img .= strip_tags($result['/common/topic/image']['values'][0]['id']) .
|
83 |
+
'?maxwidth=' . self::MAX_IMG_WIDTH . '&maxheight=' . self::MAX_IMG_HEIGHT;
|
84 |
+
}
|
85 |
+
$content->extra = self::fillExtra($result);
|
86 |
+
$data[] = $content;
|
87 |
+
}
|
88 |
+
|
89 |
+
|
90 |
+
return $data;
|
91 |
+
}
|
92 |
+
|
93 |
+
static private function fillExtra($result)
|
94 |
+
{
|
95 |
+
$extra = new ExtraDataFreebase;
|
96 |
+
|
97 |
+
$extra->freebaseId = self::getLeaf($result, '/type/object/mid');
|
98 |
+
$extra->dateOfBirth = self::getLeaf($result, '/people/person/date_of_birth');
|
99 |
+
$extra->officialWebsite = self::getLeaf($result, '/common/topic/official_website', 'array');
|
100 |
+
$extra->equivalentWebpage = self::getLeaf($result, '/common/topic/topic_equivalent_webpage', 'array');
|
101 |
+
$extra->topicalWebpage = self::getLeaf($result, '/common/topic/topical_webpage', 'array');
|
102 |
+
$extra->notableFor = self::getLeaf($result, '/common/topic/notable_for', 'array');
|
103 |
+
$extra->notableTypes = self::getLeaf($result, '/common/topic/notable_types', 'array');
|
104 |
+
$extra->awardNominations = self::getLeaf($result, '/award/award_nominee/award_nominations', 'array');
|
105 |
+
$extra->artistTrack = self::getLeaf($result, '/music/artist/track', 'array');
|
106 |
+
|
107 |
+
if (isset($result['/common/topic/article']) && isset($result['/common/topic/article']['values'][0]['property']['/common/document/text']))
|
108 |
+
{
|
109 |
+
$extra->article = $result['/common/topic/article']['values'][0]['property']['/common/document/text']['values'][0]['value'];
|
110 |
+
$extra->article = strip_tags($extra->article);
|
111 |
+
$extra->article = nl2br(trim($extra->article));
|
112 |
+
}
|
113 |
+
if (isset($result['/common/topic/image']))
|
114 |
+
{
|
115 |
+
foreach ($result['/common/topic/image']['values'] as $img)
|
116 |
+
{
|
117 |
+
$extra->gallery[] = 'https://usercontent.googleapis.com/freebase/v1/image' . $img['id'] .
|
118 |
+
'?maxwidth=' . self::MAX_IMG_WIDTH . '&maxheight=' . self::MAX_IMG_HEIGHT;
|
119 |
+
}
|
120 |
+
}
|
121 |
+
|
122 |
+
return $extra;
|
123 |
+
}
|
124 |
+
|
125 |
+
static private function getLeaf($data, $index, $type = 'scalar')
|
126 |
+
{
|
127 |
+
if (empty($data[$index]) || empty($data[$index]['values']))
|
128 |
+
{
|
129 |
+
if ($type == 'array')
|
130 |
+
return array();
|
131 |
+
else
|
132 |
+
return '';
|
133 |
+
}
|
134 |
+
|
135 |
+
if ($type == 'scalar')
|
136 |
+
{
|
137 |
+
if (isset($data[$index]['values'][0]['value']))
|
138 |
+
return strip_tags($data[$index]['values'][0]['value']);
|
139 |
+
elseif (isset($data[$index]['values'][0]['text']))
|
140 |
+
return strip_tags($data[$index]['values'][0]['text']);
|
141 |
+
else
|
142 |
+
return '';
|
143 |
+
} elseif ($type == 'array')
|
144 |
+
{
|
145 |
+
$result = array();
|
146 |
+
foreach ($data[$index]['values'] as $d)
|
147 |
+
{
|
148 |
+
if (isset($d['text']))
|
149 |
+
$result[] = strip_tags($d['text']);
|
150 |
+
elseif (isset($d['value']))
|
151 |
+
$result[] = strip_tags($d['value']);
|
152 |
+
}
|
153 |
+
return $result;
|
154 |
+
}
|
155 |
+
return '';
|
156 |
+
}
|
157 |
+
|
158 |
+
public function renderResults()
|
159 |
+
{
|
160 |
+
PluginAdmin::render('_metabox_results', array('module_id' => $this->getId()));
|
161 |
+
}
|
162 |
+
|
163 |
+
public function renderSearchResults()
|
164 |
+
{
|
165 |
+
PluginAdmin::render('_metabox_search_results', array('module_id' => $this->getId()));
|
166 |
+
}
|
167 |
+
|
168 |
+
}
|
application/modules/Freebase/index.php
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<?php // Silence is golden.
|
application/modules/Freebase/templates/data_simple.php
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Name: Simple
|
4 |
+
*/
|
5 |
+
__('Simple', 'content-egg-tpl');
|
6 |
+
?>
|
7 |
+
<?php \wp_enqueue_style('egg-bootstrap'); ?>
|
8 |
+
|
9 |
+
<div class="egg-container">
|
10 |
+
<?php if ($title): ?>
|
11 |
+
<h3><?php echo esc_html($title); ?></h3>
|
12 |
+
<?php endif; ?>
|
13 |
+
|
14 |
+
<?php foreach ($items as $item): ?>
|
15 |
+
<div class="media">
|
16 |
+
<?php if ($item['img']): ?>
|
17 |
+
<div class="media-left">
|
18 |
+
<img style="max-width: 225px;" class="media-object img-thumbnail" src="<?php echo $item['img']; ?>" alt="<?php echo esc_attr($item['title']); ?>" />
|
19 |
+
</div>
|
20 |
+
<?php endif; ?>
|
21 |
+
<div class="media-body">
|
22 |
+
<h4 class="media-heading"><?php echo esc_html($item['title']); ?></h4>
|
23 |
+
<p>
|
24 |
+
<?php echo $item['description']; ?>
|
25 |
+
</p>
|
26 |
+
<div class="small text-muted">
|
27 |
+
<?php _e('Source:', 'content-egg-tpl'); ?>
|
28 |
+
<a href="http://www.freebase.com/" target="_blank" rel="nofollow">Freebase</a>
|
29 |
+
<?php if (!empty($item['url'])): ?>
|
30 |
+
,<a href="http://wikipedia.org/" target="_blank" rel="nofollow">Wikipedia</a>
|
31 |
+
<?php endif; ?>.
|
32 |
+
</div>
|
33 |
+
</div>
|
34 |
+
</div>
|
35 |
+
|
36 |
+
<?php endforeach; ?>
|
37 |
+
</div>
|
application/modules/GoogleImages/ExtraDataGoogleImages.php
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\modules\GoogleImages;
|
4 |
+
|
5 |
+
use ContentEgg\application\components\ExtraData;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* ExtraDataGoogleImages class file
|
9 |
+
*
|
10 |
+
* @author keywordrush.com <support@keywordrush.com>
|
11 |
+
* @link http://www.keywordrush.com/
|
12 |
+
* @copyright Copyright © 2015 keywordrush.com
|
13 |
+
*/
|
14 |
+
class ExtraDataGoogleImages extends ExtraData {
|
15 |
+
|
16 |
+
}
|
application/modules/GoogleImages/GoogleImagesConfig.php
ADDED
@@ -0,0 +1,155 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\modules\GoogleImages;
|
4 |
+
|
5 |
+
use ContentEgg\application\components\ParserModuleConfig;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* GoogleImagesConfig class file
|
9 |
+
*
|
10 |
+
* @author keywordrush.com <support@keywordrush.com>
|
11 |
+
* @link http://www.keywordrush.com/
|
12 |
+
* @copyright Copyright © 2015 keywordrush.com
|
13 |
+
*/
|
14 |
+
class GoogleImagesConfig extends ParserModuleConfig {
|
15 |
+
|
16 |
+
public function options()
|
17 |
+
{
|
18 |
+
$optiosn = array(
|
19 |
+
'license' => array(
|
20 |
+
'title' => __('Тип лицензии', 'content-egg'),
|
21 |
+
'description' => __('Поиск изображений, которые можно использовать. Подробнее <a href="https://support.google.com/websearch/answer/29508">здесь</a>.', 'content-egg'),
|
22 |
+
'callback' => array($this, 'render_dropdown'),
|
23 |
+
'dropdown_options' => array(
|
24 |
+
'' => __('Любая лицензия', 'content-egg'),
|
25 |
+
'(cc_publicdomain|cc_attribute|cc_sharealike|cc_noncommercial|cc_nonderived)' => __('Любая Сreative Сommons', 'content-egg'),
|
26 |
+
'(cc_publicdomain|cc_attribute|cc_sharealike|cc_nonderived).-(cc_noncommercial)' => __('Разрешено коммерческое использование', 'content-egg'),
|
27 |
+
'(cc_publicdomain|cc_attribute|cc_sharealike|cc_noncommercial).-(cc_nonderived)' => __('Разрешено изменение', 'content-egg'),
|
28 |
+
'(cc_publicdomain|cc_attribute|cc_sharealike).-(cc_noncommercial|cc_nonderived)' => __('Коммерческое использование и изменение', 'content-egg'),
|
29 |
+
),
|
30 |
+
'default' => '',
|
31 |
+
'section' => 'default',
|
32 |
+
),
|
33 |
+
'entries_per_page' => array(
|
34 |
+
'title' => __('Результатов', 'content-egg'),
|
35 |
+
'description' => __('Количество результатов для одного запроса. Не может быть больше 8.', 'content-egg'),
|
36 |
+
'callback' => array($this, 'render_input'),
|
37 |
+
'default' => '8',
|
38 |
+
'validator' => array(
|
39 |
+
'trim',
|
40 |
+
'absint',
|
41 |
+
array(
|
42 |
+
'call' => array('\ContentEgg\application\helpers\FormValidator', 'less_than_equal_to'),
|
43 |
+
'arg' => 8,
|
44 |
+
'message' => __('Поле "Результатов" не может быть больше 8.', 'content-egg'),
|
45 |
+
),
|
46 |
+
),
|
47 |
+
'section' => 'default',
|
48 |
+
),
|
49 |
+
'imgc' => array(
|
50 |
+
'title' => __('Цвет', 'content-egg'),
|
51 |
+
'description' => '',
|
52 |
+
'callback' => array($this, 'render_dropdown'),
|
53 |
+
'dropdown_options' => array(
|
54 |
+
'' => __('Любого цвета', 'content-egg'),
|
55 |
+
'gray' => __('Черно-белые', 'content-egg'),
|
56 |
+
'color' => __('Цветные', 'content-egg'),
|
57 |
+
),
|
58 |
+
'default' => '',
|
59 |
+
'section' => 'default',
|
60 |
+
),
|
61 |
+
'imgcolor' => array(
|
62 |
+
'title' => __('Преобладание цвета', 'content-egg'),
|
63 |
+
'description' => '',
|
64 |
+
'callback' => array($this, 'render_dropdown'),
|
65 |
+
'dropdown_options' => array(
|
66 |
+
'' => __('Любой цвет', 'content-egg'),
|
67 |
+
'black' => __('Черный', 'content-egg'),
|
68 |
+
'blue' => __('Синий', 'content-egg'),
|
69 |
+
'brown' => __('Коричневый', 'content-egg'),
|
70 |
+
'gray' => __('Серый', 'content-egg'),
|
71 |
+
'green' => __('Зеленый', 'content-egg'),
|
72 |
+
'orange' => __('Оранжевый', 'content-egg'),
|
73 |
+
'pink' => __('Розовый', 'content-egg'),
|
74 |
+
'purple' => __('Фиолетовый', 'content-egg'),
|
75 |
+
'red' => __('Красный', 'content-egg'),
|
76 |
+
'teal' => __('Бирюзовый', 'content-egg'),
|
77 |
+
'white' => __('Белый', 'content-egg'),
|
78 |
+
'yellow' => __('Желтый', 'content-egg'),
|
79 |
+
),
|
80 |
+
'default' => '',
|
81 |
+
'section' => 'default',
|
82 |
+
),
|
83 |
+
'imgsz' => array(
|
84 |
+
'title' => __('Размер', 'content-egg'),
|
85 |
+
'description' => '',
|
86 |
+
'callback' => array($this, 'render_dropdown'),
|
87 |
+
'dropdown_options' => array(
|
88 |
+
'' => __('Любого размера', 'content-egg'),
|
89 |
+
'icon' => __('Маленькие', 'content-egg'),
|
90 |
+
'small|medium|large|xlarge' => __('Средние', 'content-egg'),
|
91 |
+
'xxlarge' => __('Большие', 'content-egg'),
|
92 |
+
'huge' => __('Огромные', 'content-egg'),
|
93 |
+
),
|
94 |
+
'default' => '',
|
95 |
+
'section' => 'default',
|
96 |
+
),
|
97 |
+
'imgtype' => array(
|
98 |
+
'title' => __('Тип', 'content-egg'),
|
99 |
+
'description' => '',
|
100 |
+
'callback' => array($this, 'render_dropdown'),
|
101 |
+
'dropdown_options' => array(
|
102 |
+
'' => __('Любого размера', 'content-egg'),
|
103 |
+
'face' => __('Лица', 'content-egg'),
|
104 |
+
'photo' => __('Фотографии', 'content-egg'),
|
105 |
+
'clipart' => __('Клип-арт', 'content-egg'),
|
106 |
+
'lineart' => __('Ч/б рисунки', 'content-egg'),
|
107 |
+
),
|
108 |
+
'default' => '',
|
109 |
+
'section' => 'default',
|
110 |
+
),
|
111 |
+
'safe' => array(
|
112 |
+
'title' => __('Безопасный поиск', 'content-egg'),
|
113 |
+
'description' => '',
|
114 |
+
'callback' => array($this, 'render_dropdown'),
|
115 |
+
'dropdown_options' => array(
|
116 |
+
'active' => __('Включен', 'content-egg'),
|
117 |
+
'moderate' => __('Модерация', 'content-egg'),
|
118 |
+
'off' => __('Отключен', 'content-egg'),
|
119 |
+
),
|
120 |
+
'default' => 'moderate',
|
121 |
+
'section' => 'default',
|
122 |
+
),
|
123 |
+
'save_img' => array(
|
124 |
+
'title' => __('Сохранять картинки', 'content-egg'),
|
125 |
+
'description' => __('Сохранять картинки на сервер', 'content-egg'),
|
126 |
+
'callback' => array($this, 'render_checkbox'),
|
127 |
+
'default' => false,
|
128 |
+
'section' => 'default',
|
129 |
+
),
|
130 |
+
'description_size' => array(
|
131 |
+
'title' => __('Обрезать описание', 'content-egg'),
|
132 |
+
'description' => __('Размер описания в символах (0 - не обрезать)', 'content-egg'),
|
133 |
+
'callback' => array($this, 'render_input'),
|
134 |
+
'default' => '220',
|
135 |
+
'validator' => array(
|
136 |
+
'trim',
|
137 |
+
'absint',
|
138 |
+
),
|
139 |
+
'section' => 'default',
|
140 |
+
),
|
141 |
+
'as_sitesearch' => array(
|
142 |
+
'title' => 'Поиск по сайту',
|
143 |
+
'description' => __('Ограничить поиск только этим доменом. Например, задайте: photobucket.com', 'content-egg'),
|
144 |
+
'callback' => array($this, 'render_input'),
|
145 |
+
'default' => '',
|
146 |
+
'validator' => array(
|
147 |
+
'trim',
|
148 |
+
),
|
149 |
+
'section' => 'default',
|
150 |
+
),
|
151 |
+
);
|
152 |
+
return array_merge(parent::options(), $optiosn);
|
153 |
+
}
|
154 |
+
|
155 |
+
}
|
application/modules/GoogleImages/GoogleImagesModule.php
ADDED
@@ -0,0 +1,119 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\modules\GoogleImages;
|
4 |
+
|
5 |
+
use ContentEgg\application\components\ParserModule;
|
6 |
+
use ContentEgg\application\libs\google\ImagesSearch;
|
7 |
+
use ContentEgg\application\components\Content;
|
8 |
+
use ContentEgg\application\helpers\TextHelper;
|
9 |
+
use ContentEgg\application\admin\PluginAdmin;
|
10 |
+
use ContentEgg\application\admin\GeneralConfig;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* GoogleImagesModule class file
|
14 |
+
*
|
15 |
+
* @author keywordrush.com <support@keywordrush.com>
|
16 |
+
* @link http://www.keywordrush.com/
|
17 |
+
* @copyright Copyright © 2015 keywordrush.com
|
18 |
+
*/
|
19 |
+
class GoogleImagesModule extends ParserModule {
|
20 |
+
|
21 |
+
public function info()
|
22 |
+
{
|
23 |
+
return array(
|
24 |
+
'name' => 'Google Images',
|
25 |
+
'api_agreement' => 'https://developers.google.com/image-search/terms',
|
26 |
+
);
|
27 |
+
}
|
28 |
+
|
29 |
+
public function defaultTemplateName()
|
30 |
+
{
|
31 |
+
return 'data_image';
|
32 |
+
}
|
33 |
+
|
34 |
+
public function isFree()
|
35 |
+
{
|
36 |
+
return true;
|
37 |
+
}
|
38 |
+
|
39 |
+
public function doRequest($keyword, $query_params = array(), $is_autoupdate = false)
|
40 |
+
{
|
41 |
+
$options = array();
|
42 |
+
|
43 |
+
if (isset($query_params['license']))
|
44 |
+
$options['as_rights'] = $query_params['license'];
|
45 |
+
elseif ($this->config('license'))
|
46 |
+
$options['as_rights'] = $this->config('license');
|
47 |
+
|
48 |
+
if (isset($query_params['imgsz']))
|
49 |
+
$options['imgsz'] = $query_params['imgsz'];
|
50 |
+
elseif ($this->config('imgsz'))
|
51 |
+
$options['imgsz'] = $this->config('imgsz');
|
52 |
+
|
53 |
+
$options['rsz'] = $this->config('entries_per_page');
|
54 |
+
|
55 |
+
$options['hl'] = GeneralConfig::getInstance()->option('lang');
|
56 |
+
if (!empty($_SERVER['REMOTE_ADDR']))
|
57 |
+
$options['userip'] = $_SERVER['REMOTE_ADDR'];
|
58 |
+
|
59 |
+
$options_list = array('as_sitesearch', 'imgc', 'imgcolor', 'imgtype', 'safe', 'as_sitesearch');
|
60 |
+
foreach ($options_list as $o)
|
61 |
+
{
|
62 |
+
if ($this->config($o))
|
63 |
+
$options[$o] = $this->config($o);
|
64 |
+
}
|
65 |
+
try
|
66 |
+
{
|
67 |
+
$api_client = new ImagesSearch();
|
68 |
+
$results = $api_client->search($keyword, $options);
|
69 |
+
} catch (Exception $e)
|
70 |
+
{
|
71 |
+
throw new \Exception(strip_tags($e->getMessage()));
|
72 |
+
}
|
73 |
+
|
74 |
+
if (empty($results['responseData']) || empty($results['responseData']['results']))
|
75 |
+
return array();
|
76 |
+
|
77 |
+
return $this->prepareResults($results['responseData']['results']);
|
78 |
+
}
|
79 |
+
|
80 |
+
private function prepareResults($results)
|
81 |
+
{
|
82 |
+
$data = array();
|
83 |
+
foreach ($results as $key => $r)
|
84 |
+
{
|
85 |
+
$content = new Content;
|
86 |
+
|
87 |
+
$content->unique_id = $r['imageId'];
|
88 |
+
$content->title = $r['titleNoFormatting'];
|
89 |
+
$content->description = trim($r['contentNoFormatting']);
|
90 |
+
if ($max_size = $this->config('description_size'))
|
91 |
+
$content->description = TextHelper::truncate($content->description, $max_size);
|
92 |
+
|
93 |
+
$content->img = $r['url'];
|
94 |
+
$content->url = $r['originalContextUrl'];
|
95 |
+
|
96 |
+
$extra = new ExtraDataGoogleImages;
|
97 |
+
$extra->source = $r['visibleUrl'];
|
98 |
+
$content->extra = $extra;
|
99 |
+
$data[] = $content;
|
100 |
+
}
|
101 |
+
return $data;
|
102 |
+
}
|
103 |
+
|
104 |
+
public function renderResults()
|
105 |
+
{
|
106 |
+
PluginAdmin::render('_metabox_results', array('module_id' => $this->getId()));
|
107 |
+
}
|
108 |
+
|
109 |
+
public function renderSearchResults()
|
110 |
+
{
|
111 |
+
PluginAdmin::render('_metabox_search_results_images', array('module_id' => $this->getId()));
|
112 |
+
}
|
113 |
+
|
114 |
+
public function renderSearchPanel()
|
115 |
+
{
|
116 |
+
$this->render('search_panel', array('module_id' => $this->getId()));
|
117 |
+
}
|
118 |
+
|
119 |
+
}
|
application/modules/GoogleImages/index.php
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<?php // Silence is golden.
|
application/modules/GoogleImages/js/module.js
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
contentEgg.filter('normalizeFlickr', function() {
|
2 |
+
return function(input) {
|
3 |
+
var pattern = RegExp(/_\w{1}\.jpg$/);
|
4 |
+
return input.replace(pattern, '_m.jpg');
|
5 |
+
}
|
6 |
+
});
|
application/modules/GoogleImages/templates/data_image.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Name: Image
|
4 |
+
*/
|
5 |
+
__('Image', 'content-egg-tpl');
|
6 |
+
?>
|
7 |
+
<?php \wp_enqueue_style('egg-bootstrap'); ?>
|
8 |
+
|
9 |
+
<div class="egg-container">
|
10 |
+
<?php if ($title): ?>
|
11 |
+
<h3><?php echo esc_html($title); ?></h3>
|
12 |
+
<?php endif; ?>
|
13 |
+
<div class="row">
|
14 |
+
<?php foreach ($items as $item): ?>
|
15 |
+
<div class="col-md-12" style="padding-bottom: 20px;">
|
16 |
+
<img src="<?php echo $item['img']; ?>" alt="<?php echo esc_attr($item['keyword']); ?>" class="img-thumbnail" />
|
17 |
+
</div>
|
18 |
+
<?php endforeach; ?>
|
19 |
+
</div>
|
20 |
+
</div>
|
application/modules/GoogleImages/templates/data_justified_gallery.php
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Name: Gallery
|
4 |
+
*
|
5 |
+
* @link: http://miromannino.github.io/Justified-Gallery/
|
6 |
+
*/
|
7 |
+
__('Gallery', 'content-egg-tpl');
|
8 |
+
?>
|
9 |
+
|
10 |
+
<?php wp_enqueue_style('egg-justified-gallery', ContentEgg\PLUGIN_RES . '/justified_gallery/justifiedGallery.min.css'); ?>
|
11 |
+
<?php wp_enqueue_script('egg-justified-gallery', ContentEgg\PLUGIN_RES . '/justified_gallery/jquery.justifiedGallery.min.js'); ?>
|
12 |
+
<?php wp_enqueue_style('egg-color-box', ContentEgg\PLUGIN_RES . '/colorbox/colorbox.css'); ?>
|
13 |
+
<?php wp_enqueue_script('egg-color-box', ContentEgg\PLUGIN_RES . '/colorbox/jquery.colorbox-min.js'); ?>
|
14 |
+
|
15 |
+
<?php
|
16 |
+
$rand = rand(0, 100000);
|
17 |
+
?>
|
18 |
+
|
19 |
+
<?php if ($title): ?>
|
20 |
+
<h3><?php echo esc_html($title); ?></h3>
|
21 |
+
<?php endif; ?>
|
22 |
+
|
23 |
+
<div class="cegg-flickr-gallery">
|
24 |
+
<?php foreach ($items as $item): ?>
|
25 |
+
<a href="<?php echo $item['img']; ?>" rel="gallery<?php echo $rand; ?>">
|
26 |
+
<img src="<?php echo $item['img']; ?>" alt="<?php echo esc_attr($item['title']); ?>" class="img-thumbnail" />
|
27 |
+
</a>
|
28 |
+
<?php endforeach; ?>
|
29 |
+
</div>
|
30 |
+
<script>
|
31 |
+
jQuery(document).ready(function() {
|
32 |
+
|
33 |
+
jQuery('.cegg-flickr-gallery').justifiedGallery({
|
34 |
+
rowHeight: 160,
|
35 |
+
lastRow: 'nojustify',
|
36 |
+
margins: 1,
|
37 |
+
}).on('jg.complete', function() {
|
38 |
+
jQuery(this).find('a').colorbox({
|
39 |
+
maxWidth: '80%',
|
40 |
+
maxHeight: '80%',
|
41 |
+
opacity: 0.8,
|
42 |
+
transition: 'elastic',
|
43 |
+
current: ''
|
44 |
+
});
|
45 |
+
});
|
46 |
+
});
|
47 |
+
</script>
|
application/modules/GoogleImages/templates/data_simple.php
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Name: Simple
|
4 |
+
*/
|
5 |
+
__('Simple', 'content-egg-tpl');
|
6 |
+
?>
|
7 |
+
<?php \wp_enqueue_style('egg-bootstrap'); ?>
|
8 |
+
|
9 |
+
|
10 |
+
<div class="egg-container">
|
11 |
+
<?php if ($title): ?>
|
12 |
+
<h3><?php echo esc_html($title); ?></h3>
|
13 |
+
<?php endif; ?>
|
14 |
+
|
15 |
+
<div class="row">
|
16 |
+
<?php foreach ($items as $item): ?>
|
17 |
+
<div class="col-md-12" style="padding-bottom: 20px;">
|
18 |
+
<img src="<?php echo $item['img']; ?>" alt="<?php echo esc_attr($item['keyword']); ?>" class="img-thumbnail" />
|
19 |
+
<div class="text-center">
|
20 |
+
<p class="small"><?php printf(__('Source: %s', 'content-egg'), esc_attr($item['extra']['source'])); ?></p>
|
21 |
+
<h4><?php echo esc_html($item['title']); ?></h4>
|
22 |
+
<p><?php echo $item['description']; ?></p>
|
23 |
+
</div>
|
24 |
+
</div>
|
25 |
+
<?php endforeach; ?>
|
26 |
+
</div>
|
27 |
+
</div>
|
application/modules/GoogleImages/views/search_panel.php
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<select ng-model="query_params.<?php echo $module_id; ?>.license">
|
2 |
+
<option value=""><?php _e('Любая лицензия', 'content-egg'); ?></option>
|
3 |
+
<option value="(cc_publicdomain|cc_attribute|cc_sharealike|cc_noncommercial|cc_nonderived)"><?php _e('Любая Сreative Сommons', 'content-egg'); ?></option>
|
4 |
+
<option value="(cc_publicdomain|cc_attribute|cc_sharealike|cc_nonderived).-(cc_noncommercial)"><?php _e('Разрешено коммерческое использование', 'content-egg'); ?></option>
|
5 |
+
<option value="(cc_publicdomain|cc_attribute|cc_sharealike|cc_noncommercial).-(cc_nonderived)"><?php _e('Разрешено изменение', 'content-egg'); ?></option>
|
6 |
+
<option value="(cc_publicdomain|cc_attribute|cc_sharealike).-(cc_noncommercial|cc_nonderived)"><?php _e('Коммерческое использование и изменение', 'content-egg'); ?></option>
|
7 |
+
</select>
|
8 |
+
|
9 |
+
|
10 |
+
<select ng-model="query_params.<?php echo $module_id; ?>.imgsz">
|
11 |
+
<option value=""><?php _e('Любого размера', 'content-egg'); ?></option>
|
12 |
+
<option value="icon"><?php _e('Маленькие', 'content-egg'); ?></option>
|
13 |
+
<option value="small|medium|large|xlarge"><?php _e('Средние', 'content-egg'); ?></option>
|
14 |
+
<option value="xxlarge"><?php _e('Большие', 'content-egg'); ?></option>
|
15 |
+
<option value="huge"><?php _e('Огромные', 'content-egg'); ?></option>
|
16 |
+
</select>
|
application/modules/Youtube/ExtraDataYoutube.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\modules\Youtube;
|
4 |
+
|
5 |
+
use ContentEgg\application\components\ExtraData;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* ExtraDataYoutube class file
|
9 |
+
*
|
10 |
+
* @author keywordrush.com <support@keywordrush.com>
|
11 |
+
* @link http://www.keywordrush.com/
|
12 |
+
* @copyright Copyright © 2015 keywordrush.com
|
13 |
+
*/
|
14 |
+
class ExtraDataYouTube extends ExtraData {
|
15 |
+
|
16 |
+
public $guid;
|
17 |
+
public $category;
|
18 |
+
public $channel_title;
|
19 |
+
}
|
application/modules/Youtube/YoutubeConfig.php
ADDED
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\modules\Youtube;
|
4 |
+
|
5 |
+
use ContentEgg\application\components\ParserModuleConfig;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* YoutubeConfig class file
|
9 |
+
*
|
10 |
+
* @author keywordrush.com <support@keywordrush.com>
|
11 |
+
* @link http://www.keywordrush.com/
|
12 |
+
* @copyright Copyright © 2015 keywordrush.com
|
13 |
+
*/
|
14 |
+
class YoutubeConfig extends ParserModuleConfig {
|
15 |
+
|
16 |
+
public function options()
|
17 |
+
{
|
18 |
+
$optiosn = array(
|
19 |
+
'api_key' => array(
|
20 |
+
'title' => 'API Key <span class="cegg_required">*</span>',
|
21 |
+
'description' => __('Ключ для доступа к API. Получить можно в Google <a href="http://code.google.com/apis/console">API консоли</a>', 'content-egg'),
|
22 |
+
'callback' => array($this, 'render_input'),
|
23 |
+
'default' => '',
|
24 |
+
'validator' => array(
|
25 |
+
'trim',
|
26 |
+
array(
|
27 |
+
'call' => array('\ContentEgg\application\helpers\FormValidator', 'required'),
|
28 |
+
'when' => 'is_active',
|
29 |
+
'message' => __('Поле "API Key" не может быть пустым.', 'content-egg'),
|
30 |
+
),
|
31 |
+
),
|
32 |
+
'section' => 'default',
|
33 |
+
),
|
34 |
+
'entries_per_page' => array(
|
35 |
+
'title' => __('Результатов', 'content-egg'),
|
36 |
+
'description' => __('Количество результатов для одного запроса', 'content-egg'),
|
37 |
+
'callback' => array($this, 'render_input'),
|
38 |
+
'default' => '5',
|
39 |
+
'validator' => array(
|
40 |
+
'trim',
|
41 |
+
'absint',
|
42 |
+
),
|
43 |
+
'section' => 'default',
|
44 |
+
),
|
45 |
+
'order' => array(
|
46 |
+
'title' => __('Сортировка', 'content-egg'),
|
47 |
+
'description' => '',
|
48 |
+
'callback' => array($this, 'render_dropdown'),
|
49 |
+
'dropdown_options' => array(
|
50 |
+
'date' => __('Дата', 'content-egg'),
|
51 |
+
'rating' => __('Рейтинг', 'content-egg'),
|
52 |
+
'relevance' => __('Релевантность', 'content-egg'),
|
53 |
+
'title' => __('Заголовок', 'content-egg'),
|
54 |
+
'viewCount' => __('Просмотры', 'content-egg'),
|
55 |
+
),
|
56 |
+
'default' => 'relevance',
|
57 |
+
'section' => 'default',
|
58 |
+
),
|
59 |
+
'license' => array(
|
60 |
+
'title' => __('Тип лицензии', 'content-egg'),
|
61 |
+
'description' => __('Многие видео на Youtube загружены с лицензией Creative Commons. <a href="http://www.google.com/support/youtube/bin/answer.py?answer=1284989">Узнать больше</a>.', 'content-egg'),
|
62 |
+
'callback' => array($this, 'render_dropdown'),
|
63 |
+
'dropdown_options' => array(
|
64 |
+
'any' => __('Любая лицензия', 'content-egg'),
|
65 |
+
'creativeCommon' => __('Сreative Сommons лицензия', 'content-egg'),
|
66 |
+
'youtube' => __('Стандартная лицензия', 'content-egg'),
|
67 |
+
),
|
68 |
+
'default' => 'any',
|
69 |
+
'section' => 'default',
|
70 |
+
),
|
71 |
+
'description_size' => array(
|
72 |
+
'title' => __('Обрезать описание', 'content-egg'),
|
73 |
+
'description' => __('Размер описания в символах (0 - не обрезать)', 'content-egg'),
|
74 |
+
'callback' => array($this, 'render_input'),
|
75 |
+
'default' => '280',
|
76 |
+
'validator' => array(
|
77 |
+
'trim',
|
78 |
+
'absint',
|
79 |
+
),
|
80 |
+
'section' => 'default',
|
81 |
+
),
|
82 |
+
);
|
83 |
+
$parent = parent::options();
|
84 |
+
unset($parent['featured_image']);
|
85 |
+
return array_merge($parent, $optiosn);
|
86 |
+
}
|
87 |
+
|
88 |
+
}
|
application/modules/Youtube/YoutubeModule.php
ADDED
@@ -0,0 +1,122 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg\application\modules\Youtube;
|
4 |
+
|
5 |
+
use ContentEgg\application\components\ParserModule;
|
6 |
+
use ContentEgg\application\libs\google\YouTubeSearch;
|
7 |
+
use ContentEgg\application\components\Content;
|
8 |
+
use ContentEgg\application\helpers\TextHelper;
|
9 |
+
use ContentEgg\application\admin\PluginAdmin;
|
10 |
+
use ContentEgg\application\admin\GeneralConfig;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* YoutubeModule class file
|
14 |
+
*
|
15 |
+
* @author keywordrush.com <support@keywordrush.com>
|
16 |
+
* @link http://www.keywordrush.com/
|
17 |
+
* @copyright Copyright © 2015 keywordrush.com
|
18 |
+
*/
|
19 |
+
class YoutubeModule extends ParserModule {
|
20 |
+
|
21 |
+
public function info()
|
22 |
+
{
|
23 |
+
return array(
|
24 |
+
'name' => 'Youtube',
|
25 |
+
'api_agreement' => 'http://code.google.com/apis/youtube/terms.html',
|
26 |
+
);
|
27 |
+
}
|
28 |
+
|
29 |
+
public function isFree()
|
30 |
+
{
|
31 |
+
return true;
|
32 |
+
}
|
33 |
+
|
34 |
+
public function doRequest($keyword, $query_params = array(), $is_autoupdate = false)
|
35 |
+
{
|
36 |
+
|
37 |
+
$params = array();
|
38 |
+
$params['relevanceLanguage'] = GeneralConfig::getInstance()->option('lang');
|
39 |
+
$params['maxResults'] = $this->config('entries_per_page');
|
40 |
+
$params['key'] = $this->config('api_key');
|
41 |
+
|
42 |
+
if (!empty($query_params['order']))
|
43 |
+
$params['order'] = $query_params['order'];
|
44 |
+
else
|
45 |
+
$params['order'] = $this->config('order');
|
46 |
+
|
47 |
+
if (!empty($query_params['license']))
|
48 |
+
$params['videoLicense'] = $query_params['license'];
|
49 |
+
else
|
50 |
+
$params['videoLicense'] = $this->config('license');
|
51 |
+
|
52 |
+
try
|
53 |
+
{
|
54 |
+
//$keyword = str_replace('-', ' ', $keyword);
|
55 |
+
$client = new YouTubeSearch('json');
|
56 |
+
$data = $client->search($keyword, $params);
|
57 |
+
unset($client);
|
58 |
+
} catch (Exception $e)
|
59 |
+
{
|
60 |
+
throw new \Exception(strip_tags($e->getMessage()));
|
61 |
+
}
|
62 |
+
|
63 |
+
if (!isset($data['items']) || !isset($data['items'][0]))
|
64 |
+
$data['items'] = array();
|
65 |
+
|
66 |
+
$results = array();
|
67 |
+
foreach ($data['items'] as $r)
|
68 |
+
{
|
69 |
+
if (!isset($r['id']['videoId']))
|
70 |
+
continue;
|
71 |
+
|
72 |
+
$guid = $r['id']['videoId'];
|
73 |
+
|
74 |
+
$content = new Content;
|
75 |
+
$content->unique_id = $guid;
|
76 |
+
$content->title = strip_tags($r['snippet']['title']);
|
77 |
+
$content->img = isset($r['snippet']['thumbnails']) ? $r['snippet']['thumbnails']['medium']['url'] : '';
|
78 |
+
|
79 |
+
if (isset($r['snippet']['description']) && !is_array($r['snippet']['description']))
|
80 |
+
{
|
81 |
+
$content->description = strip_tags($r['snippet']['description']);
|
82 |
+
if ($max_size = $this->config('description_size'))
|
83 |
+
$content->description = TextHelper::truncate($content->description, $max_size);
|
84 |
+
} else
|
85 |
+
$content->description = '';
|
86 |
+
$content->url = 'https://www.youtube.com/watch?v=' . $r['id']['videoId'];
|
87 |
+
|
88 |
+
$extra = new ExtraDataYoutube;
|
89 |
+
$extra->author = strip_tags($r['snippet']['channelTitle']);
|
90 |
+
$extra->date = strtotime($r['snippet']['publishedAt']);
|
91 |
+
$extra->guid = $guid;
|
92 |
+
$extra->category = isset($r['snippet']['category'][1]) ? $r['snippet']['category'][1] : '';
|
93 |
+
$extra->channel_title = isset($r['snippet']['channelTitle']) ? $r['snippet']['channelTitle'] : '';
|
94 |
+
|
95 |
+
$content->extra = $extra;
|
96 |
+
$results[] = $content;
|
97 |
+
}
|
98 |
+
return $results;
|
99 |
+
}
|
100 |
+
|
101 |
+
public function enqueueScripts()
|
102 |
+
{
|
103 |
+
\wp_enqueue_script('cegg-youtube', \plugins_url('application/modules/Youtube/js/module.js', \ContentEgg\PLUGIN_FILE), array('contentegg-metabox-app'), null, false);
|
104 |
+
}
|
105 |
+
|
106 |
+
public function renderResults()
|
107 |
+
{
|
108 |
+
PluginAdmin::render('_metabox_results', array('module_id' => $this->getId()));
|
109 |
+
}
|
110 |
+
|
111 |
+
public function renderSearchResults()
|
112 |
+
{
|
113 |
+
//PluginAdmin::render('_metabox_search_results_images', array('module_id' => $this->getId()));
|
114 |
+
$this->render('search_results', array('module_id' => $this->getId()));
|
115 |
+
}
|
116 |
+
|
117 |
+
public function renderSearchPanel()
|
118 |
+
{
|
119 |
+
$this->render('search_panel', array('module_id' => $this->getId()));
|
120 |
+
}
|
121 |
+
|
122 |
+
}
|
application/modules/Youtube/index.php
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<?php // Silence is golden.
|
application/modules/Youtube/js/module.js
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* @link: http://blog.oxrud.com/posts/creating-youtube-directive/
|
3 |
+
*/
|
4 |
+
|
5 |
+
contentEgg.directive('youtube', function($window) {
|
6 |
+
return {
|
7 |
+
restrict: "E",
|
8 |
+
scope: {
|
9 |
+
height: "@",
|
10 |
+
width: "@",
|
11 |
+
videoid: "@"
|
12 |
+
},
|
13 |
+
template: '<div></div>',
|
14 |
+
link: function(scope, element) {
|
15 |
+
var tag = document.createElement('script');
|
16 |
+
tag.src = "https://www.youtube.com/iframe_api";
|
17 |
+
var firstScriptTag = document.getElementsByTagName('script')[0];
|
18 |
+
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
|
19 |
+
|
20 |
+
var player;
|
21 |
+
|
22 |
+
$window.onYouTubeIframeAPIReady = function() {
|
23 |
+
|
24 |
+
player = new YT.Player(element.children()[0], {
|
25 |
+
playerVars: {
|
26 |
+
autoplay: 0,
|
27 |
+
html5: 1,
|
28 |
+
theme: "light",
|
29 |
+
modesbranding: 0,
|
30 |
+
color: "white",
|
31 |
+
iv_load_policy: 3,
|
32 |
+
showinfo: 1,
|
33 |
+
controls: 1
|
34 |
+
},
|
35 |
+
height: scope.height,
|
36 |
+
width: scope.width,
|
37 |
+
videoId: scope.videoid,
|
38 |
+
});
|
39 |
+
}
|
40 |
+
|
41 |
+
scope.$watch('videoid', function(newValue, oldValue) {
|
42 |
+
if (newValue == oldValue) {
|
43 |
+
return;
|
44 |
+
}
|
45 |
+
|
46 |
+
player.cueVideoById(scope.videoid);
|
47 |
+
|
48 |
+
});
|
49 |
+
|
50 |
+
scope.$watch('height + width', function(newValue, oldValue) {
|
51 |
+
if (newValue == oldValue) {
|
52 |
+
return;
|
53 |
+
}
|
54 |
+
|
55 |
+
player.setSize(scope.width, scope.height);
|
56 |
+
|
57 |
+
});
|
58 |
+
}
|
59 |
+
};
|
60 |
+
});
|
application/modules/Youtube/templates/data_responsive_embed.php
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Name: Large
|
4 |
+
*/
|
5 |
+
__('Large', 'content-egg-tpl');
|
6 |
+
?>
|
7 |
+
|
8 |
+
<?php \wp_enqueue_style('egg-bootstrap'); ?>
|
9 |
+
|
10 |
+
<div class="egg-container">
|
11 |
+
<?php if ($title): ?>
|
12 |
+
<h3><?php echo esc_html($title); ?></h3>
|
13 |
+
<?php endif; ?>
|
14 |
+
|
15 |
+
<?php foreach ($items as $item): ?>
|
16 |
+
<div class="embed-responsive embed-responsive-16by9">
|
17 |
+
<iframe width="560" height="315" src="https://www.youtube.com/embed/<?php echo $item['extra']['guid']; ?>" frameborder="0" allowfullscreen></iframe>
|
18 |
+
</div>
|
19 |
+
<h4><?php echo esc_html($item['title']); ?></h4>
|
20 |
+
<?php if ($item['description']): ?>
|
21 |
+
<p><?php echo $item['description']; ?></p>
|
22 |
+
<?php endif; ?>
|
23 |
+
<?php endforeach; ?>
|
24 |
+
</div>
|
application/modules/Youtube/templates/data_simple.php
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Name: Simple
|
4 |
+
*/
|
5 |
+
__('Simple', 'content-egg-tpl');
|
6 |
+
?>
|
7 |
+
|
8 |
+
<?php \wp_enqueue_style('egg-bootstrap'); ?>
|
9 |
+
|
10 |
+
<div class="egg-container">
|
11 |
+
<?php if ($title): ?>
|
12 |
+
<h3><?php echo esc_html($title); ?></h3>
|
13 |
+
<?php endif; ?>
|
14 |
+
|
15 |
+
<?php foreach ($items as $item): ?>
|
16 |
+
<div class="row">
|
17 |
+
<div class="col-md-12">
|
18 |
+
<iframe width="560" height="315" src="https://www.youtube.com/embed/<?php echo $item['extra']['guid']; ?>" frameborder="0" allowfullscreen></iframe>
|
19 |
+
<h4><?php echo esc_html($item['title']); ?></h4>
|
20 |
+
<?php if ($item['description']):?>
|
21 |
+
<p><?php echo $item['description']; ?></p>
|
22 |
+
<?php endif; ?>
|
23 |
+
</div>
|
24 |
+
</div>
|
25 |
+
<?php endforeach; ?>
|
26 |
+
</div>
|
application/modules/Youtube/templates/data_tile.php
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Name: Tile
|
4 |
+
*/
|
5 |
+
__('Tile', 'content-egg-tpl');
|
6 |
+
?>
|
7 |
+
|
8 |
+
<?php \wp_enqueue_style('egg-bootstrap'); ?>
|
9 |
+
|
10 |
+
<div class="egg-container">
|
11 |
+
<?php if ($title): ?>
|
12 |
+
<h3><?php echo esc_html($title); ?></h3>
|
13 |
+
<?php endif; ?>
|
14 |
+
|
15 |
+
<div class="row">
|
16 |
+
<?php foreach ($items as $item): ?>
|
17 |
+
<div class="col-md-6">
|
18 |
+
<div class="embed-responsive embed-responsive-16by9">
|
19 |
+
<iframe width="560" height="315" src="https://www.youtube.com/embed/<?php echo $item['extra']['guid']; ?>" frameborder="0" allowfullscreen></iframe>
|
20 |
+
</div>
|
21 |
+
</div>
|
22 |
+
<?php endforeach; ?>
|
23 |
+
</div>
|
24 |
+
</div>
|
application/modules/Youtube/views/search_panel.php
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<select ng-model="query_params.<?php echo $module_id; ?>.license">
|
2 |
+
<option value="any"><?php _e('Любая лицензия', 'content-egg'); ?></option>
|
3 |
+
<option value="creativeCommon"><?php _e('Сreative Сommons', 'content-egg'); ?></option>
|
4 |
+
<option value="youtube"><?php _e('Стандартная лицензия', 'content-egg'); ?></option>
|
5 |
+
</select>
|
6 |
+
|
7 |
+
<select ng-model="query_params.<?php echo $module_id; ?>.order">
|
8 |
+
<option value="date"><?php _e('Дата', 'content-egg'); ?></option>
|
9 |
+
<option value="rating"><?php _e('Рейтинг', 'content-egg'); ?></option>
|
10 |
+
<option value="relevance"><?php _e('Релевантность', 'content-egg'); ?></option>
|
11 |
+
<option value="title"><?php _e('Заголовок', 'content-egg'); ?></option>
|
12 |
+
<option value="viewCount"><?php _e('Просмотры', 'content-egg'); ?></option>
|
13 |
+
</select>
|
application/modules/Youtube/views/search_results.php
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="search_results" ng-show="models.<?php echo $module_id; ?>.results.length > 0 && !models.<?php echo $module_id; ?>.processing">
|
2 |
+
<div class="row search_results_row" ng-class="{'result_added' : result.added}" ng-click="add(result, '<?php echo $module_id; ?>')" repeat-done ng-repeat="result in models.<?php echo $module_id; ?>.results">
|
3 |
+
<div class="col-md-4">
|
4 |
+
|
5 |
+
<iframe ng-if="!result.added" width="320" height="180" ng-src="{{getYoutubeUri(result.extra.guid)}}" frameborder="0" allowfullscreen></iframe>
|
6 |
+
<img width="320" height="180" ng-if="result.added" ng-src="{{result.img}}" />
|
7 |
+
|
8 |
+
</div>
|
9 |
+
<div class="col-md-8">
|
10 |
+
<strong>{{result.title}}</strong>
|
11 |
+
<p>{{result.description}}</p>
|
12 |
+
</div>
|
13 |
+
</div>
|
14 |
+
</div>
|
application/modules/index.php
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<?php // Silence is golden.
|
application/vendor/CVarDumper.php
ADDED
@@ -0,0 +1,142 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace ContentEgg\application\vendor;
|
3 |
+
|
4 |
+
/**
|
5 |
+
* CVarDumper class file.
|
6 |
+
*
|
7 |
+
* @author Qiang Xue <qiang.xue@gmail.com>
|
8 |
+
* @link http://www.yiiframework.com/
|
9 |
+
* @copyright 2008-2013 Yii Software LLC
|
10 |
+
* @license http://www.yiiframework.com/license/
|
11 |
+
*/
|
12 |
+
|
13 |
+
/**
|
14 |
+
* CVarDumper is intended to replace the buggy PHP function var_dump and print_r.
|
15 |
+
* It can correctly identify the recursively referenced objects in a complex
|
16 |
+
* object structure. It also has a recursive depth control to avoid indefinite
|
17 |
+
* recursive display of some peculiar variables.
|
18 |
+
*
|
19 |
+
* CVarDumper can be used as follows,
|
20 |
+
* <pre>
|
21 |
+
* CVarDumper::dump($var);
|
22 |
+
* </pre>
|
23 |
+
*
|
24 |
+
* @author Qiang Xue <qiang.xue@gmail.com>
|
25 |
+
* @package system.utils
|
26 |
+
* @since 1.0
|
27 |
+
*/
|
28 |
+
class CVarDumper
|
29 |
+
{
|
30 |
+
private static $_objects;
|
31 |
+
private static $_output;
|
32 |
+
private static $_depth;
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Displays a variable.
|
36 |
+
* This method achieves the similar functionality as var_dump and print_r
|
37 |
+
* but is more robust when handling complex objects such as Yii controllers.
|
38 |
+
* @param mixed $var variable to be dumped
|
39 |
+
* @param integer $depth maximum depth that the dumper should go into the variable. Defaults to 10.
|
40 |
+
* @param boolean $highlight whether the result should be syntax-highlighted
|
41 |
+
*/
|
42 |
+
public static function dump($var,$depth=10,$highlight=false)
|
43 |
+
{
|
44 |
+
echo self::dumpAsString($var,$depth,$highlight);
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Dumps a variable in terms of a string.
|
49 |
+
* This method achieves the similar functionality as var_dump and print_r
|
50 |
+
* but is more robust when handling complex objects such as Yii controllers.
|
51 |
+
* @param mixed $var variable to be dumped
|
52 |
+
* @param integer $depth maximum depth that the dumper should go into the variable. Defaults to 10.
|
53 |
+
* @param boolean $highlight whether the result should be syntax-highlighted
|
54 |
+
* @return string the string representation of the variable
|
55 |
+
*/
|
56 |
+
public static function dumpAsString($var,$depth=10,$highlight=false)
|
57 |
+
{
|
58 |
+
self::$_output='';
|
59 |
+
self::$_objects=array();
|
60 |
+
self::$_depth=$depth;
|
61 |
+
self::dumpInternal($var,0);
|
62 |
+
if($highlight)
|
63 |
+
{
|
64 |
+
$result=highlight_string("<?php\n".self::$_output,true);
|
65 |
+
self::$_output=preg_replace('/<\\?php<br \\/>/','',$result,1);
|
66 |
+
}
|
67 |
+
return self::$_output;
|
68 |
+
}
|
69 |
+
|
70 |
+
/*
|
71 |
+
* @param mixed $var variable to be dumped
|
72 |
+
* @param integer $level depth level
|
73 |
+
*/
|
74 |
+
private static function dumpInternal($var,$level)
|
75 |
+
{
|
76 |
+
switch(gettype($var))
|
77 |
+
{
|
78 |
+
case 'boolean':
|
79 |
+
self::$_output.=$var?'true':'false';
|
80 |
+
break;
|
81 |
+
case 'integer':
|
82 |
+
self::$_output.="$var";
|
83 |
+
break;
|
84 |
+
case 'double':
|
85 |
+
self::$_output.="$var";
|
86 |
+
break;
|
87 |
+
case 'string':
|
88 |
+
self::$_output.="'".addslashes($var)."'";
|
89 |
+
break;
|
90 |
+
case 'resource':
|
91 |
+
self::$_output.='{resource}';
|
92 |
+
break;
|
93 |
+
case 'NULL':
|
94 |
+
self::$_output.="null";
|
95 |
+
break;
|
96 |
+
case 'unknown type':
|
97 |
+
self::$_output.='{unknown}';
|
98 |
+
break;
|
99 |
+
case 'array':
|
100 |
+
if(self::$_depth<=$level)
|
101 |
+
self::$_output.='array(...)';
|
102 |
+
elseif(empty($var))
|
103 |
+
self::$_output.='array()';
|
104 |
+
else
|
105 |
+
{
|
106 |
+
$keys=array_keys($var);
|
107 |
+
$spaces=str_repeat(' ',$level*4);
|
108 |
+
self::$_output.="array\n".$spaces.'(';
|
109 |
+
foreach($keys as $key)
|
110 |
+
{
|
111 |
+
self::$_output.="\n".$spaces.' ';
|
112 |
+
self::dumpInternal($key,0);
|
113 |
+
self::$_output.=' => ';
|
114 |
+
self::dumpInternal($var[$key],$level+1);
|
115 |
+
}
|
116 |
+
self::$_output.="\n".$spaces.')';
|
117 |
+
}
|
118 |
+
break;
|
119 |
+
case 'object':
|
120 |
+
if(($id=array_search($var,self::$_objects,true))!==false)
|
121 |
+
self::$_output.=get_class($var).'#'.($id+1).'(...)';
|
122 |
+
elseif(self::$_depth<=$level)
|
123 |
+
self::$_output.=get_class($var).'(...)';
|
124 |
+
else
|
125 |
+
{
|
126 |
+
$id=array_push(self::$_objects,$var);
|
127 |
+
$className=get_class($var);
|
128 |
+
$members=(array)$var;
|
129 |
+
$spaces=str_repeat(' ',$level*4);
|
130 |
+
self::$_output.="$className#$id\n".$spaces.'(';
|
131 |
+
foreach($members as $key=>$value)
|
132 |
+
{
|
133 |
+
$keyDisplay=strtr(trim($key),array("\0"=>':'));
|
134 |
+
self::$_output.="\n".$spaces." [$keyDisplay] => ";
|
135 |
+
self::$_output.=self::dumpInternal($value,$level+1);
|
136 |
+
}
|
137 |
+
self::$_output.="\n".$spaces.')';
|
138 |
+
}
|
139 |
+
break;
|
140 |
+
}
|
141 |
+
}
|
142 |
+
}
|
application/vendor/index.php
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<?php // Silence is golden.
|
content-egg.php
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg;
|
4 |
+
|
5 |
+
/*
|
6 |
+
Plugin Name: Content Egg
|
7 |
+
Plugin URI: http://www.keywordrush.com/contentegg
|
8 |
+
Description: Plugin for adding additional content for your posts. Let you to earn money from affiliate programs.
|
9 |
+
Version: 1.6.0
|
10 |
+
Author: keywordrush.com
|
11 |
+
Author URI: http://www.keywordrush.com
|
12 |
+
Text Domain: content-egg
|
13 |
+
*/
|
14 |
+
|
15 |
+
/*
|
16 |
+
* Copyright (c) www.keywordrush.com (email: support@keywordrush.com)
|
17 |
+
*/
|
18 |
+
|
19 |
+
defined('ABSPATH') || die('No direct script access allowed!');
|
20 |
+
|
21 |
+
define(__NAMESPACE__ . '\NS', __NAMESPACE__ . '\\');
|
22 |
+
define(NS . 'PLUGIN_PATH', \plugin_dir_path(__FILE__));
|
23 |
+
define(NS . 'PLUGIN_FILE', __FILE__);
|
24 |
+
define(NS . 'PLUGIN_RES', \plugins_url('res', __FILE__));
|
25 |
+
|
26 |
+
require_once PLUGIN_PATH . 'loader.php';
|
27 |
+
|
28 |
+
\add_action('plugins_loaded', array('\ContentEgg\application\Plugin', 'getInstance'));
|
29 |
+
if (\is_admin())
|
30 |
+
{
|
31 |
+
\register_activation_hook(__FILE__, array(\ContentEgg\application\Installer::getInstance(), 'activate'));
|
32 |
+
\register_deactivation_hook(__FILE__, array(\ContentEgg\application\Installer::getInstance(), 'deactivate'));
|
33 |
+
\register_uninstall_hook(__FILE__, array('\ContentEgg\application\Installer', 'uninstall'));
|
34 |
+
\add_action('init', array('\ContentEgg\application\admin\PluginAdmin', 'getInstance'));
|
35 |
+
}
|
index.php
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<?php // Silence is golden.
|
languages/content-egg-en_US.mo
ADDED
Binary file
|
languages/content-egg-en_US.po
ADDED
@@ -0,0 +1,1856 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Copyright (C) 2015 Content Egg
|
2 |
+
# This file is distributed under the same license as the Content Egg package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: Content Egg 1.1.1\n"
|
6 |
+
"Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/content-egg\n"
|
7 |
+
"POT-Creation-Date: 2015-08-27 15:23:21+00:00\n"
|
8 |
+
"PO-Revision-Date: 2015-08-27 18:25+0200\n"
|
9 |
+
"Last-Translator: Sizam themes <sizamtheme@gmail.com>\n"
|
10 |
+
"Language-Team: \n"
|
11 |
+
"Language: en_EN\n"
|
12 |
+
"MIME-Version: 1.0\n"
|
13 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
14 |
+
"Content-Transfer-Encoding: 8bit\n"
|
15 |
+
"X-Generator: Poedit 1.6.5\n"
|
16 |
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
17 |
+
|
18 |
+
#: application/Autoupdate.php:79
|
19 |
+
msgid "Новая версия"
|
20 |
+
msgstr "New version"
|
21 |
+
|
22 |
+
#: application/Installer.php:76
|
23 |
+
msgid ""
|
24 |
+
"Вы используете Wordpress %s. <em>%s</em> требует минимум <strong>Wordpress "
|
25 |
+
"%s</strong>."
|
26 |
+
msgstr ""
|
27 |
+
"You are using Wordpress %s. <em>%s</em> requires at least <strong>Wordpress "
|
28 |
+
"%s</strong>."
|
29 |
+
|
30 |
+
#: application/Installer.php:80
|
31 |
+
msgid ""
|
32 |
+
"На вашем сервере установлен PHP %s. <em>%s</em> требует минимум <strong>PHP "
|
33 |
+
"%s</strong>."
|
34 |
+
msgstr ""
|
35 |
+
"PHP is installed on your server %s. <em>%s</em> requires at least "
|
36 |
+
"<strong>PHP %s</strong>."
|
37 |
+
|
38 |
+
#: application/Installer.php:85
|
39 |
+
msgid "Требуется расширение <strong>%s</strong>."
|
40 |
+
msgstr "Requires extension <strong>%s</strong>."
|
41 |
+
|
42 |
+
#: application/Installer.php:91
|
43 |
+
msgid "не может быть установлен!"
|
44 |
+
msgstr "cannot be installed!"
|
45 |
+
|
46 |
+
#: application/admin/EggMetabox.php:76
|
47 |
+
msgid "Настройте и активируйте модули Content Egg плагин."
|
48 |
+
msgstr "Configure and activate modules of Content Egg plugin"
|
49 |
+
|
50 |
+
#: application/admin/GeneralConfig.php:30 application/admin/PluginAdmin.php:68
|
51 |
+
msgid "Настройки"
|
52 |
+
msgstr "Settings"
|
53 |
+
|
54 |
+
#: application/admin/GeneralConfig.php:86
|
55 |
+
msgid "Язык сайта"
|
56 |
+
msgstr "Website language"
|
57 |
+
|
58 |
+
#: application/admin/GeneralConfig.php:87
|
59 |
+
msgid ""
|
60 |
+
"Модули, которые имеют поддержку мультиязычности, будут отдавать предпочтение "
|
61 |
+
"контенту на этом языке. Также эта настройка указывает на язык для "
|
62 |
+
"локализации шаблонов."
|
63 |
+
msgstr ""
|
64 |
+
"Modules, which have Multilanguage support, will have priority for this "
|
65 |
+
"language. Also, this setting will point on language of output templates"
|
66 |
+
|
67 |
+
#: application/admin/LicConfig.php:32
|
68 |
+
msgid "Лицензия"
|
69 |
+
msgstr "License"
|
70 |
+
|
71 |
+
#: application/admin/LicConfig.php:40
|
72 |
+
msgid "Ключ лицензии"
|
73 |
+
msgstr "License key"
|
74 |
+
|
75 |
+
#: application/admin/LicConfig.php:41
|
76 |
+
msgid ""
|
77 |
+
"Сюда необходимо ввести действующий ключ лицензии. Найти ключ вы можете в "
|
78 |
+
"своей <a href=\"http://www.keywordrush.com/panel\">панели пользователя</a>. "
|
79 |
+
"Если у вас еще нет ключа, вы можете приобрести его на <a href=\"http://www."
|
80 |
+
"keywordrush.com/contentegg\">официальном сайте</a> плагина."
|
81 |
+
msgstr ""
|
82 |
+
"Here you must enter a valid license key. You can find key in your <a href="
|
83 |
+
"\"http://www.keywordrush.com/en/panel\">user panel</a>. If you don't have a "
|
84 |
+
"key you can buy it on <a href=\"http://www.keywordrush.com/en/contentegg"
|
85 |
+
"\">the official website</a> of the plugin."
|
86 |
+
|
87 |
+
#: application/admin/LicConfig.php:48
|
88 |
+
msgid "Поле \"Ключ лицензии\" не может быть пустым."
|
89 |
+
msgstr "The \"License key\" can not be empty"
|
90 |
+
|
91 |
+
#: application/admin/LicConfig.php:52
|
92 |
+
msgid "Неверный ключ лицензии."
|
93 |
+
msgstr "Invalid license key"
|
94 |
+
|
95 |
+
#: application/admin/LicConfig.php:56
|
96 |
+
msgid ""
|
97 |
+
"Ключ лицензии не принят. Убедитесь, что вы используйте действительный ключ. "
|
98 |
+
"Если вы верите, что произошла ошибка, пожалуйста, обратитесь в <a href="
|
99 |
+
"\"http://www.keywordrush.com/contact\">поддержку</a> плагина."
|
100 |
+
msgstr ""
|
101 |
+
"The license key is not accepted. Make sure you use a valid key. If you "
|
102 |
+
"believe this is an error, please contact the <a href=\"http://www."
|
103 |
+
"keywordrush.com/contact\">support</a> of plugin."
|
104 |
+
|
105 |
+
#: application/admin/views/_metabox_results.php:9
|
106 |
+
#: application/components/ParserModuleConfig.php:46
|
107 |
+
#: application/modules/Youtube/YoutubeConfig.php:53
|
108 |
+
#: application/modules/Youtube/views/search_panel.php:11
|
109 |
+
msgid "Заголовок"
|
110 |
+
msgstr "Title"
|
111 |
+
|
112 |
+
#: application/admin/views/_metabox_results.php:10
|
113 |
+
msgid "Описание"
|
114 |
+
msgstr "Description"
|
115 |
+
|
116 |
+
#: application/admin/views/_metabox_results.php:13
|
117 |
+
msgid "Перейти"
|
118 |
+
msgstr "Go to "
|
119 |
+
|
120 |
+
#: application/admin/views/_metabox_results.php:14
|
121 |
+
msgid "Удалить"
|
122 |
+
msgstr "Delete"
|
123 |
+
|
124 |
+
#: application/admin/views/lic_settings.php:2
|
125 |
+
msgid "лицензия"
|
126 |
+
msgstr "License"
|
127 |
+
|
128 |
+
#: application/admin/views/metabox_general.php:8
|
129 |
+
msgid "Введите ключевое слово"
|
130 |
+
msgstr "Enter a keyword"
|
131 |
+
|
132 |
+
#: application/admin/views/metabox_general.php:10
|
133 |
+
msgid "Найти все"
|
134 |
+
msgstr "Find all"
|
135 |
+
|
136 |
+
#: application/admin/views/metabox_general.php:15
|
137 |
+
#: application/admin/views/metabox_module.php:71
|
138 |
+
msgid "Добавить все"
|
139 |
+
msgstr "Add all"
|
140 |
+
|
141 |
+
#: application/admin/views/metabox_general.php:16
|
142 |
+
msgid "Вы действительно хотите удалить результаты всех модулей?"
|
143 |
+
msgstr "Are you sure you want to delete the results of all modules?"
|
144 |
+
|
145 |
+
#: application/admin/views/metabox_general.php:16
|
146 |
+
#: application/admin/views/metabox_module.php:40
|
147 |
+
msgid "Удалить все"
|
148 |
+
msgstr "Delete all"
|
149 |
+
|
150 |
+
#: application/admin/views/metabox_module.php:26
|
151 |
+
msgid "Шаблон для шорткода"
|
152 |
+
msgstr "Output Template for shortcode"
|
153 |
+
|
154 |
+
#: application/admin/views/metabox_module.php:36
|
155 |
+
msgid "Ключевое слово для автоматического обновления данных"
|
156 |
+
msgstr "Keyword for the automatic update"
|
157 |
+
|
158 |
+
#: application/admin/views/metabox_module.php:40
|
159 |
+
msgid "Вы действительно хотите удалить все результаты?"
|
160 |
+
msgstr "Are you sure you want to delete all results?"
|
161 |
+
|
162 |
+
#: application/admin/views/metabox_module.php:45
|
163 |
+
msgid "Данные не найдены..."
|
164 |
+
msgstr "No data found..."
|
165 |
+
|
166 |
+
#: application/admin/views/metabox_module.php:49
|
167 |
+
msgid "Поиск"
|
168 |
+
msgstr "Search"
|
169 |
+
|
170 |
+
#: application/admin/views/metabox_module.php:55
|
171 |
+
msgid "Ключевое слово для поиска"
|
172 |
+
msgstr "Keyword for search"
|
173 |
+
|
174 |
+
#: application/admin/views/metabox_module.php:57
|
175 |
+
msgid "Найти"
|
176 |
+
msgstr "Find"
|
177 |
+
|
178 |
+
#: application/admin/views/metabox_module.php:79
|
179 |
+
msgid "Не найдено..."
|
180 |
+
msgstr "Not found..."
|
181 |
+
|
182 |
+
#: application/admin/views/metabox_module.php:80
|
183 |
+
msgid "Ошибка: "
|
184 |
+
msgstr "Error:"
|
185 |
+
|
186 |
+
#: application/admin/views/settings.php:13
|
187 |
+
msgid "Content Egg Настройки"
|
188 |
+
msgstr "Content Egg Settings"
|
189 |
+
|
190 |
+
#: application/admin/views/settings.php:24
|
191 |
+
#: application/admin/views/settings.php:47
|
192 |
+
msgid "Общие настройки"
|
193 |
+
msgstr "General settings"
|
194 |
+
|
195 |
+
#: application/admin/views/settings.php:71
|
196 |
+
msgid "Условия"
|
197 |
+
msgstr "Conditions"
|
198 |
+
|
199 |
+
#: application/admin/views/settings.php:95
|
200 |
+
msgid "Множество дополнительных модулей и расширенный функционал."
|
201 |
+
msgstr "Many additional modules and extended functions."
|
202 |
+
|
203 |
+
#: application/admin/views/settings.php:97
|
204 |
+
msgid "Контент модули:"
|
205 |
+
msgstr "Content modules"
|
206 |
+
|
207 |
+
#: application/admin/views/settings.php:99
|
208 |
+
msgid "Bing картинки"
|
209 |
+
msgstr "Bing images"
|
210 |
+
|
211 |
+
#: application/admin/views/settings.php:100
|
212 |
+
msgid "Flickr фотографии"
|
213 |
+
msgstr "Flickr Photo"
|
214 |
+
|
215 |
+
#: application/admin/views/settings.php:101
|
216 |
+
msgid "Google книги"
|
217 |
+
msgstr "Google Books"
|
218 |
+
|
219 |
+
#: application/admin/views/settings.php:102
|
220 |
+
msgid "Google новости"
|
221 |
+
msgstr "Google news"
|
222 |
+
|
223 |
+
#: application/admin/views/settings.php:103
|
224 |
+
msgid "Яндекс.Маркет"
|
225 |
+
msgstr "Yandex.Market"
|
226 |
+
|
227 |
+
#: application/admin/views/settings.php:105
|
228 |
+
msgid "ВКонтакте новости"
|
229 |
+
msgstr "Vkontakte news"
|
230 |
+
|
231 |
+
#: application/admin/views/settings.php:108
|
232 |
+
msgid "Монетизация:"
|
233 |
+
msgstr "Monetization:"
|
234 |
+
|
235 |
+
#: application/admin/views/settings.php:116
|
236 |
+
msgid "Узнать больше..."
|
237 |
+
msgstr "Read more..."
|
238 |
+
|
239 |
+
#: application/components/AffiliateParserModuleConfig.php:18
|
240 |
+
msgid "Автоматическое обновление"
|
241 |
+
msgstr "Automatic update"
|
242 |
+
|
243 |
+
#: application/components/AffiliateParserModuleConfig.php:19
|
244 |
+
msgid ""
|
245 |
+
"Время жини кэша в секундах, через которое необходимо обновить товары, если "
|
246 |
+
"задано ключевое слово для обновления. 0 - никогда не обновлять."
|
247 |
+
msgstr ""
|
248 |
+
"Lifetime of cache in seconds, after this period products will be updated if "
|
249 |
+
"you set keyword for updating. 0 - never update"
|
250 |
+
|
251 |
+
#: application/components/AffiliateParserModuleConfig.php:33
|
252 |
+
msgid "Обновить товары"
|
253 |
+
msgstr "Update products"
|
254 |
+
|
255 |
+
#: application/components/AffiliateParserModuleConfig.php:34
|
256 |
+
msgid ""
|
257 |
+
"Время в секундах, через которое необходимо обновить цену, наличие и "
|
258 |
+
"некоторую другую информацию по товарам. 0 - никогда не обновлять."
|
259 |
+
msgstr ""
|
260 |
+
"Time in seconds for updating prices, availability, etc. 0 - never update"
|
261 |
+
|
262 |
+
#: application/components/ModuleConfig.php:53
|
263 |
+
#: application/components/ModuleConfig.php:59
|
264 |
+
msgid "настройки"
|
265 |
+
msgstr "settings"
|
266 |
+
|
267 |
+
#: application/components/ModuleTemplateManager.php:81
|
268 |
+
msgid "[пользовательский]"
|
269 |
+
msgstr "[user]"
|
270 |
+
|
271 |
+
#: application/components/ParserModuleConfig.php:19
|
272 |
+
msgid "Включить модуль"
|
273 |
+
msgstr "Switch module"
|
274 |
+
|
275 |
+
#: application/components/ParserModuleConfig.php:26
|
276 |
+
msgid "Добавить"
|
277 |
+
msgstr "Add"
|
278 |
+
|
279 |
+
#: application/components/ParserModuleConfig.php:27
|
280 |
+
msgid ""
|
281 |
+
"Куда добавить контент этого модуля? Шорткоды работают всегда в независимости "
|
282 |
+
"от настройки."
|
283 |
+
msgstr ""
|
284 |
+
"The place for content of module. Shortcodes will work in any place "
|
285 |
+
"regardless of the setting."
|
286 |
+
|
287 |
+
#: application/components/ParserModuleConfig.php:30
|
288 |
+
msgid "В конец поста"
|
289 |
+
msgstr "At the end of the post"
|
290 |
+
|
291 |
+
#: application/components/ParserModuleConfig.php:31
|
292 |
+
msgid "В начало поста"
|
293 |
+
msgstr "At the beginning of the post"
|
294 |
+
|
295 |
+
#: application/components/ParserModuleConfig.php:32
|
296 |
+
msgid "Только шорткоды"
|
297 |
+
msgstr "Shortcodes only"
|
298 |
+
|
299 |
+
#: application/components/ParserModuleConfig.php:38
|
300 |
+
msgid "Шаблон"
|
301 |
+
msgstr "Template"
|
302 |
+
|
303 |
+
#: application/components/ParserModuleConfig.php:39
|
304 |
+
msgid "Шаблон по-умолчанию."
|
305 |
+
msgstr "Default template"
|
306 |
+
|
307 |
+
#: application/components/ParserModuleConfig.php:47
|
308 |
+
msgid "Шаблоны могут использовать заголовок при выводе данных."
|
309 |
+
msgstr "Templates may use title on data output."
|
310 |
+
|
311 |
+
#: application/components/ParserModuleConfig.php:57
|
312 |
+
msgid "Автоматически установить Featured image для поста."
|
313 |
+
msgstr "Automatically set Featured image for post"
|
314 |
+
|
315 |
+
#: application/components/ParserModuleConfig.php:60
|
316 |
+
msgid "Не устанавливать"
|
317 |
+
msgstr "Don't set"
|
318 |
+
|
319 |
+
#: application/components/ParserModuleConfig.php:61
|
320 |
+
msgid "Первый элемент"
|
321 |
+
msgstr "First image"
|
322 |
+
|
323 |
+
#: application/components/ParserModuleConfig.php:62
|
324 |
+
msgid "Второй элемент"
|
325 |
+
msgstr "Second image"
|
326 |
+
|
327 |
+
#: application/components/ParserModuleConfig.php:63
|
328 |
+
msgid "Случайный элемент"
|
329 |
+
msgstr "Random image"
|
330 |
+
|
331 |
+
#: application/components/ParserModuleConfig.php:64
|
332 |
+
msgid "Последний элемент"
|
333 |
+
msgstr "Last image"
|
334 |
+
|
335 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:22
|
336 |
+
msgid ""
|
337 |
+
"Специальный ключ для доступа к Aliexpress API. Получить можно <a target="
|
338 |
+
"\"_blank\" href=\"http://portals.aliexpress.com/adcenter/api_setting.htm"
|
339 |
+
"\">здесь</a>."
|
340 |
+
msgstr ""
|
341 |
+
"Special key to access Aliexpress API. You can get it <a target=\"_blank\" "
|
342 |
+
"href=\"http://portals.aliexpress.com/adcenter/api_setting.htm\">here</a>."
|
343 |
+
|
344 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:30
|
345 |
+
#: application/modules/Flickr/FlickrConfig.php:29
|
346 |
+
#: application/modules/Freebase/FreebaseConfig.php:29
|
347 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:29
|
348 |
+
#: application/modules/Market/MarketConfig.php:29
|
349 |
+
#: application/modules/Youtube/YoutubeConfig.php:29
|
350 |
+
msgid "Поле \"API Key\" не может быть пустым."
|
351 |
+
msgstr "The \"API Key\" can not be empty"
|
352 |
+
|
353 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:37
|
354 |
+
msgid ""
|
355 |
+
"Укажите, если хотите посылать трафик через оригинальную партнерку "
|
356 |
+
"Aliexpress. Найти можно <a target=\"_blank\" href=\"http://portals."
|
357 |
+
"aliexpress.com/track_id_manage.htm\">здесь</a>. Опция должна быть задана до "
|
358 |
+
"сохранения товаров в базу данных."
|
359 |
+
msgstr ""
|
360 |
+
"Specify if you want to send traffic through the original affiliate program "
|
361 |
+
"Aliexpress. You can find it <a target=\"_blank\" href=\"http://portals."
|
362 |
+
"aliexpress.com/track_id_manage.htm\">here</a>. This option must be set "
|
363 |
+
"before saving products in database."
|
364 |
+
|
365 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:47
|
366 |
+
msgid ""
|
367 |
+
"Укажите этот параметр, если хотите посылать трафик через одну из CPA-сетей с "
|
368 |
+
"поддержкой aliexpress и deeplink. Опция должна быть задана до сохранения "
|
369 |
+
"товаров в базу данных."
|
370 |
+
msgstr ""
|
371 |
+
"Set this option, if you want to send traffic to one of CPA-network with "
|
372 |
+
"support of aliexpress and deeplink. Option must be set before saving "
|
373 |
+
"products to database"
|
374 |
+
|
375 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:57
|
376 |
+
#: application/modules/Amazon/AmazonConfig.php:66
|
377 |
+
#: application/modules/BingImages/BingImagesConfig.php:35
|
378 |
+
#: application/modules/Ebay/EbayConfig.php:87
|
379 |
+
#: application/modules/Flickr/FlickrConfig.php:35
|
380 |
+
#: application/modules/Freebase/FreebaseConfig.php:35
|
381 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:35
|
382 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:34
|
383 |
+
#: application/modules/GoogleNews/GoogleNewsConfig.php:20
|
384 |
+
#: application/modules/Market/MarketConfig.php:48
|
385 |
+
#: application/modules/Twitter/TwitterConfig.php:80
|
386 |
+
#: application/modules/VkNews/VkNewsConfig.php:20
|
387 |
+
#: application/modules/Youtube/YoutubeConfig.php:35
|
388 |
+
#: application/modules/Zanox/ZanoxConfig.php:46
|
389 |
+
msgid "Результатов"
|
390 |
+
msgstr "Results"
|
391 |
+
|
392 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:58
|
393 |
+
#: application/modules/Amazon/AmazonConfig.php:67
|
394 |
+
#: application/modules/Ebay/EbayConfig.php:88
|
395 |
+
#: application/modules/Zanox/ZanoxConfig.php:47
|
396 |
+
msgid "Количество результатов для одного поискового запроса."
|
397 |
+
msgstr "Number of results for one search query."
|
398 |
+
|
399 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:67
|
400 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:83
|
401 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:45
|
402 |
+
msgid "Поле \"Результатов\" не может быть больше 40."
|
403 |
+
msgstr "The \"Results\" can not be more than 40."
|
404 |
+
|
405 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:73
|
406 |
+
#: application/modules/Amazon/AmazonConfig.php:82
|
407 |
+
#: application/modules/Zanox/ZanoxConfig.php:62
|
408 |
+
msgid "Результатов для обновления"
|
409 |
+
msgstr "Results for updates "
|
410 |
+
|
411 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:74
|
412 |
+
#: application/modules/Amazon/AmazonConfig.php:83
|
413 |
+
#: application/modules/Zanox/ZanoxConfig.php:63
|
414 |
+
msgid "Количество результатов для автоматического обновления."
|
415 |
+
msgstr "Number of results for automatic updates."
|
416 |
+
|
417 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:89
|
418 |
+
msgid "Категория"
|
419 |
+
msgstr "Category "
|
420 |
+
|
421 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:90
|
422 |
+
msgid "Ограничить поиск товаров этой категорией."
|
423 |
+
msgstr "Limit the search of goods by this category."
|
424 |
+
|
425 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:93
|
426 |
+
msgid "Все категории"
|
427 |
+
msgstr "All categories"
|
428 |
+
|
429 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:128
|
430 |
+
msgid "Минимальная комиссия"
|
431 |
+
msgstr "Minimal commission"
|
432 |
+
|
433 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:129
|
434 |
+
msgid "Минимальная комиссия в процентах. Например, 3"
|
435 |
+
msgstr "Minimal commission (without %). Example, 3"
|
436 |
+
|
437 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:138
|
438 |
+
#: application/modules/Amazon/AmazonConfig.php:160
|
439 |
+
#: application/modules/Ebay/EbayConfig.php:284
|
440 |
+
#: application/modules/Zanox/ZanoxConfig.php:101
|
441 |
+
msgid "Минимальная цена"
|
442 |
+
msgstr "Minimal price"
|
443 |
+
|
444 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:139
|
445 |
+
msgid "Должна быть указана в USD. Например, 12.34"
|
446 |
+
msgstr "Must be set in USD. Example, 12.34"
|
447 |
+
|
448 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:148
|
449 |
+
#: application/modules/Amazon/AmazonConfig.php:170
|
450 |
+
#: application/modules/Ebay/EbayConfig.php:274
|
451 |
+
#: application/modules/Zanox/ZanoxConfig.php:111
|
452 |
+
msgid "Максимальная цена"
|
453 |
+
msgstr "Maximal price"
|
454 |
+
|
455 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:149
|
456 |
+
msgid "Должна быть указана в USD. Например, 56.78"
|
457 |
+
msgstr "Must be set in USD. Example, 56.78"
|
458 |
+
|
459 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:158
|
460 |
+
msgid "Минимальные продажи"
|
461 |
+
msgstr "Minimal sales"
|
462 |
+
|
463 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:159
|
464 |
+
msgid "Минимальное число партнерских продаж за последний месяц. Например, 123"
|
465 |
+
msgstr "Minimal number of partner sales for last month. Example, 123"
|
466 |
+
|
467 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:168
|
468 |
+
msgid "Максимальные продажи"
|
469 |
+
msgstr "Maximal sales"
|
470 |
+
|
471 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:169
|
472 |
+
msgid "Максимальное число партнерских продаж за последний месяц. Например, 456"
|
473 |
+
msgstr "Max number of partner sales for last month. Example, 456"
|
474 |
+
|
475 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:178
|
476 |
+
#: application/modules/Ebay/EbayConfig.php:122
|
477 |
+
#: application/modules/Flickr/FlickrConfig.php:46
|
478 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:69
|
479 |
+
#: application/modules/Twitter/TwitterConfig.php:96
|
480 |
+
#: application/modules/Youtube/YoutubeConfig.php:46
|
481 |
+
msgid "Сортировка"
|
482 |
+
msgstr "Sorting"
|
483 |
+
|
484 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:182
|
485 |
+
msgid "По умолчанию"
|
486 |
+
msgstr "Default"
|
487 |
+
|
488 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:183
|
489 |
+
msgid "Цена от низкой к выскокой"
|
490 |
+
msgstr "Price low to high"
|
491 |
+
|
492 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:184
|
493 |
+
msgid "Цена от высокой к низкой"
|
494 |
+
msgstr "Price high to low"
|
495 |
+
|
496 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:185
|
497 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:195
|
498 |
+
msgid "Рейтинг продавца"
|
499 |
+
msgstr "Seller rating"
|
500 |
+
|
501 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:186
|
502 |
+
msgid "Комиссия от низкой к высокой"
|
503 |
+
msgstr "Commission from low to high"
|
504 |
+
|
505 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:187
|
506 |
+
msgid "Комиссия от высокой к низкой"
|
507 |
+
msgstr "Commission from high to low"
|
508 |
+
|
509 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:188
|
510 |
+
msgid "Продажи"
|
511 |
+
msgstr "Sales"
|
512 |
+
|
513 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:189
|
514 |
+
msgid "Время жизни от низкого к высокому"
|
515 |
+
msgstr "Lifetime from low to high"
|
516 |
+
|
517 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:190
|
518 |
+
msgid "Время жизни от высокого к низкому"
|
519 |
+
msgstr "Lifetime from high to low"
|
520 |
+
|
521 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:196
|
522 |
+
msgid "Минимальный рейтинг продавца, например, 12"
|
523 |
+
msgstr "Minimal seller rating, for example 12"
|
524 |
+
|
525 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:206
|
526 |
+
#: application/modules/BingImages/BingImagesConfig.php:71
|
527 |
+
#: application/modules/Ebay/EbayConfig.php:337
|
528 |
+
#: application/modules/Flickr/FlickrConfig.php:91
|
529 |
+
#: application/modules/Freebase/FreebaseConfig.php:51
|
530 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:51
|
531 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:124
|
532 |
+
#: application/modules/GoogleNews/GoogleNewsConfig.php:36
|
533 |
+
#: application/modules/Market/MarketConfig.php:154
|
534 |
+
#: application/modules/Twitter/TwitterConfig.php:108
|
535 |
+
#: application/modules/VkNews/VkNewsConfig.php:31
|
536 |
+
#: application/modules/Zanox/ZanoxConfig.php:153
|
537 |
+
msgid "Сохранять картинки"
|
538 |
+
msgstr "Save images"
|
539 |
+
|
540 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:207
|
541 |
+
#: application/modules/BingImages/BingImagesConfig.php:72
|
542 |
+
#: application/modules/Ebay/EbayConfig.php:338
|
543 |
+
#: application/modules/Flickr/FlickrConfig.php:92
|
544 |
+
#: application/modules/Freebase/FreebaseConfig.php:52
|
545 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:52
|
546 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:125
|
547 |
+
#: application/modules/GoogleNews/GoogleNewsConfig.php:37
|
548 |
+
#: application/modules/Market/MarketConfig.php:155
|
549 |
+
#: application/modules/Twitter/TwitterConfig.php:109
|
550 |
+
#: application/modules/VkNews/VkNewsConfig.php:32
|
551 |
+
#: application/modules/Zanox/ZanoxConfig.php:154
|
552 |
+
msgid "Сохранять картинки на сервер"
|
553 |
+
msgstr "Save images on server"
|
554 |
+
|
555 |
+
#: application/modules/Aliexpress/AliexpressModule.php:28
|
556 |
+
msgid "Добавляет товары aliexpress.com"
|
557 |
+
msgstr "Adds items from aliexpress.com"
|
558 |
+
|
559 |
+
#: application/modules/Amazon/AmazonConfig.php:22
|
560 |
+
msgid "Специальный ключ для доступа к Amazon API."
|
561 |
+
msgstr "Special key to access the Amazon API."
|
562 |
+
|
563 |
+
#: application/modules/Amazon/AmazonConfig.php:30
|
564 |
+
msgid "Поле \"Access Key ID\" не может быть пустым."
|
565 |
+
msgstr "The \"Access Key ID\" can not be empty"
|
566 |
+
|
567 |
+
#: application/modules/Amazon/AmazonConfig.php:37
|
568 |
+
msgid "Еще один специальный ключ для доступа к Amazon API."
|
569 |
+
msgstr "Another special key to access the Amazon API."
|
570 |
+
|
571 |
+
#: application/modules/Amazon/AmazonConfig.php:45
|
572 |
+
msgid "Поле \"Secret Access Key\" не может быть пустым."
|
573 |
+
msgstr "The \"Secret Access Key\" can not be empty."
|
574 |
+
|
575 |
+
#: application/modules/Amazon/AmazonConfig.php:52
|
576 |
+
msgid ""
|
577 |
+
"Связь с Вашим аккаунтом в партнерке. Чтобы получать комиссию от продаж, "
|
578 |
+
"правильно укажите этот параметр."
|
579 |
+
msgstr ""
|
580 |
+
"Connection with your account in the affiliate program. In order to receive a "
|
581 |
+
"commission from sales, specify this option correctly."
|
582 |
+
|
583 |
+
#: application/modules/Amazon/AmazonConfig.php:60
|
584 |
+
msgid "Поле \"Tracking ID\" не может быть пустым."
|
585 |
+
msgstr "The \"Tracking ID\" can not be empty."
|
586 |
+
|
587 |
+
#: application/modules/Amazon/AmazonConfig.php:76
|
588 |
+
#: application/modules/Amazon/AmazonConfig.php:92
|
589 |
+
#: application/modules/Freebase/FreebaseConfig.php:45
|
590 |
+
#: application/modules/GoogleNews/GoogleNewsConfig.php:30
|
591 |
+
#: application/modules/Market/MarketConfig.php:58
|
592 |
+
#: application/modules/Twitter/TwitterConfig.php:90
|
593 |
+
msgid "Поле \"Результатов\" не может быть больше 10."
|
594 |
+
msgstr "The \"Results\" can not be more than 10."
|
595 |
+
|
596 |
+
#: application/modules/Amazon/AmazonConfig.php:98
|
597 |
+
#: application/modules/Ebay/EbayConfig.php:79
|
598 |
+
msgid "Locale"
|
599 |
+
msgstr "Locale"
|
600 |
+
|
601 |
+
#: application/modules/Amazon/AmazonConfig.php:99
|
602 |
+
msgid ""
|
603 |
+
"Филиал amazon. Для каждого филиала необходима отдельная регистрация в "
|
604 |
+
"соответствующей партнерской программе."
|
605 |
+
msgstr ""
|
606 |
+
"The branch of Amazon. Each branch requires a separate registration in "
|
607 |
+
"certain affiliate program."
|
608 |
+
|
609 |
+
#: application/modules/Amazon/AmazonConfig.php:106
|
610 |
+
msgid "Вид ссылок"
|
611 |
+
msgstr "Link type"
|
612 |
+
|
613 |
+
#: application/modules/Amazon/AmazonConfig.php:107
|
614 |
+
msgid ""
|
615 |
+
"Вид партнерских ссылок. Узнайте больше про amazon <a target=\"_blank\" href="
|
616 |
+
"\"https://affiliate-program.amazon.com/gp/associates/help/t2/a11\">90 day "
|
617 |
+
"cookie</a>."
|
618 |
+
msgstr ""
|
619 |
+
"Type of partner links. Know more about amazon <a target=\"_blank\" href="
|
620 |
+
"\"https://affiliate-program.amazon.com/gp/associates/help/t2/a11\">90 day "
|
621 |
+
"cookie</a>."
|
622 |
+
|
623 |
+
#: application/modules/Amazon/AmazonConfig.php:118
|
624 |
+
msgid "Категория для поиска"
|
625 |
+
msgstr "Categories for search"
|
626 |
+
|
627 |
+
#: application/modules/Amazon/AmazonConfig.php:119
|
628 |
+
msgid ""
|
629 |
+
"Список категорий для US Amazon. Для локальных филиалов некоторые категории "
|
630 |
+
"могут быть недоступны. Если Вы не зададите категорию для поиска, то никакие "
|
631 |
+
"другие опции фильтрации кроме поиска по ключевому слову (например, "
|
632 |
+
"минимальная цена или сортировка) работать не будут."
|
633 |
+
msgstr ""
|
634 |
+
"The list of categories for US Amazon. For local branches some of categories "
|
635 |
+
"may be not available. If you do not set category for searching, no other "
|
636 |
+
"filtering options in addition to searching for the keyword (for example, the "
|
637 |
+
"minimal price or sorting) will not working. "
|
638 |
+
|
639 |
+
#: application/modules/Amazon/AmazonConfig.php:126
|
640 |
+
msgid "Порядок сортировки"
|
641 |
+
msgstr "Sorting order"
|
642 |
+
|
643 |
+
#: application/modules/Amazon/AmazonConfig.php:127
|
644 |
+
msgid ""
|
645 |
+
"Варианты сортировки зависят от locale и выбранной категории. Список "
|
646 |
+
"доступных значений можно найти <a href=\"http://docs.amazonwebservices.com/"
|
647 |
+
"AWSECommerceService/latest/DG/index.html?APPNDX_SortValuesArticle.html"
|
648 |
+
"\">здесь</a>."
|
649 |
+
msgstr ""
|
650 |
+
"Sorting variants depend on locale and chosed category. List of all available "
|
651 |
+
"values you can find <a href=\"http://docs.amazonwebservices.com/"
|
652 |
+
"AWSECommerceService/latest/DG/index.html?APPNDX_SortValuesArticle.html"
|
653 |
+
"\">here</a>."
|
654 |
+
|
655 |
+
#: application/modules/Amazon/AmazonConfig.php:136
|
656 |
+
msgid "Brouse node"
|
657 |
+
msgstr "Brouse node"
|
658 |
+
|
659 |
+
#: application/modules/Amazon/AmazonConfig.php:137
|
660 |
+
msgid ""
|
661 |
+
"Целочисленное ID \"узла\" на amazon. Поиск будет произведен только в этом "
|
662 |
+
"\"узле\"."
|
663 |
+
msgstr ""
|
664 |
+
"Integer ID \"node\" on Amazon. The search will be made only in this \"node\"."
|
665 |
+
|
666 |
+
#: application/modules/Amazon/AmazonConfig.php:146
|
667 |
+
msgid "Поиск в названии"
|
668 |
+
msgstr "Search in title"
|
669 |
+
|
670 |
+
#: application/modules/Amazon/AmazonConfig.php:147
|
671 |
+
msgid "Поиск будет произведет только по названиям товаров."
|
672 |
+
msgstr "The search will produce only by product name."
|
673 |
+
|
674 |
+
#: application/modules/Amazon/AmazonConfig.php:153
|
675 |
+
msgid "Только Amazon"
|
676 |
+
msgstr "Only Amazon"
|
677 |
+
|
678 |
+
#: application/modules/Amazon/AmazonConfig.php:154
|
679 |
+
msgid ""
|
680 |
+
"Выбрать товары, которые продает Amazon. Другие продавцы исключаются из "
|
681 |
+
"поиска."
|
682 |
+
msgstr ""
|
683 |
+
"Select products that are selling by Amazon. Other sellers are excluded from "
|
684 |
+
"the search."
|
685 |
+
|
686 |
+
#: application/modules/Amazon/AmazonConfig.php:161
|
687 |
+
msgid "Например, 8.99"
|
688 |
+
msgstr "Example, 8.99"
|
689 |
+
|
690 |
+
#: application/modules/Amazon/AmazonConfig.php:171
|
691 |
+
msgid "Например, 98.50"
|
692 |
+
msgstr "Example, 98.50"
|
693 |
+
|
694 |
+
#: application/modules/Amazon/AmazonConfig.php:180
|
695 |
+
msgid "Минимальная скидка"
|
696 |
+
msgstr "Minimal discount"
|
697 |
+
|
698 |
+
#: application/modules/Amazon/AmazonConfig.php:181
|
699 |
+
msgid ""
|
700 |
+
"Выбрать товары со скидкой. Обязательно должна быть задана категория. "
|
701 |
+
"Обратите внимание, эта опция работает не для всех категорий."
|
702 |
+
msgstr ""
|
703 |
+
"Choose products with discount. You must set category of product. Note, that "
|
704 |
+
"this option works not for all categories."
|
705 |
+
|
706 |
+
#: application/modules/Amazon/AmazonConfig.php:184
|
707 |
+
msgid "Неважно"
|
708 |
+
msgstr "Any"
|
709 |
+
|
710 |
+
#: application/modules/Amazon/AmazonConfig.php:205
|
711 |
+
msgid "Парсить отзывы"
|
712 |
+
msgstr "Parse reviews"
|
713 |
+
|
714 |
+
#: application/modules/Amazon/AmazonConfig.php:206
|
715 |
+
msgid "Парсить отзывы покупателей по товарам. Это замедляет получение данных."
|
716 |
+
msgstr "Parse customers reviews of products. This slows the receiving of data."
|
717 |
+
|
718 |
+
#: application/modules/Amazon/AmazonConfig.php:212
|
719 |
+
msgid "Отзывы в iframe."
|
720 |
+
msgstr "Reviews in iframe."
|
721 |
+
|
722 |
+
#: application/modules/Amazon/AmazonConfig.php:213
|
723 |
+
msgid ""
|
724 |
+
"Показывать отзывы покупателей в iframe с amazon (отключение этой опции, "
|
725 |
+
"возможно, нарушает правила партнерской программы amazon)."
|
726 |
+
msgstr ""
|
727 |
+
"Show customer reviews in iframe with amazon (disabling this option possibly "
|
728 |
+
"violates the rules of the affiliate program of amazon)."
|
729 |
+
|
730 |
+
#: application/modules/Amazon/AmazonConfig.php:219
|
731 |
+
#: application/modules/Market/MarketConfig.php:122
|
732 |
+
msgid "Обрезать отзывы"
|
733 |
+
msgstr "Cut reviews"
|
734 |
+
|
735 |
+
#: application/modules/Amazon/AmazonConfig.php:220
|
736 |
+
msgid ""
|
737 |
+
"Количество символов для одного отзыва. 0 - максимально возможная длина "
|
738 |
+
"текста."
|
739 |
+
msgstr ""
|
740 |
+
"Number of characters for one review. 0 - the maximal length of the text."
|
741 |
+
|
742 |
+
#: application/modules/Amazon/AmazonConfig.php:230
|
743 |
+
msgid "Товар с отзывами"
|
744 |
+
msgstr "Products with reviews"
|
745 |
+
|
746 |
+
#: application/modules/Amazon/AmazonConfig.php:231
|
747 |
+
msgid "Парсить отзывы только для заданного количества товаров."
|
748 |
+
msgstr "Parse reviews only for a certain amount of products."
|
749 |
+
|
750 |
+
#: application/modules/Amazon/AmazonConfig.php:241
|
751 |
+
msgid "Парсить отписание"
|
752 |
+
msgstr "Parse description"
|
753 |
+
|
754 |
+
#: application/modules/Amazon/AmazonConfig.php:242
|
755 |
+
msgid "Парсить описание товаров от продавца."
|
756 |
+
msgstr "Parse description of products from seller"
|
757 |
+
|
758 |
+
#: application/modules/Amazon/AmazonConfig.php:248
|
759 |
+
msgid "Вид описания"
|
760 |
+
msgstr "Type of description"
|
761 |
+
|
762 |
+
#: application/modules/Amazon/AmazonConfig.php:252
|
763 |
+
msgid "Как на Amazon"
|
764 |
+
msgstr "Like on Amazon"
|
765 |
+
|
766 |
+
#: application/modules/Amazon/AmazonConfig.php:253
|
767 |
+
msgid "Безопасный HTML"
|
768 |
+
msgstr "Safe HTML"
|
769 |
+
|
770 |
+
#: application/modules/Amazon/AmazonConfig.php:254
|
771 |
+
msgid "Только разрешенные теги HTML"
|
772 |
+
msgstr "Only allowed HTML tags"
|
773 |
+
|
774 |
+
#: application/modules/Amazon/AmazonConfig.php:255
|
775 |
+
msgid "Только текст"
|
776 |
+
msgstr "Text only"
|
777 |
+
|
778 |
+
#: application/modules/Amazon/AmazonConfig.php:261
|
779 |
+
#: application/modules/Ebay/EbayConfig.php:326
|
780 |
+
msgid "Размер описания"
|
781 |
+
msgstr "Size of description"
|
782 |
+
|
783 |
+
#: application/modules/Amazon/AmazonConfig.php:262
|
784 |
+
#: application/modules/Ebay/EbayConfig.php:327
|
785 |
+
msgid "Максимальный размер описания товара. 0 - не обрезать."
|
786 |
+
msgstr "The maximum size of the item description. 0 - do not cut."
|
787 |
+
|
788 |
+
#: application/modules/Amazon/AmazonModule.php:28
|
789 |
+
msgid "Добавляет товары amazon."
|
790 |
+
msgstr "Adds goods from Amazon."
|
791 |
+
|
792 |
+
#: application/modules/Amazon/views/search_panel.php:2
|
793 |
+
msgid "Мин. скидка"
|
794 |
+
msgstr "Min. discount"
|
795 |
+
|
796 |
+
#: application/modules/Amazon/views/search_panel.php:3
|
797 |
+
msgid "5%"
|
798 |
+
msgstr "5%"
|
799 |
+
|
800 |
+
#: application/modules/Amazon/views/search_panel.php:4
|
801 |
+
msgid "10%"
|
802 |
+
msgstr "10%"
|
803 |
+
|
804 |
+
#: application/modules/Amazon/views/search_panel.php:5
|
805 |
+
msgid "15%"
|
806 |
+
msgstr "15%"
|
807 |
+
|
808 |
+
#: application/modules/Amazon/views/search_panel.php:6
|
809 |
+
msgid "20%"
|
810 |
+
msgstr "20%"
|
811 |
+
|
812 |
+
#: application/modules/Amazon/views/search_panel.php:7
|
813 |
+
msgid "25%"
|
814 |
+
msgstr "25%"
|
815 |
+
|
816 |
+
#: application/modules/Amazon/views/search_panel.php:8
|
817 |
+
msgid "30%"
|
818 |
+
msgstr "30%"
|
819 |
+
|
820 |
+
#: application/modules/Amazon/views/search_panel.php:9
|
821 |
+
msgid "35%"
|
822 |
+
msgstr "35%"
|
823 |
+
|
824 |
+
#: application/modules/Amazon/views/search_panel.php:10
|
825 |
+
msgid "40%"
|
826 |
+
msgstr "40%"
|
827 |
+
|
828 |
+
#: application/modules/Amazon/views/search_panel.php:11
|
829 |
+
msgid "50%"
|
830 |
+
msgstr "50%"
|
831 |
+
|
832 |
+
#: application/modules/Amazon/views/search_panel.php:12
|
833 |
+
msgid "60%"
|
834 |
+
msgstr "60%"
|
835 |
+
|
836 |
+
#: application/modules/Amazon/views/search_panel.php:13
|
837 |
+
msgid "70%"
|
838 |
+
msgstr "70%"
|
839 |
+
|
840 |
+
#: application/modules/Amazon/views/search_panel.php:14
|
841 |
+
msgid "80%"
|
842 |
+
msgstr "80%"
|
843 |
+
|
844 |
+
#: application/modules/Amazon/views/search_panel.php:15
|
845 |
+
msgid "90%"
|
846 |
+
msgstr "90%"
|
847 |
+
|
848 |
+
#: application/modules/BingImages/BingImagesConfig.php:21
|
849 |
+
msgid ""
|
850 |
+
"Ключ доступа к Bing API. Получить можно <a href=\"https://datamarket.azure."
|
851 |
+
"com/account/keys\">здесь</a> (потребуется аккаунт в bing)."
|
852 |
+
msgstr ""
|
853 |
+
"Key access to Bing API. You can get <a href=\"https://datamarket.azure.com/"
|
854 |
+
"account/keys\">here</a> (need bing account)."
|
855 |
+
|
856 |
+
#: application/modules/BingImages/BingImagesConfig.php:29
|
857 |
+
#: application/modules/Twitter/TwitterConfig.php:29
|
858 |
+
#: application/modules/Twitter/TwitterConfig.php:44
|
859 |
+
#: application/modules/Twitter/TwitterConfig.php:59
|
860 |
+
#: application/modules/Twitter/TwitterConfig.php:74
|
861 |
+
msgid "Поле \"Account Key\" не может быть пустым."
|
862 |
+
msgstr "The \"Account Key\" can not be empty."
|
863 |
+
|
864 |
+
#: application/modules/BingImages/BingImagesConfig.php:36
|
865 |
+
msgid "Количество результатов для одного запроса."
|
866 |
+
msgstr "Number of results for a single query."
|
867 |
+
|
868 |
+
#: application/modules/BingImages/BingImagesConfig.php:45
|
869 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:44
|
870 |
+
msgid "Поле \"Результатов\" не может быть больше 8."
|
871 |
+
msgstr "The \"Results\" can not be more than 8."
|
872 |
+
|
873 |
+
#: application/modules/BingImages/BingImagesConfig.php:51
|
874 |
+
msgid "Фильтр"
|
875 |
+
msgstr "Filter"
|
876 |
+
|
877 |
+
#: application/modules/BingImages/BingImagesConfig.php:55
|
878 |
+
#: application/modules/BingImages/views/search_panel.php:2
|
879 |
+
msgid "Без фильтра"
|
880 |
+
msgstr "Without filter"
|
881 |
+
|
882 |
+
#: application/modules/BingImages/BingImagesConfig.php:56
|
883 |
+
#: application/modules/BingImages/views/search_panel.php:3
|
884 |
+
msgid "Маленькие изображения"
|
885 |
+
msgstr "Small images"
|
886 |
+
|
887 |
+
#: application/modules/BingImages/BingImagesConfig.php:57
|
888 |
+
#: application/modules/BingImages/views/search_panel.php:4
|
889 |
+
msgid "Средние изображения"
|
890 |
+
msgstr "Medium images"
|
891 |
+
|
892 |
+
#: application/modules/BingImages/BingImagesConfig.php:58
|
893 |
+
#: application/modules/BingImages/views/search_panel.php:5
|
894 |
+
msgid "Большие изображения"
|
895 |
+
msgstr "Large images"
|
896 |
+
|
897 |
+
#: application/modules/BingImages/BingImagesConfig.php:59
|
898 |
+
#: application/modules/BingImages/views/search_panel.php:6
|
899 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:56
|
900 |
+
msgid "Цветные"
|
901 |
+
msgstr "Colored"
|
902 |
+
|
903 |
+
#: application/modules/BingImages/BingImagesConfig.php:60
|
904 |
+
#: application/modules/BingImages/views/search_panel.php:7
|
905 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:55
|
906 |
+
msgid "Черно-белые"
|
907 |
+
msgstr "Black and white"
|
908 |
+
|
909 |
+
#: application/modules/BingImages/BingImagesConfig.php:61
|
910 |
+
#: application/modules/BingImages/views/search_panel.php:8
|
911 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:104
|
912 |
+
msgid "Фотографии"
|
913 |
+
msgstr "Photo"
|
914 |
+
|
915 |
+
#: application/modules/BingImages/BingImagesConfig.php:62
|
916 |
+
#: application/modules/BingImages/views/search_panel.php:9
|
917 |
+
msgid "Графика и иллюстрации"
|
918 |
+
msgstr "Graphics and illustrations"
|
919 |
+
|
920 |
+
#: application/modules/BingImages/BingImagesConfig.php:63
|
921 |
+
#: application/modules/BingImages/views/search_panel.php:10
|
922 |
+
msgid "Содержит лица"
|
923 |
+
msgstr "Contains faces"
|
924 |
+
|
925 |
+
#: application/modules/BingImages/BingImagesConfig.php:64
|
926 |
+
#: application/modules/BingImages/views/search_panel.php:11
|
927 |
+
msgid "Портреты"
|
928 |
+
msgstr "Portraits"
|
929 |
+
|
930 |
+
#: application/modules/BingImages/BingImagesConfig.php:65
|
931 |
+
#: application/modules/BingImages/views/search_panel.php:12
|
932 |
+
msgid "Не содержит лиц"
|
933 |
+
msgstr "Does not contain faces"
|
934 |
+
|
935 |
+
#: application/modules/BingImages/BingImagesConfig.php:79
|
936 |
+
msgid "Ограничить поиск только этим доменом. Например, задайте: wikimedia.org"
|
937 |
+
msgstr "Limit the search to only that domain. For example ask: wikimedia.org"
|
938 |
+
|
939 |
+
#: application/modules/BingImages/templates/data_simple.php:5
|
940 |
+
msgid "Simple"
|
941 |
+
msgstr "Simple"
|
942 |
+
|
943 |
+
#: application/modules/BingImages/templates/data_simple.php:18
|
944 |
+
#: application/modules/GoogleImages/templates/data_simple.php:20
|
945 |
+
msgid "Source: %s"
|
946 |
+
msgstr "Source: %s"
|
947 |
+
|
948 |
+
#: application/modules/Ebay/EbayConfig.php:22
|
949 |
+
msgid ""
|
950 |
+
"Ваш ID для доступа к eBay API. Поучить ключ вы можете в <a href=\"http://"
|
951 |
+
"developer.ebay.com/join\">eBay Developers Program</a>."
|
952 |
+
msgstr ""
|
953 |
+
"API access key to Ebay. You can get it in <a href=\"http://developer.ebay."
|
954 |
+
"com/join\">eBay Developers Program</a>."
|
955 |
+
|
956 |
+
#: application/modules/Ebay/EbayConfig.php:30
|
957 |
+
msgid "Поле \"Application ID (AppID)\" не может быть пустым."
|
958 |
+
msgstr "Field \"Application ID (AppID)\" can't be empty"
|
959 |
+
|
960 |
+
#: application/modules/Ebay/EbayConfig.php:37
|
961 |
+
msgid ""
|
962 |
+
"Это связь с партнерской программой EPN. Campaign ID валидный для всех "
|
963 |
+
"программ, в которые вы были приняты на EPN. Если не задано - комиссия за "
|
964 |
+
"продажи начисляться не будет."
|
965 |
+
msgstr ""
|
966 |
+
"This is connection with partner program EPN. Campaign ID is valid for all "
|
967 |
+
"programs which were approved for you on EPN. If you leave this field blank - "
|
968 |
+
"you will not get commissions from sales."
|
969 |
+
|
970 |
+
#: application/modules/Ebay/EbayConfig.php:46
|
971 |
+
msgid "EPN Custom ID (канал)"
|
972 |
+
msgstr "EPN Custom ID (chanel)"
|
973 |
+
|
974 |
+
#: application/modules/Ebay/EbayConfig.php:47
|
975 |
+
msgid ""
|
976 |
+
"Любое слово, например, имя домена. Custom ID будет включен в отчеты по "
|
977 |
+
"продажам на EPN, таким образом, вы сможете дополнительно отслеживать трафик."
|
978 |
+
msgstr ""
|
979 |
+
"Any word, for example, name of domain. Custom ID will be included in sale "
|
980 |
+
"report on EPN, so, you can additionally check your traffic. "
|
981 |
+
|
982 |
+
#: application/modules/Ebay/EbayConfig.php:58
|
983 |
+
msgid "Skimlinks Site ID"
|
984 |
+
msgstr "Skimlinks Site ID"
|
985 |
+
|
986 |
+
#: application/modules/Ebay/EbayConfig.php:59
|
987 |
+
msgid ""
|
988 |
+
"Указывайте, если хотите слать трафик через <a href=\"http://www.keywordrush."
|
989 |
+
"com/go/skimlinks\">Skimlinks</a>. ID для соотвествущего домена можно найти "
|
990 |
+
"<a href=\"https://hub.skimlinks.com/account\">здесь</a>."
|
991 |
+
msgstr ""
|
992 |
+
"Set this if you want to direct traffic over <a href=\"http://www.keywordrush."
|
993 |
+
"com/go/skimlinks\">Skimlinks</a>. Id for domain you can find <a href="
|
994 |
+
"\"https://hub.skimlinks.com/account\">here</a>."
|
995 |
+
|
996 |
+
#: application/modules/Ebay/EbayConfig.php:69
|
997 |
+
msgid "Viglink ID"
|
998 |
+
msgstr "Viglink ID"
|
999 |
+
|
1000 |
+
#: application/modules/Ebay/EbayConfig.php:70
|
1001 |
+
msgid ""
|
1002 |
+
"Указывайте, если хотите слать трафик через <a href=\"http://www.keywordrush."
|
1003 |
+
"com/go/viglink\">Viglink</a>. Ваш ID можно найти <a href=\"http://www."
|
1004 |
+
"viglink.com/install\">здесь</a>, он одинаковый для всех доменов."
|
1005 |
+
msgstr ""
|
1006 |
+
"Set this if you want to direct traffic over <a href=\"http://www.keywordrush."
|
1007 |
+
"com/go/viglink\">Viglink</a>. Id for domain you can find <a href=\"http://"
|
1008 |
+
"www.viglink.com/install\">here</a>. Id is the same for all domains"
|
1009 |
+
|
1010 |
+
#: application/modules/Ebay/EbayConfig.php:80
|
1011 |
+
msgid ""
|
1012 |
+
"Локальный сайт eBay. Для каждого локального филиала необходима отдельная "
|
1013 |
+
"регистрация в соответствующей партнерской программе."
|
1014 |
+
msgstr ""
|
1015 |
+
"Local site of Ebay. For each local site you must have separate registration "
|
1016 |
+
"in affiliate program."
|
1017 |
+
|
1018 |
+
#: application/modules/Ebay/EbayConfig.php:97
|
1019 |
+
msgid "Поле \"Результатов\" не может быть больше 100."
|
1020 |
+
msgstr "Field \"Results\" can not be more than 100."
|
1021 |
+
|
1022 |
+
#: application/modules/Ebay/EbayConfig.php:130
|
1023 |
+
msgid "Время завершения"
|
1024 |
+
msgstr "Ending time"
|
1025 |
+
|
1026 |
+
#: application/modules/Ebay/EbayConfig.php:131
|
1027 |
+
msgid ""
|
1028 |
+
"Срок жизни лотов в секундах. Будут выбраны только лоты, которые закроются не "
|
1029 |
+
"позже указанного времени."
|
1030 |
+
msgstr ""
|
1031 |
+
"Lifetime of lots in seconds. Only lots which will be closed not later than "
|
1032 |
+
"the specified time will be chosen."
|
1033 |
+
|
1034 |
+
#: application/modules/Ebay/EbayConfig.php:140
|
1035 |
+
msgid "Категориия"
|
1036 |
+
msgstr "Category "
|
1037 |
+
|
1038 |
+
#: application/modules/Ebay/EbayConfig.php:141
|
1039 |
+
msgid ""
|
1040 |
+
"ID категории для поиска. ID категорий можно найти в URL категорий на <a href="
|
1041 |
+
"\"http://www.ebay.com/sch/allcategories/all-categories\">этой странице</a>. "
|
1042 |
+
"Можно задать до трех категорий через запятую, например, \"2195,2218,20094\"."
|
1043 |
+
msgstr ""
|
1044 |
+
"Id of category for searching. Id of categories you can find in URL of "
|
1045 |
+
"category on <a href=\"http://www.ebay.com/sch/allcategories/all-categories"
|
1046 |
+
"\">this page</a>. You can set maximum 3 categories separated with comma. "
|
1047 |
+
"Example, \"2195,2218,20094\"."
|
1048 |
+
|
1049 |
+
#: application/modules/Ebay/EbayConfig.php:150
|
1050 |
+
msgid "Искать в описании"
|
1051 |
+
msgstr "Search in description"
|
1052 |
+
|
1053 |
+
#: application/modules/Ebay/EbayConfig.php:151
|
1054 |
+
msgid ""
|
1055 |
+
"Включить поиск по описание товара в дополнение к названию товара. Это займет "
|
1056 |
+
"больше времени, чем поиск только по названию."
|
1057 |
+
msgstr ""
|
1058 |
+
"Include description of product in searching. This will take more time, than "
|
1059 |
+
"searching only by title."
|
1060 |
+
|
1061 |
+
#: application/modules/Ebay/EbayConfig.php:157
|
1062 |
+
msgid "Логика поиска"
|
1063 |
+
msgstr "Searching logic"
|
1064 |
+
|
1065 |
+
#: application/modules/Ebay/EbayConfig.php:165
|
1066 |
+
msgid "Состояние товара"
|
1067 |
+
msgstr "Product condition"
|
1068 |
+
|
1069 |
+
#: application/modules/Ebay/EbayConfig.php:173
|
1070 |
+
msgid "Исключить категорию"
|
1071 |
+
msgstr "Exclude category"
|
1072 |
+
|
1073 |
+
#: application/modules/Ebay/EbayConfig.php:174
|
1074 |
+
msgid ""
|
1075 |
+
"ID категории, которую необходимо исключить при поиске. ID категорий можно "
|
1076 |
+
"найти в URL категорий на <a href=\"http://www.ebay.com/sch/allcategories/all-"
|
1077 |
+
"categories\">этой странице</a>. Можно задать до 25 категорий через запятую, "
|
1078 |
+
"например, \"2195,2218,20094\"."
|
1079 |
+
msgstr ""
|
1080 |
+
"Id of category, which must be excluded while searching. Id of categories you "
|
1081 |
+
"can find in URL of category on <a href=\"http://www.ebay.com/sch/"
|
1082 |
+
"allcategories/all-categories\">this page</a>. You can set maximum 25 "
|
1083 |
+
"categories separated with comma. Example, \"2195,2218,20094\"."
|
1084 |
+
|
1085 |
+
#: application/modules/Ebay/EbayConfig.php:183
|
1086 |
+
msgid "Минимальный ретинг продавца"
|
1087 |
+
msgstr "Minimal seller rating"
|
1088 |
+
|
1089 |
+
#: application/modules/Ebay/EbayConfig.php:191
|
1090 |
+
msgid "Best Offer"
|
1091 |
+
msgstr "Best Offer"
|
1092 |
+
|
1093 |
+
#: application/modules/Ebay/EbayConfig.php:192
|
1094 |
+
msgid "Только \"Best Offer\" лоты."
|
1095 |
+
msgstr "Only \"Best Offer\" lots."
|
1096 |
+
|
1097 |
+
#: application/modules/Ebay/EbayConfig.php:198
|
1098 |
+
msgid "Featured"
|
1099 |
+
msgstr "Featured"
|
1100 |
+
|
1101 |
+
#: application/modules/Ebay/EbayConfig.php:199
|
1102 |
+
msgid "Только \"Featured\" лоты."
|
1103 |
+
msgstr "Only \"Featured\" lots."
|
1104 |
+
|
1105 |
+
#: application/modules/Ebay/EbayConfig.php:205
|
1106 |
+
msgid "Free Shipping"
|
1107 |
+
msgstr "Free Shipping"
|
1108 |
+
|
1109 |
+
#: application/modules/Ebay/EbayConfig.php:206
|
1110 |
+
msgid "Только лоты с бесплатной доставкой."
|
1111 |
+
msgstr "Only lots with free delivery"
|
1112 |
+
|
1113 |
+
#: application/modules/Ebay/EbayConfig.php:212
|
1114 |
+
msgid "Local Pickup"
|
1115 |
+
msgstr "Local Pickup"
|
1116 |
+
|
1117 |
+
#: application/modules/Ebay/EbayConfig.php:213
|
1118 |
+
msgid "Только лоты с опцией \"local pickup\"."
|
1119 |
+
msgstr "Only lots with \"local pickup\" option."
|
1120 |
+
|
1121 |
+
#: application/modules/Ebay/EbayConfig.php:219
|
1122 |
+
msgid "Get It Fast"
|
1123 |
+
msgstr "Get It Fast"
|
1124 |
+
|
1125 |
+
#: application/modules/Ebay/EbayConfig.php:220
|
1126 |
+
msgid "Только \"Get It Fast\" лоты."
|
1127 |
+
msgstr "Only \"Get It Fast\" lots."
|
1128 |
+
|
1129 |
+
#: application/modules/Ebay/EbayConfig.php:226
|
1130 |
+
msgid "Top-rated seller"
|
1131 |
+
msgstr "Top-rated seller"
|
1132 |
+
|
1133 |
+
#: application/modules/Ebay/EbayConfig.php:227
|
1134 |
+
msgid "Только товары от \"Top-rated\" продавцов."
|
1135 |
+
msgstr "Only products from Top-rated \"Top-rated\" vendors."
|
1136 |
+
|
1137 |
+
#: application/modules/Ebay/EbayConfig.php:233
|
1138 |
+
msgid "Спрятать дубли"
|
1139 |
+
msgstr "Hide dublicates"
|
1140 |
+
|
1141 |
+
#: application/modules/Ebay/EbayConfig.php:234
|
1142 |
+
msgid "Отфильтровать похожие лоты."
|
1143 |
+
msgstr "Filter similar lots"
|
1144 |
+
|
1145 |
+
#: application/modules/Ebay/EbayConfig.php:240
|
1146 |
+
msgid "Тип аукциона"
|
1147 |
+
msgstr "Type of auction"
|
1148 |
+
|
1149 |
+
#: application/modules/Ebay/EbayConfig.php:254
|
1150 |
+
msgid "Максимум ставок"
|
1151 |
+
msgstr "Maximum bids"
|
1152 |
+
|
1153 |
+
#: application/modules/Ebay/EbayConfig.php:255
|
1154 |
+
msgid "Например, 10"
|
1155 |
+
msgstr "Example, 10"
|
1156 |
+
|
1157 |
+
#: application/modules/Ebay/EbayConfig.php:264
|
1158 |
+
msgid "Минимум ставок"
|
1159 |
+
msgstr "Minimum bids"
|
1160 |
+
|
1161 |
+
#: application/modules/Ebay/EbayConfig.php:265
|
1162 |
+
msgid "Например, 3"
|
1163 |
+
msgstr "Example, 3"
|
1164 |
+
|
1165 |
+
#: application/modules/Ebay/EbayConfig.php:275
|
1166 |
+
msgid "Например, 300.50"
|
1167 |
+
msgstr "Example, 300.50"
|
1168 |
+
|
1169 |
+
#: application/modules/Ebay/EbayConfig.php:285
|
1170 |
+
msgid "Например, 10.98"
|
1171 |
+
msgstr "Example, 10.98"
|
1172 |
+
|
1173 |
+
#: application/modules/Ebay/EbayConfig.php:294
|
1174 |
+
msgid "Варианты оплаты"
|
1175 |
+
msgstr "Payment options"
|
1176 |
+
|
1177 |
+
#: application/modules/Ebay/EbayConfig.php:319
|
1178 |
+
msgid "Получить описание"
|
1179 |
+
msgstr "Get description"
|
1180 |
+
|
1181 |
+
#: application/modules/Ebay/EbayConfig.php:320
|
1182 |
+
msgid ""
|
1183 |
+
"Получить описание товара. Требует дополнительных запросов к eBay API, это "
|
1184 |
+
"замедляет работу поиска. Описание будет запрошено не более чем для 20 первых "
|
1185 |
+
"товаров за один поиск."
|
1186 |
+
msgstr ""
|
1187 |
+
"Get description of product. This takes more requests for Ebay API and slow "
|
1188 |
+
"down searching. Description will be requested only for 20 first products for "
|
1189 |
+
"one searching"
|
1190 |
+
|
1191 |
+
#: application/modules/Ebay/EbayModule.php:30
|
1192 |
+
msgid ""
|
1193 |
+
"Добавляет товары eBay. Поддерживает различные локальные сайты. Несколько "
|
1194 |
+
"вариантов монетизации трафика."
|
1195 |
+
msgstr ""
|
1196 |
+
"Adds Ebay products. Supports different local sites. Several ways of "
|
1197 |
+
"moneymaking."
|
1198 |
+
|
1199 |
+
#: application/modules/Flickr/FlickrConfig.php:21
|
1200 |
+
msgid ""
|
1201 |
+
"Ключ для использования Flickr API. Получить можно <a href=\"http://www."
|
1202 |
+
"flickr.com/services/api/misc.api_keys.html\">здесь</a>."
|
1203 |
+
msgstr ""
|
1204 |
+
"The key for use Flickr API. You can get <a href=\"http://www.flickr.com/"
|
1205 |
+
"services/api/misc.api_keys.html\">here</a>."
|
1206 |
+
|
1207 |
+
#: application/modules/Flickr/FlickrConfig.php:36
|
1208 |
+
#: application/modules/Freebase/FreebaseConfig.php:36
|
1209 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:36
|
1210 |
+
#: application/modules/GoogleNews/GoogleNewsConfig.php:21
|
1211 |
+
#: application/modules/Market/MarketConfig.php:49
|
1212 |
+
#: application/modules/Twitter/TwitterConfig.php:81
|
1213 |
+
#: application/modules/VkNews/VkNewsConfig.php:21
|
1214 |
+
#: application/modules/Youtube/YoutubeConfig.php:36
|
1215 |
+
msgid "Количество результатов для одного запроса"
|
1216 |
+
msgstr "Number of results for a single query"
|
1217 |
+
|
1218 |
+
#: application/modules/Flickr/FlickrConfig.php:50
|
1219 |
+
#: application/modules/Flickr/views/search_panel.php:10
|
1220 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:73
|
1221 |
+
#: application/modules/Youtube/YoutubeConfig.php:52
|
1222 |
+
#: application/modules/Youtube/views/search_panel.php:10
|
1223 |
+
msgid "Релевантность"
|
1224 |
+
msgstr "Relevance"
|
1225 |
+
|
1226 |
+
#: application/modules/Flickr/FlickrConfig.php:51
|
1227 |
+
#: application/modules/Flickr/views/search_panel.php:11
|
1228 |
+
msgid "Дата поста"
|
1229 |
+
msgstr "Date of post"
|
1230 |
+
|
1231 |
+
#: application/modules/Flickr/FlickrConfig.php:52
|
1232 |
+
#: application/modules/Flickr/views/search_panel.php:12
|
1233 |
+
msgid "Дата съемки"
|
1234 |
+
msgstr "Date of shooting"
|
1235 |
+
|
1236 |
+
#: application/modules/Flickr/FlickrConfig.php:53
|
1237 |
+
#: application/modules/Flickr/views/search_panel.php:13
|
1238 |
+
msgid "Сначала интересные"
|
1239 |
+
msgstr "First interesting"
|
1240 |
+
|
1241 |
+
#: application/modules/Flickr/FlickrConfig.php:59
|
1242 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:20
|
1243 |
+
#: application/modules/Youtube/YoutubeConfig.php:60
|
1244 |
+
msgid "Тип лицензии"
|
1245 |
+
msgstr "Type of license"
|
1246 |
+
|
1247 |
+
#: application/modules/Flickr/FlickrConfig.php:63
|
1248 |
+
#: application/modules/Flickr/views/search_panel.php:2
|
1249 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:24
|
1250 |
+
#: application/modules/GoogleImages/views/search_panel.php:2
|
1251 |
+
#: application/modules/Youtube/YoutubeConfig.php:64
|
1252 |
+
#: application/modules/Youtube/views/search_panel.php:2
|
1253 |
+
msgid "Любая лицензия"
|
1254 |
+
msgstr "Any license"
|
1255 |
+
|
1256 |
+
#: application/modules/Flickr/FlickrConfig.php:64
|
1257 |
+
#: application/modules/Flickr/views/search_panel.php:3
|
1258 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:25
|
1259 |
+
#: application/modules/GoogleImages/views/search_panel.php:3
|
1260 |
+
msgid "Любая Сreative Сommons"
|
1261 |
+
msgstr "Any Creative Commons"
|
1262 |
+
|
1263 |
+
#: application/modules/Flickr/FlickrConfig.php:65
|
1264 |
+
#: application/modules/Flickr/views/search_panel.php:4
|
1265 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:26
|
1266 |
+
#: application/modules/GoogleImages/views/search_panel.php:4
|
1267 |
+
msgid "Разрешено коммерческое использование"
|
1268 |
+
msgstr "With Allow of commercial use"
|
1269 |
+
|
1270 |
+
#: application/modules/Flickr/FlickrConfig.php:66
|
1271 |
+
#: application/modules/Flickr/views/search_panel.php:5
|
1272 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:27
|
1273 |
+
#: application/modules/GoogleImages/views/search_panel.php:5
|
1274 |
+
msgid "Разрешено изменение"
|
1275 |
+
msgstr "Allowed change"
|
1276 |
+
|
1277 |
+
#: application/modules/Flickr/FlickrConfig.php:67
|
1278 |
+
#: application/modules/Flickr/views/search_panel.php:6
|
1279 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:28
|
1280 |
+
#: application/modules/GoogleImages/views/search_panel.php:6
|
1281 |
+
msgid "Коммерческое использование и изменение"
|
1282 |
+
msgstr "Commercial use and change"
|
1283 |
+
|
1284 |
+
#: application/modules/Flickr/FlickrConfig.php:73
|
1285 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:84
|
1286 |
+
msgid "Размер"
|
1287 |
+
msgstr "Size"
|
1288 |
+
|
1289 |
+
#: application/modules/Flickr/FlickrConfig.php:77
|
1290 |
+
msgid "75x75 пикселов"
|
1291 |
+
msgstr "75x75 pixels"
|
1292 |
+
|
1293 |
+
#: application/modules/Flickr/FlickrConfig.php:78
|
1294 |
+
msgid "150x150 пикселов"
|
1295 |
+
msgstr "150x150 pixels"
|
1296 |
+
|
1297 |
+
#: application/modules/Flickr/FlickrConfig.php:79
|
1298 |
+
msgid "100 пикселов по длинной стороне"
|
1299 |
+
msgstr "100 pixels on the long side"
|
1300 |
+
|
1301 |
+
#: application/modules/Flickr/FlickrConfig.php:80
|
1302 |
+
msgid "240 пикселов по длинной стороне"
|
1303 |
+
msgstr "240 pixels on the long side"
|
1304 |
+
|
1305 |
+
#: application/modules/Flickr/FlickrConfig.php:81
|
1306 |
+
msgid "320 пикселов по длинной стороне"
|
1307 |
+
msgstr "320 pixels on the long side"
|
1308 |
+
|
1309 |
+
#: application/modules/Flickr/FlickrConfig.php:82
|
1310 |
+
msgid "500 пикселов по длинной стороне"
|
1311 |
+
msgstr "500 pixels on the long side"
|
1312 |
+
|
1313 |
+
#: application/modules/Flickr/FlickrConfig.php:83
|
1314 |
+
msgid "640 пикселов по длинной стороне"
|
1315 |
+
msgstr "640 pixels on the long side"
|
1316 |
+
|
1317 |
+
#: application/modules/Flickr/FlickrConfig.php:84
|
1318 |
+
msgid "800 пикселов по длинной стороне"
|
1319 |
+
msgstr "800 pixels on the long side"
|
1320 |
+
|
1321 |
+
#: application/modules/Flickr/FlickrConfig.php:85
|
1322 |
+
msgid "1024 пикселов по длинной стороне"
|
1323 |
+
msgstr "1024 pixels on the long side"
|
1324 |
+
|
1325 |
+
#: application/modules/Flickr/FlickrConfig.php:98
|
1326 |
+
#: application/modules/Freebase/FreebaseConfig.php:58
|
1327 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:58
|
1328 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:131
|
1329 |
+
#: application/modules/GoogleNews/GoogleNewsConfig.php:43
|
1330 |
+
#: application/modules/VkNews/VkNewsConfig.php:38
|
1331 |
+
#: application/modules/Youtube/YoutubeConfig.php:72
|
1332 |
+
#: application/modules/Zanox/ZanoxConfig.php:160
|
1333 |
+
msgid "Обрезать описание"
|
1334 |
+
msgstr "Trim description"
|
1335 |
+
|
1336 |
+
#: application/modules/Flickr/FlickrConfig.php:99
|
1337 |
+
#: application/modules/Freebase/FreebaseConfig.php:59
|
1338 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:59
|
1339 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:132
|
1340 |
+
#: application/modules/GoogleNews/GoogleNewsConfig.php:44
|
1341 |
+
#: application/modules/VkNews/VkNewsConfig.php:39
|
1342 |
+
#: application/modules/Youtube/YoutubeConfig.php:73
|
1343 |
+
#: application/modules/Zanox/ZanoxConfig.php:161
|
1344 |
+
msgid "Размер описания в символах (0 - не обрезать)"
|
1345 |
+
msgstr "Description size in characters (0 - do not cut)"
|
1346 |
+
|
1347 |
+
#: application/modules/Flickr/FlickrConfig.php:110
|
1348 |
+
msgid "Ограничить поиск только этим пользователем Flickr"
|
1349 |
+
msgstr "Limit search to only those user Flickr"
|
1350 |
+
|
1351 |
+
#: application/modules/Flickr/templates/data_justified_gallery.php:62
|
1352 |
+
msgid "Фото: %s на Flickr"
|
1353 |
+
msgstr "Photo: %s on Flickr"
|
1354 |
+
|
1355 |
+
#: application/modules/Freebase/FreebaseConfig.php:21
|
1356 |
+
msgid ""
|
1357 |
+
"Ключ для доступа к API. Получить можно в Google <a href=\"http://code.google."
|
1358 |
+
"com/apis/console\">API консоли</a>."
|
1359 |
+
msgstr ""
|
1360 |
+
"API access key. You can get it in Google <a href=\"http://code.google.com/"
|
1361 |
+
"apis/console\">API console</a>."
|
1362 |
+
|
1363 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:21
|
1364 |
+
#: application/modules/Youtube/YoutubeConfig.php:21
|
1365 |
+
msgid ""
|
1366 |
+
"Ключ для доступа к API. Получить можно в Google <a href=\"http://code.google."
|
1367 |
+
"com/apis/console\">API консоли</a>"
|
1368 |
+
msgstr ""
|
1369 |
+
"API access key. You can get it in Google <a href=\"http://code.google.com/"
|
1370 |
+
"apis/console\">API console</a>."
|
1371 |
+
|
1372 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:74
|
1373 |
+
msgid "Новизна"
|
1374 |
+
msgstr "Newness"
|
1375 |
+
|
1376 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:80
|
1377 |
+
msgid "Тип издания"
|
1378 |
+
msgstr "Publication type"
|
1379 |
+
|
1380 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:84
|
1381 |
+
msgid "Любые"
|
1382 |
+
msgstr "Any"
|
1383 |
+
|
1384 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:85
|
1385 |
+
msgid "Книги"
|
1386 |
+
msgstr "Books"
|
1387 |
+
|
1388 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:86
|
1389 |
+
msgid "Журналы"
|
1390 |
+
msgstr "Magazines"
|
1391 |
+
|
1392 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:21
|
1393 |
+
msgid ""
|
1394 |
+
"Поиск изображений, которые можно использовать. Подробнее <a href=\"https://"
|
1395 |
+
"support.google.com/websearch/answer/29508\">здесь</a>."
|
1396 |
+
msgstr ""
|
1397 |
+
"Searching of images, which you can use. More about, <a href=\"https://"
|
1398 |
+
"support.google.com/websearch/answer/29508\">here</a>."
|
1399 |
+
|
1400 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:35
|
1401 |
+
msgid "Количество результатов для одного запроса. Не может быть больше 8."
|
1402 |
+
msgstr "Number of results for one query. Can not be more than 8."
|
1403 |
+
|
1404 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:50
|
1405 |
+
msgid "Цвет"
|
1406 |
+
msgstr "Color"
|
1407 |
+
|
1408 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:54
|
1409 |
+
msgid "Любого цвета"
|
1410 |
+
msgstr "Any color"
|
1411 |
+
|
1412 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:62
|
1413 |
+
msgid "Преобладание цвета"
|
1414 |
+
msgstr "Predominance of the color"
|
1415 |
+
|
1416 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:66
|
1417 |
+
msgid "Любой цвет"
|
1418 |
+
msgstr "Any color"
|
1419 |
+
|
1420 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:67
|
1421 |
+
msgid "Черный"
|
1422 |
+
msgstr "Black"
|
1423 |
+
|
1424 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:68
|
1425 |
+
msgid "Синий"
|
1426 |
+
msgstr "Blue"
|
1427 |
+
|
1428 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:69
|
1429 |
+
msgid "Коричневый"
|
1430 |
+
msgstr "Brown"
|
1431 |
+
|
1432 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:70
|
1433 |
+
msgid "Серый"
|
1434 |
+
msgstr "Gray"
|
1435 |
+
|
1436 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:71
|
1437 |
+
msgid "Зеленый"
|
1438 |
+
msgstr "Green"
|
1439 |
+
|
1440 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:72
|
1441 |
+
msgid "Оранжевый"
|
1442 |
+
msgstr "Orange"
|
1443 |
+
|
1444 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:73
|
1445 |
+
msgid "Розовый"
|
1446 |
+
msgstr "Pink"
|
1447 |
+
|
1448 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:74
|
1449 |
+
msgid "Фиолетовый"
|
1450 |
+
msgstr "Purple"
|
1451 |
+
|
1452 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:75
|
1453 |
+
msgid "Красный"
|
1454 |
+
msgstr "Red"
|
1455 |
+
|
1456 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:76
|
1457 |
+
msgid "Бирюзовый"
|
1458 |
+
msgstr "Turquoise"
|
1459 |
+
|
1460 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:77
|
1461 |
+
msgid "Белый"
|
1462 |
+
msgstr "White"
|
1463 |
+
|
1464 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:78
|
1465 |
+
msgid "Желтый"
|
1466 |
+
msgstr "Yellow"
|
1467 |
+
|
1468 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:88
|
1469 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:102
|
1470 |
+
#: application/modules/GoogleImages/views/search_panel.php:11
|
1471 |
+
msgid "Любого размера"
|
1472 |
+
msgstr "Any size"
|
1473 |
+
|
1474 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:89
|
1475 |
+
#: application/modules/GoogleImages/views/search_panel.php:12
|
1476 |
+
msgid "Маленькие"
|
1477 |
+
msgstr "Small"
|
1478 |
+
|
1479 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:90
|
1480 |
+
#: application/modules/GoogleImages/views/search_panel.php:13
|
1481 |
+
msgid "Средние"
|
1482 |
+
msgstr "Medium"
|
1483 |
+
|
1484 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:91
|
1485 |
+
#: application/modules/GoogleImages/views/search_panel.php:14
|
1486 |
+
msgid "Большие"
|
1487 |
+
msgstr "Large"
|
1488 |
+
|
1489 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:92
|
1490 |
+
#: application/modules/GoogleImages/views/search_panel.php:15
|
1491 |
+
msgid "Огромные"
|
1492 |
+
msgstr "Huge"
|
1493 |
+
|
1494 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:98
|
1495 |
+
msgid "Тип"
|
1496 |
+
msgstr "Type"
|
1497 |
+
|
1498 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:103
|
1499 |
+
msgid "Лица"
|
1500 |
+
msgstr "Faces"
|
1501 |
+
|
1502 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:105
|
1503 |
+
msgid "Клип-арт"
|
1504 |
+
msgstr "Clip-art"
|
1505 |
+
|
1506 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:106
|
1507 |
+
msgid "Ч/б рисунки"
|
1508 |
+
msgstr "B/w pictures"
|
1509 |
+
|
1510 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:112
|
1511 |
+
msgid "Безопасный поиск"
|
1512 |
+
msgstr "Safe search"
|
1513 |
+
|
1514 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:116
|
1515 |
+
msgid "Включен"
|
1516 |
+
msgstr "Included"
|
1517 |
+
|
1518 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:117
|
1519 |
+
msgid "Модерация"
|
1520 |
+
msgstr "Moderation"
|
1521 |
+
|
1522 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:118
|
1523 |
+
msgid "Отключен"
|
1524 |
+
msgstr "Disabled"
|
1525 |
+
|
1526 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:143
|
1527 |
+
msgid ""
|
1528 |
+
"Ограничить поиск только этим доменом. Например, задайте: photobucket.com"
|
1529 |
+
msgstr "Limit search to only that domain. For example ask: photobucket.com"
|
1530 |
+
|
1531 |
+
#: application/modules/Market/MarketConfig.php:21
|
1532 |
+
msgid ""
|
1533 |
+
"Ключ для доступа к Яндекс Маркет API. Отправить запрос на получение можно <a "
|
1534 |
+
"href=\"http://feedback2.yandex.ru/api-market-content/key/\">здесь</a>."
|
1535 |
+
msgstr ""
|
1536 |
+
"Access key to Yandex Market API. Send request to obtain is possible <a href="
|
1537 |
+
"\"http://feedback2.yandex.ru/api-market-content/key/\">here<a/>."
|
1538 |
+
|
1539 |
+
#: application/modules/Market/MarketConfig.php:35
|
1540 |
+
#: application/modules/Zanox/ZanoxConfig.php:90
|
1541 |
+
msgid "Регион"
|
1542 |
+
msgstr "Region"
|
1543 |
+
|
1544 |
+
#: application/modules/Market/MarketConfig.php:39
|
1545 |
+
msgid "Россия"
|
1546 |
+
msgstr "Russia"
|
1547 |
+
|
1548 |
+
#: application/modules/Market/MarketConfig.php:40
|
1549 |
+
msgid "Украина"
|
1550 |
+
msgstr "Ukraine"
|
1551 |
+
|
1552 |
+
#: application/modules/Market/MarketConfig.php:41
|
1553 |
+
msgid "Казахстан"
|
1554 |
+
msgstr "Kazakhstan"
|
1555 |
+
|
1556 |
+
#: application/modules/Market/MarketConfig.php:42
|
1557 |
+
msgid "Беларусь"
|
1558 |
+
msgstr "Belarus"
|
1559 |
+
|
1560 |
+
#: application/modules/Market/MarketConfig.php:64
|
1561 |
+
msgid "Предложения"
|
1562 |
+
msgstr "Offers"
|
1563 |
+
|
1564 |
+
#: application/modules/Market/MarketConfig.php:65
|
1565 |
+
msgid "Получить список предложений на модель."
|
1566 |
+
msgstr "Get a list of the offers on the model"
|
1567 |
+
|
1568 |
+
#: application/modules/Market/MarketConfig.php:71
|
1569 |
+
msgid "Количество предложений"
|
1570 |
+
msgstr "Number of offers"
|
1571 |
+
|
1572 |
+
#: application/modules/Market/MarketConfig.php:81
|
1573 |
+
msgid "Поле \"Количество предложений\" не может быть больше 30."
|
1574 |
+
msgstr "The \"Number of offers\" can not be more than 30."
|
1575 |
+
|
1576 |
+
#: application/modules/Market/MarketConfig.php:87
|
1577 |
+
msgid "Отзывы"
|
1578 |
+
msgstr "Reviews"
|
1579 |
+
|
1580 |
+
#: application/modules/Market/MarketConfig.php:88
|
1581 |
+
msgid "Получить отзывы о модели."
|
1582 |
+
msgstr "Get review about the model."
|
1583 |
+
|
1584 |
+
#: application/modules/Market/MarketConfig.php:94
|
1585 |
+
msgid "Количество отзывов"
|
1586 |
+
msgstr "Number of reviews"
|
1587 |
+
|
1588 |
+
#: application/modules/Market/MarketConfig.php:104
|
1589 |
+
msgid "Поле \"Количество отзывов\" не может быть больше 30."
|
1590 |
+
msgstr "The \"Number of reviews\" can not be more than 30."
|
1591 |
+
|
1592 |
+
#: application/modules/Market/MarketConfig.php:110
|
1593 |
+
msgid "Сортировка отзывов"
|
1594 |
+
msgstr "Sorting of reviews"
|
1595 |
+
|
1596 |
+
#: application/modules/Market/MarketConfig.php:114
|
1597 |
+
msgid "Сортировка по оценке пользователем модели"
|
1598 |
+
msgstr "Sorting by user ratings models"
|
1599 |
+
|
1600 |
+
#: application/modules/Market/MarketConfig.php:115
|
1601 |
+
msgid "Сортировка по дате написания отзыва"
|
1602 |
+
msgstr "Sorting by date of review"
|
1603 |
+
|
1604 |
+
#: application/modules/Market/MarketConfig.php:116
|
1605 |
+
msgid "Сортировка по полезности отзыва"
|
1606 |
+
msgstr "Sorting by usefulness of review"
|
1607 |
+
|
1608 |
+
#: application/modules/Market/MarketConfig.php:123
|
1609 |
+
msgid "Размер отзывов в символах (0 - не обрезать)"
|
1610 |
+
msgstr "Size of reviews in characters (0 - do not cut)"
|
1611 |
+
|
1612 |
+
#: application/modules/Market/MarketModule.php:28
|
1613 |
+
msgid "Добавляет товары из русскоязычного каталога Яндекс.Маркет"
|
1614 |
+
msgstr "Add products from the Russian-speaking catalog of Yandex.Market"
|
1615 |
+
|
1616 |
+
#: application/modules/Market/templates/data_item.php:130
|
1617 |
+
msgid "All reviews on Yandex.Market"
|
1618 |
+
msgstr "All reviews on Yandex.Market"
|
1619 |
+
|
1620 |
+
#: application/modules/Twitter/TwitterConfig.php:21
|
1621 |
+
#: application/modules/Twitter/TwitterConfig.php:36
|
1622 |
+
#: application/modules/Twitter/TwitterConfig.php:51
|
1623 |
+
#: application/modules/Twitter/TwitterConfig.php:66
|
1624 |
+
msgid "Получить можно <a href=\"https://dev.twitter.com/apps/\">здесь</a>."
|
1625 |
+
msgstr "Can get <a href=\"https://dev.twitter.com/apps/\">here<a/>."
|
1626 |
+
|
1627 |
+
#: application/modules/Twitter/TwitterConfig.php:100
|
1628 |
+
#: application/modules/Twitter/views/search_panel.php:2
|
1629 |
+
msgid "Новые"
|
1630 |
+
msgstr "New"
|
1631 |
+
|
1632 |
+
#: application/modules/Twitter/TwitterConfig.php:101
|
1633 |
+
#: application/modules/Twitter/views/search_panel.php:3
|
1634 |
+
msgid "Популярные"
|
1635 |
+
msgstr "Popular"
|
1636 |
+
|
1637 |
+
#: application/modules/Twitter/TwitterConfig.php:102
|
1638 |
+
#: application/modules/Twitter/views/search_panel.php:4
|
1639 |
+
msgid "Микс"
|
1640 |
+
msgstr "Mix"
|
1641 |
+
|
1642 |
+
#: application/modules/VkNews/VkNewsModule.php:25
|
1643 |
+
msgid "Добавляет новости из русскоязычной социальной сети vk.com"
|
1644 |
+
msgstr "Adds news from Russian-language social network vk.com"
|
1645 |
+
|
1646 |
+
#: application/modules/Youtube/YoutubeConfig.php:50
|
1647 |
+
#: application/modules/Youtube/views/search_panel.php:8
|
1648 |
+
msgid "Дата"
|
1649 |
+
msgstr "Date"
|
1650 |
+
|
1651 |
+
#: application/modules/Youtube/YoutubeConfig.php:51
|
1652 |
+
#: application/modules/Youtube/views/search_panel.php:9
|
1653 |
+
msgid "Рейтинг"
|
1654 |
+
msgstr "Rating"
|
1655 |
+
|
1656 |
+
#: application/modules/Youtube/YoutubeConfig.php:54
|
1657 |
+
#: application/modules/Youtube/views/search_panel.php:12
|
1658 |
+
msgid "Просмотры"
|
1659 |
+
msgstr "Views"
|
1660 |
+
|
1661 |
+
#: application/modules/Youtube/YoutubeConfig.php:61
|
1662 |
+
msgid ""
|
1663 |
+
"Многие видео на Youtube загружены с лицензией Creative Commons. <a href="
|
1664 |
+
"\"http://www.google.com/support/youtube/bin/answer.py?"
|
1665 |
+
"answer=1284989\">Узнать больше</a>."
|
1666 |
+
msgstr ""
|
1667 |
+
"Many videos on Youtube have Creative Commons license. <a href=\"http://www."
|
1668 |
+
"google.com/support/youtube/bin/answer.py?answer=1284989\">Know more</a>."
|
1669 |
+
|
1670 |
+
#: application/modules/Youtube/YoutubeConfig.php:65
|
1671 |
+
msgid "Сreative Сommons лицензия"
|
1672 |
+
msgstr "Creative Commons license"
|
1673 |
+
|
1674 |
+
#: application/modules/Youtube/YoutubeConfig.php:66
|
1675 |
+
#: application/modules/Youtube/views/search_panel.php:4
|
1676 |
+
msgid "Стандартная лицензия"
|
1677 |
+
msgstr "Standard license"
|
1678 |
+
|
1679 |
+
#: application/modules/Youtube/views/search_panel.php:3
|
1680 |
+
msgid "Сreative Сommons"
|
1681 |
+
msgstr "Creative Commons"
|
1682 |
+
|
1683 |
+
#: application/modules/Zanox/ZanoxConfig.php:22
|
1684 |
+
msgid ""
|
1685 |
+
"Специальный ключ для доступа к Zanox API, а также ваша связь с партнерской "
|
1686 |
+
"программой."
|
1687 |
+
msgstr ""
|
1688 |
+
"Special key for Zanox API, also this is your connection with the partner "
|
1689 |
+
"program."
|
1690 |
+
|
1691 |
+
#: application/modules/Zanox/ZanoxConfig.php:30
|
1692 |
+
msgid "Поле \"Connect ID\" не может быть пустым."
|
1693 |
+
msgstr "The field \"Connect ID\" can not be empty."
|
1694 |
+
|
1695 |
+
#: application/modules/Zanox/ZanoxConfig.php:56
|
1696 |
+
#: application/modules/Zanox/ZanoxConfig.php:72
|
1697 |
+
msgid "Поле \"Результатов\" не может быть больше 50."
|
1698 |
+
msgstr "The field \"Results\" can not be more than 50."
|
1699 |
+
|
1700 |
+
#: application/modules/Zanox/ZanoxConfig.php:78
|
1701 |
+
msgid "Тип поиска"
|
1702 |
+
msgstr "Search type"
|
1703 |
+
|
1704 |
+
#: application/modules/Zanox/ZanoxConfig.php:79
|
1705 |
+
msgid ""
|
1706 |
+
"\"Автоматически\" означает, что тип поиска будет выбран в зависимости от "
|
1707 |
+
"длины поисковой фразы."
|
1708 |
+
msgstr ""
|
1709 |
+
"\"Automatically\" means, that searching type will be chosen depending on "
|
1710 |
+
"length of the search phrase."
|
1711 |
+
|
1712 |
+
#: application/modules/Zanox/ZanoxConfig.php:82
|
1713 |
+
msgid "Автоматически"
|
1714 |
+
msgstr "Automatically"
|
1715 |
+
|
1716 |
+
#: application/modules/Zanox/ZanoxConfig.php:83
|
1717 |
+
msgid "Фраза"
|
1718 |
+
msgstr "Phrase"
|
1719 |
+
|
1720 |
+
#: application/modules/Zanox/ZanoxConfig.php:84
|
1721 |
+
msgid "Контекстный"
|
1722 |
+
msgstr "Context"
|
1723 |
+
|
1724 |
+
#: application/modules/Zanox/ZanoxConfig.php:91
|
1725 |
+
msgid "Ограничить результаты поиска выбранным регионом."
|
1726 |
+
msgstr "Limit the search of goods by this region."
|
1727 |
+
|
1728 |
+
#: application/modules/Zanox/ZanoxConfig.php:94
|
1729 |
+
msgid "Любой регион"
|
1730 |
+
msgstr "Any region"
|
1731 |
+
|
1732 |
+
#: application/modules/Zanox/ZanoxConfig.php:121
|
1733 |
+
msgid "ID программы"
|
1734 |
+
msgstr "Id of program"
|
1735 |
+
|
1736 |
+
#: application/modules/Zanox/ZanoxConfig.php:122
|
1737 |
+
msgid ""
|
1738 |
+
"Ограничить результаты поиска конкретной программой. Вы можете указать "
|
1739 |
+
"несколько ID через запятую. Например: \"1234\", \"1234,5678,9123\". Если не "
|
1740 |
+
"указано, поиск будет произведен по всем вашим подключенным программам."
|
1741 |
+
msgstr ""
|
1742 |
+
"Limit search results to the specific program. You can specify several ID "
|
1743 |
+
"through a comma. For example: \"1234 \", \"1234,5678,9123 \". If it isn't "
|
1744 |
+
"specified, search will be run for all your connected programs."
|
1745 |
+
|
1746 |
+
#: application/modules/Zanox/ZanoxConfig.php:142
|
1747 |
+
msgid "Партнерство"
|
1748 |
+
msgstr "Partnership"
|
1749 |
+
|
1750 |
+
#: application/modules/Zanox/ZanoxConfig.php:143
|
1751 |
+
msgid ""
|
1752 |
+
"Если выбрано \"Все\", партнерские ссылки не будут включены в результат. "
|
1753 |
+
"Используйте только для оценки доступных товаров."
|
1754 |
+
msgstr ""
|
1755 |
+
"If you choose \"All \", partner links won't be included in result. Use only "
|
1756 |
+
"for an assessment of available products."
|
1757 |
+
|
1758 |
+
#: application/modules/Zanox/ZanoxConfig.php:146
|
1759 |
+
msgid "Все"
|
1760 |
+
msgstr "All"
|
1761 |
+
|
1762 |
+
#: application/modules/Zanox/ZanoxConfig.php:147
|
1763 |
+
msgid "Подтвержденные"
|
1764 |
+
msgstr "Approved"
|
1765 |
+
|
1766 |
+
#: application/modules/Zanox/ZanoxModule.php:27
|
1767 |
+
msgid ""
|
1768 |
+
"Добавляет товары партнерской сети zanox.com. Вы должны получить аппрув от "
|
1769 |
+
"каждой программы отдельно."
|
1770 |
+
msgstr ""
|
1771 |
+
"Adds products from zanox.com. You must have approval from each program "
|
1772 |
+
"separately."
|
1773 |
+
|
1774 |
+
#. Plugin Name of the plugin/theme
|
1775 |
+
msgid "Content Egg"
|
1776 |
+
msgstr "Content Egg"
|
1777 |
+
|
1778 |
+
#. Plugin URI of the plugin/theme
|
1779 |
+
msgid "http://www.keywordrush.com/contentegg"
|
1780 |
+
msgstr "http://www.keywordrush.com/en/contentegg"
|
1781 |
+
|
1782 |
+
#. Description of the plugin/theme
|
1783 |
+
msgid ""
|
1784 |
+
"Plugin for adding additional content for your posts. Let you to earn money "
|
1785 |
+
"from affiliate programs."
|
1786 |
+
msgstr ""
|
1787 |
+
"Plugin for adding additional content for your posts. Let you to earn money "
|
1788 |
+
"from affiliate programs."
|
1789 |
+
|
1790 |
+
#. Author of the plugin/theme
|
1791 |
+
msgid "keywordrush.com"
|
1792 |
+
msgstr "keywordrush.com"
|
1793 |
+
|
1794 |
+
#. Author URI of the plugin/theme
|
1795 |
+
msgid "http://www.keywordrush.com"
|
1796 |
+
msgstr "http://www.keywordrush.com/en"
|
1797 |
+
|
1798 |
+
#~ msgid "Товары картинками"
|
1799 |
+
#~ msgstr "Products with photos"
|
1800 |
+
|
1801 |
+
#~ msgid "Только товары с картинками."
|
1802 |
+
#~ msgstr "Only products with photos"
|
1803 |
+
|
1804 |
+
#~ msgid "Сетка"
|
1805 |
+
#~ msgstr "Grid"
|
1806 |
+
|
1807 |
+
#~ msgid "Список"
|
1808 |
+
#~ msgstr "List"
|
1809 |
+
|
1810 |
+
#~ msgid "Tracking ID"
|
1811 |
+
#~ msgstr "Tracking ID"
|
1812 |
+
|
1813 |
+
#~ msgid "Галерея"
|
1814 |
+
#~ msgstr "Gallery"
|
1815 |
+
|
1816 |
+
#~ msgid "Простой"
|
1817 |
+
#~ msgstr "Simple"
|
1818 |
+
|
1819 |
+
#~ msgid "Источник: %s"
|
1820 |
+
#~ msgstr "Source: %s"
|
1821 |
+
|
1822 |
+
#~ msgid "Фото %s на Flickr"
|
1823 |
+
#~ msgstr "Photo %s on Flickr"
|
1824 |
+
|
1825 |
+
#~ msgid "Источник:"
|
1826 |
+
#~ msgstr "Source:"
|
1827 |
+
|
1828 |
+
#~ msgid "Отзывов:"
|
1829 |
+
#~ msgstr "Reviews:"
|
1830 |
+
|
1831 |
+
#~ msgid "Средняя цена"
|
1832 |
+
#~ msgstr "Average price"
|
1833 |
+
|
1834 |
+
#~ msgid "бесплатно"
|
1835 |
+
#~ msgstr "free"
|
1836 |
+
|
1837 |
+
#~ msgid "Отзывы покупателей"
|
1838 |
+
#~ msgstr "Customer reviews"
|
1839 |
+
|
1840 |
+
#~ msgid "Достоинства:"
|
1841 |
+
#~ msgstr "Positives:"
|
1842 |
+
|
1843 |
+
#~ msgid "Недостатки:"
|
1844 |
+
#~ msgstr "Disadvantages:"
|
1845 |
+
|
1846 |
+
#~ msgid "Комментарий:"
|
1847 |
+
#~ msgstr "Comment:"
|
1848 |
+
|
1849 |
+
#~ msgid "Все отзывы на Яндекс.Маркете"
|
1850 |
+
#~ msgstr "All reviews on Yandex.Market"
|
1851 |
+
|
1852 |
+
#~ msgid "Широкий"
|
1853 |
+
#~ msgstr "Wide"
|
1854 |
+
|
1855 |
+
#~ msgid "Плитка"
|
1856 |
+
#~ msgstr "Tile"
|
languages/content-egg.pot
ADDED
@@ -0,0 +1,1572 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Copyright (C) 2015 Content Egg
|
2 |
+
# This file is distributed under the same license as the Content Egg package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: Content Egg 1.6.0\n"
|
6 |
+
"Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/content-egg\n"
|
7 |
+
"POT-Creation-Date: 2015-08-27 17:32:48+00:00\n"
|
8 |
+
"MIME-Version: 1.0\n"
|
9 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
+
"Content-Transfer-Encoding: 8bit\n"
|
11 |
+
"PO-Revision-Date: 2015-MO-DA HO:MI+ZONE\n"
|
12 |
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
13 |
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
14 |
+
|
15 |
+
#: application/Autoupdate.php:79
|
16 |
+
msgid "Новая версия"
|
17 |
+
msgstr ""
|
18 |
+
|
19 |
+
#: application/Installer.php:76
|
20 |
+
msgid "Вы используете Wordpress %s. <em>%s</em> требует минимум <strong>Wordpress %s</strong>."
|
21 |
+
msgstr ""
|
22 |
+
|
23 |
+
#: application/Installer.php:80
|
24 |
+
msgid "На вашем сервере установлен PHP %s. <em>%s</em> требует минимум <strong>PHP %s</strong>."
|
25 |
+
msgstr ""
|
26 |
+
|
27 |
+
#: application/Installer.php:85
|
28 |
+
msgid "Требуется расширение <strong>%s</strong>."
|
29 |
+
msgstr ""
|
30 |
+
|
31 |
+
#: application/Installer.php:91
|
32 |
+
msgid "не может быть установлен!"
|
33 |
+
msgstr ""
|
34 |
+
|
35 |
+
#: application/admin/EggMetabox.php:76
|
36 |
+
msgid "Настройте и активируйте модули Content Egg плагин."
|
37 |
+
msgstr ""
|
38 |
+
|
39 |
+
#: application/admin/GeneralConfig.php:30 application/admin/PluginAdmin.php:68
|
40 |
+
msgid "Настройки"
|
41 |
+
msgstr ""
|
42 |
+
|
43 |
+
#: application/admin/GeneralConfig.php:86
|
44 |
+
msgid "Язык сайта"
|
45 |
+
msgstr ""
|
46 |
+
|
47 |
+
#: application/admin/GeneralConfig.php:87
|
48 |
+
msgid "Модули, которые имеют поддержку мультиязычности, будут отдавать предпочтение контенту на этом языке. Также эта настройка указывает на язык для локализации шаблонов."
|
49 |
+
msgstr ""
|
50 |
+
|
51 |
+
#: application/admin/LicConfig.php:32
|
52 |
+
msgid "Лицензия"
|
53 |
+
msgstr ""
|
54 |
+
|
55 |
+
#: application/admin/LicConfig.php:40
|
56 |
+
msgid "Ключ лицензии"
|
57 |
+
msgstr ""
|
58 |
+
|
59 |
+
#: application/admin/LicConfig.php:41
|
60 |
+
msgid "Сюда необходимо ввести действующий ключ лицензии. Найти ключ вы можете в своей <a href=\"http://www.keywordrush.com/panel\">панели пользователя</a>. Если у вас еще нет ключа, вы можете приобрести его на <a href=\"http://www.keywordrush.com/contentegg\">официальном сайте</a> плагина."
|
61 |
+
msgstr ""
|
62 |
+
|
63 |
+
#: application/admin/LicConfig.php:48
|
64 |
+
msgid "Поле \"Ключ лицензии\" не может быть пустым."
|
65 |
+
msgstr ""
|
66 |
+
|
67 |
+
#: application/admin/LicConfig.php:52
|
68 |
+
msgid "Неверный ключ лицензии."
|
69 |
+
msgstr ""
|
70 |
+
|
71 |
+
#: application/admin/LicConfig.php:56
|
72 |
+
msgid "Ключ лицензии не принят. Убедитесь, что вы используйте действительный ключ. Если вы верите, что произошла ошибка, пожалуйста, обратитесь в <a href=\"http://www.keywordrush.com/contact\">поддержку</a> плагина."
|
73 |
+
msgstr ""
|
74 |
+
|
75 |
+
#: application/admin/views/_metabox_results.php:9
|
76 |
+
#: application/components/ParserModuleConfig.php:46
|
77 |
+
#: application/modules/Youtube/YoutubeConfig.php:53
|
78 |
+
#: application/modules/Youtube/views/search_panel.php:11
|
79 |
+
msgid "Заголовок"
|
80 |
+
msgstr ""
|
81 |
+
|
82 |
+
#: application/admin/views/_metabox_results.php:10
|
83 |
+
msgid "Описание"
|
84 |
+
msgstr ""
|
85 |
+
|
86 |
+
#: application/admin/views/_metabox_results.php:13
|
87 |
+
msgid "Перейти"
|
88 |
+
msgstr ""
|
89 |
+
|
90 |
+
#: application/admin/views/_metabox_results.php:14
|
91 |
+
msgid "Удалить"
|
92 |
+
msgstr ""
|
93 |
+
|
94 |
+
#: application/admin/views/lic_settings.php:2
|
95 |
+
msgid "лицензия"
|
96 |
+
msgstr ""
|
97 |
+
|
98 |
+
#: application/admin/views/metabox_general.php:8
|
99 |
+
msgid "Введите ключевое слово"
|
100 |
+
msgstr ""
|
101 |
+
|
102 |
+
#: application/admin/views/metabox_general.php:10
|
103 |
+
msgid "Найти все"
|
104 |
+
msgstr ""
|
105 |
+
|
106 |
+
#: application/admin/views/metabox_general.php:15
|
107 |
+
#: application/admin/views/metabox_module.php:71
|
108 |
+
msgid "Добавить все"
|
109 |
+
msgstr ""
|
110 |
+
|
111 |
+
#: application/admin/views/metabox_general.php:16
|
112 |
+
msgid "Вы действительно хотите удалить результаты всех модулей?"
|
113 |
+
msgstr ""
|
114 |
+
|
115 |
+
#: application/admin/views/metabox_general.php:16
|
116 |
+
#: application/admin/views/metabox_module.php:40
|
117 |
+
msgid "Удалить все"
|
118 |
+
msgstr ""
|
119 |
+
|
120 |
+
#: application/admin/views/metabox_module.php:26
|
121 |
+
msgid "Шаблон для шорткода"
|
122 |
+
msgstr ""
|
123 |
+
|
124 |
+
#: application/admin/views/metabox_module.php:36
|
125 |
+
msgid "Ключевое слово для автоматического обновления данных"
|
126 |
+
msgstr ""
|
127 |
+
|
128 |
+
#: application/admin/views/metabox_module.php:40
|
129 |
+
msgid "Вы действительно хотите удалить все результаты?"
|
130 |
+
msgstr ""
|
131 |
+
|
132 |
+
#: application/admin/views/metabox_module.php:45
|
133 |
+
msgid "Данные не найдены..."
|
134 |
+
msgstr ""
|
135 |
+
|
136 |
+
#: application/admin/views/metabox_module.php:49
|
137 |
+
msgid "Поиск"
|
138 |
+
msgstr ""
|
139 |
+
|
140 |
+
#: application/admin/views/metabox_module.php:55
|
141 |
+
msgid "Ключевое слово для поиска"
|
142 |
+
msgstr ""
|
143 |
+
|
144 |
+
#: application/admin/views/metabox_module.php:57
|
145 |
+
msgid "Найти"
|
146 |
+
msgstr ""
|
147 |
+
|
148 |
+
#: application/admin/views/metabox_module.php:79
|
149 |
+
msgid "Не найдено..."
|
150 |
+
msgstr ""
|
151 |
+
|
152 |
+
#: application/admin/views/metabox_module.php:80
|
153 |
+
msgid "Ошибка: "
|
154 |
+
msgstr ""
|
155 |
+
|
156 |
+
#: application/admin/views/settings.php:13
|
157 |
+
msgid "Content Egg Настройки"
|
158 |
+
msgstr ""
|
159 |
+
|
160 |
+
#: application/admin/views/settings.php:24
|
161 |
+
#: application/admin/views/settings.php:47
|
162 |
+
msgid "Общие настройки"
|
163 |
+
msgstr ""
|
164 |
+
|
165 |
+
#: application/admin/views/settings.php:71
|
166 |
+
msgid "Условия"
|
167 |
+
msgstr ""
|
168 |
+
|
169 |
+
#: application/admin/views/settings.php:95
|
170 |
+
msgid "Множество дополнительных модулей и расширенный функционал."
|
171 |
+
msgstr ""
|
172 |
+
|
173 |
+
#: application/admin/views/settings.php:97
|
174 |
+
msgid "Контент модули:"
|
175 |
+
msgstr ""
|
176 |
+
|
177 |
+
#: application/admin/views/settings.php:99
|
178 |
+
msgid "Bing картинки"
|
179 |
+
msgstr ""
|
180 |
+
|
181 |
+
#: application/admin/views/settings.php:100
|
182 |
+
msgid "Flickr фотографии"
|
183 |
+
msgstr ""
|
184 |
+
|
185 |
+
#: application/admin/views/settings.php:101
|
186 |
+
msgid "Google книги"
|
187 |
+
msgstr ""
|
188 |
+
|
189 |
+
#: application/admin/views/settings.php:102
|
190 |
+
msgid "Google новости"
|
191 |
+
msgstr ""
|
192 |
+
|
193 |
+
#: application/admin/views/settings.php:103
|
194 |
+
msgid "Яндекс.Маркет"
|
195 |
+
msgstr ""
|
196 |
+
|
197 |
+
#: application/admin/views/settings.php:105
|
198 |
+
msgid "ВКонтакте новости"
|
199 |
+
msgstr ""
|
200 |
+
|
201 |
+
#: application/admin/views/settings.php:108
|
202 |
+
msgid "Монетизация:"
|
203 |
+
msgstr ""
|
204 |
+
|
205 |
+
#: application/admin/views/settings.php:116
|
206 |
+
msgid "Узнать больше..."
|
207 |
+
msgstr ""
|
208 |
+
|
209 |
+
#: application/components/AffiliateParserModuleConfig.php:18
|
210 |
+
msgid "Автоматическое обновление"
|
211 |
+
msgstr ""
|
212 |
+
|
213 |
+
#: application/components/AffiliateParserModuleConfig.php:19
|
214 |
+
msgid "Время жини кэша в секундах, через которое необходимо обновить товары, если задано ключевое слово для обновления. 0 - никогда не обновлять."
|
215 |
+
msgstr ""
|
216 |
+
|
217 |
+
#: application/components/AffiliateParserModuleConfig.php:33
|
218 |
+
msgid "Обновить товары"
|
219 |
+
msgstr ""
|
220 |
+
|
221 |
+
#: application/components/AffiliateParserModuleConfig.php:34
|
222 |
+
msgid "Время в секундах, через которое необходимо обновить цену, наличие и некоторую другую информацию по товарам. 0 - никогда не обновлять."
|
223 |
+
msgstr ""
|
224 |
+
|
225 |
+
#: application/components/ModuleConfig.php:53
|
226 |
+
#: application/components/ModuleConfig.php:59
|
227 |
+
msgid "настройки"
|
228 |
+
msgstr ""
|
229 |
+
|
230 |
+
#: application/components/ModuleTemplateManager.php:81
|
231 |
+
msgid "[пользовательский]"
|
232 |
+
msgstr ""
|
233 |
+
|
234 |
+
#: application/components/ParserModuleConfig.php:19
|
235 |
+
msgid "Включить модуль"
|
236 |
+
msgstr ""
|
237 |
+
|
238 |
+
#: application/components/ParserModuleConfig.php:26
|
239 |
+
msgid "Добавить"
|
240 |
+
msgstr ""
|
241 |
+
|
242 |
+
#: application/components/ParserModuleConfig.php:27
|
243 |
+
msgid "Куда добавить контент этого модуля? Шорткоды работают всегда в независимости от настройки."
|
244 |
+
msgstr ""
|
245 |
+
|
246 |
+
#: application/components/ParserModuleConfig.php:30
|
247 |
+
msgid "В конец поста"
|
248 |
+
msgstr ""
|
249 |
+
|
250 |
+
#: application/components/ParserModuleConfig.php:31
|
251 |
+
msgid "В начало поста"
|
252 |
+
msgstr ""
|
253 |
+
|
254 |
+
#: application/components/ParserModuleConfig.php:32
|
255 |
+
msgid "Только шорткоды"
|
256 |
+
msgstr ""
|
257 |
+
|
258 |
+
#: application/components/ParserModuleConfig.php:38
|
259 |
+
msgid "Шаблон"
|
260 |
+
msgstr ""
|
261 |
+
|
262 |
+
#: application/components/ParserModuleConfig.php:39
|
263 |
+
msgid "Шаблон по-умолчанию."
|
264 |
+
msgstr ""
|
265 |
+
|
266 |
+
#: application/components/ParserModuleConfig.php:47
|
267 |
+
msgid "Шаблоны могут использовать заголовок при выводе данных."
|
268 |
+
msgstr ""
|
269 |
+
|
270 |
+
#: application/components/ParserModuleConfig.php:57
|
271 |
+
msgid "Автоматически установить Featured image для поста."
|
272 |
+
msgstr ""
|
273 |
+
|
274 |
+
#: application/components/ParserModuleConfig.php:60
|
275 |
+
msgid "Не устанавливать"
|
276 |
+
msgstr ""
|
277 |
+
|
278 |
+
#: application/components/ParserModuleConfig.php:61
|
279 |
+
msgid "Первый элемент"
|
280 |
+
msgstr ""
|
281 |
+
|
282 |
+
#: application/components/ParserModuleConfig.php:62
|
283 |
+
msgid "Второй элемент"
|
284 |
+
msgstr ""
|
285 |
+
|
286 |
+
#: application/components/ParserModuleConfig.php:63
|
287 |
+
msgid "Случайный элемент"
|
288 |
+
msgstr ""
|
289 |
+
|
290 |
+
#: application/components/ParserModuleConfig.php:64
|
291 |
+
msgid "Последний элемент"
|
292 |
+
msgstr ""
|
293 |
+
|
294 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:22
|
295 |
+
msgid "Специальный ключ для доступа к Aliexpress API. Получить можно <a target=\"_blank\" href=\"http://portals.aliexpress.com/adcenter/api_setting.htm\">здесь</a>."
|
296 |
+
msgstr ""
|
297 |
+
|
298 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:30
|
299 |
+
#: application/modules/Flickr/FlickrConfig.php:29
|
300 |
+
#: application/modules/Freebase/FreebaseConfig.php:29
|
301 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:29
|
302 |
+
#: application/modules/Market/MarketConfig.php:29
|
303 |
+
#: application/modules/Youtube/YoutubeConfig.php:29
|
304 |
+
msgid "Поле \"API Key\" не может быть пустым."
|
305 |
+
msgstr ""
|
306 |
+
|
307 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:37
|
308 |
+
msgid "Укажите, если хотите посылать трафик через оригинальную партнерку Aliexpress. Найти можно <a target=\"_blank\" href=\"http://portals.aliexpress.com/track_id_manage.htm\">здесь</a>. Опция должна быть задана до сохранения товаров в базу данных."
|
309 |
+
msgstr ""
|
310 |
+
|
311 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:47
|
312 |
+
msgid "Укажите этот параметр, если хотите посылать трафик через одну из CPA-сетей с поддержкой aliexpress и deeplink. Опция должна быть задана до сохранения товаров в базу данных."
|
313 |
+
msgstr ""
|
314 |
+
|
315 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:57
|
316 |
+
#: application/modules/Amazon/AmazonConfig.php:66
|
317 |
+
#: application/modules/BingImages/BingImagesConfig.php:35
|
318 |
+
#: application/modules/Ebay/EbayConfig.php:87
|
319 |
+
#: application/modules/Flickr/FlickrConfig.php:35
|
320 |
+
#: application/modules/Freebase/FreebaseConfig.php:35
|
321 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:35
|
322 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:34
|
323 |
+
#: application/modules/GoogleNews/GoogleNewsConfig.php:20
|
324 |
+
#: application/modules/Market/MarketConfig.php:48
|
325 |
+
#: application/modules/Twitter/TwitterConfig.php:80
|
326 |
+
#: application/modules/VkNews/VkNewsConfig.php:20
|
327 |
+
#: application/modules/Youtube/YoutubeConfig.php:35
|
328 |
+
#: application/modules/Zanox/ZanoxConfig.php:46
|
329 |
+
msgid "Результатов"
|
330 |
+
msgstr ""
|
331 |
+
|
332 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:58
|
333 |
+
#: application/modules/Amazon/AmazonConfig.php:67
|
334 |
+
#: application/modules/Ebay/EbayConfig.php:88
|
335 |
+
#: application/modules/Zanox/ZanoxConfig.php:47
|
336 |
+
msgid "Количество результатов для одного поискового запроса."
|
337 |
+
msgstr ""
|
338 |
+
|
339 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:67
|
340 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:83
|
341 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:45
|
342 |
+
msgid "Поле \"Результатов\" не может быть больше 40."
|
343 |
+
msgstr ""
|
344 |
+
|
345 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:73
|
346 |
+
#: application/modules/Amazon/AmazonConfig.php:82
|
347 |
+
#: application/modules/Zanox/ZanoxConfig.php:62
|
348 |
+
msgid "Результатов для обновления"
|
349 |
+
msgstr ""
|
350 |
+
|
351 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:74
|
352 |
+
#: application/modules/Amazon/AmazonConfig.php:83
|
353 |
+
#: application/modules/Zanox/ZanoxConfig.php:63
|
354 |
+
msgid "Количество результатов для автоматического обновления."
|
355 |
+
msgstr ""
|
356 |
+
|
357 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:89
|
358 |
+
msgid "Категория"
|
359 |
+
msgstr ""
|
360 |
+
|
361 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:90
|
362 |
+
msgid "Ограничить поиск товаров этой категорией."
|
363 |
+
msgstr ""
|
364 |
+
|
365 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:93
|
366 |
+
msgid "Все категории"
|
367 |
+
msgstr ""
|
368 |
+
|
369 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:128
|
370 |
+
msgid "Минимальная комиссия"
|
371 |
+
msgstr ""
|
372 |
+
|
373 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:129
|
374 |
+
msgid "Минимальная комиссия в процентах. Например, 3"
|
375 |
+
msgstr ""
|
376 |
+
|
377 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:138
|
378 |
+
#: application/modules/Amazon/AmazonConfig.php:160
|
379 |
+
#: application/modules/Ebay/EbayConfig.php:284
|
380 |
+
#: application/modules/Zanox/ZanoxConfig.php:101
|
381 |
+
msgid "Минимальная цена"
|
382 |
+
msgstr ""
|
383 |
+
|
384 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:139
|
385 |
+
msgid "Должна быть указана в USD. Например, 12.34"
|
386 |
+
msgstr ""
|
387 |
+
|
388 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:148
|
389 |
+
#: application/modules/Amazon/AmazonConfig.php:170
|
390 |
+
#: application/modules/Ebay/EbayConfig.php:274
|
391 |
+
#: application/modules/Zanox/ZanoxConfig.php:111
|
392 |
+
msgid "Максимальная цена"
|
393 |
+
msgstr ""
|
394 |
+
|
395 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:149
|
396 |
+
msgid "Должна быть указана в USD. Например, 56.78"
|
397 |
+
msgstr ""
|
398 |
+
|
399 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:158
|
400 |
+
msgid "Минимальные продажи"
|
401 |
+
msgstr ""
|
402 |
+
|
403 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:159
|
404 |
+
msgid "Минимальное число партнерских продаж за последний месяц. Например, 123"
|
405 |
+
msgstr ""
|
406 |
+
|
407 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:168
|
408 |
+
msgid "Максимальные продажи"
|
409 |
+
msgstr ""
|
410 |
+
|
411 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:169
|
412 |
+
msgid "Максимальное число партнерских продаж за последний месяц. Например, 456"
|
413 |
+
msgstr ""
|
414 |
+
|
415 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:178
|
416 |
+
#: application/modules/Ebay/EbayConfig.php:122
|
417 |
+
#: application/modules/Flickr/FlickrConfig.php:46
|
418 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:69
|
419 |
+
#: application/modules/Twitter/TwitterConfig.php:96
|
420 |
+
#: application/modules/Youtube/YoutubeConfig.php:46
|
421 |
+
msgid "Сортировка"
|
422 |
+
msgstr ""
|
423 |
+
|
424 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:182
|
425 |
+
msgid "По умолчанию"
|
426 |
+
msgstr ""
|
427 |
+
|
428 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:183
|
429 |
+
msgid "Цена от низкой к выскокой"
|
430 |
+
msgstr ""
|
431 |
+
|
432 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:184
|
433 |
+
msgid "Цена от высокой к низкой"
|
434 |
+
msgstr ""
|
435 |
+
|
436 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:185
|
437 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:195
|
438 |
+
msgid "Рейтинг продавца"
|
439 |
+
msgstr ""
|
440 |
+
|
441 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:186
|
442 |
+
msgid "Комиссия от низкой к высокой"
|
443 |
+
msgstr ""
|
444 |
+
|
445 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:187
|
446 |
+
msgid "Комиссия от высокой к низкой"
|
447 |
+
msgstr ""
|
448 |
+
|
449 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:188
|
450 |
+
msgid "Продажи"
|
451 |
+
msgstr ""
|
452 |
+
|
453 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:189
|
454 |
+
msgid "Время жизни от низкого к высокому"
|
455 |
+
msgstr ""
|
456 |
+
|
457 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:190
|
458 |
+
msgid "Время жизни от высокого к низкому"
|
459 |
+
msgstr ""
|
460 |
+
|
461 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:196
|
462 |
+
msgid "Минимальный рейтинг продавца, например, 12"
|
463 |
+
msgstr ""
|
464 |
+
|
465 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:206
|
466 |
+
#: application/modules/BingImages/BingImagesConfig.php:71
|
467 |
+
#: application/modules/Ebay/EbayConfig.php:337
|
468 |
+
#: application/modules/Flickr/FlickrConfig.php:91
|
469 |
+
#: application/modules/Freebase/FreebaseConfig.php:51
|
470 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:51
|
471 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:124
|
472 |
+
#: application/modules/GoogleNews/GoogleNewsConfig.php:36
|
473 |
+
#: application/modules/Market/MarketConfig.php:154
|
474 |
+
#: application/modules/Twitter/TwitterConfig.php:108
|
475 |
+
#: application/modules/VkNews/VkNewsConfig.php:31
|
476 |
+
#: application/modules/Zanox/ZanoxConfig.php:153
|
477 |
+
msgid "Сохранять картинки"
|
478 |
+
msgstr ""
|
479 |
+
|
480 |
+
#: application/modules/Aliexpress/AliexpressConfig.php:207
|
481 |
+
#: application/modules/BingImages/BingImagesConfig.php:72
|
482 |
+
#: application/modules/Ebay/EbayConfig.php:338
|
483 |
+
#: application/modules/Flickr/FlickrConfig.php:92
|
484 |
+
#: application/modules/Freebase/FreebaseConfig.php:52
|
485 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:52
|
486 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:125
|
487 |
+
#: application/modules/GoogleNews/GoogleNewsConfig.php:37
|
488 |
+
#: application/modules/Market/MarketConfig.php:155
|
489 |
+
#: application/modules/Twitter/TwitterConfig.php:109
|
490 |
+
#: application/modules/VkNews/VkNewsConfig.php:32
|
491 |
+
#: application/modules/Zanox/ZanoxConfig.php:154
|
492 |
+
msgid "Сохранять картинки на сервер"
|
493 |
+
msgstr ""
|
494 |
+
|
495 |
+
#: application/modules/Aliexpress/AliexpressModule.php:28
|
496 |
+
msgid "Добавляет товары aliexpress.com"
|
497 |
+
msgstr ""
|
498 |
+
|
499 |
+
#: application/modules/Amazon/AmazonConfig.php:22
|
500 |
+
msgid "Специальный ключ для доступа к Amazon API."
|
501 |
+
msgstr ""
|
502 |
+
|
503 |
+
#: application/modules/Amazon/AmazonConfig.php:30
|
504 |
+
msgid "Поле \"Access Key ID\" не может быть пустым."
|
505 |
+
msgstr ""
|
506 |
+
|
507 |
+
#: application/modules/Amazon/AmazonConfig.php:37
|
508 |
+
msgid "Еще один специальный ключ для доступа к Amazon API."
|
509 |
+
msgstr ""
|
510 |
+
|
511 |
+
#: application/modules/Amazon/AmazonConfig.php:45
|
512 |
+
msgid "Поле \"Secret Access Key\" не может быть пустым."
|
513 |
+
msgstr ""
|
514 |
+
|
515 |
+
#: application/modules/Amazon/AmazonConfig.php:52
|
516 |
+
msgid "Связь с Вашим аккаунтом в партнерке. Чтобы получать комиссию от продаж, правильно укажите этот параметр."
|
517 |
+
msgstr ""
|
518 |
+
|
519 |
+
#: application/modules/Amazon/AmazonConfig.php:60
|
520 |
+
msgid "Поле \"Tracking ID\" не может быть пустым."
|
521 |
+
msgstr ""
|
522 |
+
|
523 |
+
#: application/modules/Amazon/AmazonConfig.php:76
|
524 |
+
#: application/modules/Amazon/AmazonConfig.php:92
|
525 |
+
#: application/modules/Freebase/FreebaseConfig.php:45
|
526 |
+
#: application/modules/GoogleNews/GoogleNewsConfig.php:30
|
527 |
+
#: application/modules/Market/MarketConfig.php:58
|
528 |
+
#: application/modules/Twitter/TwitterConfig.php:90
|
529 |
+
msgid "Поле \"Результатов\" не может быть больше 10."
|
530 |
+
msgstr ""
|
531 |
+
|
532 |
+
#: application/modules/Amazon/AmazonConfig.php:98
|
533 |
+
#: application/modules/Ebay/EbayConfig.php:79
|
534 |
+
msgid "Locale"
|
535 |
+
msgstr ""
|
536 |
+
|
537 |
+
#: application/modules/Amazon/AmazonConfig.php:99
|
538 |
+
msgid "Филиал amazon. Для каждого филиала необходима отдельная регистрация в соответствующей партнерской программе."
|
539 |
+
msgstr ""
|
540 |
+
|
541 |
+
#: application/modules/Amazon/AmazonConfig.php:106
|
542 |
+
msgid "Вид ссылок"
|
543 |
+
msgstr ""
|
544 |
+
|
545 |
+
#: application/modules/Amazon/AmazonConfig.php:107
|
546 |
+
msgid "Вид партнерских ссылок. Узнайте больше про amazon <a target=\"_blank\" href=\"https://affiliate-program.amazon.com/gp/associates/help/t2/a11\">90 day cookie</a>."
|
547 |
+
msgstr ""
|
548 |
+
|
549 |
+
#: application/modules/Amazon/AmazonConfig.php:118
|
550 |
+
msgid "Категория для поиска"
|
551 |
+
msgstr ""
|
552 |
+
|
553 |
+
#: application/modules/Amazon/AmazonConfig.php:119
|
554 |
+
msgid "Список категорий для US Amazon. Для локальных филиалов некоторые категории могут быть недоступны. Если Вы не зададите категорию для поиска, то никакие другие опции фильтрации кроме поиска по ключевому слову (например, минимальная цена или сортировка) работать не будут."
|
555 |
+
msgstr ""
|
556 |
+
|
557 |
+
#: application/modules/Amazon/AmazonConfig.php:126
|
558 |
+
msgid "Порядок сортировки"
|
559 |
+
msgstr ""
|
560 |
+
|
561 |
+
#: application/modules/Amazon/AmazonConfig.php:127
|
562 |
+
msgid "Варианты сортировки зависят от locale и выбранной категории. Список доступных значений можно найти <a href=\"http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/index.html?APPNDX_SortValuesArticle.html\">здесь</a>."
|
563 |
+
msgstr ""
|
564 |
+
|
565 |
+
#: application/modules/Amazon/AmazonConfig.php:136
|
566 |
+
msgid "Brouse node"
|
567 |
+
msgstr ""
|
568 |
+
|
569 |
+
#: application/modules/Amazon/AmazonConfig.php:137
|
570 |
+
msgid "Целочисленное ID \"узла\" на amazon. Поиск будет произведен только в этом \"узле\"."
|
571 |
+
msgstr ""
|
572 |
+
|
573 |
+
#: application/modules/Amazon/AmazonConfig.php:146
|
574 |
+
msgid "Поиск в названии"
|
575 |
+
msgstr ""
|
576 |
+
|
577 |
+
#: application/modules/Amazon/AmazonConfig.php:147
|
578 |
+
msgid "Поиск будет произведет только по названиям товаров."
|
579 |
+
msgstr ""
|
580 |
+
|
581 |
+
#: application/modules/Amazon/AmazonConfig.php:153
|
582 |
+
msgid "Только Amazon"
|
583 |
+
msgstr ""
|
584 |
+
|
585 |
+
#: application/modules/Amazon/AmazonConfig.php:154
|
586 |
+
msgid "Выбрать товары, которые продает Amazon. Другие продавцы исключаются из поиска."
|
587 |
+
msgstr ""
|
588 |
+
|
589 |
+
#: application/modules/Amazon/AmazonConfig.php:161
|
590 |
+
msgid "Например, 8.99"
|
591 |
+
msgstr ""
|
592 |
+
|
593 |
+
#: application/modules/Amazon/AmazonConfig.php:171
|
594 |
+
msgid "Например, 98.50"
|
595 |
+
msgstr ""
|
596 |
+
|
597 |
+
#: application/modules/Amazon/AmazonConfig.php:180
|
598 |
+
msgid "Минимальная скидка"
|
599 |
+
msgstr ""
|
600 |
+
|
601 |
+
#: application/modules/Amazon/AmazonConfig.php:181
|
602 |
+
msgid "Выбрать товары со скидкой. Обязательно должна быть задана категория. Обратите внимание, эта опция работает не для всех категорий."
|
603 |
+
msgstr ""
|
604 |
+
|
605 |
+
#: application/modules/Amazon/AmazonConfig.php:184
|
606 |
+
msgid "Неважно"
|
607 |
+
msgstr ""
|
608 |
+
|
609 |
+
#: application/modules/Amazon/AmazonConfig.php:205
|
610 |
+
msgid "Парсить отзывы"
|
611 |
+
msgstr ""
|
612 |
+
|
613 |
+
#: application/modules/Amazon/AmazonConfig.php:206
|
614 |
+
msgid "Парсить отзывы покупателей по товарам. Это замедляет получение данных."
|
615 |
+
msgstr ""
|
616 |
+
|
617 |
+
#: application/modules/Amazon/AmazonConfig.php:212
|
618 |
+
msgid "Отзывы в iframe."
|
619 |
+
msgstr ""
|
620 |
+
|
621 |
+
#: application/modules/Amazon/AmazonConfig.php:213
|
622 |
+
msgid "Показывать отзывы покупателей в iframe с amazon (отключение этой опции, возможно, нарушает правила партнерской программы amazon)."
|
623 |
+
msgstr ""
|
624 |
+
|
625 |
+
#: application/modules/Amazon/AmazonConfig.php:219
|
626 |
+
#: application/modules/Market/MarketConfig.php:122
|
627 |
+
msgid "Обрезать отзывы"
|
628 |
+
msgstr ""
|
629 |
+
|
630 |
+
#: application/modules/Amazon/AmazonConfig.php:220
|
631 |
+
msgid "Количество символов для одного отзыва. 0 - максимально возможная длина текста."
|
632 |
+
msgstr ""
|
633 |
+
|
634 |
+
#: application/modules/Amazon/AmazonConfig.php:230
|
635 |
+
msgid "Товар с отзывами"
|
636 |
+
msgstr ""
|
637 |
+
|
638 |
+
#: application/modules/Amazon/AmazonConfig.php:231
|
639 |
+
msgid "Парсить отзывы только для заданного количества товаров."
|
640 |
+
msgstr ""
|
641 |
+
|
642 |
+
#: application/modules/Amazon/AmazonConfig.php:241
|
643 |
+
msgid "Парсить отписание"
|
644 |
+
msgstr ""
|
645 |
+
|
646 |
+
#: application/modules/Amazon/AmazonConfig.php:242
|
647 |
+
msgid "Парсить описание товаров от продавца."
|
648 |
+
msgstr ""
|
649 |
+
|
650 |
+
#: application/modules/Amazon/AmazonConfig.php:248
|
651 |
+
msgid "Вид описания"
|
652 |
+
msgstr ""
|
653 |
+
|
654 |
+
#: application/modules/Amazon/AmazonConfig.php:252
|
655 |
+
msgid "Как на Amazon"
|
656 |
+
msgstr ""
|
657 |
+
|
658 |
+
#: application/modules/Amazon/AmazonConfig.php:253
|
659 |
+
msgid "Безопасный HTML"
|
660 |
+
msgstr ""
|
661 |
+
|
662 |
+
#: application/modules/Amazon/AmazonConfig.php:254
|
663 |
+
msgid "Только разрешенные теги HTML"
|
664 |
+
msgstr ""
|
665 |
+
|
666 |
+
#: application/modules/Amazon/AmazonConfig.php:255
|
667 |
+
msgid "Только текст"
|
668 |
+
msgstr ""
|
669 |
+
|
670 |
+
#: application/modules/Amazon/AmazonConfig.php:261
|
671 |
+
#: application/modules/Ebay/EbayConfig.php:326
|
672 |
+
msgid "Размер описания"
|
673 |
+
msgstr ""
|
674 |
+
|
675 |
+
#: application/modules/Amazon/AmazonConfig.php:262
|
676 |
+
#: application/modules/Ebay/EbayConfig.php:327
|
677 |
+
msgid "Максимальный размер описания товара. 0 - не обрезать."
|
678 |
+
msgstr ""
|
679 |
+
|
680 |
+
#: application/modules/Amazon/AmazonModule.php:28
|
681 |
+
msgid "Добавляет товары amazon."
|
682 |
+
msgstr ""
|
683 |
+
|
684 |
+
#: application/modules/Amazon/views/search_panel.php:2
|
685 |
+
msgid "Мин. скидка"
|
686 |
+
msgstr ""
|
687 |
+
|
688 |
+
#: application/modules/Amazon/views/search_panel.php:3
|
689 |
+
msgid "5%"
|
690 |
+
msgstr ""
|
691 |
+
|
692 |
+
#: application/modules/Amazon/views/search_panel.php:4
|
693 |
+
msgid "10%"
|
694 |
+
msgstr ""
|
695 |
+
|
696 |
+
#: application/modules/Amazon/views/search_panel.php:5
|
697 |
+
msgid "15%"
|
698 |
+
msgstr ""
|
699 |
+
|
700 |
+
#: application/modules/Amazon/views/search_panel.php:6
|
701 |
+
msgid "20%"
|
702 |
+
msgstr ""
|
703 |
+
|
704 |
+
#: application/modules/Amazon/views/search_panel.php:7
|
705 |
+
msgid "25%"
|
706 |
+
msgstr ""
|
707 |
+
|
708 |
+
#: application/modules/Amazon/views/search_panel.php:8
|
709 |
+
msgid "30%"
|
710 |
+
msgstr ""
|
711 |
+
|
712 |
+
#: application/modules/Amazon/views/search_panel.php:9
|
713 |
+
msgid "35%"
|
714 |
+
msgstr ""
|
715 |
+
|
716 |
+
#: application/modules/Amazon/views/search_panel.php:10
|
717 |
+
msgid "40%"
|
718 |
+
msgstr ""
|
719 |
+
|
720 |
+
#: application/modules/Amazon/views/search_panel.php:11
|
721 |
+
msgid "50%"
|
722 |
+
msgstr ""
|
723 |
+
|
724 |
+
#: application/modules/Amazon/views/search_panel.php:12
|
725 |
+
msgid "60%"
|
726 |
+
msgstr ""
|
727 |
+
|
728 |
+
#: application/modules/Amazon/views/search_panel.php:13
|
729 |
+
msgid "70%"
|
730 |
+
msgstr ""
|
731 |
+
|
732 |
+
#: application/modules/Amazon/views/search_panel.php:14
|
733 |
+
msgid "80%"
|
734 |
+
msgstr ""
|
735 |
+
|
736 |
+
#: application/modules/Amazon/views/search_panel.php:15
|
737 |
+
msgid "90%"
|
738 |
+
msgstr ""
|
739 |
+
|
740 |
+
#: application/modules/BingImages/BingImagesConfig.php:21
|
741 |
+
msgid "Ключ доступа к Bing API. Получить можно <a href=\"https://datamarket.azure.com/account/keys\">здесь</a> (потребуется аккаунт в bing)."
|
742 |
+
msgstr ""
|
743 |
+
|
744 |
+
#: application/modules/BingImages/BingImagesConfig.php:29
|
745 |
+
#: application/modules/Twitter/TwitterConfig.php:29
|
746 |
+
#: application/modules/Twitter/TwitterConfig.php:44
|
747 |
+
#: application/modules/Twitter/TwitterConfig.php:59
|
748 |
+
#: application/modules/Twitter/TwitterConfig.php:74
|
749 |
+
msgid "Поле \"Account Key\" не может быть пустым."
|
750 |
+
msgstr ""
|
751 |
+
|
752 |
+
#: application/modules/BingImages/BingImagesConfig.php:36
|
753 |
+
msgid "Количество результатов для одного запроса."
|
754 |
+
msgstr ""
|
755 |
+
|
756 |
+
#: application/modules/BingImages/BingImagesConfig.php:45
|
757 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:44
|
758 |
+
msgid "Поле \"Результатов\" не может быть больше 8."
|
759 |
+
msgstr ""
|
760 |
+
|
761 |
+
#: application/modules/BingImages/BingImagesConfig.php:51
|
762 |
+
msgid "Фильтр"
|
763 |
+
msgstr ""
|
764 |
+
|
765 |
+
#: application/modules/BingImages/BingImagesConfig.php:55
|
766 |
+
#: application/modules/BingImages/views/search_panel.php:2
|
767 |
+
msgid "Без фильтра"
|
768 |
+
msgstr ""
|
769 |
+
|
770 |
+
#: application/modules/BingImages/BingImagesConfig.php:56
|
771 |
+
#: application/modules/BingImages/views/search_panel.php:3
|
772 |
+
msgid "Маленькие изображения"
|
773 |
+
msgstr ""
|
774 |
+
|
775 |
+
#: application/modules/BingImages/BingImagesConfig.php:57
|
776 |
+
#: application/modules/BingImages/views/search_panel.php:4
|
777 |
+
msgid "Средние изображения"
|
778 |
+
msgstr ""
|
779 |
+
|
780 |
+
#: application/modules/BingImages/BingImagesConfig.php:58
|
781 |
+
#: application/modules/BingImages/views/search_panel.php:5
|
782 |
+
msgid "Большие изображения"
|
783 |
+
msgstr ""
|
784 |
+
|
785 |
+
#: application/modules/BingImages/BingImagesConfig.php:59
|
786 |
+
#: application/modules/BingImages/views/search_panel.php:6
|
787 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:56
|
788 |
+
msgid "Цветные"
|
789 |
+
msgstr ""
|
790 |
+
|
791 |
+
#: application/modules/BingImages/BingImagesConfig.php:60
|
792 |
+
#: application/modules/BingImages/views/search_panel.php:7
|
793 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:55
|
794 |
+
msgid "Черно-белые"
|
795 |
+
msgstr ""
|
796 |
+
|
797 |
+
#: application/modules/BingImages/BingImagesConfig.php:61
|
798 |
+
#: application/modules/BingImages/views/search_panel.php:8
|
799 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:104
|
800 |
+
msgid "Фотографии"
|
801 |
+
msgstr ""
|
802 |
+
|
803 |
+
#: application/modules/BingImages/BingImagesConfig.php:62
|
804 |
+
#: application/modules/BingImages/views/search_panel.php:9
|
805 |
+
msgid "Графика и иллюстрации"
|
806 |
+
msgstr ""
|
807 |
+
|
808 |
+
#: application/modules/BingImages/BingImagesConfig.php:63
|
809 |
+
#: application/modules/BingImages/views/search_panel.php:10
|
810 |
+
msgid "Содержит лица"
|
811 |
+
msgstr ""
|
812 |
+
|
813 |
+
#: application/modules/BingImages/BingImagesConfig.php:64
|
814 |
+
#: application/modules/BingImages/views/search_panel.php:11
|
815 |
+
msgid "Портреты"
|
816 |
+
msgstr ""
|
817 |
+
|
818 |
+
#: application/modules/BingImages/BingImagesConfig.php:65
|
819 |
+
#: application/modules/BingImages/views/search_panel.php:12
|
820 |
+
msgid "Не содержит лиц"
|
821 |
+
msgstr ""
|
822 |
+
|
823 |
+
#: application/modules/BingImages/BingImagesConfig.php:79
|
824 |
+
msgid "Ограничить поиск только этим доменом. Например, задайте: wikimedia.org"
|
825 |
+
msgstr ""
|
826 |
+
|
827 |
+
#: application/modules/BingImages/templates/data_simple.php:5
|
828 |
+
msgid "Simple"
|
829 |
+
msgstr ""
|
830 |
+
|
831 |
+
#: application/modules/BingImages/templates/data_simple.php:18
|
832 |
+
#: application/modules/GoogleImages/templates/data_simple.php:20
|
833 |
+
msgid "Source: %s"
|
834 |
+
msgstr ""
|
835 |
+
|
836 |
+
#: application/modules/Ebay/EbayConfig.php:22
|
837 |
+
msgid "Ваш ID для доступа к eBay API. Поучить ключ вы можете в <a href=\"http://developer.ebay.com/join\">eBay Developers Program</a>."
|
838 |
+
msgstr ""
|
839 |
+
|
840 |
+
#: application/modules/Ebay/EbayConfig.php:30
|
841 |
+
msgid "Поле \"Application ID (AppID)\" не может быть пустым."
|
842 |
+
msgstr ""
|
843 |
+
|
844 |
+
#: application/modules/Ebay/EbayConfig.php:37
|
845 |
+
msgid "Это связь с партнерской программой EPN. Campaign ID валидный для всех программ, в которые вы были приняты на EPN. Если не задано - комиссия за продажи начисляться не будет."
|
846 |
+
msgstr ""
|
847 |
+
|
848 |
+
#: application/modules/Ebay/EbayConfig.php:46
|
849 |
+
msgid "EPN Custom ID (канал)"
|
850 |
+
msgstr ""
|
851 |
+
|
852 |
+
#: application/modules/Ebay/EbayConfig.php:47
|
853 |
+
msgid "Любое слово, например, имя домена. Custom ID будет включен в отчеты по продажам на EPN, таким образом, вы сможете дополнительно отслеживать трафик."
|
854 |
+
msgstr ""
|
855 |
+
|
856 |
+
#: application/modules/Ebay/EbayConfig.php:58
|
857 |
+
msgid "Skimlinks Site ID"
|
858 |
+
msgstr ""
|
859 |
+
|
860 |
+
#: application/modules/Ebay/EbayConfig.php:59
|
861 |
+
msgid "Указывайте, если хотите слать трафик через <a href=\"http://www.keywordrush.com/go/skimlinks\">Skimlinks</a>. ID для соотвествущего домена можно найти <a href=\"https://hub.skimlinks.com/account\">здесь</a>."
|
862 |
+
msgstr ""
|
863 |
+
|
864 |
+
#: application/modules/Ebay/EbayConfig.php:69
|
865 |
+
msgid "Viglink ID"
|
866 |
+
msgstr ""
|
867 |
+
|
868 |
+
#: application/modules/Ebay/EbayConfig.php:70
|
869 |
+
msgid "Указывайте, если хотите слать трафик через <a href=\"http://www.keywordrush.com/go/viglink\">Viglink</a>. Ваш ID можно найти <a href=\"http://www.viglink.com/install\">здесь</a>, он одинаковый для всех доменов."
|
870 |
+
msgstr ""
|
871 |
+
|
872 |
+
#: application/modules/Ebay/EbayConfig.php:80
|
873 |
+
msgid "Локальный сайт eBay. Для каждого локального филиала необходима отдельная регистрация в соответствующей партнерской программе."
|
874 |
+
msgstr ""
|
875 |
+
|
876 |
+
#: application/modules/Ebay/EbayConfig.php:97
|
877 |
+
msgid "Поле \"Результатов\" не может быть больше 100."
|
878 |
+
msgstr ""
|
879 |
+
|
880 |
+
#: application/modules/Ebay/EbayConfig.php:130
|
881 |
+
msgid "Время завершения"
|
882 |
+
msgstr ""
|
883 |
+
|
884 |
+
#: application/modules/Ebay/EbayConfig.php:131
|
885 |
+
msgid "Срок жизни лотов в секундах. Будут выбраны только лоты, которые закроются не позже указанного времени."
|
886 |
+
msgstr ""
|
887 |
+
|
888 |
+
#: application/modules/Ebay/EbayConfig.php:140
|
889 |
+
msgid "Категориия"
|
890 |
+
msgstr ""
|
891 |
+
|
892 |
+
#: application/modules/Ebay/EbayConfig.php:141
|
893 |
+
msgid "ID категории для поиска. ID категорий можно найти в URL категорий на <a href=\"http://www.ebay.com/sch/allcategories/all-categories\">этой странице</a>. Можно задать до трех категорий через запятую, например, \"2195,2218,20094\"."
|
894 |
+
msgstr ""
|
895 |
+
|
896 |
+
#: application/modules/Ebay/EbayConfig.php:150
|
897 |
+
msgid "Искать в описании"
|
898 |
+
msgstr ""
|
899 |
+
|
900 |
+
#: application/modules/Ebay/EbayConfig.php:151
|
901 |
+
msgid "Включить поиск по описание товара в дополнение к названию товара. Это займет больше времени, чем поиск только по названию."
|
902 |
+
msgstr ""
|
903 |
+
|
904 |
+
#: application/modules/Ebay/EbayConfig.php:157
|
905 |
+
msgid "Логика поиска"
|
906 |
+
msgstr ""
|
907 |
+
|
908 |
+
#: application/modules/Ebay/EbayConfig.php:165
|
909 |
+
msgid "Состояние товара"
|
910 |
+
msgstr ""
|
911 |
+
|
912 |
+
#: application/modules/Ebay/EbayConfig.php:173
|
913 |
+
msgid "Исключить категорию"
|
914 |
+
msgstr ""
|
915 |
+
|
916 |
+
#: application/modules/Ebay/EbayConfig.php:174
|
917 |
+
msgid "ID категории, которую необходимо исключить при поиске. ID категорий можно найти в URL категорий на <a href=\"http://www.ebay.com/sch/allcategories/all-categories\">этой странице</a>. Можно задать до 25 категорий через запятую, например, \"2195,2218,20094\"."
|
918 |
+
msgstr ""
|
919 |
+
|
920 |
+
#: application/modules/Ebay/EbayConfig.php:183
|
921 |
+
msgid "Минимальный ретинг продавца"
|
922 |
+
msgstr ""
|
923 |
+
|
924 |
+
#: application/modules/Ebay/EbayConfig.php:191
|
925 |
+
msgid "Best Offer"
|
926 |
+
msgstr ""
|
927 |
+
|
928 |
+
#: application/modules/Ebay/EbayConfig.php:192
|
929 |
+
msgid "Только \"Best Offer\" лоты."
|
930 |
+
msgstr ""
|
931 |
+
|
932 |
+
#: application/modules/Ebay/EbayConfig.php:198
|
933 |
+
msgid "Featured"
|
934 |
+
msgstr ""
|
935 |
+
|
936 |
+
#: application/modules/Ebay/EbayConfig.php:199
|
937 |
+
msgid "Только \"Featured\" лоты."
|
938 |
+
msgstr ""
|
939 |
+
|
940 |
+
#: application/modules/Ebay/EbayConfig.php:205
|
941 |
+
msgid "Free Shipping"
|
942 |
+
msgstr ""
|
943 |
+
|
944 |
+
#: application/modules/Ebay/EbayConfig.php:206
|
945 |
+
msgid "Только лоты с бесплатной доставкой."
|
946 |
+
msgstr ""
|
947 |
+
|
948 |
+
#: application/modules/Ebay/EbayConfig.php:212
|
949 |
+
msgid "Local Pickup"
|
950 |
+
msgstr ""
|
951 |
+
|
952 |
+
#: application/modules/Ebay/EbayConfig.php:213
|
953 |
+
msgid "Только лоты с опцией \"local pickup\"."
|
954 |
+
msgstr ""
|
955 |
+
|
956 |
+
#: application/modules/Ebay/EbayConfig.php:219
|
957 |
+
msgid "Get It Fast"
|
958 |
+
msgstr ""
|
959 |
+
|
960 |
+
#: application/modules/Ebay/EbayConfig.php:220
|
961 |
+
msgid "Только \"Get It Fast\" лоты."
|
962 |
+
msgstr ""
|
963 |
+
|
964 |
+
#: application/modules/Ebay/EbayConfig.php:226
|
965 |
+
msgid "Top-rated seller"
|
966 |
+
msgstr ""
|
967 |
+
|
968 |
+
#: application/modules/Ebay/EbayConfig.php:227
|
969 |
+
msgid "Только товары от \"Top-rated\" продавцов."
|
970 |
+
msgstr ""
|
971 |
+
|
972 |
+
#: application/modules/Ebay/EbayConfig.php:233
|
973 |
+
msgid "Спрятать дубли"
|
974 |
+
msgstr ""
|
975 |
+
|
976 |
+
#: application/modules/Ebay/EbayConfig.php:234
|
977 |
+
msgid "Отфильтровать похожие лоты."
|
978 |
+
msgstr ""
|
979 |
+
|
980 |
+
#: application/modules/Ebay/EbayConfig.php:240
|
981 |
+
msgid "Тип аукциона"
|
982 |
+
msgstr ""
|
983 |
+
|
984 |
+
#: application/modules/Ebay/EbayConfig.php:254
|
985 |
+
msgid "Максимум ставок"
|
986 |
+
msgstr ""
|
987 |
+
|
988 |
+
#: application/modules/Ebay/EbayConfig.php:255
|
989 |
+
msgid "Например, 10"
|
990 |
+
msgstr ""
|
991 |
+
|
992 |
+
#: application/modules/Ebay/EbayConfig.php:264
|
993 |
+
msgid "Минимум ставок"
|
994 |
+
msgstr ""
|
995 |
+
|
996 |
+
#: application/modules/Ebay/EbayConfig.php:265
|
997 |
+
msgid "Например, 3"
|
998 |
+
msgstr ""
|
999 |
+
|
1000 |
+
#: application/modules/Ebay/EbayConfig.php:275
|
1001 |
+
msgid "Например, 300.50"
|
1002 |
+
msgstr ""
|
1003 |
+
|
1004 |
+
#: application/modules/Ebay/EbayConfig.php:285
|
1005 |
+
msgid "Например, 10.98"
|
1006 |
+
msgstr ""
|
1007 |
+
|
1008 |
+
#: application/modules/Ebay/EbayConfig.php:294
|
1009 |
+
msgid "Варианты оплаты"
|
1010 |
+
msgstr ""
|
1011 |
+
|
1012 |
+
#: application/modules/Ebay/EbayConfig.php:319
|
1013 |
+
msgid "Получить описание"
|
1014 |
+
msgstr ""
|
1015 |
+
|
1016 |
+
#: application/modules/Ebay/EbayConfig.php:320
|
1017 |
+
msgid "Получить описание товара. Требует дополнительных запросов к eBay API, это замедляет работу поиска. Описание будет запрошено не более чем для 20 первых товаров за один поиск."
|
1018 |
+
msgstr ""
|
1019 |
+
|
1020 |
+
#: application/modules/Ebay/EbayModule.php:30
|
1021 |
+
msgid "Добавляет товары eBay. Поддерживает различные локальные сайты. Несколько вариантов монетизации трафика."
|
1022 |
+
msgstr ""
|
1023 |
+
|
1024 |
+
#: application/modules/Flickr/FlickrConfig.php:21
|
1025 |
+
msgid "Ключ для использования Flickr API. Получить можно <a href=\"http://www.flickr.com/services/api/misc.api_keys.html\">здесь</a>."
|
1026 |
+
msgstr ""
|
1027 |
+
|
1028 |
+
#: application/modules/Flickr/FlickrConfig.php:36
|
1029 |
+
#: application/modules/Freebase/FreebaseConfig.php:36
|
1030 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:36
|
1031 |
+
#: application/modules/GoogleNews/GoogleNewsConfig.php:21
|
1032 |
+
#: application/modules/Market/MarketConfig.php:49
|
1033 |
+
#: application/modules/Twitter/TwitterConfig.php:81
|
1034 |
+
#: application/modules/VkNews/VkNewsConfig.php:21
|
1035 |
+
#: application/modules/Youtube/YoutubeConfig.php:36
|
1036 |
+
msgid "Количество результатов для одного запроса"
|
1037 |
+
msgstr ""
|
1038 |
+
|
1039 |
+
#: application/modules/Flickr/FlickrConfig.php:50
|
1040 |
+
#: application/modules/Flickr/views/search_panel.php:10
|
1041 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:73
|
1042 |
+
#: application/modules/Youtube/YoutubeConfig.php:52
|
1043 |
+
#: application/modules/Youtube/views/search_panel.php:10
|
1044 |
+
msgid "Релевантность"
|
1045 |
+
msgstr ""
|
1046 |
+
|
1047 |
+
#: application/modules/Flickr/FlickrConfig.php:51
|
1048 |
+
#: application/modules/Flickr/views/search_panel.php:11
|
1049 |
+
msgid "Дата поста"
|
1050 |
+
msgstr ""
|
1051 |
+
|
1052 |
+
#: application/modules/Flickr/FlickrConfig.php:52
|
1053 |
+
#: application/modules/Flickr/views/search_panel.php:12
|
1054 |
+
msgid "Дата съемки"
|
1055 |
+
msgstr ""
|
1056 |
+
|
1057 |
+
#: application/modules/Flickr/FlickrConfig.php:53
|
1058 |
+
#: application/modules/Flickr/views/search_panel.php:13
|
1059 |
+
msgid "Сначала интересные"
|
1060 |
+
msgstr ""
|
1061 |
+
|
1062 |
+
#: application/modules/Flickr/FlickrConfig.php:59
|
1063 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:20
|
1064 |
+
#: application/modules/Youtube/YoutubeConfig.php:60
|
1065 |
+
msgid "Тип лицензии"
|
1066 |
+
msgstr ""
|
1067 |
+
|
1068 |
+
#: application/modules/Flickr/FlickrConfig.php:60
|
1069 |
+
msgid "Многие фотографии на Flickr загружены с лицензией Creative Commons. Подробнее <a href=\"http://www.flickr.com/creativecommons/\">здесь</a>."
|
1070 |
+
msgstr ""
|
1071 |
+
|
1072 |
+
#: application/modules/Flickr/FlickrConfig.php:63
|
1073 |
+
#: application/modules/Flickr/views/search_panel.php:2
|
1074 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:24
|
1075 |
+
#: application/modules/GoogleImages/views/search_panel.php:2
|
1076 |
+
#: application/modules/Youtube/YoutubeConfig.php:64
|
1077 |
+
#: application/modules/Youtube/views/search_panel.php:2
|
1078 |
+
msgid "Любая лицензия"
|
1079 |
+
msgstr ""
|
1080 |
+
|
1081 |
+
#: application/modules/Flickr/FlickrConfig.php:64
|
1082 |
+
#: application/modules/Flickr/views/search_panel.php:3
|
1083 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:25
|
1084 |
+
#: application/modules/GoogleImages/views/search_panel.php:3
|
1085 |
+
msgid "Любая Сreative Сommons"
|
1086 |
+
msgstr ""
|
1087 |
+
|
1088 |
+
#: application/modules/Flickr/FlickrConfig.php:65
|
1089 |
+
#: application/modules/Flickr/views/search_panel.php:4
|
1090 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:26
|
1091 |
+
#: application/modules/GoogleImages/views/search_panel.php:4
|
1092 |
+
msgid "Разрешено коммерческое использование"
|
1093 |
+
msgstr ""
|
1094 |
+
|
1095 |
+
#: application/modules/Flickr/FlickrConfig.php:66
|
1096 |
+
#: application/modules/Flickr/views/search_panel.php:5
|
1097 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:27
|
1098 |
+
#: application/modules/GoogleImages/views/search_panel.php:5
|
1099 |
+
msgid "Разрешено изменение"
|
1100 |
+
msgstr ""
|
1101 |
+
|
1102 |
+
#: application/modules/Flickr/FlickrConfig.php:67
|
1103 |
+
#: application/modules/Flickr/views/search_panel.php:6
|
1104 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:28
|
1105 |
+
#: application/modules/GoogleImages/views/search_panel.php:6
|
1106 |
+
msgid "Коммерческое использование и изменение"
|
1107 |
+
msgstr ""
|
1108 |
+
|
1109 |
+
#: application/modules/Flickr/FlickrConfig.php:73
|
1110 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:84
|
1111 |
+
msgid "Размер"
|
1112 |
+
msgstr ""
|
1113 |
+
|
1114 |
+
#: application/modules/Flickr/FlickrConfig.php:77
|
1115 |
+
msgid "75x75 пикселов"
|
1116 |
+
msgstr ""
|
1117 |
+
|
1118 |
+
#: application/modules/Flickr/FlickrConfig.php:78
|
1119 |
+
msgid "150x150 пикселов"
|
1120 |
+
msgstr ""
|
1121 |
+
|
1122 |
+
#: application/modules/Flickr/FlickrConfig.php:79
|
1123 |
+
msgid "100 пикселов по длинной стороне"
|
1124 |
+
msgstr ""
|
1125 |
+
|
1126 |
+
#: application/modules/Flickr/FlickrConfig.php:80
|
1127 |
+
msgid "240 пикселов по длинной стороне"
|
1128 |
+
msgstr ""
|
1129 |
+
|
1130 |
+
#: application/modules/Flickr/FlickrConfig.php:81
|
1131 |
+
msgid "320 пикселов по длинной стороне"
|
1132 |
+
msgstr ""
|
1133 |
+
|
1134 |
+
#: application/modules/Flickr/FlickrConfig.php:82
|
1135 |
+
msgid "500 пикселов по длинной стороне"
|
1136 |
+
msgstr ""
|
1137 |
+
|
1138 |
+
#: application/modules/Flickr/FlickrConfig.php:83
|
1139 |
+
msgid "640 пикселов по длинной стороне"
|
1140 |
+
msgstr ""
|
1141 |
+
|
1142 |
+
#: application/modules/Flickr/FlickrConfig.php:84
|
1143 |
+
msgid "800 пикселов по длинной стороне"
|
1144 |
+
msgstr ""
|
1145 |
+
|
1146 |
+
#: application/modules/Flickr/FlickrConfig.php:85
|
1147 |
+
msgid "1024 пикселов по длинной стороне"
|
1148 |
+
msgstr ""
|
1149 |
+
|
1150 |
+
#: application/modules/Flickr/FlickrConfig.php:98
|
1151 |
+
#: application/modules/Freebase/FreebaseConfig.php:58
|
1152 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:58
|
1153 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:131
|
1154 |
+
#: application/modules/GoogleNews/GoogleNewsConfig.php:43
|
1155 |
+
#: application/modules/VkNews/VkNewsConfig.php:38
|
1156 |
+
#: application/modules/Youtube/YoutubeConfig.php:72
|
1157 |
+
#: application/modules/Zanox/ZanoxConfig.php:160
|
1158 |
+
msgid "Обрезать описание"
|
1159 |
+
msgstr ""
|
1160 |
+
|
1161 |
+
#: application/modules/Flickr/FlickrConfig.php:99
|
1162 |
+
#: application/modules/Freebase/FreebaseConfig.php:59
|
1163 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:59
|
1164 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:132
|
1165 |
+
#: application/modules/GoogleNews/GoogleNewsConfig.php:44
|
1166 |
+
#: application/modules/VkNews/VkNewsConfig.php:39
|
1167 |
+
#: application/modules/Youtube/YoutubeConfig.php:73
|
1168 |
+
#: application/modules/Zanox/ZanoxConfig.php:161
|
1169 |
+
msgid "Размер описания в символах (0 - не обрезать)"
|
1170 |
+
msgstr ""
|
1171 |
+
|
1172 |
+
#: application/modules/Flickr/FlickrConfig.php:110
|
1173 |
+
msgid "Ограничить поиск только этим пользователем Flickr"
|
1174 |
+
msgstr ""
|
1175 |
+
|
1176 |
+
#: application/modules/Flickr/templates/data_justified_gallery.php:62
|
1177 |
+
msgid "Фото: %s на Flickr"
|
1178 |
+
msgstr ""
|
1179 |
+
|
1180 |
+
#: application/modules/Freebase/FreebaseConfig.php:21
|
1181 |
+
msgid "Ключ для доступа к API. Получить можно в Google <a href=\"http://code.google.com/apis/console\">API консоли</a>."
|
1182 |
+
msgstr ""
|
1183 |
+
|
1184 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:21
|
1185 |
+
#: application/modules/Youtube/YoutubeConfig.php:21
|
1186 |
+
msgid "Ключ для доступа к API. Получить можно в Google <a href=\"http://code.google.com/apis/console\">API консоли</a>"
|
1187 |
+
msgstr ""
|
1188 |
+
|
1189 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:74
|
1190 |
+
msgid "Новизна"
|
1191 |
+
msgstr ""
|
1192 |
+
|
1193 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:80
|
1194 |
+
msgid "Тип издания"
|
1195 |
+
msgstr ""
|
1196 |
+
|
1197 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:84
|
1198 |
+
msgid "Любые"
|
1199 |
+
msgstr ""
|
1200 |
+
|
1201 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:85
|
1202 |
+
msgid "Книги"
|
1203 |
+
msgstr ""
|
1204 |
+
|
1205 |
+
#: application/modules/GoogleBooks/GoogleBooksConfig.php:86
|
1206 |
+
msgid "Журналы"
|
1207 |
+
msgstr ""
|
1208 |
+
|
1209 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:21
|
1210 |
+
msgid "Поиск изображений, которые можно использовать. Подробнее <a href=\"https://support.google.com/websearch/answer/29508\">здесь</a>."
|
1211 |
+
msgstr ""
|
1212 |
+
|
1213 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:35
|
1214 |
+
msgid "Количество результатов для одного запроса. Не может быть больше 8."
|
1215 |
+
msgstr ""
|
1216 |
+
|
1217 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:50
|
1218 |
+
msgid "Цвет"
|
1219 |
+
msgstr ""
|
1220 |
+
|
1221 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:54
|
1222 |
+
msgid "Любого цвета"
|
1223 |
+
msgstr ""
|
1224 |
+
|
1225 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:62
|
1226 |
+
msgid "Преобладание цвета"
|
1227 |
+
msgstr ""
|
1228 |
+
|
1229 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:66
|
1230 |
+
msgid "Любой цвет"
|
1231 |
+
msgstr ""
|
1232 |
+
|
1233 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:67
|
1234 |
+
msgid "Черный"
|
1235 |
+
msgstr ""
|
1236 |
+
|
1237 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:68
|
1238 |
+
msgid "Синий"
|
1239 |
+
msgstr ""
|
1240 |
+
|
1241 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:69
|
1242 |
+
msgid "Коричневый"
|
1243 |
+
msgstr ""
|
1244 |
+
|
1245 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:70
|
1246 |
+
msgid "Серый"
|
1247 |
+
msgstr ""
|
1248 |
+
|
1249 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:71
|
1250 |
+
msgid "Зеленый"
|
1251 |
+
msgstr ""
|
1252 |
+
|
1253 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:72
|
1254 |
+
msgid "Оранжевый"
|
1255 |
+
msgstr ""
|
1256 |
+
|
1257 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:73
|
1258 |
+
msgid "Розовый"
|
1259 |
+
msgstr ""
|
1260 |
+
|
1261 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:74
|
1262 |
+
msgid "Фиолетовый"
|
1263 |
+
msgstr ""
|
1264 |
+
|
1265 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:75
|
1266 |
+
msgid "Красный"
|
1267 |
+
msgstr ""
|
1268 |
+
|
1269 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:76
|
1270 |
+
msgid "Бирюзовый"
|
1271 |
+
msgstr ""
|
1272 |
+
|
1273 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:77
|
1274 |
+
msgid "Белый"
|
1275 |
+
msgstr ""
|
1276 |
+
|
1277 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:78
|
1278 |
+
msgid "Желтый"
|
1279 |
+
msgstr ""
|
1280 |
+
|
1281 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:88
|
1282 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:102
|
1283 |
+
#: application/modules/GoogleImages/views/search_panel.php:11
|
1284 |
+
msgid "Любого размера"
|
1285 |
+
msgstr ""
|
1286 |
+
|
1287 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:89
|
1288 |
+
#: application/modules/GoogleImages/views/search_panel.php:12
|
1289 |
+
msgid "Маленькие"
|
1290 |
+
msgstr ""
|
1291 |
+
|
1292 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:90
|
1293 |
+
#: application/modules/GoogleImages/views/search_panel.php:13
|
1294 |
+
msgid "Средние"
|
1295 |
+
msgstr ""
|
1296 |
+
|
1297 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:91
|
1298 |
+
#: application/modules/GoogleImages/views/search_panel.php:14
|
1299 |
+
msgid "Большие"
|
1300 |
+
msgstr ""
|
1301 |
+
|
1302 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:92
|
1303 |
+
#: application/modules/GoogleImages/views/search_panel.php:15
|
1304 |
+
msgid "Огромные"
|
1305 |
+
msgstr ""
|
1306 |
+
|
1307 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:98
|
1308 |
+
msgid "Тип"
|
1309 |
+
msgstr ""
|
1310 |
+
|
1311 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:103
|
1312 |
+
msgid "Лица"
|
1313 |
+
msgstr ""
|
1314 |
+
|
1315 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:105
|
1316 |
+
msgid "Клип-арт"
|
1317 |
+
msgstr ""
|
1318 |
+
|
1319 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:106
|
1320 |
+
msgid "Ч/б рисунки"
|
1321 |
+
msgstr ""
|
1322 |
+
|
1323 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:112
|
1324 |
+
msgid "Безопасный поиск"
|
1325 |
+
msgstr ""
|
1326 |
+
|
1327 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:116
|
1328 |
+
msgid "Включен"
|
1329 |
+
msgstr ""
|
1330 |
+
|
1331 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:117
|
1332 |
+
msgid "Модерация"
|
1333 |
+
msgstr ""
|
1334 |
+
|
1335 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:118
|
1336 |
+
msgid "Отключен"
|
1337 |
+
msgstr ""
|
1338 |
+
|
1339 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:143
|
1340 |
+
msgid "Ограничить поиск только этим доменом. Например, задайте: photobucket.com"
|
1341 |
+
msgstr ""
|
1342 |
+
|
1343 |
+
#: application/modules/Market/MarketConfig.php:21
|
1344 |
+
msgid "Ключ для доступа к Яндекс Маркет API. Отправить запрос на получение можно <a href=\"http://feedback2.yandex.ru/api-market-content/key/\">здесь</a>."
|
1345 |
+
msgstr ""
|
1346 |
+
|
1347 |
+
#: application/modules/Market/MarketConfig.php:35
|
1348 |
+
#: application/modules/Zanox/ZanoxConfig.php:90
|
1349 |
+
msgid "Регион"
|
1350 |
+
msgstr ""
|
1351 |
+
|
1352 |
+
#: application/modules/Market/MarketConfig.php:39
|
1353 |
+
msgid "Россия"
|
1354 |
+
msgstr ""
|
1355 |
+
|
1356 |
+
#: application/modules/Market/MarketConfig.php:40
|
1357 |
+
msgid "Украина"
|
1358 |
+
msgstr ""
|
1359 |
+
|
1360 |
+
#: application/modules/Market/MarketConfig.php:41
|
1361 |
+
msgid "Казахстан"
|
1362 |
+
msgstr ""
|
1363 |
+
|
1364 |
+
#: application/modules/Market/MarketConfig.php:42
|
1365 |
+
msgid "Беларусь"
|
1366 |
+
msgstr ""
|
1367 |
+
|
1368 |
+
#: application/modules/Market/MarketConfig.php:64
|
1369 |
+
msgid "Предложения"
|
1370 |
+
msgstr ""
|
1371 |
+
|
1372 |
+
#: application/modules/Market/MarketConfig.php:65
|
1373 |
+
msgid "Получить список предложений на модель."
|
1374 |
+
msgstr ""
|
1375 |
+
|
1376 |
+
#: application/modules/Market/MarketConfig.php:71
|
1377 |
+
msgid "Количество предложений"
|
1378 |
+
msgstr ""
|
1379 |
+
|
1380 |
+
#: application/modules/Market/MarketConfig.php:81
|
1381 |
+
msgid "Поле \"Количество предложений\" не может быть больше 30."
|
1382 |
+
msgstr ""
|
1383 |
+
|
1384 |
+
#: application/modules/Market/MarketConfig.php:87
|
1385 |
+
msgid "Отзывы"
|
1386 |
+
msgstr ""
|
1387 |
+
|
1388 |
+
#: application/modules/Market/MarketConfig.php:88
|
1389 |
+
msgid "Получить отзывы о модели."
|
1390 |
+
msgstr ""
|
1391 |
+
|
1392 |
+
#: application/modules/Market/MarketConfig.php:94
|
1393 |
+
msgid "Количество отзывов"
|
1394 |
+
msgstr ""
|
1395 |
+
|
1396 |
+
#: application/modules/Market/MarketConfig.php:104
|
1397 |
+
msgid "Поле \"Количество отзывов\" не может быть больше 30."
|
1398 |
+
msgstr ""
|
1399 |
+
|
1400 |
+
#: application/modules/Market/MarketConfig.php:110
|
1401 |
+
msgid "Сортировка отзывов"
|
1402 |
+
msgstr ""
|
1403 |
+
|
1404 |
+
#: application/modules/Market/MarketConfig.php:114
|
1405 |
+
msgid "Сортировка по оценке пользователем модели"
|
1406 |
+
msgstr ""
|
1407 |
+
|
1408 |
+
#: application/modules/Market/MarketConfig.php:115
|
1409 |
+
msgid "Сортировка по дате написания отзыва"
|
1410 |
+
msgstr ""
|
1411 |
+
|
1412 |
+
#: application/modules/Market/MarketConfig.php:116
|
1413 |
+
msgid "Сортировка по полезности отзыва"
|
1414 |
+
msgstr ""
|
1415 |
+
|
1416 |
+
#: application/modules/Market/MarketConfig.php:123
|
1417 |
+
msgid "Размер отзывов в символах (0 - не обрезать)"
|
1418 |
+
msgstr ""
|
1419 |
+
|
1420 |
+
#: application/modules/Market/MarketModule.php:28
|
1421 |
+
msgid "Добавляет товары из русскоязычного каталога Яндекс.Маркет"
|
1422 |
+
msgstr ""
|
1423 |
+
|
1424 |
+
#: application/modules/Market/templates/data_item.php:130
|
1425 |
+
msgid "All reviews on Yandex.Market"
|
1426 |
+
msgstr ""
|
1427 |
+
|
1428 |
+
#: application/modules/Twitter/TwitterConfig.php:21
|
1429 |
+
#: application/modules/Twitter/TwitterConfig.php:36
|
1430 |
+
#: application/modules/Twitter/TwitterConfig.php:51
|
1431 |
+
#: application/modules/Twitter/TwitterConfig.php:66
|
1432 |
+
msgid "Получить можно <a href=\"https://dev.twitter.com/apps/\">здесь</a>."
|
1433 |
+
msgstr ""
|
1434 |
+
|
1435 |
+
#: application/modules/Twitter/TwitterConfig.php:100
|
1436 |
+
#: application/modules/Twitter/views/search_panel.php:2
|
1437 |
+
msgid "Новые"
|
1438 |
+
msgstr ""
|
1439 |
+
|
1440 |
+
#: application/modules/Twitter/TwitterConfig.php:101
|
1441 |
+
#: application/modules/Twitter/views/search_panel.php:3
|
1442 |
+
msgid "Популярные"
|
1443 |
+
msgstr ""
|
1444 |
+
|
1445 |
+
#: application/modules/Twitter/TwitterConfig.php:102
|
1446 |
+
#: application/modules/Twitter/views/search_panel.php:4
|
1447 |
+
msgid "Микс"
|
1448 |
+
msgstr ""
|
1449 |
+
|
1450 |
+
#: application/modules/VkNews/VkNewsModule.php:25
|
1451 |
+
msgid "Добавляет новости из русскоязычной социальной сети vk.com"
|
1452 |
+
msgstr ""
|
1453 |
+
|
1454 |
+
#: application/modules/Youtube/YoutubeConfig.php:50
|
1455 |
+
#: application/modules/Youtube/views/search_panel.php:8
|
1456 |
+
msgid "Дата"
|
1457 |
+
msgstr ""
|
1458 |
+
|
1459 |
+
#: application/modules/Youtube/YoutubeConfig.php:51
|
1460 |
+
#: application/modules/Youtube/views/search_panel.php:9
|
1461 |
+
msgid "Рейтинг"
|
1462 |
+
msgstr ""
|
1463 |
+
|
1464 |
+
#: application/modules/Youtube/YoutubeConfig.php:54
|
1465 |
+
#: application/modules/Youtube/views/search_panel.php:12
|
1466 |
+
msgid "Просмотры"
|
1467 |
+
msgstr ""
|
1468 |
+
|
1469 |
+
#: application/modules/Youtube/YoutubeConfig.php:61
|
1470 |
+
msgid "Многие видео на Youtube загружены с лицензией Creative Commons. <a href=\"http://www.google.com/support/youtube/bin/answer.py?answer=1284989\">Узнать больше</a>."
|
1471 |
+
msgstr ""
|
1472 |
+
|
1473 |
+
#: application/modules/Youtube/YoutubeConfig.php:65
|
1474 |
+
msgid "Сreative Сommons лицензия"
|
1475 |
+
msgstr ""
|
1476 |
+
|
1477 |
+
#: application/modules/Youtube/YoutubeConfig.php:66
|
1478 |
+
#: application/modules/Youtube/views/search_panel.php:4
|
1479 |
+
msgid "Стандартная лицензия"
|
1480 |
+
msgstr ""
|
1481 |
+
|
1482 |
+
#: application/modules/Youtube/views/search_panel.php:3
|
1483 |
+
msgid "Сreative Сommons"
|
1484 |
+
msgstr ""
|
1485 |
+
|
1486 |
+
#: application/modules/Zanox/ZanoxConfig.php:22
|
1487 |
+
msgid "Специальный ключ для доступа к Zanox API, а также ваша связь с партнерской программой."
|
1488 |
+
msgstr ""
|
1489 |
+
|
1490 |
+
#: application/modules/Zanox/ZanoxConfig.php:30
|
1491 |
+
msgid "Поле \"Connect ID\" не может быть пустым."
|
1492 |
+
msgstr ""
|
1493 |
+
|
1494 |
+
#: application/modules/Zanox/ZanoxConfig.php:56
|
1495 |
+
#: application/modules/Zanox/ZanoxConfig.php:72
|
1496 |
+
msgid "Поле \"Результатов\" не может быть больше 50."
|
1497 |
+
msgstr ""
|
1498 |
+
|
1499 |
+
#: application/modules/Zanox/ZanoxConfig.php:78
|
1500 |
+
msgid "Тип поиска"
|
1501 |
+
msgstr ""
|
1502 |
+
|
1503 |
+
#: application/modules/Zanox/ZanoxConfig.php:79
|
1504 |
+
msgid "\"Автоматически\" означает, что тип поиска будет выбран в зависимости от длины поисковой фразы."
|
1505 |
+
msgstr ""
|
1506 |
+
|
1507 |
+
#: application/modules/Zanox/ZanoxConfig.php:82
|
1508 |
+
msgid "Автоматически"
|
1509 |
+
msgstr ""
|
1510 |
+
|
1511 |
+
#: application/modules/Zanox/ZanoxConfig.php:83
|
1512 |
+
msgid "Фраза"
|
1513 |
+
msgstr ""
|
1514 |
+
|
1515 |
+
#: application/modules/Zanox/ZanoxConfig.php:84
|
1516 |
+
msgid "Контекстный"
|
1517 |
+
msgstr ""
|
1518 |
+
|
1519 |
+
#: application/modules/Zanox/ZanoxConfig.php:91
|
1520 |
+
msgid "Ограничить результаты поиска выбранным регионом."
|
1521 |
+
msgstr ""
|
1522 |
+
|
1523 |
+
#: application/modules/Zanox/ZanoxConfig.php:94
|
1524 |
+
msgid "Любой регион"
|
1525 |
+
msgstr ""
|
1526 |
+
|
1527 |
+
#: application/modules/Zanox/ZanoxConfig.php:121
|
1528 |
+
msgid "ID программы"
|
1529 |
+
msgstr ""
|
1530 |
+
|
1531 |
+
#: application/modules/Zanox/ZanoxConfig.php:122
|
1532 |
+
msgid "Ограничить результаты поиска конкретной программой. Вы можете указать несколько ID через запятую. Например: \"1234\", \"1234,5678,9123\". Если не указано, поиск будет произведен по всем вашим подключенным программам."
|
1533 |
+
msgstr ""
|
1534 |
+
|
1535 |
+
#: application/modules/Zanox/ZanoxConfig.php:142
|
1536 |
+
msgid "Партнерство"
|
1537 |
+
msgstr ""
|
1538 |
+
|
1539 |
+
#: application/modules/Zanox/ZanoxConfig.php:143
|
1540 |
+
msgid "Если выбрано \"Все\", партнерские ссылки не будут включены в результат. Используйте только для оценки доступных товаров."
|
1541 |
+
msgstr ""
|
1542 |
+
|
1543 |
+
#: application/modules/Zanox/ZanoxConfig.php:146
|
1544 |
+
msgid "Все"
|
1545 |
+
msgstr ""
|
1546 |
+
|
1547 |
+
#: application/modules/Zanox/ZanoxConfig.php:147
|
1548 |
+
msgid "Подтвержденные"
|
1549 |
+
msgstr ""
|
1550 |
+
|
1551 |
+
#: application/modules/Zanox/ZanoxModule.php:27
|
1552 |
+
msgid "Добавляет товары партнерской сети zanox.com. Вы должны получить аппрув от каждой программы отдельно."
|
1553 |
+
msgstr ""
|
1554 |
+
#. Plugin Name of the plugin/theme
|
1555 |
+
msgid "Content Egg"
|
1556 |
+
msgstr ""
|
1557 |
+
|
1558 |
+
#. Plugin URI of the plugin/theme
|
1559 |
+
msgid "http://www.keywordrush.com/contentegg"
|
1560 |
+
msgstr ""
|
1561 |
+
|
1562 |
+
#. Description of the plugin/theme
|
1563 |
+
msgid "Plugin for adding additional content for your posts. Let you to earn money from affiliate programs."
|
1564 |
+
msgstr ""
|
1565 |
+
|
1566 |
+
#. Author of the plugin/theme
|
1567 |
+
msgid "keywordrush.com"
|
1568 |
+
msgstr ""
|
1569 |
+
|
1570 |
+
#. Author URI of the plugin/theme
|
1571 |
+
msgid "http://www.keywordrush.com"
|
1572 |
+
msgstr ""
|
languages/index.php
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
<?php
|
2 |
+
//Nothing to see here
|
languages/tpl/content-egg-tpl-RU.mo
ADDED
Binary file
|
languages/tpl/content-egg-tpl-RU.po
ADDED
@@ -0,0 +1,218 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Copyright (C) 2015 Content Egg
|
2 |
+
# This file is distributed under the same license as the Content Egg package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: Content Egg 1.1.1\n"
|
6 |
+
"Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/content-egg-tpl\n"
|
7 |
+
"POT-Creation-Date: 2015-08-16 09:14:02+00:00\n"
|
8 |
+
"PO-Revision-Date: 2015-08-16 12:23+0200\n"
|
9 |
+
"Last-Translator: \n"
|
10 |
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
11 |
+
"Language: ru\n"
|
12 |
+
"MIME-Version: 1.0\n"
|
13 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
14 |
+
"Content-Transfer-Encoding: 8bit\n"
|
15 |
+
"X-Generator: Poedit 1.6.5\n"
|
16 |
+
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
17 |
+
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
18 |
+
|
19 |
+
#: application/helpers/TemplateHelper.php:26
|
20 |
+
msgid "number_format_decimal_point"
|
21 |
+
msgstr ","
|
22 |
+
|
23 |
+
#: application/helpers/TemplateHelper.php:27
|
24 |
+
msgid "number_format_thousands_sep"
|
25 |
+
msgstr " "
|
26 |
+
|
27 |
+
#: application/helpers/TemplateHelper.php:97
|
28 |
+
msgid "d"
|
29 |
+
msgstr "д"
|
30 |
+
|
31 |
+
#: application/helpers/TemplateHelper.php:99
|
32 |
+
msgid "h"
|
33 |
+
msgstr "ч"
|
34 |
+
|
35 |
+
#: application/helpers/TemplateHelper.php:101
|
36 |
+
#: application/helpers/TemplateHelper.php:103
|
37 |
+
#: application/modules/Ebay/templates/data_item.php:90
|
38 |
+
#: application/modules/Ebay/templates/data_list.php:43
|
39 |
+
msgid "m"
|
40 |
+
msgstr "м"
|
41 |
+
|
42 |
+
#: application/modules/Aliexpress/templates/data_grid.php:6
|
43 |
+
#: application/modules/Amazon/templates/data_grid.php:6
|
44 |
+
#: application/modules/Ebay/templates/data_grid.php:6
|
45 |
+
#: application/modules/Zanox/templates/data_grid.php:6
|
46 |
+
msgid "Grid"
|
47 |
+
msgstr "Сетка"
|
48 |
+
|
49 |
+
#: application/modules/Aliexpress/templates/data_item.php:6
|
50 |
+
#: application/modules/Amazon/templates/data_item.php:6
|
51 |
+
#: application/modules/Ebay/templates/data_item.php:6
|
52 |
+
#: application/modules/Market/templates/data_item.php:5
|
53 |
+
#: application/modules/Zanox/templates/data_item.php:6
|
54 |
+
msgid "Product card"
|
55 |
+
msgstr "Карточка товара"
|
56 |
+
|
57 |
+
#: application/modules/Aliexpress/templates/data_item.php:50
|
58 |
+
#: application/modules/Amazon/templates/data_item.php:61
|
59 |
+
#: application/modules/Ebay/templates/data_item.php:68
|
60 |
+
#: application/modules/Zanox/templates/data_item.php:46
|
61 |
+
msgid "BUY THIS ITEM"
|
62 |
+
msgstr "КУПИТЬ СЕЙЧАС"
|
63 |
+
|
64 |
+
#: application/modules/Aliexpress/templates/data_list.php:6
|
65 |
+
#: application/modules/Amazon/templates/data_list.php:6
|
66 |
+
#: application/modules/Ebay/templates/data_list.php:6
|
67 |
+
#: application/modules/Zanox/templates/data_list.php:6
|
68 |
+
msgid "List"
|
69 |
+
msgstr "Список"
|
70 |
+
|
71 |
+
#: application/modules/Amazon/templates/data_item.php:52
|
72 |
+
#: application/modules/Amazon/templates/data_list.php:44
|
73 |
+
msgid "Too low to display"
|
74 |
+
msgstr "Уточните на сайте"
|
75 |
+
|
76 |
+
#: application/modules/Amazon/templates/data_item.php:57
|
77 |
+
#: application/modules/Amazon/templates/data_list.php:49
|
78 |
+
#: application/modules/Ebay/templates/data_item.php:99
|
79 |
+
#: application/modules/Ebay/templates/data_list.php:70
|
80 |
+
msgid "Free shipping"
|
81 |
+
msgstr "Бесплатная доставка"
|
82 |
+
|
83 |
+
#: application/modules/Amazon/templates/data_item.php:81
|
84 |
+
msgid "Features"
|
85 |
+
msgstr "Характеристики"
|
86 |
+
|
87 |
+
#: application/modules/Amazon/templates/data_item.php:94
|
88 |
+
#: application/modules/Market/templates/data_item.php:101
|
89 |
+
msgid "Customer reviews"
|
90 |
+
msgstr "Отзывы покупателей"
|
91 |
+
|
92 |
+
#: application/modules/BingImages/templates/data_image.php:5
|
93 |
+
#: application/modules/GoogleImages/templates/data_image.php:5
|
94 |
+
msgid "Image"
|
95 |
+
msgstr "Картинка"
|
96 |
+
|
97 |
+
#: application/modules/BingImages/templates/data_justified_gallery.php:7
|
98 |
+
#: application/modules/Flickr/templates/data_justified_gallery.php:7
|
99 |
+
#: application/modules/GoogleImages/templates/data_justified_gallery.php:7
|
100 |
+
msgid "Gallery"
|
101 |
+
msgstr "Галерея"
|
102 |
+
|
103 |
+
#: application/modules/BingImages/templates/data_simple.php:17
|
104 |
+
msgid "Source: %s"
|
105 |
+
msgstr "Источник: %s"
|
106 |
+
|
107 |
+
#: application/modules/Ebay/templates/data_grid.php:51
|
108 |
+
#: application/modules/Ebay/templates/data_item.php:45
|
109 |
+
#: application/modules/Ebay/templates/data_item.php:52
|
110 |
+
#: application/modules/Ebay/templates/data_list.php:63
|
111 |
+
msgid "Buy It Now"
|
112 |
+
msgstr "Buy It Now"
|
113 |
+
|
114 |
+
#: application/modules/Ebay/templates/data_grid.php:53
|
115 |
+
#: application/modules/Ebay/templates/data_item.php:76
|
116 |
+
#: application/modules/Ebay/templates/data_list.php:65
|
117 |
+
msgid "Bids:"
|
118 |
+
msgstr "Ставки"
|
119 |
+
|
120 |
+
#: application/modules/Ebay/templates/data_item.php:54
|
121 |
+
msgid "Current Price"
|
122 |
+
msgstr "Текущая цена"
|
123 |
+
|
124 |
+
#: application/modules/Ebay/templates/data_item.php:68
|
125 |
+
#, fuzzy
|
126 |
+
msgid "VIEW THIS ITEM"
|
127 |
+
msgstr "КУПИТЬ СЕЙЧАС"
|
128 |
+
|
129 |
+
#: application/modules/Ebay/templates/data_item.php:81
|
130 |
+
msgid "Item condition:"
|
131 |
+
msgstr "Состояние"
|
132 |
+
|
133 |
+
#: application/modules/Ebay/templates/data_item.php:89
|
134 |
+
#: application/modules/Ebay/templates/data_list.php:42
|
135 |
+
msgid "Time left:"
|
136 |
+
msgstr "Оставшееся время:"
|
137 |
+
|
138 |
+
#: application/modules/Ebay/templates/data_item.php:94
|
139 |
+
#: application/modules/Ebay/templates/data_list.php:47
|
140 |
+
msgid "Ended:"
|
141 |
+
msgstr "Завершен:"
|
142 |
+
|
143 |
+
#: application/modules/Ebay/templates/data_item.php:103
|
144 |
+
msgid "EEK:"
|
145 |
+
msgstr "EEK:"
|
146 |
+
|
147 |
+
#: application/modules/Flickr/templates/data_simple.php:5
|
148 |
+
#: application/modules/Freebase/templates/data_simple.php:5
|
149 |
+
#: application/modules/GoogleBooks/templates/data_simple.php:5
|
150 |
+
#: application/modules/GoogleImages/templates/data_simple.php:5
|
151 |
+
#: application/modules/Twitter/templates/data_simple.php:5
|
152 |
+
#: application/modules/VkNews/templates/data_simple.php:5
|
153 |
+
#: application/modules/Youtube/templates/data_simple.php:5
|
154 |
+
msgid "Simple"
|
155 |
+
msgstr "Простой"
|
156 |
+
|
157 |
+
#: application/modules/Flickr/templates/data_simple.php:19
|
158 |
+
msgid "Photo %s on Flickr"
|
159 |
+
msgstr "Фото %s на Flickr"
|
160 |
+
|
161 |
+
#: application/modules/Freebase/templates/data_simple.php:27
|
162 |
+
msgid "Source:"
|
163 |
+
msgstr "Источник:"
|
164 |
+
|
165 |
+
#: application/modules/Market/templates/data_item.php:29
|
166 |
+
msgid "Customer reviews:"
|
167 |
+
msgstr "Отзывы покупателей:"
|
168 |
+
|
169 |
+
#: application/modules/Market/templates/data_item.php:35
|
170 |
+
msgid "Average price"
|
171 |
+
msgstr "Средняя цена"
|
172 |
+
|
173 |
+
#: application/modules/Market/templates/data_item.php:46
|
174 |
+
msgid "Data from Yandex.Market"
|
175 |
+
msgstr "Данные Яндекс.Маркет"
|
176 |
+
|
177 |
+
#: application/modules/Market/templates/data_item.php:75
|
178 |
+
msgid "free"
|
179 |
+
msgstr "бесплатно"
|
180 |
+
|
181 |
+
#: application/modules/Market/templates/data_item.php:82
|
182 |
+
msgid "Pickup"
|
183 |
+
msgstr "Самовывоз"
|
184 |
+
|
185 |
+
#: application/modules/Market/templates/data_item.php:86
|
186 |
+
msgid "In stock"
|
187 |
+
msgstr "В наличии"
|
188 |
+
|
189 |
+
#: application/modules/Market/templates/data_item.php:88
|
190 |
+
msgid "Not available"
|
191 |
+
msgstr "Нет в наличии"
|
192 |
+
|
193 |
+
#: application/modules/Market/templates/data_item.php:93
|
194 |
+
msgid "Visit store"
|
195 |
+
msgstr "В магазин"
|
196 |
+
|
197 |
+
#: application/modules/Market/templates/data_item.php:118
|
198 |
+
msgid "Pros:"
|
199 |
+
msgstr "Плюсы:"
|
200 |
+
|
201 |
+
#: application/modules/Market/templates/data_item.php:119
|
202 |
+
msgid "Cons:"
|
203 |
+
msgstr "Минусы:"
|
204 |
+
|
205 |
+
#: application/modules/Market/templates/data_item.php:120
|
206 |
+
msgid "Comment:"
|
207 |
+
msgstr "Комментарий:"
|
208 |
+
|
209 |
+
#: application/modules/Youtube/templates/data_responsive_embed.php:5
|
210 |
+
msgid "Large"
|
211 |
+
msgstr "Широкий"
|
212 |
+
|
213 |
+
#: application/modules/Youtube/templates/data_tile.php:5
|
214 |
+
msgid "Tile"
|
215 |
+
msgstr "Плитка"
|
216 |
+
|
217 |
+
#~ msgid "http://www.keywordrush.com/contentegg"
|
218 |
+
#~ msgstr "http://www.keywordrush.com/contentegg"
|
languages/tpl/content-egg-tpl.pot
ADDED
@@ -0,0 +1,229 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Copyright (C) 2015 Content Egg
|
2 |
+
# This file is distributed under the same license as the Content Egg package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: Content Egg 1.5.2\n"
|
6 |
+
"Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/content-egg-tpl\n"
|
7 |
+
"POT-Creation-Date: 2015-08-26 08:29:30+00:00\n"
|
8 |
+
"MIME-Version: 1.0\n"
|
9 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
+
"Content-Transfer-Encoding: 8bit\n"
|
11 |
+
"PO-Revision-Date: 2015-MO-DA HO:MI+ZONE\n"
|
12 |
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
13 |
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
14 |
+
|
15 |
+
#: application/helpers/TemplateHelper.php:26
|
16 |
+
msgid "number_format_decimal_point"
|
17 |
+
msgstr ""
|
18 |
+
|
19 |
+
#: application/helpers/TemplateHelper.php:27
|
20 |
+
msgid "number_format_thousands_sep"
|
21 |
+
msgstr ""
|
22 |
+
|
23 |
+
#: application/helpers/TemplateHelper.php:97
|
24 |
+
msgid "d"
|
25 |
+
msgstr ""
|
26 |
+
|
27 |
+
#: application/helpers/TemplateHelper.php:99
|
28 |
+
msgid "h"
|
29 |
+
msgstr ""
|
30 |
+
|
31 |
+
#: application/helpers/TemplateHelper.php:101
|
32 |
+
#: application/helpers/TemplateHelper.php:103
|
33 |
+
#: application/modules/Ebay/templates/data_item.php:90
|
34 |
+
#: application/modules/Ebay/templates/data_list.php:43
|
35 |
+
msgid "m"
|
36 |
+
msgstr ""
|
37 |
+
|
38 |
+
#: application/modules/Aliexpress/templates/data_grid.php:6
|
39 |
+
#: application/modules/Amazon/templates/data_grid.php:6
|
40 |
+
#: application/modules/Ebay/templates/data_grid.php:6
|
41 |
+
#: application/modules/Zanox/templates/data_grid.php:6
|
42 |
+
msgid "Grid"
|
43 |
+
msgstr ""
|
44 |
+
|
45 |
+
#: application/modules/Aliexpress/templates/data_item.php:6
|
46 |
+
#: application/modules/Amazon/templates/data_item.php:6
|
47 |
+
#: application/modules/Ebay/templates/data_item.php:6
|
48 |
+
#: application/modules/Market/templates/data_item.php:5
|
49 |
+
#: application/modules/Zanox/templates/data_item.php:6
|
50 |
+
msgid "Product card"
|
51 |
+
msgstr ""
|
52 |
+
|
53 |
+
#: application/modules/Aliexpress/templates/data_item.php:50
|
54 |
+
#: application/modules/Amazon/templates/data_item.php:61
|
55 |
+
#: application/modules/Ebay/templates/data_item.php:68
|
56 |
+
#: application/modules/Zanox/templates/data_item.php:46
|
57 |
+
msgid "BUY THIS ITEM"
|
58 |
+
msgstr ""
|
59 |
+
|
60 |
+
#: application/modules/Aliexpress/templates/data_list.php:6
|
61 |
+
#: application/modules/Amazon/templates/data_list.php:6
|
62 |
+
#: application/modules/Ebay/templates/data_list.php:6
|
63 |
+
#: application/modules/Zanox/templates/data_list.php:6
|
64 |
+
msgid "List"
|
65 |
+
msgstr ""
|
66 |
+
|
67 |
+
#: application/modules/Amazon/templates/data_item.php:52
|
68 |
+
#: application/modules/Amazon/templates/data_list.php:44
|
69 |
+
msgid "Too low to display"
|
70 |
+
msgstr ""
|
71 |
+
|
72 |
+
#: application/modules/Amazon/templates/data_item.php:57
|
73 |
+
#: application/modules/Amazon/templates/data_list.php:49
|
74 |
+
#: application/modules/Ebay/templates/data_item.php:99
|
75 |
+
#: application/modules/Ebay/templates/data_list.php:70
|
76 |
+
msgid "Free shipping"
|
77 |
+
msgstr ""
|
78 |
+
|
79 |
+
#: application/modules/Amazon/templates/data_item.php:81
|
80 |
+
msgid "Features"
|
81 |
+
msgstr ""
|
82 |
+
|
83 |
+
#: application/modules/Amazon/templates/data_item.php:94
|
84 |
+
#: application/modules/Market/templates/data_item.php:104
|
85 |
+
msgid "Customer reviews"
|
86 |
+
msgstr ""
|
87 |
+
|
88 |
+
#: application/modules/BingImages/templates/data_image.php:5
|
89 |
+
#: application/modules/GoogleImages/templates/data_image.php:5
|
90 |
+
msgid "Image"
|
91 |
+
msgstr ""
|
92 |
+
|
93 |
+
#: application/modules/BingImages/templates/data_justified_gallery.php:7
|
94 |
+
#: application/modules/Flickr/templates/data_justified_gallery.php:7
|
95 |
+
#: application/modules/GoogleImages/templates/data_justified_gallery.php:7
|
96 |
+
msgid "Gallery"
|
97 |
+
msgstr ""
|
98 |
+
|
99 |
+
#: application/modules/Ebay/templates/data_grid.php:51
|
100 |
+
#: application/modules/Ebay/templates/data_item.php:45
|
101 |
+
#: application/modules/Ebay/templates/data_item.php:52
|
102 |
+
#: application/modules/Ebay/templates/data_list.php:63
|
103 |
+
msgid "Buy It Now"
|
104 |
+
msgstr ""
|
105 |
+
|
106 |
+
#: application/modules/Ebay/templates/data_grid.php:53
|
107 |
+
#: application/modules/Ebay/templates/data_item.php:76
|
108 |
+
#: application/modules/Ebay/templates/data_list.php:65
|
109 |
+
msgid "Bids:"
|
110 |
+
msgstr ""
|
111 |
+
|
112 |
+
#: application/modules/Ebay/templates/data_item.php:54
|
113 |
+
msgid "Current Price"
|
114 |
+
msgstr ""
|
115 |
+
|
116 |
+
#: application/modules/Ebay/templates/data_item.php:68
|
117 |
+
msgid "VIEW THIS ITEM"
|
118 |
+
msgstr ""
|
119 |
+
|
120 |
+
#: application/modules/Ebay/templates/data_item.php:81
|
121 |
+
msgid "Item condition:"
|
122 |
+
msgstr ""
|
123 |
+
|
124 |
+
#: application/modules/Ebay/templates/data_item.php:89
|
125 |
+
#: application/modules/Ebay/templates/data_list.php:42
|
126 |
+
msgid "Time left:"
|
127 |
+
msgstr ""
|
128 |
+
|
129 |
+
#: application/modules/Ebay/templates/data_item.php:94
|
130 |
+
#: application/modules/Ebay/templates/data_list.php:47
|
131 |
+
msgid "Ended:"
|
132 |
+
msgstr ""
|
133 |
+
|
134 |
+
#: application/modules/Ebay/templates/data_item.php:103
|
135 |
+
msgid "EEK:"
|
136 |
+
msgstr ""
|
137 |
+
|
138 |
+
#: application/modules/Flickr/templates/data_simple.php:5
|
139 |
+
#: application/modules/Freebase/templates/data_simple.php:5
|
140 |
+
#: application/modules/GoogleBooks/templates/data_simple.php:5
|
141 |
+
#: application/modules/GoogleImages/templates/data_simple.php:5
|
142 |
+
#: application/modules/Twitter/templates/data_simple.php:5
|
143 |
+
#: application/modules/VkNews/templates/data_simple.php:5
|
144 |
+
#: application/modules/Youtube/templates/data_simple.php:5
|
145 |
+
msgid "Simple"
|
146 |
+
msgstr ""
|
147 |
+
|
148 |
+
#: application/modules/Flickr/templates/data_simple.php:20
|
149 |
+
msgid "Photo %s on Flickr"
|
150 |
+
msgstr ""
|
151 |
+
|
152 |
+
#: application/modules/Freebase/templates/data_simple.php:27
|
153 |
+
msgid "Source:"
|
154 |
+
msgstr ""
|
155 |
+
|
156 |
+
#: application/modules/GoogleImages/GoogleImagesConfig.php:21
|
157 |
+
msgid "Поиск изображений, которые можно использовать. Подробнее <a href=\"https://support.google.com/websearch/answer/29508\">здесь</a>."
|
158 |
+
msgstr ""
|
159 |
+
|
160 |
+
#: application/modules/Market/templates/data_item.php:32
|
161 |
+
msgid "Customer reviews:"
|
162 |
+
msgstr ""
|
163 |
+
|
164 |
+
#: application/modules/Market/templates/data_item.php:38
|
165 |
+
msgid "Average price"
|
166 |
+
msgstr ""
|
167 |
+
|
168 |
+
#: application/modules/Market/templates/data_item.php:49
|
169 |
+
msgid "Data from Yandex.Market"
|
170 |
+
msgstr ""
|
171 |
+
|
172 |
+
#: application/modules/Market/templates/data_item.php:78
|
173 |
+
msgid "free"
|
174 |
+
msgstr ""
|
175 |
+
|
176 |
+
#: application/modules/Market/templates/data_item.php:85
|
177 |
+
msgid "Pickup"
|
178 |
+
msgstr ""
|
179 |
+
|
180 |
+
#: application/modules/Market/templates/data_item.php:89
|
181 |
+
msgid "In stock"
|
182 |
+
msgstr ""
|
183 |
+
|
184 |
+
#: application/modules/Market/templates/data_item.php:91
|
185 |
+
msgid "Not available"
|
186 |
+
msgstr ""
|
187 |
+
|
188 |
+
#: application/modules/Market/templates/data_item.php:96
|
189 |
+
msgid "Visit store"
|
190 |
+
msgstr ""
|
191 |
+
|
192 |
+
#: application/modules/Market/templates/data_item.php:121
|
193 |
+
msgid "Pros:"
|
194 |
+
msgstr ""
|
195 |
+
|
196 |
+
#: application/modules/Market/templates/data_item.php:122
|
197 |
+
msgid "Cons:"
|
198 |
+
msgstr ""
|
199 |
+
|
200 |
+
#: application/modules/Market/templates/data_item.php:123
|
201 |
+
msgid "Comment:"
|
202 |
+
msgstr ""
|
203 |
+
|
204 |
+
#: application/modules/Youtube/templates/data_responsive_embed.php:5
|
205 |
+
msgid "Large"
|
206 |
+
msgstr ""
|
207 |
+
|
208 |
+
#: application/modules/Youtube/templates/data_tile.php:5
|
209 |
+
msgid "Tile"
|
210 |
+
msgstr ""
|
211 |
+
#. Plugin Name of the plugin/theme
|
212 |
+
msgid "Content Egg"
|
213 |
+
msgstr ""
|
214 |
+
|
215 |
+
#. Plugin URI of the plugin/theme
|
216 |
+
msgid "http://www.keywordrush.com/contentegg"
|
217 |
+
msgstr ""
|
218 |
+
|
219 |
+
#. Description of the plugin/theme
|
220 |
+
msgid "Plugin for adding additional content for your posts. Let you to earn money from affiliate programs."
|
221 |
+
msgstr ""
|
222 |
+
|
223 |
+
#. Author of the plugin/theme
|
224 |
+
msgid "keywordrush.com"
|
225 |
+
msgstr ""
|
226 |
+
|
227 |
+
#. Author URI of the plugin/theme
|
228 |
+
msgid "http://www.keywordrush.com"
|
229 |
+
msgstr ""
|
loader.php
ADDED
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace ContentEgg;
|
4 |
+
|
5 |
+
use ContentEgg\application\vendor\CVarDumper;
|
6 |
+
|
7 |
+
defined('ABSPATH') || die('No direct script access allowed!');
|
8 |
+
|
9 |
+
/**
|
10 |
+
* AutoLoader class file
|
11 |
+
*
|
12 |
+
* @author keywordrush.com <support@keywordrush.com>
|
13 |
+
* @link http://www.keywordrush.com/
|
14 |
+
* @copyright Copyright © 2015 keywordrush.com
|
15 |
+
*/
|
16 |
+
class AutoLoader {
|
17 |
+
|
18 |
+
private static $base_dir;
|
19 |
+
private static $classMap = array(
|
20 |
+
//'ContentEgg\application\ContentEgg' => 'application/ContentEgg.php',
|
21 |
+
);
|
22 |
+
|
23 |
+
public function __construct()
|
24 |
+
{
|
25 |
+
|
26 |
+
self::$base_dir = PLUGIN_PATH;
|
27 |
+
$this->register_auto_loader();
|
28 |
+
}
|
29 |
+
|
30 |
+
public function register_auto_loader()
|
31 |
+
{
|
32 |
+
spl_autoload_register(array($this, 'autoload'));
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Implementations of PSR-4
|
37 |
+
* @link: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md
|
38 |
+
*/
|
39 |
+
public static function autoload($className)
|
40 |
+
{
|
41 |
+
|
42 |
+
$prefix = __NAMESPACE__ . '\\';
|
43 |
+
// does the class use the namespace prefix?
|
44 |
+
$len = strlen($prefix);
|
45 |
+
|
46 |
+
if (strncmp($prefix, $className, $len) !== 0)
|
47 |
+
{
|
48 |
+
// no, move to the next registered autoloader
|
49 |
+
return;
|
50 |
+
}
|
51 |
+
|
52 |
+
// trying map autoloader first
|
53 |
+
if (isset(self::$classMap[$className]))
|
54 |
+
{
|
55 |
+
include(self::$base_dir . self::$classMap[$className]);
|
56 |
+
}
|
57 |
+
|
58 |
+
// get the relative class name
|
59 |
+
$relative_class = substr($className, $len);
|
60 |
+
|
61 |
+
// replace the namespace prefix with the base directory, replace namespace
|
62 |
+
// separators with directory separators in the relative class name, append
|
63 |
+
// with .php
|
64 |
+
$file = self::$base_dir . str_replace('\\', '/', $relative_class) . '.php';
|
65 |
+
|
66 |
+
// if the file exists, require it
|
67 |
+
if (file_exists($file))
|
68 |
+
{
|
69 |
+
require $file;
|
70 |
+
}
|
71 |
+
}
|
72 |
+
|
73 |
+
}
|
74 |
+
|
75 |
+
new AutoLoader();
|
76 |
+
|
77 |
+
function prn($var, $depth = 10, $highlight = true)
|
78 |
+
{
|
79 |
+
echo CVarDumper::dumpAsString($var, $depth, $highlight);
|
80 |
+
echo '<br />';
|
81 |
+
}
|
82 |
+
|
83 |
+
function prnx($var, $depth = 10, $highlight = true)
|
84 |
+
{
|
85 |
+
echo CVarDumper::dumpAsString($var, $depth, $highlight);
|
86 |
+
die('Exit');
|
87 |
+
}
|
readme.txt
ADDED
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
=== Content Egg ===
|
2 |
+
Contributors: keywordrush
|
3 |
+
Tags: content, affiliate, amazon, flickr, youtube, images, wikipedia, freebase, autoblogging, ecommerce, links, shortcode, monetize, search engine optimization, moneymaking, price comparison, google images, timesaving
|
4 |
+
Requires at least: 4.2.2
|
5 |
+
Tested up to: 4.3
|
6 |
+
Stable tag: 1.6.0
|
7 |
+
License: GPLv2 or later
|
8 |
+
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
9 |
+
|
10 |
+
Plugin for adding additional content for your posts. Help you to make better posts and monetize them.
|
11 |
+
|
12 |
+
== Description ==
|
13 |
+
|
14 |
+
Content is a king. This was, is and will be true in all times. Good content posts with relevate images, videos, usefull information always get tons of traffic and easy for monetization. Such posts make your site useful for visitors and increase value in search engines.
|
15 |
+
|
16 |
+
But how much time do you spend to add images, relevant videos, books, news, photos and affiliate products to post? You have to go on youtube, find videos, then on google images, flickr, amazon, twitter, google news, etc. Searching relevant additional content, formatting, adding to post takes too much time for each article.
|
17 |
+
|
18 |
+
Good news, we solved this problem for our projects and we want to offer you the best, all in one instrument for adding additional content from open sources to your posts and best affiliate offers from different affiliate systems to make moneymaking process as easy as possible. All modules have many options to search only the best content. For example, you can enable searching only the best deals from Amazon or only products with definite price.
|
19 |
+
|
20 |
+
> <strong>PRO version</strong><br>
|
21 |
+
>Do you want to get even more? Pro version offers tons of additional modules and extended functions.
|
22 |
+
>
|
23 |
+
>Modules of free version: Amazon, Google images, Youtube, Freebase.
|
24 |
+
>
|
25 |
+
>Additional modules of PRO version: Ebay, Zanox, Aliexpress, Flickr, Bing images, Google books, Google News, Twitter, Vk news, Yandex Market.
|
26 |
+
>
|
27 |
+
>And we don't stop on these modules. All buyers of pro version can suggest us new module.
|
28 |
+
>
|
29 |
+
>Visit us at [www.keywordrush.com/en/contentegg](http://www.keywordrush.com/en/contentegg "Content Egg Pro").
|
30 |
+
|
31 |
+
It's very easy to use - just insert keyword, plugin will search all available content from modules, choose items which you want to insert. That's all. Plugin can insert blocks automatically in the end, begining of post or with shortcodes. So, you can mix content from different modules with default shortcodes of your theme. Also, plugin can store images from modules to your server and even set featured image to your post.
|
32 |
+
|
33 |
+
Of course, plugin can update price and availability in affiliate modules like Amazon, etc. It's a great way to monetize your sites!
|
34 |
+
|
35 |
+
[youtube https://www.youtube.com/watch?v=SdDfdJaVRlg]
|
36 |
+
|
37 |
+
**Features include:**
|
38 |
+
|
39 |
+
* Tons of content: images, videos, news, offers.
|
40 |
+
* Multilanguage: make site on any language.
|
41 |
+
* Easy interface: add all content from post admin page.
|
42 |
+
* Custom output templates.
|
43 |
+
* Works with any theme.
|
44 |
+
* Option to search across content with Creative Common license.
|
45 |
+
* Works through official API.
|
46 |
+
* Auto updating product lists and prices.
|
47 |
+
* Works with wordpress shortcodes.
|
48 |
+
|
49 |
+
= How it works? =
|
50 |
+
|
51 |
+
* You just enter a keyword and click "Search"
|
52 |
+
* Plugin searches and displays the results to you.
|
53 |
+
* Now you can choose what to add to the post and edit the results.
|
54 |
+
* It's very simple and fast: multiple search and add data directly to the post editing page without reloading the page.
|
55 |
+
|
56 |
+
= Multilanguage =
|
57 |
+
|
58 |
+
Most modules of Content Egg plug-in has Multi-language support. This means that you can make websites in different languages.
|
59 |
+
|
60 |
+
= Some great monetizing features =
|
61 |
+
|
62 |
+
* Option to choose 90 day cookie links for Amazon products
|
63 |
+
* Option to search only products with discount (you can set minimal discount)
|
64 |
+
* Creating comparison price list of products
|
65 |
+
* Automatically adds your partner ID to links
|
66 |
+
* Custom templates
|
67 |
+
|
68 |
+
== Installation ==
|
69 |
+
|
70 |
+
**Requirements**
|
71 |
+
|
72 |
+
* PHP 5.3+ (note, Wordpress without plugin needs PHP 5.2.4+).
|
73 |
+
* Wordpress 4.2.2+.
|
74 |
+
|
75 |
+
This section describes how to install the plugin and get it working.
|
76 |
+
|
77 |
+
1. Upload `content-egg` folder to the `/wp-content/plugins/` directory
|
78 |
+
1. Activate the plugin through the 'Plugins' menu in WordPress
|
79 |
+
1. Configure plugin settings
|
80 |
+
1. You can find manual how to configure each module - [Content Egg Manual](http://www.keywordrush.com/manuals/content_egg_manual.en.pdf)
|
81 |
+
|
82 |
+
== Frequently Asked Questions ==
|
83 |
+
|
84 |
+
= How to use plugin for monetization =
|
85 |
+
|
86 |
+
Content Egg has Amazon module. Just insert your API key and you can add different products from Amazon to posts. You can set lifetime for updating price of products. Also, you can create list of best offers and insert key for autoupdating, so, plugin will update list with actual offers from Amazon. PRO version has many other modules, like Ebay, Zanox, Aliexpress and others.
|
87 |
+
|
88 |
+
= Is it possible to use plugin without Amazon module. For example, only for youtube videos? =
|
89 |
+
|
90 |
+
Of course, you can activate only one module if you want.
|
91 |
+
|
92 |
+
= Is it difficult to make templates for the modules? =
|
93 |
+
|
94 |
+
If you can do any Wordpress page templates – you can do also templates for Content Egg. It's just html code with output variables and macros.
|
95 |
+
|
96 |
+
== Screenshots ==
|
97 |
+
|
98 |
+
1. Searching keywords inside post
|
99 |
+
2. Settings of modules
|
100 |
+
3. Amazon product cart output template
|
101 |
+
4. Amazon grid output template
|
102 |
+
5. Output template
|
103 |
+
|
104 |
+
|
105 |
+
== Changelog ==
|
106 |
+
|
107 |
+
= 1.6.0 =
|
108 |
+
* Initial release.
|
res/app/ModuleService.js
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
contentEgg.factory('ModuleService', ['$http', '$timeout', function($http, $timeout) {
|
2 |
+
|
3 |
+
var service = function(module_id) {
|
4 |
+
this.module_id = module_id;
|
5 |
+
this.results = [];
|
6 |
+
this.added = [];
|
7 |
+
this.added_changed = false;
|
8 |
+
this.processing = false;
|
9 |
+
this.loaded = false;
|
10 |
+
this.error = '';
|
11 |
+
};
|
12 |
+
|
13 |
+
service.prototype.find = function(query) {
|
14 |
+
var self = this;
|
15 |
+
|
16 |
+
self.processing = true;
|
17 |
+
|
18 |
+
var params = {
|
19 |
+
'action': 'content-egg-module-api',
|
20 |
+
'module': this.module_id,
|
21 |
+
'query': query,
|
22 |
+
'_contentegg_nonce': contentegg_params.nonce,
|
23 |
+
};
|
24 |
+
|
25 |
+
return $http.get(ajaxurl, {params: params})
|
26 |
+
.success(function(data) {
|
27 |
+
if (!data.error)
|
28 |
+
{
|
29 |
+
self.results = data.results;
|
30 |
+
self.error = '';
|
31 |
+
self.loaded = true;
|
32 |
+
} else {
|
33 |
+
self.error = data.error;
|
34 |
+
}
|
35 |
+
$timeout( function(){ self.processing = false; }, 1000);
|
36 |
+
|
37 |
+
return self.results;
|
38 |
+
})
|
39 |
+
.error(function(error) {
|
40 |
+
self.processing = false;
|
41 |
+
self.error = error;
|
42 |
+
//console.error(module + ' error: ' + error);
|
43 |
+
});
|
44 |
+
};
|
45 |
+
return service;
|
46 |
+
}]);
|
res/app/app.js
ADDED
@@ -0,0 +1,253 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var contentEgg = angular.module('contentEgg', ['ui.bootstrap']);
|
2 |
+
|
3 |
+
|
4 |
+
contentEgg.controller('ContentEggController', function($scope, ModuleService) {
|
5 |
+
|
6 |
+
//$scope.childs = {}
|
7 |
+
$scope.models = {};
|
8 |
+
$scope.query_params = {};
|
9 |
+
$scope.keywords = {};
|
10 |
+
$scope.updateKeywords = {};
|
11 |
+
$scope.activeSearchTabs = {};
|
12 |
+
$scope.activeResultTabs = {};
|
13 |
+
$scope.shortcodes = {};
|
14 |
+
|
15 |
+
$scope.processCounter = 0;
|
16 |
+
$scope.active_modules = contentegg_params.active_modules;
|
17 |
+
angular.forEach($scope.active_modules, function(module_id, key) {
|
18 |
+
$scope.models[module_id] = new ModuleService(module_id);
|
19 |
+
$scope.keywords[module_id] = '';
|
20 |
+
$scope.updateKeywords[module_id] = '';
|
21 |
+
$scope.shortcodes[module_id] = '[content-egg module=' + module_id + ']';
|
22 |
+
|
23 |
+
// init modules options
|
24 |
+
$scope.query_params[module_id] = {};
|
25 |
+
angular.forEach(contentegg_params.modulesOptions[module_id], function(value, option) {
|
26 |
+
$scope.query_params[module_id][option] = value;
|
27 |
+
});
|
28 |
+
|
29 |
+
// init post metadata
|
30 |
+
if (contentegg_params.initData[module_id])
|
31 |
+
{
|
32 |
+
$scope.models[module_id].added = contentegg_params.initData[module_id];
|
33 |
+
$scope.activeSearchTabs[module_id] = false;
|
34 |
+
$scope.activeResultTabs[module_id] = true;
|
35 |
+
}
|
36 |
+
else {
|
37 |
+
$scope.activeSearchTabs[module_id] = true;
|
38 |
+
$scope.activeResultTabs[module_id] = false;
|
39 |
+
}
|
40 |
+
|
41 |
+
// init keywords
|
42 |
+
if (contentegg_params.initKeywords[module_id])
|
43 |
+
{
|
44 |
+
$scope.updateKeywords[module_id] = contentegg_params.initKeywords[module_id];
|
45 |
+
}
|
46 |
+
});
|
47 |
+
|
48 |
+
$scope.find = function(module_id) {
|
49 |
+
if (!$scope.keywords[module_id])
|
50 |
+
return;
|
51 |
+
$scope.processCounter++;
|
52 |
+
$scope.query_params[module_id].keyword = $scope.keywords[module_id];
|
53 |
+
$scope.models[module_id].find($scope.query_params[module_id]).then(function(response) {
|
54 |
+
$scope.processCounter--;
|
55 |
+
});
|
56 |
+
};
|
57 |
+
|
58 |
+
$scope.add = function(result, module_id) {
|
59 |
+
var index = $scope.models[module_id].results.indexOf(result);
|
60 |
+
if ($scope.models[module_id].results[index].added)
|
61 |
+
return;
|
62 |
+
$scope.models[module_id].results[index].added = true;
|
63 |
+
// check for dublicates
|
64 |
+
for (var i = 0, len = $scope.models[module_id].added.length; i < len; i++) {
|
65 |
+
var item = $scope.models[module_id].added[i];
|
66 |
+
if (item['unique_id'] == $scope.models[module_id].results[index]['unique_id'])
|
67 |
+
return;
|
68 |
+
}
|
69 |
+
$scope.models[module_id].results[index].keyword = $scope.keywords[module_id];
|
70 |
+
$scope.models[module_id].added.push($scope.models[module_id].results[index]);
|
71 |
+
$scope.models[module_id].added_changed = true;
|
72 |
+
};
|
73 |
+
|
74 |
+
$scope.addAll = function(module_id) {
|
75 |
+
if (!$scope.models[module_id].results.length)
|
76 |
+
return;
|
77 |
+
angular.forEach($scope.models[module_id].results, function(result, key) {
|
78 |
+
$scope.add(result, module_id);
|
79 |
+
});
|
80 |
+
$scope.activeResultTabs[module_id] = true;
|
81 |
+
};
|
82 |
+
|
83 |
+
$scope.delete = function(data, module_id) {
|
84 |
+
var index = $scope.models[module_id].added.indexOf(data);
|
85 |
+
$scope.models[module_id].added.splice(index, 1);
|
86 |
+
$scope.models[module_id].added_changed = true;
|
87 |
+
};
|
88 |
+
|
89 |
+
$scope.deleteAll = function(module_id) {
|
90 |
+
$scope.models[module_id].added = [];
|
91 |
+
$scope.models[module_id].added_changed = true;
|
92 |
+
$scope.activeSearchTabs[module_id] = true;
|
93 |
+
};
|
94 |
+
|
95 |
+
$scope.global_findAll = function() {
|
96 |
+
if (!$scope.global_keywords)
|
97 |
+
return;
|
98 |
+
angular.forEach($scope.models, function(service, module_id) {
|
99 |
+
$scope.keywords[module_id] = $scope.global_keywords;
|
100 |
+
$scope.activeSearchTabs[module_id] = true;
|
101 |
+
$scope.find(module_id);
|
102 |
+
});
|
103 |
+
};
|
104 |
+
|
105 |
+
$scope.global_addAll = function() {
|
106 |
+
angular.forEach($scope.models, function(service, module_id) {
|
107 |
+
$scope.addAll(module_id);
|
108 |
+
});
|
109 |
+
};
|
110 |
+
|
111 |
+
$scope.global_deleteAll = function() {
|
112 |
+
angular.forEach($scope.models, function(service, module_id) {
|
113 |
+
$scope.deleteAll(module_id);
|
114 |
+
});
|
115 |
+
};
|
116 |
+
|
117 |
+
$scope.global_isSearchResults = function() {
|
118 |
+
for (var i = 0, len = $scope.active_modules.length; i < len; i++) {
|
119 |
+
var module_id = $scope.active_modules[i];
|
120 |
+
if ($scope.models[module_id].results && $scope.models[module_id].results.length)
|
121 |
+
return true;
|
122 |
+
}
|
123 |
+
return false;
|
124 |
+
};
|
125 |
+
|
126 |
+
$scope.global_isAddedResults = function() {
|
127 |
+
for (var i = 0, len = $scope.active_modules.length; i < len; i++) {
|
128 |
+
var module_id = $scope.active_modules[i];
|
129 |
+
if ($scope.models[module_id].added.length)
|
130 |
+
return true;
|
131 |
+
}
|
132 |
+
return false;
|
133 |
+
};
|
134 |
+
|
135 |
+
$scope.getYoutubeUri = function(id) {
|
136 |
+
return 'https://www.youtube.com/embed/' + id;
|
137 |
+
};
|
138 |
+
|
139 |
+
$scope.setUpdateKeyword = function(module_id) {
|
140 |
+
$scope.updateKeywords[module_id] = $scope.keywords[module_id];
|
141 |
+
$scope.activeResultTabs[module_id] = true;
|
142 |
+
};
|
143 |
+
|
144 |
+
$scope.buildShortcode = function(module_id, template) {
|
145 |
+
var shortcode = '[content-egg module=' + module_id;
|
146 |
+
if (template)
|
147 |
+
shortcode += ' template=' + template;
|
148 |
+
shortcode += ']';
|
149 |
+
$scope.shortcodes[module_id] = shortcode;
|
150 |
+
};
|
151 |
+
|
152 |
+
});
|
153 |
+
|
154 |
+
contentEgg.config(function($sceDelegateProvider) {
|
155 |
+
$sceDelegateProvider.resourceUrlWhitelist([
|
156 |
+
'self',
|
157 |
+
'https://www.youtube.com/**'
|
158 |
+
]);
|
159 |
+
});
|
160 |
+
|
161 |
+
contentEgg.directive('onEnter', function() {
|
162 |
+
|
163 |
+
var linkFn = function(scope, element, attrs) {
|
164 |
+
element.bind("keypress", function(event) {
|
165 |
+
if (event.which === 13) {
|
166 |
+
scope.$apply(function() {
|
167 |
+
scope.$eval(attrs.onEnter);
|
168 |
+
});
|
169 |
+
event.preventDefault();
|
170 |
+
}
|
171 |
+
});
|
172 |
+
};
|
173 |
+
|
174 |
+
return {
|
175 |
+
link: linkFn
|
176 |
+
};
|
177 |
+
});
|
178 |
+
|
179 |
+
contentEgg.directive('imageloaded', [
|
180 |
+
function() {
|
181 |
+
|
182 |
+
'use strict';
|
183 |
+
|
184 |
+
return {
|
185 |
+
restrict: 'A',
|
186 |
+
link: function(scope, element, attrs) {
|
187 |
+
var cssClass = attrs.loadedclass;
|
188 |
+
|
189 |
+
element.bind('load', function(e) {
|
190 |
+
angular.element(element).addClass(cssClass);
|
191 |
+
});
|
192 |
+
}
|
193 |
+
}
|
194 |
+
}
|
195 |
+
]);
|
196 |
+
|
197 |
+
contentEgg.directive('justifiedGallery', ['$timeout', function($timeout) {
|
198 |
+
return {
|
199 |
+
restrict: 'A',
|
200 |
+
link: function(scope, el, attrs) {
|
201 |
+
scope.$watch('$last', function(n, o) {
|
202 |
+
if (n) {
|
203 |
+
$timeout(function() {
|
204 |
+
angular.element(el).justifiedGallery(scope.$eval(attrs.justifiedGallery)).on('jg.complete', function(e) {
|
205 |
+
//alert('on complete');
|
206 |
+
});
|
207 |
+
scope.$last = false;
|
208 |
+
});
|
209 |
+
}
|
210 |
+
});
|
211 |
+
}
|
212 |
+
};
|
213 |
+
}]);
|
214 |
+
|
215 |
+
contentEgg.directive('repeatDone', [function() {
|
216 |
+
return {
|
217 |
+
restrict: 'A',
|
218 |
+
link: function(scope, element, iAttrs) {
|
219 |
+
var parentScope = element.parent().scope();
|
220 |
+
if (scope.$last) {
|
221 |
+
parentScope.$last = true;
|
222 |
+
}
|
223 |
+
}
|
224 |
+
};
|
225 |
+
}]);
|
226 |
+
|
227 |
+
contentEgg.directive('ngConfirmClick', function() {
|
228 |
+
return {
|
229 |
+
priority: -1,
|
230 |
+
restrict: 'A',
|
231 |
+
link: function(scope, element, attrs) {
|
232 |
+
element.bind('click', function(e) {
|
233 |
+
var message = attrs.ngConfirmClick;
|
234 |
+
if (message && !confirm(message)) {
|
235 |
+
e.stopImmediatePropagation();
|
236 |
+
e.preventDefault();
|
237 |
+
}
|
238 |
+
});
|
239 |
+
}
|
240 |
+
};
|
241 |
+
});
|
242 |
+
|
243 |
+
contentEgg.directive('selectOnClick', function() {
|
244 |
+
return {
|
245 |
+
restrict: 'A',
|
246 |
+
link: function(scope, element, attrs) {
|
247 |
+
element.on('click', function() {
|
248 |
+
this.select();
|
249 |
+
});
|
250 |
+
}
|
251 |
+
};
|
252 |
+
});
|
253 |
+
|
res/app/vendor/angular-ui-bootstrap/ui-bootstrap-tpls-0.13.3.min.js
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* angular-ui-bootstrap
|
3 |
+
* http://angular-ui.github.io/bootstrap/
|
4 |
+
|
5 |
+
* Version: 0.13.3 - 2015-08-09
|
6 |
+
* License: MIT
|
7 |
+
*/
|
8 |
+
angular.module("ui.bootstrap",["ui.bootstrap.tpls","ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.bindHtml","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.position","ui.bootstrap.datepicker","ui.bootstrap.dropdown","ui.bootstrap.modal","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.transition","ui.bootstrap.typeahead"]),angular.module("ui.bootstrap.tpls",["template/accordion/accordion-group.html","template/accordion/accordion.html","template/alert/alert.html","template/carousel/carousel.html","template/carousel/slide.html","template/datepicker/datepicker.html","template/datepicker/day.html","template/datepicker/month.html","template/datepicker/popup.html","template/datepicker/year.html","template/modal/backdrop.html","template/modal/window.html","template/pagination/pager.html","template/pagination/pagination.html","template/tooltip/tooltip-html-popup.html","template/tooltip/tooltip-html-unsafe-popup.html","template/tooltip/tooltip-popup.html","template/tooltip/tooltip-template-popup.html","template/popover/popover-html.html","template/popover/popover-template.html","template/popover/popover.html","template/progressbar/bar.html","template/progressbar/progress.html","template/progressbar/progressbar.html","template/rating/rating.html","template/tabs/tab.html","template/tabs/tabset.html","template/timepicker/timepicker.html","template/typeahead/typeahead-match.html","template/typeahead/typeahead-popup.html"]),angular.module("ui.bootstrap.collapse",[]).directive("collapse",["$animate",function(a){return{link:function(b,c,d){function e(){c.removeClass("collapse").addClass("collapsing").attr("aria-expanded",!0).attr("aria-hidden",!1),a.addClass(c,"in",{to:{height:c[0].scrollHeight+"px"}}).then(f)}function f(){c.removeClass("collapsing"),c.css({height:"auto"})}function g(){return c.hasClass("collapse")||c.hasClass("in")?(c.css({height:c[0].scrollHeight+"px"}).removeClass("collapse").addClass("collapsing").attr("aria-expanded",!1).attr("aria-hidden",!0),void a.removeClass(c,"in",{to:{height:"0"}}).then(h)):h()}function h(){c.css({height:"0"}),c.removeClass("collapsing"),c.addClass("collapse")}b.$watch(d.collapse,function(a){a?g():e()})}}}]),angular.module("ui.bootstrap.accordion",["ui.bootstrap.collapse"]).constant("accordionConfig",{closeOthers:!0}).controller("AccordionController",["$scope","$attrs","accordionConfig",function(a,b,c){this.groups=[],this.closeOthers=function(d){var e=angular.isDefined(b.closeOthers)?a.$eval(b.closeOthers):c.closeOthers;e&&angular.forEach(this.groups,function(a){a!==d&&(a.isOpen=!1)})},this.addGroup=function(a){var b=this;this.groups.push(a),a.$on("$destroy",function(){b.removeGroup(a)})},this.removeGroup=function(a){var b=this.groups.indexOf(a);-1!==b&&this.groups.splice(b,1)}}]).directive("accordion",function(){return{restrict:"EA",controller:"AccordionController",controllerAs:"accordion",transclude:!0,replace:!1,templateUrl:function(a,b){return b.templateUrl||"template/accordion/accordion.html"}}}).directive("accordionGroup",function(){return{require:"^accordion",restrict:"EA",transclude:!0,replace:!0,templateUrl:function(a,b){return b.templateUrl||"template/accordion/accordion-group.html"},scope:{heading:"@",isOpen:"=?",isDisabled:"=?"},controller:function(){this.setHeading=function(a){this.heading=a}},link:function(a,b,c,d){d.addGroup(a),a.$watch("isOpen",function(b){b&&d.closeOthers(a)}),a.toggleOpen=function(){a.isDisabled||(a.isOpen=!a.isOpen)}}}}).directive("accordionHeading",function(){return{restrict:"EA",transclude:!0,template:"",replace:!0,require:"^accordionGroup",link:function(a,b,c,d,e){d.setHeading(e(a,angular.noop))}}}).directive("accordionTransclude",function(){return{require:"^accordionGroup",link:function(a,b,c,d){a.$watch(function(){return d[c.accordionTransclude]},function(a){a&&(b.find("span").html(""),b.find("span").append(a))})}}}),angular.module("ui.bootstrap.alert",[]).controller("AlertController",["$scope","$attrs",function(a,b){a.closeable=!!b.close,this.close=a.close}]).directive("alert",function(){return{restrict:"EA",controller:"AlertController",controllerAs:"alert",templateUrl:function(a,b){return b.templateUrl||"template/alert/alert.html"},transclude:!0,replace:!0,scope:{type:"@",close:"&"}}}).directive("dismissOnTimeout",["$timeout",function(a){return{require:"alert",link:function(b,c,d,e){a(function(){e.close()},parseInt(d.dismissOnTimeout,10))}}}]),angular.module("ui.bootstrap.bindHtml",[]).value("$bindHtmlUnsafeSuppressDeprecated",!1).directive("bindHtmlUnsafe",["$log","$bindHtmlUnsafeSuppressDeprecated",function(a,b){return function(c,d,e){b||a.warn("bindHtmlUnsafe is now deprecated. Use ngBindHtml instead"),d.addClass("ng-binding").data("$binding",e.bindHtmlUnsafe),c.$watch(e.bindHtmlUnsafe,function(a){d.html(a||"")})}}]),angular.module("ui.bootstrap.buttons",[]).constant("buttonConfig",{activeClass:"active",toggleEvent:"click"}).controller("ButtonsController",["buttonConfig",function(a){this.activeClass=a.activeClass||"active",this.toggleEvent=a.toggleEvent||"click"}]).directive("btnRadio",function(){return{require:["btnRadio","ngModel"],controller:"ButtonsController",controllerAs:"buttons",link:function(a,b,c,d){var e=d[0],f=d[1];f.$render=function(){b.toggleClass(e.activeClass,angular.equals(f.$modelValue,a.$eval(c.btnRadio)))},b.bind(e.toggleEvent,function(){if(!c.disabled){var d=b.hasClass(e.activeClass);(!d||angular.isDefined(c.uncheckable))&&a.$apply(function(){f.$setViewValue(d?null:a.$eval(c.btnRadio)),f.$render()})}})}}}).directive("btnCheckbox",function(){return{require:["btnCheckbox","ngModel"],controller:"ButtonsController",controllerAs:"button",link:function(a,b,c,d){function e(){return g(c.btnCheckboxTrue,!0)}function f(){return g(c.btnCheckboxFalse,!1)}function g(b,c){var d=a.$eval(b);return angular.isDefined(d)?d:c}var h=d[0],i=d[1];i.$render=function(){b.toggleClass(h.activeClass,angular.equals(i.$modelValue,e()))},b.bind(h.toggleEvent,function(){c.disabled||a.$apply(function(){i.$setViewValue(b.hasClass(h.activeClass)?f():e()),i.$render()})})}}}),angular.module("ui.bootstrap.carousel",[]).controller("CarouselController",["$scope","$element","$interval","$animate",function(a,b,c,d){function e(b,c,e){r||(angular.extend(b,{direction:e,active:!0}),angular.extend(l.currentSlide||{},{direction:e,active:!1}),d.enabled()&&!a.noTransition&&!a.$currentTransition&&b.$element&&l.slides.length>1&&(b.$element.data(p,b.direction),l.currentSlide&&l.currentSlide.$element&&l.currentSlide.$element.data(p,b.direction),a.$currentTransition=!0,n?d.on("addClass",b.$element,function(b,c){"close"===c&&(a.$currentTransition=null,d.off("addClass",b))}):b.$element.one("$animate:close",function(){a.$currentTransition=null})),l.currentSlide=b,q=c,g())}function f(a){if(angular.isUndefined(m[a].index))return m[a];{var b;m.length}for(b=0;b<m.length;++b)if(m[b].index==a)return m[b]}function g(){h();var b=+a.interval;!isNaN(b)&&b>0&&(j=c(i,b))}function h(){j&&(c.cancel(j),j=null)}function i(){var b=+a.interval;k&&!isNaN(b)&&b>0&&m.length?a.next():a.pause()}var j,k,l=this,m=l.slides=a.slides=[],n=angular.version.minor>=4,o="uib-noTransition",p="uib-slideDirection",q=-1;l.currentSlide=null;var r=!1;l.select=a.select=function(b,c){var d=a.indexOfSlide(b);void 0===c&&(c=d>l.getCurrentIndex()?"next":"prev"),b&&b!==l.currentSlide&&!a.$currentTransition&&e(b,d,c)},a.$on("$destroy",function(){r=!0}),l.getCurrentIndex=function(){return l.currentSlide&&angular.isDefined(l.currentSlide.index)?+l.currentSlide.index:q},a.indexOfSlide=function(a){return angular.isDefined(a.index)?+a.index:m.indexOf(a)},a.next=function(){var b=(l.getCurrentIndex()+1)%m.length;return 0===b&&a.noWrap()?void a.pause():l.select(f(b),"next")},a.prev=function(){var b=l.getCurrentIndex()-1<0?m.length-1:l.getCurrentIndex()-1;return a.noWrap()&&b===m.length-1?void a.pause():l.select(f(b),"prev")},a.isActive=function(a){return l.currentSlide===a},a.$watch("interval",g),a.$on("$destroy",h),a.play=function(){k||(k=!0,g())},a.pause=function(){a.noPause||(k=!1,h())},l.addSlide=function(b,c){b.$element=c,m.push(b),1===m.length||b.active?(l.select(m[m.length-1]),1==m.length&&a.play()):b.active=!1},l.removeSlide=function(a){angular.isDefined(a.index)&&m.sort(function(a,b){return+a.index>+b.index});var b=m.indexOf(a);m.splice(b,1),m.length>0&&a.active?l.select(b>=m.length?m[b-1]:m[b]):q>b&&q--,0===m.length&&(l.currentSlide=null)},a.$watch("noTransition",function(a){b.data(o,a)})}]).directive("carousel",[function(){return{restrict:"EA",transclude:!0,replace:!0,controller:"CarouselController",controllerAs:"carousel",require:"carousel",templateUrl:function(a,b){return b.templateUrl||"template/carousel/carousel.html"},scope:{interval:"=",noTransition:"=",noPause:"=",noWrap:"&"}}}]).directive("slide",function(){return{require:"^carousel",restrict:"EA",transclude:!0,replace:!0,templateUrl:function(a,b){return b.templateUrl||"template/carousel/slide.html"},scope:{active:"=?",index:"=?"},link:function(a,b,c,d){d.addSlide(a,b),a.$on("$destroy",function(){d.removeSlide(a)}),a.$watch("active",function(b){b&&d.select(a)})}}}).animation(".item",["$injector","$animate",function(a,b){function c(a,b,c){a.removeClass(b),c&&c()}var d="uib-noTransition",e="uib-slideDirection",f=null;return a.has("$animateCss")&&(f=a.get("$animateCss")),{beforeAddClass:function(a,g,h){if("active"==g&&a.parent()&&!a.parent().data(d)){var i=!1,j=a.data(e),k="next"==j?"left":"right",l=c.bind(this,a,k+" "+j,h);return a.addClass(j),f?f(a,{addClass:k}).start().done(l):b.addClass(a,k).then(function(){i||l(),h()}),function(){i=!0}}h()},beforeRemoveClass:function(a,g,h){if("active"===g&&a.parent()&&!a.parent().data(d)){var i=!1,j=a.data(e),k="next"==j?"left":"right",l=c.bind(this,a,k,h);return f?f(a,{addClass:k}).start().done(l):b.addClass(a,k).then(function(){i||l(),h()}),function(){i=!0}}h()}}}]),angular.module("ui.bootstrap.dateparser",[]).service("dateParser",["$log","$locale","orderByFilter",function(a,b,c){function d(a){var b=[],d=a.split("");return angular.forEach(g,function(c,e){var f=a.indexOf(e);if(f>-1){a=a.split(""),d[f]="("+c.regex+")",a[f]="$";for(var g=f+1,h=f+e.length;h>g;g++)d[g]="",a[g]="$";a=a.join(""),b.push({index:f,apply:c.apply})}}),{regex:new RegExp("^"+d.join("")+"$"),map:c(b,"index")}}function e(a,b,c){return 1>c?!1:1===b&&c>28?29===c&&(a%4===0&&a%100!==0||a%400===0):3===b||5===b||8===b||10===b?31>c:!0}var f=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;this.parsers={};var g={yyyy:{regex:"\\d{4}",apply:function(a){this.year=+a}},yy:{regex:"\\d{2}",apply:function(a){this.year=+a+2e3}},y:{regex:"\\d{1,4}",apply:function(a){this.year=+a}},MMMM:{regex:b.DATETIME_FORMATS.MONTH.join("|"),apply:function(a){this.month=b.DATETIME_FORMATS.MONTH.indexOf(a)}},MMM:{regex:b.DATETIME_FORMATS.SHORTMONTH.join("|"),apply:function(a){this.month=b.DATETIME_FORMATS.SHORTMONTH.indexOf(a)}},MM:{regex:"0[1-9]|1[0-2]",apply:function(a){this.month=a-1}},M:{regex:"[1-9]|1[0-2]",apply:function(a){this.month=a-1}},dd:{regex:"[0-2][0-9]{1}|3[0-1]{1}",apply:function(a){this.date=+a}},d:{regex:"[1-2]?[0-9]{1}|3[0-1]{1}",apply:function(a){this.date=+a}},EEEE:{regex:b.DATETIME_FORMATS.DAY.join("|")},EEE:{regex:b.DATETIME_FORMATS.SHORTDAY.join("|")},HH:{regex:"(?:0|1)[0-9]|2[0-3]",apply:function(a){this.hours=+a}},hh:{regex:"0[0-9]|1[0-2]",apply:function(a){this.hours=+a}},H:{regex:"1?[0-9]|2[0-3]",apply:function(a){this.hours=+a}},mm:{regex:"[0-5][0-9]",apply:function(a){this.minutes=+a}},m:{regex:"[0-9]|[1-5][0-9]",apply:function(a){this.minutes=+a}},sss:{regex:"[0-9][0-9][0-9]",apply:function(a){this.milliseconds=+a}},ss:{regex:"[0-5][0-9]",apply:function(a){this.seconds=+a}},s:{regex:"[0-9]|[1-5][0-9]",apply:function(a){this.seconds=+a}},a:{regex:b.DATETIME_FORMATS.AMPMS.join("|"),apply:function(a){12===this.hours&&(this.hours=0),"PM"===a&&(this.hours+=12)}}};this.parse=function(c,g,h){if(!angular.isString(c)||!g)return c;g=b.DATETIME_FORMATS[g]||g,g=g.replace(f,"\\$&"),this.parsers[g]||(this.parsers[g]=d(g));var i=this.parsers[g],j=i.regex,k=i.map,l=c.match(j);if(l&&l.length){var m,n;angular.isDate(h)&&!isNaN(h.getTime())?m={year:h.getFullYear(),month:h.getMonth(),date:h.getDate(),hours:h.getHours(),minutes:h.getMinutes(),seconds:h.getSeconds(),milliseconds:h.getMilliseconds()}:(h&&a.warn("dateparser:","baseDate is not a valid date"),m={year:1900,month:0,date:1,hours:0,minutes:0,seconds:0,milliseconds:0});for(var o=1,p=l.length;p>o;o++){var q=k[o-1];q.apply&&q.apply.call(m,l[o])}return e(m.year,m.month,m.date)&&(n=new Date(m.year,m.month,m.date,m.hours,m.minutes,m.seconds,m.milliseconds||0)),n}}}]),angular.module("ui.bootstrap.position",[]).factory("$position",["$document","$window",function(a,b){function c(a,c){return a.currentStyle?a.currentStyle[c]:b.getComputedStyle?b.getComputedStyle(a)[c]:a.style[c]}function d(a){return"static"===(c(a,"position")||"static")}var e=function(b){for(var c=a[0],e=b.offsetParent||c;e&&e!==c&&d(e);)e=e.offsetParent;return e||c};return{position:function(b){var c=this.offset(b),d={top:0,left:0},f=e(b[0]);f!=a[0]&&(d=this.offset(angular.element(f)),d.top+=f.clientTop-f.scrollTop,d.left+=f.clientLeft-f.scrollLeft);var g=b[0].getBoundingClientRect();return{width:g.width||b.prop("offsetWidth"),height:g.height||b.prop("offsetHeight"),top:c.top-d.top,left:c.left-d.left}},offset:function(c){var d=c[0].getBoundingClientRect();return{width:d.width||c.prop("offsetWidth"),height:d.height||c.prop("offsetHeight"),top:d.top+(b.pageYOffset||a[0].documentElement.scrollTop),left:d.left+(b.pageXOffset||a[0].documentElement.scrollLeft)}},positionElements:function(a,b,c,d){var e,f,g,h,i=c.split("-"),j=i[0],k=i[1]||"center";e=d?this.offset(a):this.position(a),f=b.prop("offsetWidth"),g=b.prop("offsetHeight");var l={center:function(){return e.left+e.width/2-f/2},left:function(){return e.left},right:function(){return e.left+e.width}},m={center:function(){return e.top+e.height/2-g/2},top:function(){return e.top},bottom:function(){return e.top+e.height}};switch(j){case"right":h={top:m[k](),left:l[j]()};break;case"left":h={top:m[k](),left:e.left-f};break;case"bottom":h={top:m[j](),left:l[k]()};break;default:h={top:e.top-g,left:l[k]()}}return h}}}]),angular.module("ui.bootstrap.datepicker",["ui.bootstrap.dateparser","ui.bootstrap.position"]).value("$datepickerSuppressError",!1).constant("datepickerConfig",{formatDay:"dd",formatMonth:"MMMM",formatYear:"yyyy",formatDayHeader:"EEE",formatDayTitle:"MMMM yyyy",formatMonthTitle:"yyyy",datepickerMode:"day",minMode:"day",maxMode:"year",showWeeks:!0,startingDay:0,yearRange:20,minDate:null,maxDate:null,shortcutPropagation:!1}).controller("DatepickerController",["$scope","$attrs","$parse","$interpolate","$log","dateFilter","datepickerConfig","$datepickerSuppressError",function(a,b,c,d,e,f,g,h){var i=this,j={$setViewValue:angular.noop};this.modes=["day","month","year"],angular.forEach(["formatDay","formatMonth","formatYear","formatDayHeader","formatDayTitle","formatMonthTitle","showWeeks","startingDay","yearRange","shortcutPropagation"],function(c,e){i[c]=angular.isDefined(b[c])?6>e?d(b[c])(a.$parent):a.$parent.$eval(b[c]):g[c]}),angular.forEach(["minDate","maxDate"],function(d){b[d]?a.$parent.$watch(c(b[d]),function(a){i[d]=a?new Date(a):null,i.refreshView()}):i[d]=g[d]?new Date(g[d]):null}),angular.forEach(["minMode","maxMode"],function(d){b[d]?a.$parent.$watch(c(b[d]),function(c){i[d]=angular.isDefined(c)?c:b[d],a[d]=i[d],("minMode"==d&&i.modes.indexOf(a.datepickerMode)<i.modes.indexOf(i[d])||"maxMode"==d&&i.modes.indexOf(a.datepickerMode)>i.modes.indexOf(i[d]))&&(a.datepickerMode=i[d])}):(i[d]=g[d]||null,a[d]=i[d])}),a.datepickerMode=a.datepickerMode||g.datepickerMode,a.uniqueId="datepicker-"+a.$id+"-"+Math.floor(1e4*Math.random()),angular.isDefined(b.initDate)?(this.activeDate=a.$parent.$eval(b.initDate)||new Date,a.$parent.$watch(b.initDate,function(a){a&&(j.$isEmpty(j.$modelValue)||j.$invalid)&&(i.activeDate=a,i.refreshView())})):this.activeDate=new Date,a.isActive=function(b){return 0===i.compare(b.date,i.activeDate)?(a.activeDateId=b.uid,!0):!1},this.init=function(a){j=a,j.$render=function(){i.render()}},this.render=function(){if(j.$viewValue){var a=new Date(j.$viewValue),b=!isNaN(a);b?this.activeDate=a:h||e.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')}this.refreshView()},this.refreshView=function(){if(this.element){this._refreshView();var a=j.$viewValue?new Date(j.$viewValue):null;j.$setValidity("dateDisabled",!a||this.element&&!this.isDisabled(a))}},this.createDateObject=function(a,b){var c=j.$viewValue?new Date(j.$viewValue):null;return{date:a,label:f(a,b),selected:c&&0===this.compare(a,c),disabled:this.isDisabled(a),current:0===this.compare(a,new Date),customClass:this.customClass(a)}},this.isDisabled=function(c){return this.minDate&&this.compare(c,this.minDate)<0||this.maxDate&&this.compare(c,this.maxDate)>0||b.dateDisabled&&a.dateDisabled({date:c,mode:a.datepickerMode})},this.customClass=function(b){return a.customClass({date:b,mode:a.datepickerMode})},this.split=function(a,b){for(var c=[];a.length>0;)c.push(a.splice(0,b));return c},this.fixTimeZone=function(a){var b=a.getHours();a.setHours(23===b?b+2:0)},a.select=function(b){if(a.datepickerMode===i.minMode){var c=j.$viewValue?new Date(j.$viewValue):new Date(0,0,0,0,0,0,0);c.setFullYear(b.getFullYear(),b.getMonth(),b.getDate()),j.$setViewValue(c),j.$render()}else i.activeDate=b,a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)-1]},a.move=function(a){var b=i.activeDate.getFullYear()+a*(i.step.years||0),c=i.activeDate.getMonth()+a*(i.step.months||0);i.activeDate.setFullYear(b,c,1),i.refreshView()},a.toggleMode=function(b){b=b||1,a.datepickerMode===i.maxMode&&1===b||a.datepickerMode===i.minMode&&-1===b||(a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)+b])},a.keys={13:"enter",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down"};var k=function(){i.element[0].focus()};a.$on("datepicker.focus",k),a.keydown=function(b){var c=a.keys[b.which];if(c&&!b.shiftKey&&!b.altKey)if(b.preventDefault(),i.shortcutPropagation||b.stopPropagation(),"enter"===c||"space"===c){if(i.isDisabled(i.activeDate))return;a.select(i.activeDate),k()}else!b.ctrlKey||"up"!==c&&"down"!==c?(i.handleKeyDown(c,b),i.refreshView()):(a.toggleMode("up"===c?1:-1),k())}}]).directive("datepicker",function(){return{restrict:"EA",replace:!0,templateUrl:function(a,b){return b.templateUrl||"template/datepicker/datepicker.html"},scope:{datepickerMode:"=?",dateDisabled:"&",customClass:"&",shortcutPropagation:"&?"},require:["datepicker","^ngModel"],controller:"DatepickerController",controllerAs:"datepicker",link:function(a,b,c,d){var e=d[0],f=d[1];e.init(f)}}}).directive("daypicker",["dateFilter",function(a){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/day.html",require:"^datepicker",link:function(b,c,d,e){function f(a,b){return 1!==b||a%4!==0||a%100===0&&a%400!==0?i[b]:29}function g(a,b){for(var c,d=new Array(b),f=new Date(a),g=0;b>g;)c=new Date(f),e.fixTimeZone(c),d[g++]=c,f.setDate(f.getDate()+1);return d}function h(a){var b=new Date(a);b.setDate(b.getDate()+4-(b.getDay()||7));var c=b.getTime();return b.setMonth(0),b.setDate(1),Math.floor(Math.round((c-b)/864e5)/7)+1}b.showWeeks=e.showWeeks,e.step={months:1},e.element=c;var i=[31,28,31,30,31,30,31,31,30,31,30,31];e._refreshView=function(){var c=e.activeDate.getFullYear(),d=e.activeDate.getMonth(),f=new Date(c,d,1),i=e.startingDay-f.getDay(),j=i>0?7-i:-i,k=new Date(f);j>0&&k.setDate(-j+1);for(var l=g(k,42),m=0;42>m;m++)l[m]=angular.extend(e.createDateObject(l[m],e.formatDay),{secondary:l[m].getMonth()!==d,uid:b.uniqueId+"-"+m});b.labels=new Array(7);for(var n=0;7>n;n++)b.labels[n]={abbr:a(l[n].date,e.formatDayHeader),full:a(l[n].date,"EEEE")};if(b.title=a(e.activeDate,e.formatDayTitle),b.rows=e.split(l,7),b.showWeeks){b.weekNumbers=[];for(var o=(11-e.startingDay)%7,p=b.rows.length,q=0;p>q;q++)b.weekNumbers.push(h(b.rows[q][o].date))}},e.compare=function(a,b){return new Date(a.getFullYear(),a.getMonth(),a.getDate())-new Date(b.getFullYear(),b.getMonth(),b.getDate())},e.handleKeyDown=function(a){var b=e.activeDate.getDate();if("left"===a)b-=1;else if("up"===a)b-=7;else if("right"===a)b+=1;else if("down"===a)b+=7;else if("pageup"===a||"pagedown"===a){var c=e.activeDate.getMonth()+("pageup"===a?-1:1);e.activeDate.setMonth(c,1),b=Math.min(f(e.activeDate.getFullYear(),e.activeDate.getMonth()),b)}else"home"===a?b=1:"end"===a&&(b=f(e.activeDate.getFullYear(),e.activeDate.getMonth()));e.activeDate.setDate(b)},e.refreshView()}}}]).directive("monthpicker",["dateFilter",function(a){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/month.html",require:"^datepicker",link:function(b,c,d,e){e.step={years:1},e.element=c,e._refreshView=function(){for(var c,d=new Array(12),f=e.activeDate.getFullYear(),g=0;12>g;g++)c=new Date(f,g,1),e.fixTimeZone(c),d[g]=angular.extend(e.createDateObject(c,e.formatMonth),{uid:b.uniqueId+"-"+g});b.title=a(e.activeDate,e.formatMonthTitle),b.rows=e.split(d,3)},e.compare=function(a,b){return new Date(a.getFullYear(),a.getMonth())-new Date(b.getFullYear(),b.getMonth())},e.handleKeyDown=function(a){var b=e.activeDate.getMonth();if("left"===a)b-=1;else if("up"===a)b-=3;else if("right"===a)b+=1;else if("down"===a)b+=3;else if("pageup"===a||"pagedown"===a){var c=e.activeDate.getFullYear()+("pageup"===a?-1:1);e.activeDate.setFullYear(c)}else"home"===a?b=0:"end"===a&&(b=11);e.activeDate.setMonth(b)},e.refreshView()}}}]).directive("yearpicker",["dateFilter",function(){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/year.html",require:"^datepicker",link:function(a,b,c,d){function e(a){return parseInt((a-1)/f,10)*f+1}var f=d.yearRange;d.step={years:f},d.element=b,d._refreshView=function(){for(var b,c=new Array(f),g=0,h=e(d.activeDate.getFullYear());f>g;g++)b=new Date(h+g,0,1),d.fixTimeZone(b),c[g]=angular.extend(d.createDateObject(b,d.formatYear),{uid:a.uniqueId+"-"+g});a.title=[c[0].label,c[f-1].label].join(" - "),a.rows=d.split(c,5)},d.compare=function(a,b){return a.getFullYear()-b.getFullYear()},d.handleKeyDown=function(a){var b=d.activeDate.getFullYear();"left"===a?b-=1:"up"===a?b-=5:"right"===a?b+=1:"down"===a?b+=5:"pageup"===a||"pagedown"===a?b+=("pageup"===a?-1:1)*d.step.years:"home"===a?b=e(d.activeDate.getFullYear()):"end"===a&&(b=e(d.activeDate.getFullYear())+f-1),d.activeDate.setFullYear(b)},d.refreshView()}}}]).constant("datepickerPopupConfig",{datepickerPopup:"yyyy-MM-dd",datepickerPopupTemplateUrl:"template/datepicker/popup.html",datepickerTemplateUrl:"template/datepicker/datepicker.html",html5Types:{date:"yyyy-MM-dd","datetime-local":"yyyy-MM-ddTHH:mm:ss.sss",month:"yyyy-MM"},currentText:"Today",clearText:"Clear",closeText:"Done",closeOnDateSelection:!0,appendToBody:!1,showButtonBar:!0,onOpenFocus:!0}).directive("datepickerPopup",["$compile","$parse","$document","$rootScope","$position","dateFilter","dateParser","datepickerPopupConfig","$timeout",function(a,b,c,d,e,f,g,h,i){return{restrict:"EA",require:"ngModel",scope:{isOpen:"=?",currentText:"@",clearText:"@",closeText:"@",dateDisabled:"&",customClass:"&"},link:function(j,k,l,m){function n(a){return a.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()})}function o(a){if(angular.isNumber(a)&&(a=new Date(a)),a){if(angular.isDate(a)&&!isNaN(a))return a;if(angular.isString(a)){var b=g.parse(a,q,j.date);return isNaN(b)?void 0:b}return void 0}return null}function p(a,b){var c=a||b;if(!l.ngRequired&&!c)return!0;if(angular.isNumber(c)&&(c=new Date(c)),c){if(angular.isDate(c)&&!isNaN(c))return!0;if(angular.isString(c)){var d=g.parse(c,q);return!isNaN(d)}return!1}return!0}var q,r=angular.isDefined(l.closeOnDateSelection)?j.$parent.$eval(l.closeOnDateSelection):h.closeOnDateSelection,s=angular.isDefined(l.datepickerAppendToBody)?j.$parent.$eval(l.datepickerAppendToBody):h.appendToBody,t=angular.isDefined(l.onOpenFocus)?j.$parent.$eval(l.onOpenFocus):h.onOpenFocus,u=angular.isDefined(l.datepickerPopupTemplateUrl)?l.datepickerPopupTemplateUrl:h.datepickerPopupTemplateUrl,v=angular.isDefined(l.datepickerTemplateUrl)?l.datepickerTemplateUrl:h.datepickerTemplateUrl;j.showButtonBar=angular.isDefined(l.showButtonBar)?j.$parent.$eval(l.showButtonBar):h.showButtonBar,j.getText=function(a){return j[a+"Text"]||h[a+"Text"]};var w=!1;if(h.html5Types[l.type]?(q=h.html5Types[l.type],w=!0):(q=l.datepickerPopup||h.datepickerPopup,l.$observe("datepickerPopup",function(a){var b=a||h.datepickerPopup;if(b!==q&&(q=b,m.$modelValue=null,!q))throw new Error("datepickerPopup must have a date format specified.")})),!q)throw new Error("datepickerPopup must have a date format specified.");if(w&&l.datepickerPopup)throw new Error("HTML5 date input types do not support custom formats.");var x=angular.element("<div datepicker-popup-wrap><div datepicker></div></div>");x.attr({"ng-model":"date","ng-change":"dateSelection(date)","template-url":u});var y=angular.element(x.children()[0]);if(y.attr("template-url",v),w&&"month"==l.type&&(y.attr("datepicker-mode",'"month"'),y.attr("min-mode","month")),l.datepickerOptions){var z=j.$parent.$eval(l.datepickerOptions);z&&z.initDate&&(j.initDate=z.initDate,y.attr("init-date","initDate"),delete z.initDate),angular.forEach(z,function(a,b){y.attr(n(b),a)})}j.watchData={},angular.forEach(["minMode","maxMode","minDate","maxDate","datepickerMode","initDate","shortcutPropagation"],function(a){if(l[a]){var c=b(l[a]);if(j.$parent.$watch(c,function(b){j.watchData[a]=b}),y.attr(n(a),"watchData."+a),"datepickerMode"===a){var d=c.assign;j.$watch("watchData."+a,function(a,b){angular.isFunction(d)&&a!==b&&d(j.$parent,a)})}}}),l.dateDisabled&&y.attr("date-disabled","dateDisabled({ date: date, mode: mode })"),l.showWeeks&&y.attr("show-weeks",l.showWeeks),l.customClass&&y.attr("custom-class","customClass({ date: date, mode: mode })"),w?m.$formatters.push(function(a){return j.date=a,a}):(m.$$parserName="date",m.$validators.date=p,m.$parsers.unshift(o),m.$formatters.push(function(a){return j.date=a,m.$isEmpty(a)?a:f(a,q)})),j.dateSelection=function(a){angular.isDefined(a)&&(j.date=a);var b=j.date?f(j.date,q):null;k.val(b),m.$setViewValue(b),r&&(j.isOpen=!1,k[0].focus())},m.$viewChangeListeners.push(function(){j.date=g.parse(m.$viewValue,q,j.date)});var A=function(a){j.isOpen&&!k[0].contains(a.target)&&j.$apply(function(){j.isOpen=!1})},B=function(a){27===a.which&&j.isOpen?(a.preventDefault(),a.stopPropagation(),j.$apply(function(){j.isOpen=!1}),k[0].focus()):40!==a.which||j.isOpen||(a.preventDefault(),a.stopPropagation(),j.$apply(function(){j.isOpen=!0}))};k.bind("keydown",B),j.keydown=function(a){27===a.which&&(j.isOpen=!1,k[0].focus())},j.$watch("isOpen",function(a){a?(j.position=s?e.offset(k):e.position(k),j.position.top=j.position.top+k.prop("offsetHeight"),i(function(){t&&j.$broadcast("datepicker.focus"),c.bind("click",A)},0,!1)):c.unbind("click",A)}),j.select=function(a){if("today"===a){var b=new Date;angular.isDate(j.date)?(a=new Date(j.date),a.setFullYear(b.getFullYear(),b.getMonth(),b.getDate())):a=new Date(b.setHours(0,0,0,0))}j.dateSelection(a)},j.close=function(){j.isOpen=!1,k[0].focus()};var C=a(x)(j);x.remove(),s?c.find("body").append(C):k.after(C),j.$on("$destroy",function(){j.isOpen===!0&&(d.$$phase||j.$apply(function(){j.isOpen=!1})),C.remove(),k.unbind("keydown",B),c.unbind("click",A)})}}}]).directive("datepickerPopupWrap",function(){return{restrict:"EA",replace:!0,transclude:!0,templateUrl:function(a,b){return b.templateUrl||"template/datepicker/popup.html"}}}),angular.module("ui.bootstrap.dropdown",["ui.bootstrap.position"]).constant("dropdownConfig",{openClass:"open"}).service("dropdownService",["$document","$rootScope",function(a,b){var c=null;this.open=function(b){c||(a.bind("click",d),a.bind("keydown",e)),c&&c!==b&&(c.isOpen=!1),c=b},this.close=function(b){c===b&&(c=null,a.unbind("click",d),a.unbind("keydown",e))};var d=function(a){if(c&&(!a||"disabled"!==c.getAutoClose())){var d=c.getToggleElement();if(!(a&&d&&d[0].contains(a.target))){var e=c.getDropdownElement();a&&"outsideClick"===c.getAutoClose()&&e&&e[0].contains(a.target)||(c.isOpen=!1,b.$$phase||c.$apply())}}},e=function(a){27===a.which?(c.focusToggleElement(),d()):c.isKeynavEnabled()&&/(38|40)/.test(a.which)&&c.isOpen&&(a.preventDefault(),a.stopPropagation(),c.focusDropdownEntry(a.which))}}]).controller("DropdownController",["$scope","$attrs","$parse","dropdownConfig","dropdownService","$animate","$position","$document","$compile","$templateRequest",function(a,b,c,d,e,f,g,h,i,j){var k,l,m=this,n=a.$new(),o=d.openClass,p=angular.noop,q=b.onToggle?c(b.onToggle):angular.noop,r=!1,s=!1;this.init=function(d){m.$element=d,b.isOpen&&(l=c(b.isOpen),p=l.assign,a.$watch(l,function(a){n.isOpen=!!a})),r=angular.isDefined(b.dropdownAppendToBody),s=angular.isDefined(b.keyboardNav),r&&m.dropdownMenu&&(h.find("body").append(m.dropdownMenu),d.on("$destroy",function(){m.dropdownMenu.remove()}))},this.toggle=function(a){return n.isOpen=arguments.length?!!a:!n.isOpen},this.isOpen=function(){return n.isOpen},n.getToggleElement=function(){return m.toggleElement},n.getAutoClose=function(){return b.autoClose||"always"},n.getElement=function(){return m.$element},n.isKeynavEnabled=function(){return s},n.focusDropdownEntry=function(a){var b=m.dropdownMenu?angular.element(m.dropdownMenu).find("a"):angular.element(m.$element).find("ul").eq(0).find("a");switch(a){case 40:m.selectedOption=angular.isNumber(m.selectedOption)?m.selectedOption===b.length-1?m.selectedOption:m.selectedOption+1:0;break;case 38:if(!angular.isNumber(m.selectedOption))return;m.selectedOption=0===m.selectedOption?0:m.selectedOption-1}b[m.selectedOption].focus()},n.getDropdownElement=function(){return m.dropdownMenu},n.focusToggleElement=function(){m.toggleElement&&m.toggleElement[0].focus()},n.$watch("isOpen",function(b,c){if(r&&m.dropdownMenu){var d=g.positionElements(m.$element,m.dropdownMenu,"bottom-left",!0),h={top:d.top+"px",display:b?"block":"none"},l=m.dropdownMenu.hasClass("dropdown-menu-right");l?(h.left="auto",h.right=window.innerWidth-(d.left+m.$element.prop("offsetWidth"))+"px"):(h.left=d.left+"px",h.right="auto"),m.dropdownMenu.css(h)}if(f[b?"addClass":"removeClass"](m.$element,o).then(function(){angular.isDefined(b)&&b!==c&&q(a,{open:!!b})}),b)m.dropdownMenuTemplateUrl&&j(m.dropdownMenuTemplateUrl).then(function(a){k=n.$new(),i(a.trim())(k,function(a){var b=a;m.dropdownMenu.replaceWith(b),m.dropdownMenu=b})}),n.focusToggleElement(),e.open(n);else{if(m.dropdownMenuTemplateUrl){k&&k.$destroy();var s=angular.element('<ul class="dropdown-menu"></ul>');m.dropdownMenu.replaceWith(s),m.dropdownMenu=s}e.close(n),m.selectedOption=null}angular.isFunction(p)&&p(a,b)}),a.$on("$locationChangeSuccess",function(){"disabled"!==n.getAutoClose()&&(n.isOpen=!1)}),a.$on("$destroy",function(){n.$destroy()})}]).directive("dropdown",function(){return{controller:"DropdownController",link:function(a,b,c,d){d.init(b),b.addClass("dropdown")}}}).directive("dropdownMenu",function(){return{restrict:"AC",require:"?^dropdown",link:function(a,b,c,d){if(d){var e=c.templateUrl;e&&(d.dropdownMenuTemplateUrl=e),d.dropdownMenu||(d.dropdownMenu=b)}}}}).directive("keyboardNav",function(){return{restrict:"A",require:"?^dropdown",link:function(a,b,c,d){b.bind("keydown",function(a){if(-1!==[38,40].indexOf(a.which)){a.preventDefault(),a.stopPropagation();var b=d.dropdownMenu.find("a");switch(a.which){case 40:d.selectedOption=angular.isNumber(d.selectedOption)?d.selectedOption===b.length-1?d.selectedOption:d.selectedOption+1:0;break;case 38:d.selectedOption=0===d.selectedOption?0:d.selectedOption-1}b[d.selectedOption].focus()}})}}}).directive("dropdownToggle",function(){
|
9 |
+
return{require:"?^dropdown",link:function(a,b,c,d){if(d){b.addClass("dropdown-toggle"),d.toggleElement=b;var e=function(e){e.preventDefault(),b.hasClass("disabled")||c.disabled||a.$apply(function(){d.toggle()})};b.bind("click",e),b.attr({"aria-haspopup":!0,"aria-expanded":!1}),a.$watch(d.isOpen,function(a){b.attr("aria-expanded",!!a)}),a.$on("$destroy",function(){b.unbind("click",e)})}}}}),angular.module("ui.bootstrap.modal",[]).factory("$$stackedMap",function(){return{createNew:function(){var a=[];return{add:function(b,c){a.push({key:b,value:c})},get:function(b){for(var c=0;c<a.length;c++)if(b==a[c].key)return a[c]},keys:function(){for(var b=[],c=0;c<a.length;c++)b.push(a[c].key);return b},top:function(){return a[a.length-1]},remove:function(b){for(var c=-1,d=0;d<a.length;d++)if(b==a[d].key){c=d;break}return a.splice(c,1)[0]},removeTop:function(){return a.splice(a.length-1,1)[0]},length:function(){return a.length}}}}}).directive("modalBackdrop",["$animate","$injector","$modalStack",function(a,b,c){function d(b,d,f){f.modalInClass&&(e?e(d,{addClass:f.modalInClass}).start():a.addClass(d,f.modalInClass),b.$on(c.NOW_CLOSING_EVENT,function(b,c){var g=c();e?e(d,{removeClass:f.modalInClass}).start().then(g):a.removeClass(d,f.modalInClass).then(g)}))}var e=null;return b.has("$animateCss")&&(e=b.get("$animateCss")),{restrict:"EA",replace:!0,templateUrl:"template/modal/backdrop.html",compile:function(a,b){return a.addClass(b.backdropClass),d}}}]).directive("modalWindow",["$modalStack","$q","$animate","$injector",function(a,b,c,d){var e=null;return d.has("$animateCss")&&(e=d.get("$animateCss")),{restrict:"EA",scope:{index:"@"},replace:!0,transclude:!0,templateUrl:function(a,b){return b.templateUrl||"template/modal/window.html"},link:function(d,f,g){f.addClass(g.windowClass||""),d.size=g.size,d.close=function(b){var c=a.getTop();c&&c.value.backdrop&&"static"!=c.value.backdrop&&b.target===b.currentTarget&&(b.preventDefault(),b.stopPropagation(),a.dismiss(c.key,"backdrop click"))},d.$isRendered=!0;var h=b.defer();g.$observe("modalRender",function(a){"true"==a&&h.resolve()}),h.promise.then(function(){g.modalInClass&&(e?e(f,{addClass:g.modalInClass}).start():c.addClass(f,g.modalInClass),d.$on(a.NOW_CLOSING_EVENT,function(a,b){var d=b();e?e(f,{removeClass:g.modalInClass}).start().then(d):c.removeClass(f,g.modalInClass).then(d)}));var b=f[0].querySelectorAll("[autofocus]");b.length?b[0].focus():f[0].focus();var h=a.getTop();h&&a.modalRendered(h.key)})}}}]).directive("modalAnimationClass",[function(){return{compile:function(a,b){b.modalAnimation&&a.addClass(b.modalAnimationClass)}}}]).directive("modalTransclude",function(){return{link:function(a,b,c,d,e){e(a.$parent,function(a){b.empty(),b.append(a)})}}}).factory("$modalStack",["$animate","$timeout","$document","$compile","$rootScope","$q","$injector","$$stackedMap",function(a,b,c,d,e,f,g,h){function i(){for(var a=-1,b=s.keys(),c=0;c<b.length;c++)s.get(b[c]).value.backdrop&&(a=c);return a}function j(a,b){var d=c.find("body").eq(0),e=s.get(a).value;s.remove(a),l(e.modalDomEl,e.modalScope,function(){d.toggleClass(a.openedClass||r,s.length()>0)}),k(),b&&b.focus?b.focus():d.focus()}function k(){if(o&&-1==i()){var a=p;l(o,p,function(){a=null}),o=void 0,p=void 0}}function l(b,c,d){function e(){e.done||(e.done=!0,n?n(b,{event:"leave"}).start().then(function(){b.remove()}):a.leave(b),c.$destroy(),d&&d())}var g,h=null,i=function(){return g||(g=f.defer(),h=g.promise),function(){g.resolve()}};return c.$broadcast(t.NOW_CLOSING_EVENT,i),f.when(h).then(e)}function m(a,b,c){return!a.value.modalScope.$broadcast("modal.closing",b,c).defaultPrevented}var n=null;g.has("$animateCss")&&(n=g.get("$animateCss"));var o,p,q,r="modal-open",s=h.createNew(),t={NOW_CLOSING_EVENT:"modal.stack.now-closing"},u=0,v="a[href], area[href], input:not([disabled]), button:not([disabled]),select:not([disabled]), textarea:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable=true]";return e.$watch(i,function(a){p&&(p.index=a)}),c.bind("keydown",function(a){if(a.isDefaultPrevented())return a;var b=s.top();if(b&&b.value.keyboard)switch(a.which){case 27:a.preventDefault(),e.$apply(function(){t.dismiss(b.key,"escape key press")});break;case 9:t.loadFocusElementList(b);var c=!1;a.shiftKey?t.isFocusInFirstItem(a)&&(c=t.focusLastFocusableElement()):t.isFocusInLastItem(a)&&(c=t.focusFirstFocusableElement()),c&&(a.preventDefault(),a.stopPropagation())}}),t.open=function(a,b){var f=c[0].activeElement;s.add(a,{deferred:b.deferred,renderDeferred:b.renderDeferred,modalScope:b.scope,backdrop:b.backdrop,keyboard:b.keyboard,openedClass:b.openedClass});var g=c.find("body").eq(0),h=i();if(h>=0&&!o){p=e.$new(!0),p.index=h;var j=angular.element('<div modal-backdrop="modal-backdrop"></div>');j.attr("backdrop-class",b.backdropClass),b.animation&&j.attr("modal-animation","true"),o=d(j)(p),g.append(o)}var k=angular.element('<div modal-window="modal-window"></div>');k.attr({"template-url":b.windowTemplateUrl,"window-class":b.windowClass,size:b.size,index:s.length()-1,animate:"animate"}).html(b.content),b.animation&&k.attr("modal-animation","true");var l=d(k)(b.scope);s.top().value.modalDomEl=l,s.top().value.modalOpener=f,g.append(l),g.addClass(b.openedClass||r),t.clearFocusListCache()},t.close=function(a,b){var c=s.get(a);return c&&m(c,b,!0)?(c.value.modalScope.$$uibDestructionScheduled=!0,c.value.deferred.resolve(b),j(a,c.value.modalOpener),!0):!c},t.dismiss=function(a,b){var c=s.get(a);return c&&m(c,b,!1)?(c.value.modalScope.$$uibDestructionScheduled=!0,c.value.deferred.reject(b),j(a,c.value.modalOpener),!0):!c},t.dismissAll=function(a){for(var b=this.getTop();b&&this.dismiss(b.key,a);)b=this.getTop()},t.getTop=function(){return s.top()},t.modalRendered=function(a){var b=s.get(a);b&&b.value.renderDeferred.resolve()},t.focusFirstFocusableElement=function(){return q.length>0?(q[0].focus(),!0):!1},t.focusLastFocusableElement=function(){return q.length>0?(q[q.length-1].focus(),!0):!1},t.isFocusInFirstItem=function(a){return q.length>0?(a.target||a.srcElement)==q[0]:!1},t.isFocusInLastItem=function(a){return q.length>0?(a.target||a.srcElement)==q[q.length-1]:!1},t.clearFocusListCache=function(){q=[],u=0},t.loadFocusElementList=function(a){if((void 0===q||!q.length0)&&a){var b=a.value.modalDomEl;b&&b.length&&(q=b[0].querySelectorAll(v))}},t}]).provider("$modal",function(){var a={options:{animation:!0,backdrop:!0,keyboard:!0},$get:["$injector","$rootScope","$q","$templateRequest","$controller","$modalStack",function(b,c,d,e,f,g){function h(a){return a.template?d.when(a.template):e(angular.isFunction(a.templateUrl)?a.templateUrl():a.templateUrl)}function i(a){var c=[];return angular.forEach(a,function(a){angular.isFunction(a)||angular.isArray(a)?c.push(d.when(b.invoke(a))):angular.isString(a)&&c.push(d.when(b.get(a)))}),c}var j={};return j.open=function(b){var e=d.defer(),j=d.defer(),k=d.defer(),l={result:e.promise,opened:j.promise,rendered:k.promise,close:function(a){return g.close(l,a)},dismiss:function(a){return g.dismiss(l,a)}};if(b=angular.extend({},a.options,b),b.resolve=b.resolve||{},!b.template&&!b.templateUrl)throw new Error("One of template or templateUrl options is required.");var m=d.all([h(b)].concat(i(b.resolve)));return m.then(function(a){var d=(b.scope||c).$new();d.$close=l.close,d.$dismiss=l.dismiss,d.$on("$destroy",function(){d.$$uibDestructionScheduled||d.$dismiss("$uibUnscheduledDestruction")});var h,i={},j=1;b.controller&&(i.$scope=d,i.$modalInstance=l,angular.forEach(b.resolve,function(b,c){i[c]=a[j++]}),h=f(b.controller,i),b.controllerAs&&(b.bindToController&&angular.extend(h,d),d[b.controllerAs]=h)),g.open(l,{scope:d,deferred:e,renderDeferred:k,content:a[0],animation:b.animation,backdrop:b.backdrop,keyboard:b.keyboard,backdropClass:b.backdropClass,windowClass:b.windowClass,windowTemplateUrl:b.windowTemplateUrl,size:b.size,openedClass:b.openedClass})},function(a){e.reject(a)}),m.then(function(){j.resolve(!0)},function(a){j.reject(a)}),l},j}]};return a}),angular.module("ui.bootstrap.pagination",[]).controller("PaginationController",["$scope","$attrs","$parse",function(a,b,c){var d=this,e={$setViewValue:angular.noop},f=b.numPages?c(b.numPages).assign:angular.noop;this.init=function(g,h){e=g,this.config=h,e.$render=function(){d.render()},b.itemsPerPage?a.$parent.$watch(c(b.itemsPerPage),function(b){d.itemsPerPage=parseInt(b,10),a.totalPages=d.calculateTotalPages()}):this.itemsPerPage=h.itemsPerPage,a.$watch("totalItems",function(){a.totalPages=d.calculateTotalPages()}),a.$watch("totalPages",function(b){f(a.$parent,b),a.page>b?a.selectPage(b):e.$render()})},this.calculateTotalPages=function(){var b=this.itemsPerPage<1?1:Math.ceil(a.totalItems/this.itemsPerPage);return Math.max(b||0,1)},this.render=function(){a.page=parseInt(e.$viewValue,10)||1},a.selectPage=function(b,c){c&&c.preventDefault();var d=!a.ngDisabled||!c;d&&a.page!==b&&b>0&&b<=a.totalPages&&(c&&c.target&&c.target.blur(),e.$setViewValue(b),e.$render())},a.getText=function(b){return a[b+"Text"]||d.config[b+"Text"]},a.noPrevious=function(){return 1===a.page},a.noNext=function(){return a.page===a.totalPages}}]).constant("paginationConfig",{itemsPerPage:10,boundaryLinks:!1,directionLinks:!0,firstText:"First",previousText:"Previous",nextText:"Next",lastText:"Last",rotate:!0}).directive("pagination",["$parse","paginationConfig",function(a,b){return{restrict:"EA",scope:{totalItems:"=",firstText:"@",previousText:"@",nextText:"@",lastText:"@",ngDisabled:"="},require:["pagination","?ngModel"],controller:"PaginationController",controllerAs:"pagination",templateUrl:function(a,b){return b.templateUrl||"template/pagination/pagination.html"},replace:!0,link:function(c,d,e,f){function g(a,b,c){return{number:a,text:b,active:c}}function h(a,b){var c=[],d=1,e=b,f=angular.isDefined(k)&&b>k;f&&(l?(d=Math.max(a-Math.floor(k/2),1),e=d+k-1,e>b&&(e=b,d=e-k+1)):(d=(Math.ceil(a/k)-1)*k+1,e=Math.min(d+k-1,b)));for(var h=d;e>=h;h++){var i=g(h,h,h===a);c.push(i)}if(f&&!l){if(d>1){var j=g(d-1,"...",!1);c.unshift(j)}if(b>e){var m=g(e+1,"...",!1);c.push(m)}}return c}var i=f[0],j=f[1];if(j){var k=angular.isDefined(e.maxSize)?c.$parent.$eval(e.maxSize):b.maxSize,l=angular.isDefined(e.rotate)?c.$parent.$eval(e.rotate):b.rotate;c.boundaryLinks=angular.isDefined(e.boundaryLinks)?c.$parent.$eval(e.boundaryLinks):b.boundaryLinks,c.directionLinks=angular.isDefined(e.directionLinks)?c.$parent.$eval(e.directionLinks):b.directionLinks,i.init(j,b),e.maxSize&&c.$parent.$watch(a(e.maxSize),function(a){k=parseInt(a,10),i.render()});var m=i.render;i.render=function(){m(),c.page>0&&c.page<=c.totalPages&&(c.pages=h(c.page,c.totalPages))}}}}}]).constant("pagerConfig",{itemsPerPage:10,previousText:"« Previous",nextText:"Next »",align:!0}).directive("pager",["pagerConfig",function(a){return{restrict:"EA",scope:{totalItems:"=",previousText:"@",nextText:"@"},require:["pager","?ngModel"],controller:"PaginationController",templateUrl:"template/pagination/pager.html",replace:!0,link:function(b,c,d,e){var f=e[0],g=e[1];g&&(b.align=angular.isDefined(d.align)?b.$parent.$eval(d.align):a.align,f.init(g,a))}}}]),angular.module("ui.bootstrap.tooltip",["ui.bootstrap.position","ui.bootstrap.bindHtml"]).provider("$tooltip",function(){function a(a){var b=/[A-Z]/g,c="-";return a.replace(b,function(a,b){return(b?c:"")+a.toLowerCase()})}var b={placement:"top",animation:!0,popupDelay:0,useContentExp:!1},c={mouseenter:"mouseleave",click:"click",focus:"blur"},d={};this.options=function(a){angular.extend(d,a)},this.setTriggers=function(a){angular.extend(c,a)},this.$get=["$window","$compile","$timeout","$document","$position","$interpolate","$rootScope",function(e,f,g,h,i,j,k){return function(e,l,m,n){function o(a){var b=(a||n.trigger||m).split(" "),d=b.map(function(a){return c[a]||a});return{show:b,hide:d}}n=angular.extend({},b,d,n);var p=a(e),q=j.startSymbol(),r=j.endSymbol(),s="<div "+p+'-popup title="'+q+"title"+r+'" '+(n.useContentExp?'content-exp="contentExp()" ':'content="'+q+"content"+r+'" ')+'placement="'+q+"placement"+r+'" popup-class="'+q+"popupClass"+r+'" animation="animation" is-open="isOpen"origin-scope="origScope" ></div>';return{restrict:"EA",compile:function(){var a=f(s);return function(b,c,d){function f(){F.isOpen?m():j()}function j(){(!E||b.$eval(d[l+"Enable"]))&&(t(),F.popupDelay?B||(B=g(p,F.popupDelay,!1),B.then(function(a){a()})):p()())}function m(){q(),k.$$phase||k.$digest()}function p(){return B=null,A&&(g.cancel(A),A=null),(n.useContentExp?F.contentExp():F.content)?(r(),y.css({top:0,left:0,display:"block"}),H(),F.isOpen=!0,F.$apply(),H):angular.noop}function q(){F.isOpen=!1,g.cancel(B),B=null,F.animation?A||(A=g(s,500)):s()}function r(){y&&s(),z=F.$new(),y=a(z,function(a){C?h.find("body").append(a):c.after(a)}),n.useContentExp&&(z.$watch("contentExp()",function(a){!a&&F.isOpen&&q()}),z.$watch(function(){G||(G=!0,z.$$postDigest(function(){G=!1,I()}))}))}function s(){A=null,y&&(y.remove(),y=null),z&&(z.$destroy(),z=null)}function t(){u(),v(),w()}function u(){F.popupClass=d[l+"Class"]}function v(){var a=d[l+"Placement"];F.placement=angular.isDefined(a)?a:n.placement}function w(){var a=d[l+"PopupDelay"],b=parseInt(a,10);F.popupDelay=isNaN(b)?n.popupDelay:b}function x(){var a=d[l+"Trigger"];J(),D=o(a),D.show.forEach(function(a,b){a===D.hide[b]?c.bind(a,f):a&&(c.bind(a,j),c.bind(D.hide[b],m))})}var y,z,A,B,C=angular.isDefined(n.appendToBody)?n.appendToBody:!1,D=o(void 0),E=angular.isDefined(d[l+"Enable"]),F=b.$new(!0),G=!1,H=function(){if(y){var a=i.positionElements(c,y,F.placement,C);a.top+="px",a.left+="px",y.css(a)}},I=function(){g(H,0,!1)};F.origScope=b,F.isOpen=!1,F.contentExp=function(){return b.$eval(d[e])},n.useContentExp||d.$observe(e,function(a){F.content=a,!a&&F.isOpen?q():I()}),d.$observe("disabled",function(a){B&&a&&g.cancel(B),a&&F.isOpen&&q()}),d.$observe(l+"Title",function(a){F.title=a,I()}),d.$observe(l+"Placement",function(){F.isOpen&&g(function(){v(),p()()},0,!1)});var J=function(){D.show.forEach(function(a){c.unbind(a,j)}),D.hide.forEach(function(a){c.unbind(a,m)})};x();var K=b.$eval(d[l+"Animation"]);F.animation=angular.isDefined(K)?!!K:n.animation;var L=b.$eval(d[l+"AppendToBody"]);C=angular.isDefined(L)?L:C,C&&b.$on("$locationChangeSuccess",function(){F.isOpen&&q()}),b.$on("$destroy",function(){g.cancel(A),g.cancel(B),J(),s(),F=null})}}}}}]}).directive("tooltipTemplateTransclude",["$animate","$sce","$compile","$templateRequest",function(a,b,c,d){return{link:function(e,f,g){var h,i,j,k=e.$eval(g.tooltipTemplateTranscludeScope),l=0,m=function(){i&&(i.remove(),i=null),h&&(h.$destroy(),h=null),j&&(a.leave(j).then(function(){i=null}),i=j,j=null)};e.$watch(b.parseAsResourceUrl(g.tooltipTemplateTransclude),function(b){var g=++l;b?(d(b,!0).then(function(d){if(g===l){var e=k.$new(),i=d,n=c(i)(e,function(b){m(),a.enter(b,f)});h=e,j=n,h.$emit("$includeContentLoaded",b)}},function(){g===l&&(m(),e.$emit("$includeContentError",b))}),e.$emit("$includeContentRequested",b)):m()}),e.$on("$destroy",m)}}}]).directive("tooltipClasses",function(){return{restrict:"A",link:function(a,b,c){a.placement&&b.addClass(a.placement),a.popupClass&&b.addClass(a.popupClass),a.animation()&&b.addClass(c.tooltipAnimationClass)}}}).directive("tooltipPopup",function(){return{restrict:"EA",replace:!0,scope:{content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-popup.html"}}).directive("tooltip",["$tooltip",function(a){return a("tooltip","tooltip","mouseenter")}]).directive("tooltipTemplatePopup",function(){return{restrict:"EA",replace:!0,scope:{contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&",originScope:"&"},templateUrl:"template/tooltip/tooltip-template-popup.html"}}).directive("tooltipTemplate",["$tooltip",function(a){return a("tooltipTemplate","tooltip","mouseenter",{useContentExp:!0})}]).directive("tooltipHtmlPopup",function(){return{restrict:"EA",replace:!0,scope:{contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-html-popup.html"}}).directive("tooltipHtml",["$tooltip",function(a){return a("tooltipHtml","tooltip","mouseenter",{useContentExp:!0})}]).directive("tooltipHtmlUnsafePopup",function(){return{restrict:"EA",replace:!0,scope:{content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-html-unsafe-popup.html"}}).value("tooltipHtmlUnsafeSuppressDeprecated",!1).directive("tooltipHtmlUnsafe",["$tooltip","tooltipHtmlUnsafeSuppressDeprecated","$log",function(a,b,c){return b||c.warn("tooltip-html-unsafe is now deprecated. Use tooltip-html or tooltip-template instead."),a("tooltipHtmlUnsafe","tooltip","mouseenter")}]),angular.module("ui.bootstrap.popover",["ui.bootstrap.tooltip"]).directive("popoverTemplatePopup",function(){return{restrict:"EA",replace:!0,scope:{title:"@",contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&",originScope:"&"},templateUrl:"template/popover/popover-template.html"}}).directive("popoverTemplate",["$tooltip",function(a){return a("popoverTemplate","popover","click",{useContentExp:!0})}]).directive("popoverHtmlPopup",function(){return{restrict:"EA",replace:!0,scope:{contentExp:"&",title:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/popover/popover-html.html"}}).directive("popoverHtml",["$tooltip",function(a){return a("popoverHtml","popover","click",{useContentExp:!0})}]).directive("popoverPopup",function(){return{restrict:"EA",replace:!0,scope:{title:"@",content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/popover/popover.html"}}).directive("popover",["$tooltip",function(a){return a("popover","popover","click")}]),angular.module("ui.bootstrap.progressbar",[]).constant("progressConfig",{animate:!0,max:100}).controller("ProgressController",["$scope","$attrs","progressConfig",function(a,b,c){var d=this,e=angular.isDefined(b.animate)?a.$parent.$eval(b.animate):c.animate;this.bars=[],a.max=angular.isDefined(a.max)?a.max:c.max,this.addBar=function(b,c){e||c.css({transition:"none"}),this.bars.push(b),b.max=a.max,b.$watch("value",function(){b.recalculatePercentage()}),b.recalculatePercentage=function(){b.percent=+(100*b.value/b.max).toFixed(2);var a=0;d.bars.forEach(function(b){a+=b.percent}),a>100&&(b.percent-=a-100)},b.$on("$destroy",function(){c=null,d.removeBar(b)})},this.removeBar=function(a){this.bars.splice(this.bars.indexOf(a),1)},a.$watch("max",function(){d.bars.forEach(function(b){b.max=a.max,b.recalculatePercentage()})})}]).directive("progress",function(){return{restrict:"EA",replace:!0,transclude:!0,controller:"ProgressController",require:"progress",scope:{max:"=?"},templateUrl:"template/progressbar/progress.html"}}).directive("bar",function(){return{restrict:"EA",replace:!0,transclude:!0,require:"^progress",scope:{value:"=",type:"@"},templateUrl:"template/progressbar/bar.html",link:function(a,b,c,d){d.addBar(a,b)}}}).directive("progressbar",function(){return{restrict:"EA",replace:!0,transclude:!0,controller:"ProgressController",scope:{value:"=",max:"=?",type:"@"},templateUrl:"template/progressbar/progressbar.html",link:function(a,b,c,d){d.addBar(a,angular.element(b.children()[0]))}}}),angular.module("ui.bootstrap.rating",[]).constant("ratingConfig",{max:5,stateOn:null,stateOff:null,titles:["one","two","three","four","five"]}).controller("RatingController",["$scope","$attrs","ratingConfig",function(a,b,c){var d={$setViewValue:angular.noop};this.init=function(e){d=e,d.$render=this.render,d.$formatters.push(function(a){return angular.isNumber(a)&&a<<0!==a&&(a=Math.round(a)),a}),this.stateOn=angular.isDefined(b.stateOn)?a.$parent.$eval(b.stateOn):c.stateOn,this.stateOff=angular.isDefined(b.stateOff)?a.$parent.$eval(b.stateOff):c.stateOff;var f=angular.isDefined(b.titles)?a.$parent.$eval(b.titles):c.titles;this.titles=angular.isArray(f)&&f.length>0?f:c.titles;var g=angular.isDefined(b.ratingStates)?a.$parent.$eval(b.ratingStates):new Array(angular.isDefined(b.max)?a.$parent.$eval(b.max):c.max);a.range=this.buildTemplateObjects(g)},this.buildTemplateObjects=function(a){for(var b=0,c=a.length;c>b;b++)a[b]=angular.extend({index:b},{stateOn:this.stateOn,stateOff:this.stateOff,title:this.getTitle(b)},a[b]);return a},this.getTitle=function(a){return a>=this.titles.length?a+1:this.titles[a]},a.rate=function(b){!a.readonly&&b>=0&&b<=a.range.length&&(d.$setViewValue(d.$viewValue===b?0:b),d.$render())},a.enter=function(b){a.readonly||(a.value=b),a.onHover({value:b})},a.reset=function(){a.value=d.$viewValue,a.onLeave()},a.onKeydown=function(b){/(37|38|39|40)/.test(b.which)&&(b.preventDefault(),b.stopPropagation(),a.rate(a.value+(38===b.which||39===b.which?1:-1)))},this.render=function(){a.value=d.$viewValue}}]).directive("rating",function(){return{restrict:"EA",require:["rating","ngModel"],scope:{readonly:"=?",onHover:"&",onLeave:"&"},controller:"RatingController",templateUrl:"template/rating/rating.html",replace:!0,link:function(a,b,c,d){var e=d[0],f=d[1];e.init(f)}}}),angular.module("ui.bootstrap.tabs",[]).controller("TabsetController",["$scope",function(a){var b=this,c=b.tabs=a.tabs=[];b.select=function(a){angular.forEach(c,function(b){b.active&&b!==a&&(b.active=!1,b.onDeselect())}),a.active=!0,a.onSelect()},b.addTab=function(a){c.push(a),1===c.length&&a.active!==!1?a.active=!0:a.active?b.select(a):a.active=!1},b.removeTab=function(a){var e=c.indexOf(a);if(a.active&&c.length>1&&!d){var f=e==c.length-1?e-1:e+1;b.select(c[f])}c.splice(e,1)};var d;a.$on("$destroy",function(){d=!0})}]).directive("tabset",function(){return{restrict:"EA",transclude:!0,replace:!0,scope:{type:"@"},controller:"TabsetController",templateUrl:"template/tabs/tabset.html",link:function(a,b,c){a.vertical=angular.isDefined(c.vertical)?a.$parent.$eval(c.vertical):!1,a.justified=angular.isDefined(c.justified)?a.$parent.$eval(c.justified):!1}}}).directive("tab",["$parse","$log",function(a,b){return{require:"^tabset",restrict:"EA",replace:!0,templateUrl:"template/tabs/tab.html",transclude:!0,scope:{active:"=?",heading:"@",onSelect:"&select",onDeselect:"&deselect"},controller:function(){},link:function(c,d,e,f,g){c.$watch("active",function(a){a&&f.select(c)}),c.disabled=!1,e.disable&&c.$parent.$watch(a(e.disable),function(a){c.disabled=!!a}),e.disabled&&(b.warn('Use of "disabled" attribute has been deprecated, please use "disable"'),c.$parent.$watch(a(e.disabled),function(a){c.disabled=!!a})),c.select=function(){c.disabled||(c.active=!0)},f.addTab(c),c.$on("$destroy",function(){f.removeTab(c)}),c.$transcludeFn=g}}}]).directive("tabHeadingTransclude",[function(){return{restrict:"A",require:"^tab",link:function(a,b){a.$watch("headingElement",function(a){a&&(b.html(""),b.append(a))})}}}]).directive("tabContentTransclude",function(){function a(a){return a.tagName&&(a.hasAttribute("tab-heading")||a.hasAttribute("data-tab-heading")||"tab-heading"===a.tagName.toLowerCase()||"data-tab-heading"===a.tagName.toLowerCase())}return{restrict:"A",require:"^tabset",link:function(b,c,d){var e=b.$eval(d.tabContentTransclude);e.$transcludeFn(e.$parent,function(b){angular.forEach(b,function(b){a(b)?e.headingElement=b:c.append(b)})})}}}),angular.module("ui.bootstrap.timepicker",[]).constant("timepickerConfig",{hourStep:1,minuteStep:1,showMeridian:!0,meridians:null,readonlyInput:!1,mousewheel:!0,arrowkeys:!0,showSpinners:!0}).controller("TimepickerController",["$scope","$attrs","$parse","$log","$locale","timepickerConfig",function(a,b,c,d,e,f){function g(){var b=parseInt(a.hours,10),c=a.showMeridian?b>0&&13>b:b>=0&&24>b;return c?(a.showMeridian&&(12===b&&(b=0),a.meridian===q[1]&&(b+=12)),b):void 0}function h(){var b=parseInt(a.minutes,10);return b>=0&&60>b?b:void 0}function i(a){return angular.isDefined(a)&&a.toString().length<2?"0"+a:a.toString()}function j(a){k(),p.$setViewValue(new Date(o)),l(a)}function k(){p.$setValidity("time",!0),a.invalidHours=!1,a.invalidMinutes=!1}function l(b){var c=o.getHours(),d=o.getMinutes();a.showMeridian&&(c=0===c||12===c?12:c%12),a.hours="h"===b?c:i(c),"m"!==b&&(a.minutes=i(d)),a.meridian=o.getHours()<12?q[0]:q[1]}function m(a,b){var c=new Date(a.getTime()+6e4*b),d=new Date(a);return d.setHours(c.getHours(),c.getMinutes()),d}function n(a){o=m(o,a),j()}var o=new Date,p={$setViewValue:angular.noop},q=angular.isDefined(b.meridians)?a.$parent.$eval(b.meridians):f.meridians||e.DATETIME_FORMATS.AMPMS;this.init=function(c,d){p=c,p.$render=this.render,p.$formatters.unshift(function(a){return a?new Date(a):null});var e=d.eq(0),g=d.eq(1),h=angular.isDefined(b.mousewheel)?a.$parent.$eval(b.mousewheel):f.mousewheel;h&&this.setupMousewheelEvents(e,g);var i=angular.isDefined(b.arrowkeys)?a.$parent.$eval(b.arrowkeys):f.arrowkeys;i&&this.setupArrowkeyEvents(e,g),a.readonlyInput=angular.isDefined(b.readonlyInput)?a.$parent.$eval(b.readonlyInput):f.readonlyInput,this.setupInputEvents(e,g)};var r=f.hourStep;b.hourStep&&a.$parent.$watch(c(b.hourStep),function(a){r=parseInt(a,10)});var s=f.minuteStep;b.minuteStep&&a.$parent.$watch(c(b.minuteStep),function(a){s=parseInt(a,10)});var t;a.$parent.$watch(c(b.min),function(a){var b=new Date(a);t=isNaN(b)?void 0:b});var u;a.$parent.$watch(c(b.max),function(a){var b=new Date(a);u=isNaN(b)?void 0:b}),a.noIncrementHours=function(){var a=m(o,60*r);return a>u||o>a&&t>a},a.noDecrementHours=function(){var a=m(o,60*-r);return t>a||a>o&&a>u},a.noIncrementMinutes=function(){var a=m(o,s);return a>u||o>a&&t>a},a.noDecrementMinutes=function(){var a=m(o,-s);return t>a||a>o&&a>u},a.noToggleMeridian=function(){return o.getHours()<13?m(o,720)>u:m(o,-720)<t},a.showMeridian=f.showMeridian,b.showMeridian&&a.$parent.$watch(c(b.showMeridian),function(b){if(a.showMeridian=!!b,p.$error.time){var c=g(),d=h();angular.isDefined(c)&&angular.isDefined(d)&&(o.setHours(c),j())}else l()}),this.setupMousewheelEvents=function(b,c){var d=function(a){a.originalEvent&&(a=a.originalEvent);var b=a.wheelDelta?a.wheelDelta:-a.deltaY;return a.detail||b>0};b.bind("mousewheel wheel",function(b){a.$apply(d(b)?a.incrementHours():a.decrementHours()),b.preventDefault()}),c.bind("mousewheel wheel",function(b){a.$apply(d(b)?a.incrementMinutes():a.decrementMinutes()),b.preventDefault()})},this.setupArrowkeyEvents=function(b,c){b.bind("keydown",function(b){38===b.which?(b.preventDefault(),a.incrementHours(),a.$apply()):40===b.which&&(b.preventDefault(),a.decrementHours(),a.$apply())}),c.bind("keydown",function(b){38===b.which?(b.preventDefault(),a.incrementMinutes(),a.$apply()):40===b.which&&(b.preventDefault(),a.decrementMinutes(),a.$apply())})},this.setupInputEvents=function(b,c){if(a.readonlyInput)return a.updateHours=angular.noop,void(a.updateMinutes=angular.noop);var d=function(b,c){p.$setViewValue(null),p.$setValidity("time",!1),angular.isDefined(b)&&(a.invalidHours=b),angular.isDefined(c)&&(a.invalidMinutes=c)};a.updateHours=function(){var a=g();angular.isDefined(a)?(o.setHours(a),t>o||o>u?d(!0):j("h")):d(!0)},b.bind("blur",function(){!a.invalidHours&&a.hours<10&&a.$apply(function(){a.hours=i(a.hours)})}),a.updateMinutes=function(){var a=h();angular.isDefined(a)?(o.setMinutes(a),t>o||o>u?d(void 0,!0):j("m")):d(void 0,!0)},c.bind("blur",function(){!a.invalidMinutes&&a.minutes<10&&a.$apply(function(){a.minutes=i(a.minutes)})})},this.render=function(){var b=p.$viewValue;isNaN(b)?(p.$setValidity("time",!1),d.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')):(b&&(o=b),t>o||o>u?(p.$setValidity("time",!1),a.invalidHours=!0,a.invalidMinutes=!0):k(),l())},a.showSpinners=angular.isDefined(b.showSpinners)?a.$parent.$eval(b.showSpinners):f.showSpinners,a.incrementHours=function(){a.noIncrementHours()||n(60*r)},a.decrementHours=function(){a.noDecrementHours()||n(60*-r)},a.incrementMinutes=function(){a.noIncrementMinutes()||n(s)},a.decrementMinutes=function(){a.noDecrementMinutes()||n(-s)},a.toggleMeridian=function(){a.noToggleMeridian()||n(720*(o.getHours()<12?1:-1))}}]).directive("timepicker",function(){return{restrict:"EA",require:["timepicker","?^ngModel"],controller:"TimepickerController",replace:!0,scope:{},templateUrl:"template/timepicker/timepicker.html",link:function(a,b,c,d){var e=d[0],f=d[1];f&&e.init(f,b.find("input"))}}}),angular.module("ui.bootstrap.transition",[]).value("$transitionSuppressDeprecated",!1).factory("$transition",["$q","$timeout","$rootScope","$log","$transitionSuppressDeprecated",function(a,b,c,d,e){function f(a){for(var b in a)if(void 0!==h.style[b])return a[b]}e||d.warn("$transition is now deprecated. Use $animate from ngAnimate instead.");var g=function(d,e,f){f=f||{};var h=a.defer(),i=g[f.animation?"animationEndEventName":"transitionEndEventName"],j=function(){c.$apply(function(){d.unbind(i,j),h.resolve(d)})};return i&&d.bind(i,j),b(function(){angular.isString(e)?d.addClass(e):angular.isFunction(e)?e(d):angular.isObject(e)&&d.css(e),i||h.resolve(d)}),h.promise.cancel=function(){i&&d.unbind(i,j),h.reject("Transition cancelled")},h.promise},h=document.createElement("trans"),i={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"},j={WebkitTransition:"webkitAnimationEnd",MozTransition:"animationend",OTransition:"oAnimationEnd",transition:"animationend"};return g.transitionEndEventName=f(i),g.animationEndEventName=f(j),g}]),angular.module("ui.bootstrap.typeahead",["ui.bootstrap.position","ui.bootstrap.bindHtml"]).factory("typeaheadParser",["$parse",function(a){var b=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/;return{parse:function(c){var d=c.match(b);if(!d)throw new Error('Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_" but got "'+c+'".');return{itemName:d[3],source:a(d[4]),viewMapper:a(d[2]||d[1]),modelMapper:a(d[1])}}}}]).directive("typeahead",["$compile","$parse","$q","$timeout","$document","$window","$rootScope","$position","typeaheadParser",function(a,b,c,d,e,f,g,h,i){var j=[9,13,27,38,40],k=200;return{require:"ngModel",link:function(l,m,n,o){function p(){G.moveInProgress||(G.moveInProgress=!0,G.$digest()),N&&d.cancel(N),N=d(function(){G.matches.length&&q(),G.moveInProgress=!1,G.$digest()},k)}function q(){G.position=B?h.offset(m):h.position(m),G.position.top+=m.prop("offsetHeight")}var r=l.$eval(n.typeaheadMinLength);r||0===r||(r=1);var s,t,u=l.$eval(n.typeaheadWaitMs)||0,v=l.$eval(n.typeaheadEditable)!==!1,w=b(n.typeaheadLoading).assign||angular.noop,x=b(n.typeaheadOnSelect),y=angular.isDefined(n.typeaheadSelectOnBlur)?l.$eval(n.typeaheadSelectOnBlur):!1,z=b(n.typeaheadNoResults).assign||angular.noop,A=n.typeaheadInputFormatter?b(n.typeaheadInputFormatter):void 0,B=n.typeaheadAppendToBody?l.$eval(n.typeaheadAppendToBody):!1,C=l.$eval(n.typeaheadFocusFirst)!==!1,D=n.typeaheadSelectOnExact?l.$eval(n.typeaheadSelectOnExact):!1,E=b(n.ngModel).assign,F=i.parse(n.typeahead),G=l.$new();l.$on("$destroy",function(){G.$destroy()});var H="typeahead-"+G.$id+"-"+Math.floor(1e4*Math.random());m.attr({"aria-autocomplete":"list","aria-expanded":!1,"aria-owns":H});var I=angular.element("<div typeahead-popup></div>");I.attr({id:H,matches:"matches",active:"activeIdx",select:"select(activeIdx)","move-in-progress":"moveInProgress",query:"query",position:"position"}),angular.isDefined(n.typeaheadTemplateUrl)&&I.attr("template-url",n.typeaheadTemplateUrl);var J=function(){G.matches=[],G.activeIdx=-1,m.attr("aria-expanded",!1)},K=function(a){return H+"-option-"+a};G.$watch("activeIdx",function(a){0>a?m.removeAttr("aria-activedescendant"):m.attr("aria-activedescendant",K(a))});var L=function(a,b){return G.matches.length>b&&a?a.toUpperCase()===G.matches[b].label.toUpperCase():!1},M=function(a){var b={$viewValue:a};w(l,!0),z(l,!1),c.when(F.source(l,b)).then(function(c){var d=a===o.$viewValue;if(d&&s)if(c&&c.length>0){G.activeIdx=C?0:-1,z(l,!1),G.matches.length=0;for(var e=0;e<c.length;e++)b[F.itemName]=c[e],
|
10 |
+
G.matches.push({id:K(e),label:F.viewMapper(G,b),model:c[e]});G.query=a,q(),m.attr("aria-expanded",!0),D&&1===G.matches.length&&L(a,0)&&G.select(0)}else J(),z(l,!0);d&&w(l,!1)},function(){J(),w(l,!1),z(l,!0)})};B&&(angular.element(f).bind("resize",p),e.find("body").bind("scroll",p));var N;G.moveInProgress=!1,J(),G.query=void 0;var O,P=function(a){O=d(function(){M(a)},u)},Q=function(){O&&d.cancel(O)};o.$parsers.unshift(function(a){return s=!0,0===r||a&&a.length>=r?u>0?(Q(),P(a)):M(a):(w(l,!1),Q(),J()),v?a:a?void o.$setValidity("editable",!1):(o.$setValidity("editable",!0),null)}),o.$formatters.push(function(a){var b,c,d={};return v||o.$setValidity("editable",!0),A?(d.$model=a,A(l,d)):(d[F.itemName]=a,b=F.viewMapper(l,d),d[F.itemName]=void 0,c=F.viewMapper(l,d),b!==c?b:a)}),G.select=function(a){var b,c,e={};t=!0,e[F.itemName]=c=G.matches[a].model,b=F.modelMapper(l,e),E(l,b),o.$setValidity("editable",!0),o.$setValidity("parse",!0),x(l,{$item:c,$model:b,$label:F.viewMapper(l,e)}),J(),d(function(){m[0].focus()},0,!1)},m.bind("keydown",function(a){if(0!==G.matches.length&&-1!==j.indexOf(a.which)){if(-1===G.activeIdx&&(9===a.which||13===a.which))return J(),void G.$digest();a.preventDefault(),40===a.which?(G.activeIdx=(G.activeIdx+1)%G.matches.length,G.$digest()):38===a.which?(G.activeIdx=(G.activeIdx>0?G.activeIdx:G.matches.length)-1,G.$digest()):13===a.which||9===a.which?G.$apply(function(){G.select(G.activeIdx)}):27===a.which&&(a.stopPropagation(),J(),G.$digest())}}),m.bind("blur",function(){y&&G.matches.length&&-1!==G.activeIdx&&!t&&(t=!0,G.$apply(function(){G.select(G.activeIdx)})),s=!1,t=!1});var R=function(a){m[0]!==a.target&&3!==a.which&&0!==G.matches.length&&(J(),g.$$phase||G.$digest())};e.bind("click",R),l.$on("$destroy",function(){e.unbind("click",R),B&&S.remove(),I.remove()});var S=a(I)(G);B?e.find("body").append(S):m.after(S)}}}]).directive("typeaheadPopup",function(){return{restrict:"EA",scope:{matches:"=",query:"=",active:"=",position:"&",moveInProgress:"=",select:"&"},replace:!0,templateUrl:"template/typeahead/typeahead-popup.html",link:function(a,b,c){a.templateUrl=c.templateUrl,a.isOpen=function(){return a.matches.length>0},a.isActive=function(b){return a.active==b},a.selectActive=function(b){a.active=b},a.selectMatch=function(b){a.select({activeIdx:b})}}}}).directive("typeaheadMatch",["$templateRequest","$compile","$parse",function(a,b,c){return{restrict:"EA",scope:{index:"=",match:"=",query:"="},link:function(d,e,f){var g=c(f.templateUrl)(d.$parent)||"template/typeahead/typeahead-match.html";a(g).then(function(a){b(a.trim())(d,function(a){e.replaceWith(a)})})}}}]).filter("typeaheadHighlight",function(){function a(a){return a.replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}return function(b,c){return c?(""+b).replace(new RegExp(a(c),"gi"),"<strong>$&</strong>"):b}}),angular.module("template/accordion/accordion-group.html",[]).run(["$templateCache",function(a){a.put("template/accordion/accordion-group.html",'<div class="panel panel-default" ng-class="{\'panel-open\': isOpen}">\n <div class="panel-heading">\n <h4 class="panel-title">\n <a href tabindex="0" class="accordion-toggle" ng-click="toggleOpen()" accordion-transclude="heading"><span ng-class="{\'text-muted\': isDisabled}">{{heading}}</span></a>\n </h4>\n </div>\n <div class="panel-collapse collapse" collapse="!isOpen">\n <div class="panel-body" ng-transclude></div>\n </div>\n</div>\n')}]),angular.module("template/accordion/accordion.html",[]).run(["$templateCache",function(a){a.put("template/accordion/accordion.html",'<div class="panel-group" ng-transclude></div>')}]),angular.module("template/alert/alert.html",[]).run(["$templateCache",function(a){a.put("template/alert/alert.html",'<div class="alert" ng-class="[\'alert-\' + (type || \'warning\'), closeable ? \'alert-dismissible\' : null]" role="alert">\n <button ng-show="closeable" type="button" class="close" ng-click="close($event)">\n <span aria-hidden="true">×</span>\n <span class="sr-only">Close</span>\n </button>\n <div ng-transclude></div>\n</div>\n')}]),angular.module("template/carousel/carousel.html",[]).run(["$templateCache",function(a){a.put("template/carousel/carousel.html",'<div ng-mouseenter="pause()" ng-mouseleave="play()" class="carousel" ng-swipe-right="prev()" ng-swipe-left="next()">\n <ol class="carousel-indicators" ng-show="slides.length > 1">\n <li ng-repeat="slide in slides | orderBy:indexOfSlide track by $index" ng-class="{active: isActive(slide)}" ng-click="select(slide)"></li>\n </ol>\n <div class="carousel-inner" ng-transclude></div>\n <a class="left carousel-control" ng-click="prev()" ng-show="slides.length > 1"><span class="glyphicon glyphicon-chevron-left"></span></a>\n <a class="right carousel-control" ng-click="next()" ng-show="slides.length > 1"><span class="glyphicon glyphicon-chevron-right"></span></a>\n</div>\n')}]),angular.module("template/carousel/slide.html",[]).run(["$templateCache",function(a){a.put("template/carousel/slide.html",'<div ng-class="{\n \'active\': active\n }" class="item text-center" ng-transclude></div>\n')}]),angular.module("template/datepicker/datepicker.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/datepicker.html",'<div ng-switch="datepickerMode" role="application" ng-keydown="keydown($event)">\n <daypicker ng-switch-when="day" tabindex="0"></daypicker>\n <monthpicker ng-switch-when="month" tabindex="0"></monthpicker>\n <yearpicker ng-switch-when="year" tabindex="0"></yearpicker>\n</div>')}]),angular.module("template/datepicker/day.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/day.html",'<table role="grid" aria-labelledby="{{::uniqueId}}-title" aria-activedescendant="{{activeDateId}}">\n <thead>\n <tr>\n <th><button type="button" class="btn btn-default btn-sm pull-left" ng-click="move(-1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-left"></i></button></th>\n <th colspan="{{::5 + showWeeks}}"><button id="{{::uniqueId}}-title" role="heading" aria-live="assertive" aria-atomic="true" type="button" class="btn btn-default btn-sm" ng-click="toggleMode()" ng-disabled="datepickerMode === maxMode" tabindex="-1" style="width:100%;"><strong>{{title}}</strong></button></th>\n <th><button type="button" class="btn btn-default btn-sm pull-right" ng-click="move(1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-right"></i></button></th>\n </tr>\n <tr>\n <th ng-if="showWeeks" class="text-center"></th>\n <th ng-repeat="label in ::labels track by $index" class="text-center"><small aria-label="{{::label.full}}">{{::label.abbr}}</small></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="row in rows track by $index">\n <td ng-if="showWeeks" class="text-center h6"><em>{{ weekNumbers[$index] }}</em></td>\n <td ng-repeat="dt in row track by dt.date" class="text-center" role="gridcell" id="{{::dt.uid}}" ng-class="::dt.customClass">\n <button type="button" style="min-width:100%;" class="btn btn-default btn-sm" ng-class="{\'btn-info\': dt.selected, active: isActive(dt)}" ng-click="select(dt.date)" ng-disabled="dt.disabled" tabindex="-1"><span ng-class="::{\'text-muted\': dt.secondary, \'text-info\': dt.current}">{{::dt.label}}</span></button>\n </td>\n </tr>\n </tbody>\n</table>\n')}]),angular.module("template/datepicker/month.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/month.html",'<table role="grid" aria-labelledby="{{::uniqueId}}-title" aria-activedescendant="{{activeDateId}}">\n <thead>\n <tr>\n <th><button type="button" class="btn btn-default btn-sm pull-left" ng-click="move(-1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-left"></i></button></th>\n <th><button id="{{::uniqueId}}-title" role="heading" aria-live="assertive" aria-atomic="true" type="button" class="btn btn-default btn-sm" ng-click="toggleMode()" ng-disabled="datepickerMode === maxMode" tabindex="-1" style="width:100%;"><strong>{{title}}</strong></button></th>\n <th><button type="button" class="btn btn-default btn-sm pull-right" ng-click="move(1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-right"></i></button></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="row in rows track by $index">\n <td ng-repeat="dt in row track by dt.date" class="text-center" role="gridcell" id="{{::dt.uid}}" ng-class="::dt.customClass">\n <button type="button" style="min-width:100%;" class="btn btn-default" ng-class="{\'btn-info\': dt.selected, active: isActive(dt)}" ng-click="select(dt.date)" ng-disabled="dt.disabled" tabindex="-1"><span ng-class="::{\'text-info\': dt.current}">{{::dt.label}}</span></button>\n </td>\n </tr>\n </tbody>\n</table>\n')}]),angular.module("template/datepicker/popup.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/popup.html",'<ul class="dropdown-menu" ng-if="isOpen" style="display: block" ng-style="{top: position.top+\'px\', left: position.left+\'px\'}" ng-keydown="keydown($event)" ng-click="$event.stopPropagation()">\n <li ng-transclude></li>\n <li ng-if="showButtonBar" style="padding:10px 9px 2px">\n <span class="btn-group pull-left">\n <button type="button" class="btn btn-sm btn-info" ng-click="select(\'today\')">{{ getText(\'current\') }}</button>\n <button type="button" class="btn btn-sm btn-danger" ng-click="select(null)">{{ getText(\'clear\') }}</button>\n </span>\n <button type="button" class="btn btn-sm btn-success pull-right" ng-click="close()">{{ getText(\'close\') }}</button>\n </li>\n</ul>\n')}]),angular.module("template/datepicker/year.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/year.html",'<table role="grid" aria-labelledby="{{::uniqueId}}-title" aria-activedescendant="{{activeDateId}}">\n <thead>\n <tr>\n <th><button type="button" class="btn btn-default btn-sm pull-left" ng-click="move(-1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-left"></i></button></th>\n <th colspan="3"><button id="{{::uniqueId}}-title" role="heading" aria-live="assertive" aria-atomic="true" type="button" class="btn btn-default btn-sm" ng-click="toggleMode()" ng-disabled="datepickerMode === maxMode" tabindex="-1" style="width:100%;"><strong>{{title}}</strong></button></th>\n <th><button type="button" class="btn btn-default btn-sm pull-right" ng-click="move(1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-right"></i></button></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="row in rows track by $index">\n <td ng-repeat="dt in row track by dt.date" class="text-center" role="gridcell" id="{{::dt.uid}}">\n <button type="button" style="min-width:100%;" class="btn btn-default" ng-class="{\'btn-info\': dt.selected, active: isActive(dt)}" ng-click="select(dt.date)" ng-disabled="dt.disabled" tabindex="-1"><span ng-class="::{\'text-info\': dt.current}">{{::dt.label}}</span></button>\n </td>\n </tr>\n </tbody>\n</table>\n')}]),angular.module("template/modal/backdrop.html",[]).run(["$templateCache",function(a){a.put("template/modal/backdrop.html",'<div class="modal-backdrop"\n modal-animation-class="fade"\n modal-in-class="in"\n ng-style="{\'z-index\': 1040 + (index && 1 || 0) + index*10}"\n></div>\n')}]),angular.module("template/modal/window.html",[]).run(["$templateCache",function(a){a.put("template/modal/window.html",'<div modal-render="{{$isRendered}}" tabindex="-1" role="dialog" class="modal"\n modal-animation-class="fade"\n modal-in-class="in"\n ng-style="{\'z-index\': 1050 + index*10, display: \'block\'}" ng-click="close($event)">\n <div class="modal-dialog" ng-class="size ? \'modal-\' + size : \'\'"><div class="modal-content" modal-transclude></div></div>\n</div>\n')}]),angular.module("template/pagination/pager.html",[]).run(["$templateCache",function(a){a.put("template/pagination/pager.html",'<ul class="pager">\n <li ng-class="{disabled: noPrevious(), previous: align}"><a href ng-click="selectPage(page - 1, $event)">{{::getText(\'previous\')}}</a></li>\n <li ng-class="{disabled: noNext(), next: align}"><a href ng-click="selectPage(page + 1, $event)">{{::getText(\'next\')}}</a></li>\n</ul>')}]),angular.module("template/pagination/pagination.html",[]).run(["$templateCache",function(a){a.put("template/pagination/pagination.html",'<ul class="pagination">\n <li ng-if="::boundaryLinks" ng-class="{disabled: noPrevious()||ngDisabled}" class="pagination-first"><a href ng-click="selectPage(1, $event)">{{::getText(\'first\')}}</a></li>\n <li ng-if="::directionLinks" ng-class="{disabled: noPrevious()||ngDisabled}" class="pagination-prev"><a href ng-click="selectPage(page - 1, $event)">{{::getText(\'previous\')}}</a></li>\n <li ng-repeat="page in pages track by $index" ng-class="{active: page.active,disabled: ngDisabled&&!page.active}" class="pagination-page"><a href ng-click="selectPage(page.number, $event)">{{page.text}}</a></li>\n <li ng-if="::directionLinks" ng-class="{disabled: noNext()||ngDisabled}" class="pagination-next"><a href ng-click="selectPage(page + 1, $event)">{{::getText(\'next\')}}</a></li>\n <li ng-if="::boundaryLinks" ng-class="{disabled: noNext()||ngDisabled}" class="pagination-last"><a href ng-click="selectPage(totalPages, $event)">{{::getText(\'last\')}}</a></li>\n</ul>\n')}]),angular.module("template/tooltip/tooltip-html-popup.html",[]).run(["$templateCache",function(a){a.put("template/tooltip/tooltip-html-popup.html",'<div class="tooltip"\n tooltip-animation-class="fade"\n tooltip-classes\n ng-class="{ in: isOpen() }">\n <div class="tooltip-arrow"></div>\n <div class="tooltip-inner" ng-bind-html="contentExp()"></div>\n</div>\n')}]),angular.module("template/tooltip/tooltip-html-unsafe-popup.html",[]).run(["$templateCache",function(a){a.put("template/tooltip/tooltip-html-unsafe-popup.html",'<div class="tooltip"\n tooltip-animation-class="fade"\n tooltip-classes\n ng-class="{ in: isOpen() }">\n <div class="tooltip-arrow"></div>\n <div class="tooltip-inner" bind-html-unsafe="content"></div>\n</div>\n')}]),angular.module("template/tooltip/tooltip-popup.html",[]).run(["$templateCache",function(a){a.put("template/tooltip/tooltip-popup.html",'<div class="tooltip"\n tooltip-animation-class="fade"\n tooltip-classes\n ng-class="{ in: isOpen() }">\n <div class="tooltip-arrow"></div>\n <div class="tooltip-inner" ng-bind="content"></div>\n</div>\n')}]),angular.module("template/tooltip/tooltip-template-popup.html",[]).run(["$templateCache",function(a){a.put("template/tooltip/tooltip-template-popup.html",'<div class="tooltip"\n tooltip-animation-class="fade"\n tooltip-classes\n ng-class="{ in: isOpen() }">\n <div class="tooltip-arrow"></div>\n <div class="tooltip-inner"\n tooltip-template-transclude="contentExp()"\n tooltip-template-transclude-scope="originScope()"></div>\n</div>\n')}]),angular.module("template/popover/popover-html.html",[]).run(["$templateCache",function(a){a.put("template/popover/popover-html.html",'<div class="popover"\n tooltip-animation-class="fade"\n tooltip-classes\n ng-class="{ in: isOpen() }">\n <div class="arrow"></div>\n\n <div class="popover-inner">\n <h3 class="popover-title" ng-bind="title" ng-if="title"></h3>\n <div class="popover-content" ng-bind-html="contentExp()"></div>\n </div>\n</div>\n')}]),angular.module("template/popover/popover-template.html",[]).run(["$templateCache",function(a){a.put("template/popover/popover-template.html",'<div class="popover"\n tooltip-animation-class="fade"\n tooltip-classes\n ng-class="{ in: isOpen() }">\n <div class="arrow"></div>\n\n <div class="popover-inner">\n <h3 class="popover-title" ng-bind="title" ng-if="title"></h3>\n <div class="popover-content"\n tooltip-template-transclude="contentExp()"\n tooltip-template-transclude-scope="originScope()"></div>\n </div>\n</div>\n')}]),angular.module("template/popover/popover.html",[]).run(["$templateCache",function(a){a.put("template/popover/popover.html",'<div class="popover"\n tooltip-animation-class="fade"\n tooltip-classes\n ng-class="{ in: isOpen() }">\n <div class="arrow"></div>\n\n <div class="popover-inner">\n <h3 class="popover-title" ng-bind="title" ng-if="title"></h3>\n <div class="popover-content" ng-bind="content"></div>\n </div>\n</div>\n')}]),angular.module("template/progressbar/bar.html",[]).run(["$templateCache",function(a){a.put("template/progressbar/bar.html",'<div class="progress-bar" ng-class="type && \'progress-bar-\' + type" role="progressbar" aria-valuenow="{{value}}" aria-valuemin="0" aria-valuemax="{{max}}" ng-style="{width: (percent < 100 ? percent : 100) + \'%\'}" aria-valuetext="{{percent | number:0}}%" style="min-width: 0;" ng-transclude></div>\n')}]),angular.module("template/progressbar/progress.html",[]).run(["$templateCache",function(a){a.put("template/progressbar/progress.html",'<div class="progress" ng-transclude></div>')}]),angular.module("template/progressbar/progressbar.html",[]).run(["$templateCache",function(a){a.put("template/progressbar/progressbar.html",'<div class="progress">\n <div class="progress-bar" ng-class="type && \'progress-bar-\' + type" role="progressbar" aria-valuenow="{{value}}" aria-valuemin="0" aria-valuemax="{{max}}" ng-style="{width: (percent < 100 ? percent : 100) + \'%\'}" aria-valuetext="{{percent | number:0}}%" style="min-width: 0;" ng-transclude></div>\n</div>\n')}]),angular.module("template/rating/rating.html",[]).run(["$templateCache",function(a){a.put("template/rating/rating.html",'<span ng-mouseleave="reset()" ng-keydown="onKeydown($event)" tabindex="0" role="slider" aria-valuemin="0" aria-valuemax="{{range.length}}" aria-valuenow="{{value}}">\n <span ng-repeat-start="r in range track by $index" class="sr-only">({{ $index < value ? \'*\' : \' \' }})</span>\n <i ng-repeat-end ng-mouseenter="enter($index + 1)" ng-click="rate($index + 1)" class="glyphicon" ng-class="$index < value && (r.stateOn || \'glyphicon-star\') || (r.stateOff || \'glyphicon-star-empty\')" ng-attr-title="{{r.title}}" ></i>\n</span>\n')}]),angular.module("template/tabs/tab.html",[]).run(["$templateCache",function(a){a.put("template/tabs/tab.html",'<li ng-class="{active: active, disabled: disabled}">\n <a href ng-click="select()" tab-heading-transclude>{{heading}}</a>\n</li>\n')}]),angular.module("template/tabs/tabset.html",[]).run(["$templateCache",function(a){a.put("template/tabs/tabset.html",'<div>\n <ul class="nav nav-{{type || \'tabs\'}}" ng-class="{\'nav-stacked\': vertical, \'nav-justified\': justified}" ng-transclude></ul>\n <div class="tab-content">\n <div class="tab-pane" \n ng-repeat="tab in tabs" \n ng-class="{active: tab.active}"\n tab-content-transclude="tab">\n </div>\n </div>\n</div>\n')}]),angular.module("template/timepicker/timepicker.html",[]).run(["$templateCache",function(a){a.put("template/timepicker/timepicker.html",'<table>\n <tbody>\n <tr class="text-center" ng-show="::showSpinners">\n <td><a ng-click="incrementHours()" ng-class="{disabled: noIncrementHours()}" class="btn btn-link"><span class="glyphicon glyphicon-chevron-up"></span></a></td>\n <td> </td>\n <td><a ng-click="incrementMinutes()" ng-class="{disabled: noIncrementMinutes()}" class="btn btn-link"><span class="glyphicon glyphicon-chevron-up"></span></a></td>\n <td ng-show="showMeridian"></td>\n </tr>\n <tr>\n <td class="form-group" ng-class="{\'has-error\': invalidHours}">\n <input style="width:50px;" type="text" ng-model="hours" ng-change="updateHours()" class="form-control text-center" ng-readonly="::readonlyInput" maxlength="2">\n </td>\n <td>:</td>\n <td class="form-group" ng-class="{\'has-error\': invalidMinutes}">\n <input style="width:50px;" type="text" ng-model="minutes" ng-change="updateMinutes()" class="form-control text-center" ng-readonly="::readonlyInput" maxlength="2">\n </td>\n <td ng-show="showMeridian"><button type="button" ng-class="{disabled: noToggleMeridian()}" class="btn btn-default text-center" ng-click="toggleMeridian()">{{meridian}}</button></td>\n </tr>\n <tr class="text-center" ng-show="::showSpinners">\n <td><a ng-click="decrementHours()" ng-class="{disabled: noDecrementHours()}" class="btn btn-link"><span class="glyphicon glyphicon-chevron-down"></span></a></td>\n <td> </td>\n <td><a ng-click="decrementMinutes()" ng-class="{disabled: noDecrementMinutes()}" class="btn btn-link"><span class="glyphicon glyphicon-chevron-down"></span></a></td>\n <td ng-show="showMeridian"></td>\n </tr>\n </tbody>\n</table>\n')}]),angular.module("template/typeahead/typeahead-match.html",[]).run(["$templateCache",function(a){a.put("template/typeahead/typeahead-match.html",'<a href tabindex="-1" bind-html-unsafe="match.label | typeaheadHighlight:query"></a>\n')}]),angular.module("template/typeahead/typeahead-popup.html",[]).run(["$templateCache",function(a){a.put("template/typeahead/typeahead-popup.html",'<ul class="dropdown-menu" ng-show="isOpen() && !moveInProgress" ng-style="{top: position().top+\'px\', left: position().left+\'px\'}" style="display: block;" role="listbox" aria-hidden="{{!isOpen()}}">\n <li ng-repeat="match in matches track by $index" ng-class="{active: isActive($index) }" ng-mouseenter="selectActive($index)" ng-click="selectMatch($index)" role="option" id="{{::match.id}}">\n <div typeahead-match index="$index" match="match" query="query" template-url="templateUrl"></div>\n </li>\n</ul>\n')}]),!angular.$$csp()&&angular.element(document).find("head").prepend('<style type="text/css">.ng-animate.item:not(.left):not(.right){-webkit-transition:0s ease-in-out left;transition:0s ease-in-out left}</style>');
|
res/bootstrap/css/egg-bootstrap.css
ADDED
@@ -0,0 +1,5319 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Bootstrap v3.3.4 (http://getbootstrap.com)
|
3 |
+
* Copyright 2011-2015 Twitter, Inc.
|
4 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5 |
+
*/
|
6 |
+
|
7 |
+
.egg-container {
|
8 |
+
/* font-family: sans-serif; */
|
9 |
+
-webkit-text-size-adjust: 100%;
|
10 |
+
-ms-text-size-adjust: 100%;
|
11 |
+
}
|
12 |
+
.egg-container {
|
13 |
+
margin: 0;
|
14 |
+
}
|
15 |
+
.egg-container input[type="button"],
|
16 |
+
.egg-container input[disabled] {
|
17 |
+
cursor: default;
|
18 |
+
}
|
19 |
+
.egg-container .thumbnail > img,
|
20 |
+
.egg-container .thumbnail a > img,
|
21 |
+
.egg-container .img-responsive {
|
22 |
+
display: block;
|
23 |
+
max-width: 100%;
|
24 |
+
height: auto;
|
25 |
+
}
|
26 |
+
.egg-container {
|
27 |
+
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
|
28 |
+
/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
|
29 |
+
}
|
30 |
+
.egg-container html {
|
31 |
+
/* font-family: sans-serif; */
|
32 |
+
-webkit-text-size-adjust: 100%;
|
33 |
+
-ms-text-size-adjust: 100%;
|
34 |
+
}
|
35 |
+
.egg-container body {
|
36 |
+
margin: 0;
|
37 |
+
}
|
38 |
+
.egg-container article,
|
39 |
+
.egg-container aside,
|
40 |
+
.egg-container details,
|
41 |
+
.egg-container figcaption,
|
42 |
+
.egg-container figure,
|
43 |
+
.egg-container footer,
|
44 |
+
.egg-container header,
|
45 |
+
.egg-container hgroup,
|
46 |
+
.egg-container main,
|
47 |
+
.egg-container menu,
|
48 |
+
.egg-container nav,
|
49 |
+
.egg-container section,
|
50 |
+
.egg-container summary {
|
51 |
+
display: block;
|
52 |
+
}
|
53 |
+
.egg-container audio,
|
54 |
+
.egg-container canvas,
|
55 |
+
.egg-container progress,
|
56 |
+
.egg-container video {
|
57 |
+
display: inline-block;
|
58 |
+
vertical-align: baseline;
|
59 |
+
}
|
60 |
+
.egg-container audio:not([controls]) {
|
61 |
+
display: none;
|
62 |
+
height: 0;
|
63 |
+
}
|
64 |
+
.egg-container [hidden],
|
65 |
+
.egg-container template {
|
66 |
+
display: none;
|
67 |
+
}
|
68 |
+
.egg-container a {
|
69 |
+
background-color: transparent;
|
70 |
+
}
|
71 |
+
.egg-container a:active,
|
72 |
+
.egg-container a:hover {
|
73 |
+
outline: 0;
|
74 |
+
}
|
75 |
+
.egg-container abbr[title] {
|
76 |
+
border-bottom: 1px dotted;
|
77 |
+
}
|
78 |
+
.egg-container b,
|
79 |
+
.egg-container strong {
|
80 |
+
font-weight: bold;
|
81 |
+
}
|
82 |
+
.egg-container dfn {
|
83 |
+
font-style: italic;
|
84 |
+
}
|
85 |
+
.egg-container h1 {
|
86 |
+
margin: .67em 0;
|
87 |
+
font-size: 2em;
|
88 |
+
}
|
89 |
+
.egg-container mark {
|
90 |
+
color: #000;
|
91 |
+
background: #ff0;
|
92 |
+
}
|
93 |
+
.egg-container small {
|
94 |
+
font-size: 80%;
|
95 |
+
}
|
96 |
+
.egg-container sub,
|
97 |
+
.egg-container sup {
|
98 |
+
position: relative;
|
99 |
+
font-size: 75%;
|
100 |
+
line-height: 0;
|
101 |
+
vertical-align: baseline;
|
102 |
+
}
|
103 |
+
.egg-container sup {
|
104 |
+
top: -.5em;
|
105 |
+
}
|
106 |
+
.egg-container sub {
|
107 |
+
bottom: -.25em;
|
108 |
+
}
|
109 |
+
.egg-container img {
|
110 |
+
border: 0;
|
111 |
+
}
|
112 |
+
.egg-container svg:not(:root) {
|
113 |
+
overflow: hidden;
|
114 |
+
}
|
115 |
+
.egg-container figure {
|
116 |
+
margin: 1em 40px;
|
117 |
+
}
|
118 |
+
.egg-container hr {
|
119 |
+
height: 0;
|
120 |
+
-webkit-box-sizing: content-box;
|
121 |
+
-moz-box-sizing: content-box;
|
122 |
+
box-sizing: content-box;
|
123 |
+
}
|
124 |
+
.egg-container pre {
|
125 |
+
overflow: auto;
|
126 |
+
}
|
127 |
+
.egg-container code,
|
128 |
+
.egg-container kbd,
|
129 |
+
.egg-container pre,
|
130 |
+
.egg-container samp {
|
131 |
+
/* font-family: monospace, monospace; */
|
132 |
+
font-size: 1em;
|
133 |
+
}
|
134 |
+
.egg-container button,
|
135 |
+
.egg-container input,
|
136 |
+
.egg-container optgroup,
|
137 |
+
.egg-container select,
|
138 |
+
.egg-container textarea {
|
139 |
+
margin: 0;
|
140 |
+
font: inherit;
|
141 |
+
color: inherit;
|
142 |
+
}
|
143 |
+
.egg-container button {
|
144 |
+
overflow: visible;
|
145 |
+
}
|
146 |
+
.egg-container button,
|
147 |
+
.egg-container select {
|
148 |
+
text-transform: none;
|
149 |
+
}
|
150 |
+
.egg-container button,
|
151 |
+
.egg-container html input[type="button"],
|
152 |
+
.egg-container input[type="reset"],
|
153 |
+
.egg-container input[type="submit"] {
|
154 |
+
-webkit-appearance: button;
|
155 |
+
cursor: pointer;
|
156 |
+
}
|
157 |
+
.egg-container button[disabled],
|
158 |
+
.egg-container html input[disabled] {
|
159 |
+
cursor: default;
|
160 |
+
}
|
161 |
+
.egg-container button::-moz-focus-inner,
|
162 |
+
.egg-container input::-moz-focus-inner {
|
163 |
+
padding: 0;
|
164 |
+
border: 0;
|
165 |
+
}
|
166 |
+
.egg-container input {
|
167 |
+
line-height: normal;
|
168 |
+
}
|
169 |
+
.egg-container input[type="checkbox"],
|
170 |
+
.egg-container input[type="radio"] {
|
171 |
+
-webkit-box-sizing: border-box;
|
172 |
+
-moz-box-sizing: border-box;
|
173 |
+
box-sizing: border-box;
|
174 |
+
padding: 0;
|
175 |
+
}
|
176 |
+
.egg-container input[type="number"]::-webkit-inner-spin-button,
|
177 |
+
.egg-container input[type="number"]::-webkit-outer-spin-button {
|
178 |
+
height: auto;
|
179 |
+
}
|
180 |
+
.egg-container input[type="search"] {
|
181 |
+
-webkit-box-sizing: content-box;
|
182 |
+
-moz-box-sizing: content-box;
|
183 |
+
box-sizing: content-box;
|
184 |
+
-webkit-appearance: textfield;
|
185 |
+
}
|
186 |
+
.egg-container input[type="search"]::-webkit-search-cancel-button,
|
187 |
+
.egg-container input[type="search"]::-webkit-search-decoration {
|
188 |
+
-webkit-appearance: none;
|
189 |
+
}
|
190 |
+
.egg-container fieldset {
|
191 |
+
padding: .35em .625em .75em;
|
192 |
+
margin: 0 2px;
|
193 |
+
border: 1px solid #c0c0c0;
|
194 |
+
}
|
195 |
+
.egg-container legend {
|
196 |
+
padding: 0;
|
197 |
+
border: 0;
|
198 |
+
}
|
199 |
+
.egg-container textarea {
|
200 |
+
overflow: auto;
|
201 |
+
}
|
202 |
+
.egg-container optgroup {
|
203 |
+
font-weight: bold;
|
204 |
+
}
|
205 |
+
.egg-container table {
|
206 |
+
border-spacing: 0;
|
207 |
+
border-collapse: collapse;
|
208 |
+
}
|
209 |
+
.egg-container td,
|
210 |
+
.egg-container th {
|
211 |
+
padding: 0;
|
212 |
+
}
|
213 |
+
@media print {
|
214 |
+
.egg-container *,
|
215 |
+
.egg-container *:before,
|
216 |
+
.egg-container *:after {
|
217 |
+
color: #000 !important;
|
218 |
+
text-shadow: none !important;
|
219 |
+
background: transparent !important;
|
220 |
+
-webkit-box-shadow: none !important;
|
221 |
+
box-shadow: none !important;
|
222 |
+
}
|
223 |
+
.egg-container a,
|
224 |
+
.egg-container a:visited {
|
225 |
+
text-decoration: underline;
|
226 |
+
}
|
227 |
+
.egg-container a[href]:after {
|
228 |
+
content: " (" attr(href) ")";
|
229 |
+
}
|
230 |
+
.egg-container abbr[title]:after {
|
231 |
+
content: " (" attr(title) ")";
|
232 |
+
}
|
233 |
+
.egg-container a[href^="#"]:after,
|
234 |
+
.egg-container a[href^="javascript:"]:after {
|
235 |
+
content: "";
|
236 |
+
}
|
237 |
+
.egg-container pre,
|
238 |
+
.egg-container blockquote {
|
239 |
+
border: 1px solid #999;
|
240 |
+
|
241 |
+
page-break-inside: avoid;
|
242 |
+
}
|
243 |
+
.egg-container thead {
|
244 |
+
display: table-header-group;
|
245 |
+
}
|
246 |
+
.egg-container tr,
|
247 |
+
.egg-container img {
|
248 |
+
page-break-inside: avoid;
|
249 |
+
}
|
250 |
+
.egg-container img {
|
251 |
+
max-width: 100% !important;
|
252 |
+
}
|
253 |
+
.egg-container p,
|
254 |
+
.egg-container h2,
|
255 |
+
.egg-container h3 {
|
256 |
+
orphans: 3;
|
257 |
+
widows: 3;
|
258 |
+
}
|
259 |
+
.egg-container h2,
|
260 |
+
.egg-container h3 {
|
261 |
+
page-break-after: avoid;
|
262 |
+
}
|
263 |
+
.egg-container select {
|
264 |
+
background: #fff !important;
|
265 |
+
}
|
266 |
+
.egg-container .navbar {
|
267 |
+
display: none;
|
268 |
+
}
|
269 |
+
.egg-container .btn > .caret,
|
270 |
+
.egg-container .dropup > .btn > .caret {
|
271 |
+
border-top-color: #000 !important;
|
272 |
+
}
|
273 |
+
.egg-container .label {
|
274 |
+
border: 1px solid #000;
|
275 |
+
}
|
276 |
+
.egg-container .table {
|
277 |
+
border-collapse: collapse !important;
|
278 |
+
}
|
279 |
+
.egg-container .table td,
|
280 |
+
.egg-container .table th {
|
281 |
+
background-color: #fff !important;
|
282 |
+
}
|
283 |
+
.egg-container .table-bordered th,
|
284 |
+
.egg-container .table-bordered td {
|
285 |
+
border: 1px solid #ddd !important;
|
286 |
+
}
|
287 |
+
}
|
288 |
+
@font-face {
|
289 |
+
font-family: 'Glyphicons Halflings';
|
290 |
+
|
291 |
+
src: url('../fonts/glyphicons-halflings-regular.eot');
|
292 |
+
src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
|
293 |
+
}
|
294 |
+
.egg-container .glyphicon {
|
295 |
+
position: relative;
|
296 |
+
top: 1px;
|
297 |
+
display: inline-block;
|
298 |
+
font-family: 'Glyphicons Halflings';
|
299 |
+
font-style: normal;
|
300 |
+
font-weight: normal;
|
301 |
+
line-height: 1;
|
302 |
+
|
303 |
+
-webkit-font-smoothing: antialiased;
|
304 |
+
-moz-osx-font-smoothing: grayscale;
|
305 |
+
}
|
306 |
+
.egg-container .glyphicon-asterisk:before {
|
307 |
+
content: "\2a";
|
308 |
+
}
|
309 |
+
.egg-container .glyphicon-plus:before {
|
310 |
+
content: "\2b";
|
311 |
+
}
|
312 |
+
.egg-container .glyphicon-euro:before,
|
313 |
+
.egg-container .glyphicon-eur:before {
|
314 |
+
content: "\20ac";
|
315 |
+
}
|
316 |
+
.egg-container .glyphicon-minus:before {
|
317 |
+
content: "\2212";
|
318 |
+
}
|
319 |
+
.egg-container .glyphicon-cloud:before {
|
320 |
+
content: "\2601";
|
321 |
+
}
|
322 |
+
.egg-container .glyphicon-envelope:before {
|
323 |
+
content: "\2709";
|
324 |
+
}
|
325 |
+
.egg-container .glyphicon-pencil:before {
|
326 |
+
content: "\270f";
|
327 |
+
}
|
328 |
+
.egg-container .glyphicon-glass:before {
|
329 |
+
content: "\e001";
|
330 |
+
}
|
331 |
+
.egg-container .glyphicon-music:before {
|
332 |
+
content: "\e002";
|
333 |
+
}
|
334 |
+
.egg-container .glyphicon-search:before {
|
335 |
+
content: "\e003";
|
336 |
+
}
|
337 |
+
.egg-container .glyphicon-heart:before {
|
338 |
+
content: "\e005";
|
339 |
+
}
|
340 |
+
.egg-container .glyphicon-star:before {
|
341 |
+
content: "\e006";
|
342 |
+
}
|
343 |
+
.egg-container .glyphicon-star-empty:before {
|
344 |
+
content: "\e007";
|
345 |
+
}
|
346 |
+
.egg-container .glyphicon-user:before {
|
347 |
+
content: "\e008";
|
348 |
+
}
|
349 |
+
.egg-container .glyphicon-film:before {
|
350 |
+
content: "\e009";
|
351 |
+
}
|
352 |
+
.egg-container .glyphicon-th-large:before {
|
353 |
+
content: "\e010";
|
354 |
+
}
|
355 |
+
.egg-container .glyphicon-th:before {
|
356 |
+
content: "\e011";
|
357 |
+
}
|
358 |
+
.egg-container .glyphicon-th-list:before {
|
359 |
+
content: "\e012";
|
360 |
+
}
|
361 |
+
.egg-container .glyphicon-ok:before {
|
362 |
+
content: "\e013";
|
363 |
+
}
|
364 |
+
.egg-container .glyphicon-remove:before {
|
365 |
+
content: "\e014";
|
366 |
+
}
|
367 |
+
.egg-container .glyphicon-zoom-in:before {
|
368 |
+
content: "\e015";
|
369 |
+
}
|
370 |
+
.egg-container .glyphicon-zoom-out:before {
|
371 |
+
content: "\e016";
|
372 |
+
}
|
373 |
+
.egg-container .glyphicon-off:before {
|
374 |
+
content: "\e017";
|
375 |
+
}
|
376 |
+
.egg-container .glyphicon-signal:before {
|
377 |
+
content: "\e018";
|
378 |
+
}
|
379 |
+
.egg-container .glyphicon-cog:before {
|
380 |
+
content: "\e019";
|
381 |
+
}
|
382 |
+
.egg-container .glyphicon-trash:before {
|
383 |
+
content: "\e020";
|
384 |
+
}
|
385 |
+
.egg-container .glyphicon-home:before {
|
386 |
+
content: "\e021";
|
387 |
+
}
|
388 |
+
.egg-container .glyphicon-file:before {
|
389 |
+
content: "\e022";
|
390 |
+
}
|
391 |
+
.egg-container .glyphicon-time:before {
|
392 |
+
content: "\e023";
|
393 |
+
}
|
394 |
+
.egg-container .glyphicon-road:before {
|
395 |
+
content: "\e024";
|
396 |
+
}
|
397 |
+
.egg-container .glyphicon-download-alt:before {
|
398 |
+
content: "\e025";
|
399 |
+
}
|
400 |
+
.egg-container .glyphicon-download:before {
|
401 |
+
content: "\e026";
|
402 |
+
}
|
403 |
+
.egg-container .glyphicon-upload:before {
|
404 |
+
content: "\e027";
|
405 |
+
}
|
406 |
+
.egg-container .glyphicon-inbox:before {
|
407 |
+
content: "\e028";
|
408 |
+
}
|
409 |
+
.egg-container .glyphicon-play-circle:before {
|
410 |
+
content: "\e029";
|
411 |
+
}
|
412 |
+
.egg-container .glyphicon-repeat:before {
|
413 |
+
content: "\e030";
|
414 |
+
}
|
415 |
+
.egg-container .glyphicon-refresh:before {
|
416 |
+
content: "\e031";
|
417 |
+
}
|
418 |
+
.egg-container .glyphicon-list-alt:before {
|
419 |
+
content: "\e032";
|
420 |
+
}
|
421 |
+
.egg-container .glyphicon-lock:before {
|
422 |
+
content: "\e033";
|
423 |
+
}
|
424 |
+
.egg-container .glyphicon-flag:before {
|
425 |
+
content: "\e034";
|
426 |
+
}
|
427 |
+
.egg-container .glyphicon-headphones:before {
|
428 |
+
content: "\e035";
|
429 |
+
}
|
430 |
+
.egg-container .glyphicon-volume-off:before {
|
431 |
+
content: "\e036";
|
432 |
+
}
|
433 |
+
.egg-container .glyphicon-volume-down:before {
|
434 |
+
content: "\e037";
|
435 |
+
}
|
436 |
+
.egg-container .glyphicon-volume-up:before {
|
437 |
+
content: "\e038";
|
438 |
+
}
|
439 |
+
.egg-container .glyphicon-qrcode:before {
|
440 |
+
content: "\e039";
|
441 |
+
}
|
442 |
+
.egg-container .glyphicon-barcode:before {
|
443 |
+
content: "\e040";
|
444 |
+
}
|
445 |
+
.egg-container .glyphicon-tag:before {
|
446 |
+
content: "\e041";
|
447 |
+
}
|
448 |
+
.egg-container .glyphicon-tags:before {
|
449 |
+
content: "\e042";
|
450 |
+
}
|
451 |
+
.egg-container .glyphicon-book:before {
|
452 |
+
content: "\e043";
|
453 |
+
}
|
454 |
+
.egg-container .glyphicon-bookmark:before {
|
455 |
+
content: "\e044";
|
456 |
+
}
|
457 |
+
.egg-container .glyphicon-print:before {
|
458 |
+
content: "\e045";
|
459 |
+
}
|
460 |
+
.egg-container .glyphicon-camera:before {
|
461 |
+
content: "\e046";
|
462 |
+
}
|
463 |
+
.egg-container .glyphicon-font:before {
|
464 |
+
content: "\e047";
|
465 |
+
}
|
466 |
+
.egg-container .glyphicon-bold:before {
|
467 |
+
content: "\e048";
|
468 |
+
}
|
469 |
+
.egg-container .glyphicon-italic:before {
|
470 |
+
content: "\e049";
|
471 |
+
}
|
472 |
+
.egg-container .glyphicon-text-height:before {
|
473 |
+
content: "\e050";
|
474 |
+
}
|
475 |
+
.egg-container .glyphicon-text-width:before {
|
476 |
+
content: "\e051";
|
477 |
+
}
|
478 |
+
.egg-container .glyphicon-align-left:before {
|
479 |
+
content: "\e052";
|
480 |
+
}
|
481 |
+
.egg-container .glyphicon-align-center:before {
|
482 |
+
content: "\e053";
|
483 |
+
}
|
484 |
+
.egg-container .glyphicon-align-right:before {
|
485 |
+
content: "\e054";
|
486 |
+
}
|
487 |
+
.egg-container .glyphicon-align-justify:before {
|
488 |
+
content: "\e055";
|
489 |
+
}
|
490 |
+
.egg-container .glyphicon-list:before {
|
491 |
+
content: "\e056";
|
492 |
+
}
|
493 |
+
.egg-container .glyphicon-indent-left:before {
|
494 |
+
content: "\e057";
|
495 |
+
}
|
496 |
+
.egg-container .glyphicon-indent-right:before {
|
497 |
+
content: "\e058";
|
498 |
+
}
|
499 |
+
.egg-container .glyphicon-facetime-video:before {
|
500 |
+
content: "\e059";
|
501 |
+
}
|
502 |
+
.egg-container .glyphicon-picture:before {
|
503 |
+
content: "\e060";
|
504 |
+
}
|
505 |
+
.egg-container .glyphicon-map-marker:before {
|
506 |
+
content: "\e062";
|
507 |
+
}
|
508 |
+
.egg-container .glyphicon-adjust:before {
|
509 |
+
content: "\e063";
|
510 |
+
}
|
511 |
+
.egg-container .glyphicon-tint:before {
|
512 |
+
content: "\e064";
|
513 |
+
}
|
514 |
+
.egg-container .glyphicon-edit:before {
|
515 |
+
content: "\e065";
|
516 |
+
}
|
517 |
+
.egg-container .glyphicon-share:before {
|
518 |
+
content: "\e066";
|
519 |
+
}
|
520 |
+
.egg-container .glyphicon-check:before {
|
521 |
+
content: "\e067";
|
522 |
+
}
|
523 |
+
.egg-container .glyphicon-move:before {
|
524 |
+
content: "\e068";
|
525 |
+
}
|
526 |
+
.egg-container .glyphicon-step-backward:before {
|
527 |
+
content: "\e069";
|
528 |
+
}
|
529 |
+
.egg-container .glyphicon-fast-backward:before {
|
530 |
+
content: "\e070";
|
531 |
+
}
|
532 |
+
.egg-container .glyphicon-backward:before {
|
533 |
+
content: "\e071";
|
534 |
+
}
|
535 |
+
.egg-container .glyphicon-play:before {
|
536 |
+
content: "\e072";
|
537 |
+
}
|
538 |
+
.egg-container .glyphicon-pause:before {
|
539 |
+
content: "\e073";
|
540 |
+
}
|
541 |
+
.egg-container .glyphicon-stop:before {
|
542 |
+
content: "\e074";
|
543 |
+
}
|
544 |
+
.egg-container .glyphicon-forward:before {
|
545 |
+
content: "\e075";
|
546 |
+
}
|
547 |
+
.egg-container .glyphicon-fast-forward:before {
|
548 |
+
content: "\e076";
|
549 |
+
}
|
550 |
+
.egg-container .glyphicon-step-forward:before {
|
551 |
+
content: "\e077";
|
552 |
+
}
|
553 |
+
.egg-container .glyphicon-eject:before {
|
554 |
+
content: "\e078";
|
555 |
+
}
|
556 |
+
.egg-container .glyphicon-chevron-left:before {
|
557 |
+
content: "\e079";
|
558 |
+
}
|
559 |
+
.egg-container .glyphicon-chevron-right:before {
|
560 |
+
content: "\e080";
|
561 |
+
}
|
562 |
+
.egg-container .glyphicon-plus-sign:before {
|
563 |
+
content: "\e081";
|
564 |
+
}
|
565 |
+
.egg-container .glyphicon-minus-sign:before {
|
566 |
+
content: "\e082";
|
567 |
+
}
|
568 |
+
.egg-container .glyphicon-remove-sign:before {
|
569 |
+
content: "\e083";
|
570 |
+
}
|
571 |
+
.egg-container .glyphicon-ok-sign:before {
|
572 |
+
content: "\e084";
|
573 |
+
}
|
574 |
+
.egg-container .glyphicon-question-sign:before {
|
575 |
+
content: "\e085";
|
576 |
+
}
|
577 |
+
.egg-container .glyphicon-info-sign:before {
|
578 |
+
content: "\e086";
|
579 |
+
}
|
580 |
+
.egg-container .glyphicon-screenshot:before {
|
581 |
+
content: "\e087";
|
582 |
+
}
|
583 |
+
.egg-container .glyphicon-remove-circle:before {
|
584 |
+
content: "\e088";
|
585 |
+
}
|
586 |
+
.egg-container .glyphicon-ok-circle:before {
|
587 |
+
content: "\e089";
|
588 |
+
}
|
589 |
+
.egg-container .glyphicon-ban-circle:before {
|
590 |
+
content: "\e090";
|
591 |
+
}
|
592 |
+
.egg-container .glyphicon-arrow-left:before {
|
593 |
+
content: "\e091";
|
594 |
+
}
|
595 |
+
.egg-container .glyphicon-arrow-right:before {
|
596 |
+
content: "\e092";
|
597 |
+
}
|
598 |
+
.egg-container .glyphicon-arrow-up:before {
|
599 |
+
content: "\e093";
|
600 |
+
}
|
601 |
+
.egg-container .glyphicon-arrow-down:before {
|
602 |
+
content: "\e094";
|
603 |
+
}
|
604 |
+
.egg-container .glyphicon-share-alt:before {
|
605 |
+
content: "\e095";
|
606 |
+
}
|
607 |
+
.egg-container .glyphicon-resize-full:before {
|
608 |
+
content: "\e096";
|
609 |
+
}
|
610 |
+
.egg-container .glyphicon-resize-small:before {
|
611 |
+
content: "\e097";
|
612 |
+
}
|
613 |
+
.egg-container .glyphicon-exclamation-sign:before {
|
614 |
+
content: "\e101";
|
615 |
+
}
|
616 |
+
.egg-container .glyphicon-gift:before {
|
617 |
+
content: "\e102";
|
618 |
+
}
|
619 |
+
.egg-container .glyphicon-leaf:before {
|
620 |
+
content: "\e103";
|
621 |
+
}
|
622 |
+
.egg-container .glyphicon-fire:before {
|
623 |
+
content: "\e104";
|
624 |
+
}
|
625 |
+
.egg-container .glyphicon-eye-open:before {
|
626 |
+
content: "\e105";
|
627 |
+
}
|
628 |
+
.egg-container .glyphicon-eye-close:before {
|
629 |
+
content: "\e106";
|
630 |
+
}
|
631 |
+
.egg-container .glyphicon-warning-sign:before {
|
632 |
+
content: "\e107";
|
633 |
+
}
|
634 |
+
.egg-container .glyphicon-plane:before {
|
635 |
+
content: "\e108";
|
636 |
+
}
|
637 |
+
.egg-container .glyphicon-calendar:before {
|
638 |
+
content: "\e109";
|
639 |
+
}
|
640 |
+
.egg-container .glyphicon-random:before {
|
641 |
+
content: "\e110";
|
642 |
+
}
|
643 |
+
.egg-container .glyphicon-comment:before {
|
644 |
+
content: "\e111";
|
645 |
+
}
|
646 |
+
.egg-container .glyphicon-magnet:before {
|
647 |
+
content: "\e112";
|
648 |
+
}
|
649 |
+
.egg-container .glyphicon-chevron-up:before {
|
650 |
+
content: "\e113";
|
651 |
+
}
|
652 |
+
.egg-container .glyphicon-chevron-down:before {
|
653 |
+
content: "\e114";
|
654 |
+
}
|
655 |
+
.egg-container .glyphicon-retweet:before {
|
656 |
+
content: "\e115";
|
657 |
+
}
|
658 |
+
.egg-container .glyphicon-shopping-cart:before {
|
659 |
+
content: "\e116";
|
660 |
+
}
|
661 |
+
.egg-container .glyphicon-folder-close:before {
|
662 |
+
content: "\e117";
|
663 |
+
}
|
664 |
+
.egg-container .glyphicon-folder-open:before {
|
665 |
+
content: "\e118";
|
666 |
+
}
|
667 |
+
.egg-container .glyphicon-resize-vertical:before {
|
668 |
+
content: "\e119";
|
669 |
+
}
|
670 |
+
.egg-container .glyphicon-resize-horizontal:before {
|
671 |
+
content: "\e120";
|
672 |
+
}
|
673 |
+
.egg-container .glyphicon-hdd:before {
|
674 |
+
content: "\e121";
|
675 |
+
}
|
676 |
+
.egg-container .glyphicon-bullhorn:before {
|
677 |
+
content: "\e122";
|
678 |
+
}
|
679 |
+
.egg-container .glyphicon-bell:before {
|
680 |
+
content: "\e123";
|
681 |
+
}
|
682 |
+
.egg-container .glyphicon-certificate:before {
|
683 |
+
content: "\e124";
|
684 |
+
}
|
685 |
+
.egg-container .glyphicon-thumbs-up:before {
|
686 |
+
content: "\e125";
|
687 |
+
}
|
688 |
+
.egg-container .glyphicon-thumbs-down:before {
|
689 |
+
content: "\e126";
|
690 |
+
}
|
691 |
+
.egg-container .glyphicon-hand-right:before {
|
692 |
+
content: "\e127";
|
693 |
+
}
|
694 |
+
.egg-container .glyphicon-hand-left:before {
|
695 |
+
content: "\e128";
|
696 |
+
}
|
697 |
+
.egg-container .glyphicon-hand-up:before {
|
698 |
+
content: "\e129";
|
699 |
+
}
|
700 |
+
.egg-container .glyphicon-hand-down:before {
|
701 |
+
content: "\e130";
|
702 |
+
}
|
703 |
+
.egg-container .glyphicon-circle-arrow-right:before {
|
704 |
+
content: "\e131";
|
705 |
+
}
|
706 |
+
.egg-container .glyphicon-circle-arrow-left:before {
|
707 |
+
content: "\e132";
|
708 |
+
}
|
709 |
+
.egg-container .glyphicon-circle-arrow-up:before {
|
710 |
+
content: "\e133";
|
711 |
+
}
|
712 |
+
.egg-container .glyphicon-circle-arrow-down:before {
|
713 |
+
content: "\e134";
|
714 |
+
}
|
715 |
+
.egg-container .glyphicon-globe:before {
|
716 |
+
content: "\e135";
|
717 |
+
}
|
718 |
+
.egg-container .glyphicon-wrench:before {
|
719 |
+
content: "\e136";
|
720 |
+
}
|
721 |
+
.egg-container .glyphicon-tasks:before {
|
722 |
+
content: "\e137";
|
723 |
+
}
|
724 |
+
.egg-container .glyphicon-filter:before {
|
725 |
+
content: "\e138";
|
726 |
+
}
|
727 |
+
.egg-container .glyphicon-briefcase:before {
|
728 |
+
content: "\e139";
|
729 |
+
}
|
730 |
+
.egg-container .glyphicon-fullscreen:before {
|
731 |
+
content: "\e140";
|
732 |
+
}
|
733 |
+
.egg-container .glyphicon-dashboard:before {
|
734 |
+
content: "\e141";
|
735 |
+
}
|
736 |
+
.egg-container .glyphicon-paperclip:before {
|
737 |
+
content: "\e142";
|
738 |
+
}
|
739 |
+
.egg-container .glyphicon-heart-empty:before {
|
740 |
+
content: "\e143";
|
741 |
+
}
|
742 |
+
.egg-container .glyphicon-link:before {
|
743 |
+
content: "\e144";
|
744 |
+
}
|
745 |
+
.egg-container .glyphicon-phone:before {
|
746 |
+
content: "\e145";
|
747 |
+
}
|
748 |
+
.egg-container .glyphicon-pushpin:before {
|
749 |
+
content: "\e146";
|
750 |
+
}
|
751 |
+
.egg-container .glyphicon-usd:before {
|
752 |
+
content: "\e148";
|
753 |
+
}
|
754 |
+
.egg-container .glyphicon-gbp:before {
|
755 |
+
content: "\e149";
|
756 |
+
}
|
757 |
+
.egg-container .glyphicon-sort:before {
|
758 |
+
content: "\e150";
|
759 |
+
}
|
760 |
+
.egg-container .glyphicon-sort-by-alphabet:before {
|
761 |
+
content: "\e151";
|
762 |
+
}
|
763 |
+
.egg-container .glyphicon-sort-by-alphabet-alt:before {
|
764 |
+
content: "\e152";
|
765 |
+
}
|
766 |
+
.egg-container .glyphicon-sort-by-order:before {
|
767 |
+
content: "\e153";
|
768 |
+
}
|
769 |
+
.egg-container .glyphicon-sort-by-order-alt:before {
|
770 |
+
content: "\e154";
|
771 |
+
}
|
772 |
+
.egg-container .glyphicon-sort-by-attributes:before {
|
773 |
+
content: "\e155";
|
774 |
+
}
|
775 |
+
.egg-container .glyphicon-sort-by-attributes-alt:before {
|
776 |
+
content: "\e156";
|
777 |
+
}
|
778 |
+
.egg-container .glyphicon-unchecked:before {
|
779 |
+
content: "\e157";
|
780 |
+
}
|
781 |
+
.egg-container .glyphicon-expand:before {
|
782 |
+
content: "\e158";
|
783 |
+
}
|
784 |
+
.egg-container .glyphicon-collapse-down:before {
|
785 |
+
content: "\e159";
|
786 |
+
}
|
787 |
+
.egg-container .glyphicon-collapse-up:before {
|
788 |
+
content: "\e160";
|
789 |
+
}
|
790 |
+
.egg-container .glyphicon-log-in:before {
|
791 |
+
content: "\e161";
|
792 |
+
}
|
793 |
+
.egg-container .glyphicon-flash:before {
|
794 |
+
content: "\e162";
|
795 |
+
}
|
796 |
+
.egg-container .glyphicon-log-out:before {
|
797 |
+
content: "\e163";
|
798 |
+
}
|
799 |
+
.egg-container .glyphicon-new-window:before {
|
800 |
+
content: "\e164";
|
801 |
+
}
|
802 |
+
.egg-container .glyphicon-record:before {
|
803 |
+
content: "\e165";
|
804 |
+
}
|
805 |
+
.egg-container .glyphicon-save:before {
|
806 |
+
content: "\e166";
|
807 |
+
}
|
808 |
+
.egg-container .glyphicon-open:before {
|
809 |
+
content: "\e167";
|
810 |
+
}
|
811 |
+
.egg-container .glyphicon-saved:before {
|
812 |
+
content: "\e168";
|
813 |
+
}
|
814 |
+
.egg-container .glyphicon-import:before {
|
815 |
+
content: "\e169";
|
816 |
+
}
|
817 |
+
.egg-container .glyphicon-export:before {
|
818 |
+
content: "\e170";
|
819 |
+
}
|
820 |
+
.egg-container .glyphicon-send:before {
|
821 |
+
content: "\e171";
|
822 |
+
}
|
823 |
+
.egg-container .glyphicon-floppy-disk:before {
|
824 |
+
content: "\e172";
|
825 |
+
}
|
826 |
+
.egg-container .glyphicon-floppy-saved:before {
|
827 |
+
content: "\e173";
|
828 |
+
}
|
829 |
+
.egg-container .glyphicon-floppy-remove:before {
|
830 |
+
content: "\e174";
|
831 |
+
}
|
832 |
+
.egg-container .glyphicon-floppy-save:before {
|
833 |
+
content: "\e175";
|
834 |
+
}
|
835 |
+
.egg-container .glyphicon-floppy-open:before {
|
836 |
+
content: "\e176";
|
837 |
+
}
|
838 |
+
.egg-container .glyphicon-credit-card:before {
|
839 |
+
content: "\e177";
|
840 |
+
}
|
841 |
+
.egg-container .glyphicon-transfer:before {
|
842 |
+
content: "\e178";
|
843 |
+
}
|
844 |
+
.egg-container .glyphicon-cutlery:before {
|
845 |
+
content: "\e179";
|
846 |
+
}
|
847 |
+
.egg-container .glyphicon-header:before {
|
848 |
+
content: "\e180";
|
849 |
+
}
|
850 |
+
.egg-container .glyphicon-compressed:before {
|
851 |
+
content: "\e181";
|
852 |
+
}
|
853 |
+
.egg-container .glyphicon-earphone:before {
|
854 |
+
content: "\e182";
|
855 |
+
}
|
856 |
+
.egg-container .glyphicon-phone-alt:before {
|
857 |
+
content: "\e183";
|
858 |
+
}
|
859 |
+
.egg-container .glyphicon-tower:before {
|
860 |
+
content: "\e184";
|
861 |
+
}
|
862 |
+
.egg-container .glyphicon-stats:before {
|
863 |
+
content: "\e185";
|
864 |
+
}
|
865 |
+
.egg-container .glyphicon-sd-video:before {
|
866 |
+
content: "\e186";
|
867 |
+
}
|
868 |
+
.egg-container .glyphicon-hd-video:before {
|
869 |
+
content: "\e187";
|
870 |
+
}
|
871 |
+
.egg-container .glyphicon-subtitles:before {
|
872 |
+
content: "\e188";
|
873 |
+
}
|
874 |
+
.egg-container .glyphicon-sound-stereo:before {
|
875 |
+
content: "\e189";
|
876 |
+
}
|
877 |
+
.egg-container .glyphicon-sound-dolby:before {
|
878 |
+
content: "\e190";
|
879 |
+
}
|
880 |
+
.egg-container .glyphicon-sound-5-1:before {
|
881 |
+
content: "\e191";
|
882 |
+
}
|
883 |
+
.egg-container .glyphicon-sound-6-1:before {
|
884 |
+
content: "\e192";
|
885 |
+
}
|
886 |
+
.egg-container .glyphicon-sound-7-1:before {
|
887 |
+
content: "\e193";
|
888 |
+
}
|
889 |
+
.egg-container .glyphicon-copyright-mark:before {
|
890 |
+
content: "\e194";
|
891 |
+
}
|
892 |
+
.egg-container .glyphicon-registration-mark:before {
|
893 |
+
content: "\e195";
|
894 |
+
}
|
895 |
+
.egg-container .glyphicon-cloud-download:before {
|
896 |
+
content: "\e197";
|
897 |
+
}
|
898 |
+
.egg-container .glyphicon-cloud-upload:before {
|
899 |
+
content: "\e198";
|
900 |
+
}
|
901 |
+
.egg-container .glyphicon-tree-conifer:before {
|
902 |
+
content: "\e199";
|
903 |
+
}
|
904 |
+
.egg-container .glyphicon-tree-deciduous:before {
|
905 |
+
content: "\e200";
|
906 |
+
}
|
907 |
+
.egg-container .glyphicon-cd:before {
|
908 |
+
content: "\e201";
|
909 |
+
}
|
910 |
+
.egg-container .glyphicon-save-file:before {
|
911 |
+
content: "\e202";
|
912 |
+
}
|
913 |
+
.egg-container .glyphicon-open-file:before {
|
914 |
+
content: "\e203";
|
915 |
+
}
|
916 |
+
.egg-container .glyphicon-level-up:before {
|
917 |
+
content: "\e204";
|
918 |
+
}
|
919 |
+
.egg-container .glyphicon-copy:before {
|
920 |
+
content: "\e205";
|
921 |
+
}
|
922 |
+
.egg-container .glyphicon-paste:before {
|
923 |
+
content: "\e206";
|
924 |
+
}
|
925 |
+
.egg-container .glyphicon-alert:before {
|
926 |
+
content: "\e209";
|
927 |
+
}
|
928 |
+
.egg-container .glyphicon-equalizer:before {
|
929 |
+
content: "\e210";
|
930 |
+
}
|
931 |
+
.egg-container .glyphicon-king:before {
|
932 |
+
content: "\e211";
|
933 |
+
}
|
934 |
+
.egg-container .glyphicon-queen:before {
|
935 |
+
content: "\e212";
|
936 |
+
}
|
937 |
+
.egg-container .glyphicon-pawn:before {
|
938 |
+
content: "\e213";
|
939 |
+
}
|
940 |
+
.egg-container .glyphicon-bishop:before {
|
941 |
+
content: "\e214";
|
942 |
+
}
|
943 |
+
.egg-container .glyphicon-knight:before {
|
944 |
+
content: "\e215";
|
945 |
+
}
|
946 |
+
.egg-container .glyphicon-baby-formula:before {
|
947 |
+
content: "\e216";
|
948 |
+
}
|
949 |
+
.egg-container .glyphicon-tent:before {
|
950 |
+
content: "\26fa";
|
951 |
+
}
|
952 |
+
.egg-container .glyphicon-blackboard:before {
|
953 |
+
content: "\e218";
|
954 |
+
}
|
955 |
+
.egg-container .glyphicon-bed:before {
|
956 |
+
content: "\e219";
|
957 |
+
}
|
958 |
+
.egg-container .glyphicon-apple:before {
|
959 |
+
content: "\f8ff";
|
960 |
+
}
|
961 |
+
.egg-container .glyphicon-erase:before {
|
962 |
+
content: "\e221";
|
963 |
+
}
|
964 |
+
.egg-container .glyphicon-hourglass:before {
|
965 |
+
content: "\231b";
|
966 |
+
}
|
967 |
+
.egg-container .glyphicon-lamp:before {
|
968 |
+
content: "\e223";
|
969 |
+
}
|
970 |
+
.egg-container .glyphicon-duplicate:before {
|
971 |
+
content: "\e224";
|
972 |
+
}
|
973 |
+
.egg-container .glyphicon-piggy-bank:before {
|
974 |
+
content: "\e225";
|
975 |
+
}
|
976 |
+
.egg-container .glyphicon-scissors:before {
|
977 |
+
content: "\e226";
|
978 |
+
}
|
979 |
+
.egg-container .glyphicon-bitcoin:before {
|
980 |
+
content: "\e227";
|
981 |
+
}
|
982 |
+
.egg-container .glyphicon-btc:before {
|
983 |
+
content: "\e227";
|
984 |
+
}
|
985 |
+
.egg-container .glyphicon-xbt:before {
|
986 |
+
content: "\e227";
|
987 |
+
}
|
988 |
+
.egg-container .glyphicon-yen:before {
|
989 |
+
content: "\00a5";
|
990 |
+
}
|
991 |
+
.egg-container .glyphicon-jpy:before {
|
992 |
+
content: "\00a5";
|
993 |
+
}
|
994 |
+
.egg-container .glyphicon-ruble:before {
|
995 |
+
content: "\20bd";
|
996 |
+
}
|
997 |
+
.egg-container .glyphicon-rub:before {
|
998 |
+
content: "\20bd";
|
999 |
+
}
|
1000 |
+
.egg-container .glyphicon-scale:before {
|
1001 |
+
content: "\e230";
|
1002 |
+
}
|
1003 |
+
.egg-container .glyphicon-ice-lolly:before {
|
1004 |
+
content: "\e231";
|
1005 |
+
}
|
1006 |
+
.egg-container .glyphicon-ice-lolly-tasted:before {
|
1007 |
+
content: "\e232";
|
1008 |
+
}
|
1009 |
+
.egg-container .glyphicon-education:before {
|
1010 |
+
content: "\e233";
|
1011 |
+
}
|
1012 |
+
.egg-container .glyphicon-option-horizontal:before {
|
1013 |
+
content: "\e234";
|
1014 |
+
}
|
1015 |
+
.egg-container .glyphicon-option-vertical:before {
|
1016 |
+
content: "\e235";
|
1017 |
+
}
|
1018 |
+
.egg-container .glyphicon-menu-hamburger:before {
|
1019 |
+
content: "\e236";
|
1020 |
+
}
|
1021 |
+
.egg-container .glyphicon-modal-window:before {
|
1022 |
+
content: "\e237";
|
1023 |
+
}
|
1024 |
+
.egg-container .glyphicon-oil:before {
|
1025 |
+
content: "\e238";
|
1026 |
+
}
|
1027 |
+
.egg-container .glyphicon-grain:before {
|
1028 |
+
content: "\e239";
|
1029 |
+
}
|
1030 |
+
.egg-container .glyphicon-sunglasses:before {
|
1031 |
+
content: "\e240";
|
1032 |
+
}
|
1033 |
+
.egg-container .glyphicon-text-size:before {
|
1034 |
+
content: "\e241";
|
1035 |
+
}
|
1036 |
+
.egg-container .glyphicon-text-color:before {
|
1037 |
+
content: "\e242";
|
1038 |
+
}
|
1039 |
+
.egg-container .glyphicon-text-background:before {
|
1040 |
+
content: "\e243";
|
1041 |
+
}
|
1042 |
+
.egg-container .glyphicon-object-align-top:before {
|
1043 |
+
content: "\e244";
|
1044 |
+
}
|
1045 |
+
.egg-container .glyphicon-object-align-bottom:before {
|
1046 |
+
content: "\e245";
|
1047 |
+
}
|
1048 |
+
.egg-container .glyphicon-object-align-horizontal:before {
|
1049 |
+
content: "\e246";
|
1050 |
+
}
|
1051 |
+
.egg-container .glyphicon-object-align-left:before {
|
1052 |
+
content: "\e247";
|
1053 |
+
}
|
1054 |
+
.egg-container .glyphicon-object-align-vertical:before {
|
1055 |
+
content: "\e248";
|
1056 |
+
}
|
1057 |
+
.egg-container .glyphicon-object-align-right:before {
|
1058 |
+
content: "\e249";
|
1059 |
+
}
|
1060 |
+
.egg-container .glyphicon-triangle-right:before {
|
1061 |
+
content: "\e250";
|
1062 |
+
}
|
1063 |
+
.egg-container .glyphicon-triangle-left:before {
|
1064 |
+
content: "\e251";
|
1065 |
+
}
|
1066 |
+
.egg-container .glyphicon-triangle-bottom:before {
|
1067 |
+
content: "\e252";
|
1068 |
+
}
|
1069 |
+
.egg-container .glyphicon-triangle-top:before {
|
1070 |
+
content: "\e253";
|
1071 |
+
}
|
1072 |
+
.egg-container .glyphicon-console:before {
|
1073 |
+
content: "\e254";
|
1074 |
+
}
|
1075 |
+
.egg-container .glyphicon-superscript:before {
|
1076 |
+
content: "\e255";
|
1077 |
+
}
|
1078 |
+
.egg-container .glyphicon-subscript:before {
|
1079 |
+
content: "\e256";
|
1080 |
+
}
|
1081 |
+
.egg-container .glyphicon-menu-left:before {
|
1082 |
+
content: "\e257";
|
1083 |
+
}
|
1084 |
+
.egg-container .glyphicon-menu-right:before {
|
1085 |
+
content: "\e258";
|
1086 |
+
}
|
1087 |
+
.egg-container .glyphicon-menu-down:before {
|
1088 |
+
content: "\e259";
|
1089 |
+
}
|
1090 |
+
.egg-container .glyphicon-menu-up:before {
|
1091 |
+
content: "\e260";
|
1092 |
+
}
|
1093 |
+
.egg-container * {
|
1094 |
+
-webkit-box-sizing: border-box;
|
1095 |
+
-moz-box-sizing: border-box;
|
1096 |
+
box-sizing: border-box;
|
1097 |
+
}
|
1098 |
+
.egg-container *:before,
|
1099 |
+
.egg-container *:after {
|
1100 |
+
-webkit-box-sizing: border-box;
|
1101 |
+
-moz-box-sizing: border-box;
|
1102 |
+
box-sizing: border-box;
|
1103 |
+
}
|
1104 |
+
.egg-container html {
|
1105 |
+
font-size: 10px;
|
1106 |
+
|
1107 |
+
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
1108 |
+
}
|
1109 |
+
.egg-container body {
|
1110 |
+
/* font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; */
|
1111 |
+
font-size: 14px;
|
1112 |
+
line-height: 1.42857143;
|
1113 |
+
color: #333;
|
1114 |
+
background-color: #fff;
|
1115 |
+
}
|
1116 |
+
.egg-container input,
|
1117 |
+
.egg-container button,
|
1118 |
+
.egg-container select,
|
1119 |
+
.egg-container textarea {
|
1120 |
+
font-family: inherit;
|
1121 |
+
font-size: inherit;
|
1122 |
+
line-height: inherit;
|
1123 |
+
}
|
1124 |
+
.egg-container a {
|
1125 |
+
color: #337ab7;
|
1126 |
+
text-decoration: none;
|
1127 |
+
}
|
1128 |
+
.egg-container a:hover,
|
1129 |
+
.egg-container a:focus {
|
1130 |
+
color: #23527c;
|
1131 |
+
text-decoration: underline;
|
1132 |
+
}
|
1133 |
+
.egg-container a:focus {
|
1134 |
+
outline: thin dotted;
|
1135 |
+
outline: 5px auto -webkit-focus-ring-color;
|
1136 |
+
outline-offset: -2px;
|
1137 |
+
}
|
1138 |
+
.egg-container figure {
|
1139 |
+
margin: 0;
|
1140 |
+
}
|
1141 |
+
.egg-container img {
|
1142 |
+
vertical-align: middle;
|
1143 |
+
}
|
1144 |
+
.egg-container .img-responsive {
|
1145 |
+
display: block;
|
1146 |
+
max-width: 100%;
|
1147 |
+
height: auto;
|
1148 |
+
}
|
1149 |
+
.egg-container .img-rounded {
|
1150 |
+
border-radius: 6px;
|
1151 |
+
}
|
1152 |
+
.egg-container .img-thumbnail {
|
1153 |
+
display: inline-block;
|
1154 |
+
max-width: 100%;
|
1155 |
+
height: auto;
|
1156 |
+
padding: 4px;
|
1157 |
+
line-height: 1.42857143;
|
1158 |
+
background-color: #fff;
|
1159 |
+
border: 1px solid #ddd;
|
1160 |
+
border-radius: 4px;
|
1161 |
+
-webkit-transition: all .2s ease-in-out;
|
1162 |
+
-o-transition: all .2s ease-in-out;
|
1163 |
+
transition: all .2s ease-in-out;
|
1164 |
+
}
|
1165 |
+
.egg-container .img-circle {
|
1166 |
+
border-radius: 50%;
|
1167 |
+
}
|
1168 |
+
.egg-container hr {
|
1169 |
+
margin-top: 20px;
|
1170 |
+
margin-bottom: 20px;
|
1171 |
+
border: 0;
|
1172 |
+
border-top: 1px solid #eee;
|
1173 |
+
}
|
1174 |
+
.egg-container .sr-only {
|
1175 |
+
position: absolute;
|
1176 |
+
width: 1px;
|
1177 |
+
height: 1px;
|
1178 |
+
padding: 0;
|
1179 |
+
margin: -1px;
|
1180 |
+
overflow: hidden;
|
1181 |
+
clip: rect(0, 0, 0, 0);
|
1182 |
+
border: 0;
|
1183 |
+
}
|
1184 |
+
.egg-container .sr-only-focusable:active,
|
1185 |
+
.egg-container .sr-only-focusable:focus {
|
1186 |
+
position: static;
|
1187 |
+
width: auto;
|
1188 |
+
height: auto;
|
1189 |
+
margin: 0;
|
1190 |
+
overflow: visible;
|
1191 |
+
clip: auto;
|
1192 |
+
}
|
1193 |
+
.egg-container [role="button"] {
|
1194 |
+
cursor: pointer;
|
1195 |
+
}
|
1196 |
+
.egg-container h1,
|
1197 |
+
.egg-container h2,
|
1198 |
+
.egg-container h3,
|
1199 |
+
.egg-container h4,
|
1200 |
+
.egg-container h5,
|
1201 |
+
.egg-container h6,
|
1202 |
+
.egg-container .h1,
|
1203 |
+
.egg-container .h2,
|
1204 |
+
.egg-container .h3,
|
1205 |
+
.egg-container .h4,
|
1206 |
+
.egg-container .h5,
|
1207 |
+
.egg-container .h6 {
|
1208 |
+
/*font-family: inherit;*/
|
1209 |
+
/*font-weight: 500;*/
|
1210 |
+
/*line-height: 1.1;*/
|
1211 |
+
color: inherit;
|
1212 |
+
}
|
1213 |
+
.egg-container h1 small,
|
1214 |
+
.egg-container h2 small,
|
1215 |
+
.egg-container h3 small,
|
1216 |
+
.egg-container h4 small,
|
1217 |
+
.egg-container h5 small,
|
1218 |
+
.egg-container h6 small,
|
1219 |
+
.egg-container .h1 small,
|
1220 |
+
.egg-container .h2 small,
|
1221 |
+
.egg-container .h3 small,
|
1222 |
+
.egg-container .h4 small,
|
1223 |
+
.egg-container .h5 small,
|
1224 |
+
.egg-container .h6 small,
|
1225 |
+
.egg-container h1 .small,
|
1226 |
+
.egg-container h2 .small,
|
1227 |
+
.egg-container h3 .small,
|
1228 |
+
.egg-container h4 .small,
|
1229 |
+
.egg-container h5 .small,
|
1230 |
+
.egg-container h6 .small,
|
1231 |
+
.egg-container .h1 .small,
|
1232 |
+
.egg-container .h2 .small,
|
1233 |
+
.egg-container .h3 .small,
|
1234 |
+
.egg-container .h4 .small,
|
1235 |
+
.egg-container .h5 .small,
|
1236 |
+
.egg-container .h6 .small {
|
1237 |
+
font-weight: normal;
|
1238 |
+
line-height: 1;
|
1239 |
+
color: #777;
|
1240 |
+
}
|
1241 |
+
/*.egg-container h1,
|
1242 |
+
.egg-container .h1,
|
1243 |
+
.egg-container h2,
|
1244 |
+
.egg-container .h2,
|
1245 |
+
.egg-container h3,
|
1246 |
+
.egg-container .h3 {
|
1247 |
+
margin-top: 20px;
|
1248 |
+
margin-bottom: 10px;
|
1249 |
+
}*/
|
1250 |
+
.egg-container h1 small,
|
1251 |
+
.egg-container .h1 small,
|
1252 |
+
.egg-container h2 small,
|
1253 |
+
.egg-container .h2 small,
|
1254 |
+
.egg-container h3 small,
|
1255 |
+
.egg-container .h3 small,
|
1256 |
+
.egg-container h1 .small,
|
1257 |
+
.egg-container .h1 .small,
|
1258 |
+
.egg-container h2 .small,
|
1259 |
+
.egg-container .h2 .small,
|
1260 |
+
.egg-container h3 .small,
|
1261 |
+
.egg-container .h3 .small {
|
1262 |
+
font-size: 65%;
|
1263 |
+
}
|
1264 |
+
.egg-container h4,
|
1265 |
+
.egg-container .h4,
|
1266 |
+
.egg-container h5,
|
1267 |
+
.egg-container .h5,
|
1268 |
+
.egg-container h6,
|
1269 |
+
.egg-container .h6 {
|
1270 |
+
margin-top: 10px;
|
1271 |
+
margin-bottom: 10px;
|
1272 |
+
}
|
1273 |
+
.egg-container h4 small,
|
1274 |
+
.egg-container .h4 small,
|
1275 |
+
.egg-container h5 small,
|
1276 |
+
.egg-container .h5 small,
|
1277 |
+
.egg-container h6 small,
|
1278 |
+
.egg-container .h6 small,
|
1279 |
+
.egg-container h4 .small,
|
1280 |
+
.egg-container .h4 .small,
|
1281 |
+
.egg-container h5 .small,
|
1282 |
+
.egg-container .h5 .small,
|
1283 |
+
.egg-container h6 .small,
|
1284 |
+
.egg-container .h6 .small {
|
1285 |
+
font-size: 75%;
|
1286 |
+
}
|
1287 |
+
/*.egg-container h1,
|
1288 |
+
.egg-container .h1 {
|
1289 |
+
font-size: 36px;
|
1290 |
+
}
|
1291 |
+
.egg-container h2,
|
1292 |
+
.egg-container .h2 {
|
1293 |
+
font-size: 30px;
|
1294 |
+
}
|
1295 |
+
.egg-container h3,
|
1296 |
+
.egg-container .h3 {
|
1297 |
+
font-size: 24px;
|
1298 |
+
}
|
1299 |
+
.egg-container h4,
|
1300 |
+
.egg-container .h4 {
|
1301 |
+
font-size: 18px;
|
1302 |
+
}
|
1303 |
+
.egg-container h5,
|
1304 |
+
.egg-container .h5 {
|
1305 |
+
font-size: 14px;
|
1306 |
+
}
|
1307 |
+
.egg-container h6,
|
1308 |
+
.egg-container .h6 {
|
1309 |
+
font-size: 12px;
|
1310 |
+
}
|
1311 |
+
.egg-container p {
|
1312 |
+
margin: 0 0 10px;
|
1313 |
+
}*/
|
1314 |
+
.egg-container .lead {
|
1315 |
+
margin-bottom: 20px;
|
1316 |
+
font-size: 16px;
|
1317 |
+
font-weight: 300;
|
1318 |
+
line-height: 1.4;
|
1319 |
+
}
|
1320 |
+
@media (min-width: 768px) {
|
1321 |
+
.egg-container .lead {
|
1322 |
+
font-size: 21px;
|
1323 |
+
}
|
1324 |
+
}
|
1325 |
+
.egg-container small,
|
1326 |
+
.egg-container .small {
|
1327 |
+
font-size: 85%;
|
1328 |
+
}
|
1329 |
+
.egg-container mark,
|
1330 |
+
.egg-container .mark {
|
1331 |
+
padding: .2em;
|
1332 |
+
background-color: #fcf8e3;
|
1333 |
+
}
|
1334 |
+
.egg-container .text-left {
|
1335 |
+
text-align: left;
|
1336 |
+
}
|
1337 |
+
.egg-container .text-right {
|
1338 |
+
text-align: right;
|
1339 |
+
}
|
1340 |
+
.egg-container .text-center {
|
1341 |
+
text-align: center;
|
1342 |
+
}
|
1343 |
+
.egg-container .text-justify {
|
1344 |
+
text-align: justify;
|
1345 |
+
}
|
1346 |
+
.egg-container .text-nowrap {
|
1347 |
+
white-space: nowrap;
|
1348 |
+
}
|
1349 |
+
.egg-container .text-lowercase {
|
1350 |
+
text-transform: lowercase;
|
1351 |
+
}
|
1352 |
+
.egg-container .text-uppercase {
|
1353 |
+
text-transform: uppercase;
|
1354 |
+
}
|
1355 |
+
.egg-container .text-capitalize {
|
1356 |
+
text-transform: capitalize;
|
1357 |
+
}
|
1358 |
+
.egg-container .text-muted {
|
1359 |
+
color: #777;
|
1360 |
+
}
|
1361 |
+
.egg-container .text-primary {
|
1362 |
+
color: #337ab7;
|
1363 |
+
}
|
1364 |
+
a.egg-container .text-primary:hover {
|
1365 |
+
color: #286090;
|
1366 |
+
}
|
1367 |
+
.egg-container .text-success {
|
1368 |
+
color: #3c763d;
|
1369 |
+
}
|
1370 |
+
a.egg-container .text-success:hover {
|
1371 |
+
color: #2b542c;
|
1372 |
+
}
|
1373 |
+
.egg-container .text-info {
|
1374 |
+
color: #31708f;
|
1375 |
+
}
|
1376 |
+
a.egg-container .text-info:hover {
|
1377 |
+
color: #245269;
|
1378 |
+
}
|
1379 |
+
.egg-container .text-warning {
|
1380 |
+
color: #8a6d3b;
|
1381 |
+
}
|
1382 |
+
a.egg-container .text-warning:hover {
|
1383 |
+
color: #66512c;
|
1384 |
+
}
|
1385 |
+
.egg-container .text-danger {
|
1386 |
+
color: #a94442;
|
1387 |
+
}
|
1388 |
+
a.egg-container .text-danger:hover {
|
1389 |
+
color: #843534;
|
1390 |
+
}
|
1391 |
+
.egg-container .bg-primary {
|
1392 |
+
color: #fff;
|
1393 |
+
background-color: #337ab7;
|
1394 |
+
}
|
1395 |
+
a.egg-container .bg-primary:hover {
|
1396 |
+
background-color: #286090;
|
1397 |
+
}
|
1398 |
+
.egg-container .bg-success {
|
1399 |
+
background-color: #dff0d8;
|
1400 |
+
}
|
1401 |
+
a.egg-container .bg-success:hover {
|
1402 |
+
background-color: #c1e2b3;
|
1403 |
+
}
|
1404 |
+
.egg-container .bg-info {
|
1405 |
+
background-color: #d9edf7;
|
1406 |
+
}
|
1407 |
+
a.egg-container .bg-info:hover {
|
1408 |
+
background-color: #afd9ee;
|
1409 |
+
}
|
1410 |
+
.egg-container .bg-warning {
|
1411 |
+
background-color: #fcf8e3;
|
1412 |
+
}
|
1413 |
+
a.egg-container .bg-warning:hover {
|
1414 |
+
background-color: #f7ecb5;
|
1415 |
+
}
|
1416 |
+
.egg-container .bg-danger {
|
1417 |
+
background-color: #f2dede;
|
1418 |
+
}
|
1419 |
+
a.egg-container .bg-danger:hover {
|
1420 |
+
background-color: #e4b9b9;
|
1421 |
+
}
|
1422 |
+
.egg-container .page-header {
|
1423 |
+
padding-bottom: 9px;
|
1424 |
+
margin: 40px 0 20px;
|
1425 |
+
border-bottom: 1px solid #eee;
|
1426 |
+
}
|
1427 |
+
.egg-container ul,
|
1428 |
+
.egg-container ol {
|
1429 |
+
margin-top: 0;
|
1430 |
+
margin-bottom: 10px;
|
1431 |
+
}
|
1432 |
+
.egg-container ul ul,
|
1433 |
+
.egg-container ol ul,
|
1434 |
+
.egg-container ul ol,
|
1435 |
+
.egg-container ol ol {
|
1436 |
+
margin-bottom: 0;
|
1437 |
+
}
|
1438 |
+
.egg-container .list-unstyled {
|
1439 |
+
padding-left: 0;
|
1440 |
+
list-style: none;
|
1441 |
+
}
|
1442 |
+
.egg-container .list-inline {
|
1443 |
+
padding-left: 0;
|
1444 |
+
margin-left: -5px;
|
1445 |
+
list-style: none;
|
1446 |
+
}
|
1447 |
+
.egg-container .list-inline > li {
|
1448 |
+
display: inline-block;
|
1449 |
+
padding-right: 5px;
|
1450 |
+
padding-left: 5px;
|
1451 |
+
}
|
1452 |
+
.egg-container dl {
|
1453 |
+
margin-top: 0;
|
1454 |
+
margin-bottom: 20px;
|
1455 |
+
}
|
1456 |
+
.egg-container dt,
|
1457 |
+
.egg-container dd {
|
1458 |
+
line-height: 1.42857143;
|
1459 |
+
}
|
1460 |
+
.egg-container dt {
|
1461 |
+
font-weight: bold;
|
1462 |
+
}
|
1463 |
+
.egg-container dd {
|
1464 |
+
margin-left: 0;
|
1465 |
+
}
|
1466 |
+
@media (min-width: 768px) {
|
1467 |
+
.egg-container .dl-horizontal dt {
|
1468 |
+
float: left;
|
1469 |
+
width: 160px;
|
1470 |
+
overflow: hidden;
|
1471 |
+
clear: left;
|
1472 |
+
text-align: right;
|
1473 |
+
text-overflow: ellipsis;
|
1474 |
+
white-space: nowrap;
|
1475 |
+
}
|
1476 |
+
.egg-container .dl-horizontal dd {
|
1477 |
+
margin-left: 180px;
|
1478 |
+
}
|
1479 |
+
}
|
1480 |
+
.egg-container abbr[title],
|
1481 |
+
.egg-container abbr[data-original-title] {
|
1482 |
+
cursor: help;
|
1483 |
+
border-bottom: 1px dotted #777;
|
1484 |
+
}
|
1485 |
+
.egg-container .initialism {
|
1486 |
+
font-size: 90%;
|
1487 |
+
text-transform: uppercase;
|
1488 |
+
}
|
1489 |
+
.egg-container blockquote {
|
1490 |
+
padding: 10px 20px;
|
1491 |
+
margin: 20px 0;
|
1492 |
+
font-size: 17.5px;
|
1493 |
+
/*border-left: 5px solid #eee;*/
|
1494 |
+
}
|
1495 |
+
.egg-container blockquote p:last-child,
|
1496 |
+
.egg-container blockquote ul:last-child,
|
1497 |
+
.egg-container blockquote ol:last-child {
|
1498 |
+
margin-bottom: 0;
|
1499 |
+
}
|
1500 |
+
.egg-container blockquote footer,
|
1501 |
+
.egg-container blockquote small,
|
1502 |
+
.egg-container blockquote .small {
|
1503 |
+
display: block;
|
1504 |
+
font-size: 80%;
|
1505 |
+
line-height: 1.42857143;
|
1506 |
+
color: #777;
|
1507 |
+
}
|
1508 |
+
.egg-container blockquote footer:before,
|
1509 |
+
.egg-container blockquote small:before,
|
1510 |
+
.egg-container blockquote .small:before {
|
1511 |
+
content: '\2014 \00A0';
|
1512 |
+
}
|
1513 |
+
.egg-container .blockquote-reverse,
|
1514 |
+
.egg-container blockquote.pull-right {
|
1515 |
+
padding-right: 15px;
|
1516 |
+
padding-left: 0;
|
1517 |
+
text-align: right;
|
1518 |
+
border-right: 5px solid #eee;
|
1519 |
+
border-left: 0;
|
1520 |
+
}
|
1521 |
+
.egg-container .blockquote-reverse footer:before,
|
1522 |
+
.egg-container blockquote.pull-right footer:before,
|
1523 |
+
.egg-container .blockquote-reverse small:before,
|
1524 |
+
.egg-container blockquote.pull-right small:before,
|
1525 |
+
.egg-container .blockquote-reverse .small:before,
|
1526 |
+
.egg-container blockquote.pull-right .small:before {
|
1527 |
+
content: '';
|
1528 |
+
}
|
1529 |
+
.egg-container .blockquote-reverse footer:after,
|
1530 |
+
.egg-container blockquote.pull-right footer:after,
|
1531 |
+
.egg-container .blockquote-reverse small:after,
|
1532 |
+
.egg-container blockquote.pull-right small:after,
|
1533 |
+
.egg-container .blockquote-reverse .small:after,
|
1534 |
+
.egg-container blockquote.pull-right .small:after {
|
1535 |
+
content: '\00A0 \2014';
|
1536 |
+
}
|
1537 |
+
.egg-container address {
|
1538 |
+
margin-bottom: 20px;
|
1539 |
+
font-style: normal;
|
1540 |
+
line-height: 1.42857143;
|
1541 |
+
}
|
1542 |
+
.egg-container code,
|
1543 |
+
.egg-container kbd,
|
1544 |
+
.egg-container pre,
|
1545 |
+
.egg-container samp {
|
1546 |
+
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
|
1547 |
+
}
|
1548 |
+
.egg-container code {
|
1549 |
+
padding: 2px 4px;
|
1550 |
+
font-size: 90%;
|
1551 |
+
color: #c7254e;
|
1552 |
+
background-color: #f9f2f4;
|
1553 |
+
border-radius: 4px;
|
1554 |
+
}
|
1555 |
+
.egg-container kbd {
|
1556 |
+
padding: 2px 4px;
|
1557 |
+
font-size: 90%;
|
1558 |
+
color: #fff;
|
1559 |
+
background-color: #333;
|
1560 |
+
border-radius: 3px;
|
1561 |
+
-webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
|
1562 |
+
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
|
1563 |
+
}
|
1564 |
+
.egg-container kbd kbd {
|
1565 |
+
padding: 0;
|
1566 |
+
font-size: 100%;
|
1567 |
+
font-weight: bold;
|
1568 |
+
-webkit-box-shadow: none;
|
1569 |
+
box-shadow: none;
|
1570 |
+
}
|
1571 |
+
.egg-container pre {
|
1572 |
+
display: block;
|
1573 |
+
padding: 9.5px;
|
1574 |
+
margin: 0 0 10px;
|
1575 |
+
font-size: 13px;
|
1576 |
+
line-height: 1.42857143;
|
1577 |
+
color: #333;
|
1578 |
+
word-break: break-all;
|
1579 |
+
word-wrap: break-word;
|
1580 |
+
background-color: #f5f5f5;
|
1581 |
+
border: 1px solid #ccc;
|
1582 |
+
border-radius: 4px;
|
1583 |
+
}
|
1584 |
+
.egg-container pre code {
|
1585 |
+
padding: 0;
|
1586 |
+
font-size: inherit;
|
1587 |
+
color: inherit;
|
1588 |
+
white-space: pre-wrap;
|
1589 |
+
background-color: transparent;
|
1590 |
+
border-radius: 0;
|
1591 |
+
}
|
1592 |
+
.egg-container .pre-scrollable {
|
1593 |
+
max-height: 340px;
|
1594 |
+
overflow-y: scroll;
|
1595 |
+
}
|
1596 |
+
.egg-container .container {
|
1597 |
+
padding-right: 15px;
|
1598 |
+
padding-left: 15px;
|
1599 |
+
margin-right: auto;
|
1600 |
+
margin-left: auto;
|
1601 |
+
}
|
1602 |
+
@media (min-width: 768px) {
|
1603 |
+
.egg-container .container {
|
1604 |
+
width: 750px;
|
1605 |
+
}
|
1606 |
+
}
|
1607 |
+
@media (min-width: 992px) {
|
1608 |
+
.egg-container .container {
|
1609 |
+
width: 970px;
|
1610 |
+
}
|
1611 |
+
}
|
1612 |
+
@media (min-width: 1200px) {
|
1613 |
+
.egg-container .container {
|
1614 |
+
width: 1170px;
|
1615 |
+
}
|
1616 |
+
}
|
1617 |
+
.egg-container .container-fluid {
|
1618 |
+
padding-right: 15px;
|
1619 |
+
padding-left: 15px;
|
1620 |
+
margin-right: auto;
|
1621 |
+
margin-left: auto;
|
1622 |
+
}
|
1623 |
+
.egg-container .row {
|
1624 |
+
margin-right: -15px;
|
1625 |
+
margin-left: -15px;
|
1626 |
+
margin-bottom: 20px
|
1627 |
+
}
|
1628 |
+
.egg-container .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
|
1629 |
+
position: relative;
|
1630 |
+
min-height: 1px;
|
1631 |
+
padding-right: 15px;
|
1632 |
+
padding-left: 15px;
|
1633 |
+
}
|
1634 |
+
.egg-container .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
|
1635 |
+
float: left;
|
1636 |
+
}
|
1637 |
+
.egg-container .col-xs-12 {
|
1638 |
+
width: 100%;
|
1639 |
+
}
|
1640 |
+
.egg-container .col-xs-11 {
|
1641 |
+
width: 91.66666667%;
|
1642 |
+
}
|
1643 |
+
.egg-container .col-xs-10 {
|
1644 |
+
width: 83.33333333%;
|
1645 |
+
}
|
1646 |
+
.egg-container .col-xs-9 {
|
1647 |
+
width: 75%;
|
1648 |
+
}
|
1649 |
+
.egg-container .col-xs-8 {
|
1650 |
+
width: 66.66666667%;
|
1651 |
+
}
|
1652 |
+
.egg-container .col-xs-7 {
|
1653 |
+
width: 58.33333333%;
|
1654 |
+
}
|
1655 |
+
.egg-container .col-xs-6 {
|
1656 |
+
width: 50%;
|
1657 |
+
}
|
1658 |
+
.egg-container .col-xs-5 {
|
1659 |
+
width: 41.66666667%;
|
1660 |
+
}
|
1661 |
+
.egg-container .col-xs-4 {
|
1662 |
+
width: 33.33333333%;
|
1663 |
+
}
|
1664 |
+
.egg-container .col-xs-3 {
|
1665 |
+
width: 25%;
|
1666 |
+
}
|
1667 |
+
.egg-container .col-xs-2 {
|
1668 |
+
width: 16.66666667%;
|
1669 |
+
}
|
1670 |
+
.egg-container .col-xs-1 {
|
1671 |
+
width: 8.33333333%;
|
1672 |
+
}
|
1673 |
+
.egg-container .col-xs-pull-12 {
|
1674 |
+
right: 100%;
|
1675 |
+
}
|
1676 |
+
.egg-container .col-xs-pull-11 {
|
1677 |
+
right: 91.66666667%;
|
1678 |
+
}
|
1679 |
+
.egg-container .col-xs-pull-10 {
|
1680 |
+
right: 83.33333333%;
|
1681 |
+
}
|
1682 |
+
.egg-container .col-xs-pull-9 {
|
1683 |
+
right: 75%;
|
1684 |
+
}
|
1685 |
+
.egg-container .col-xs-pull-8 {
|
1686 |
+
right: 66.66666667%;
|
1687 |
+
}
|
1688 |
+
.egg-container .col-xs-pull-7 {
|
1689 |
+
right: 58.33333333%;
|
1690 |
+
}
|
1691 |
+
.egg-container .col-xs-pull-6 {
|
1692 |
+
right: 50%;
|
1693 |
+
}
|
1694 |
+
.egg-container .col-xs-pull-5 {
|
1695 |
+
right: 41.66666667%;
|
1696 |
+
}
|
1697 |
+
.egg-container .col-xs-pull-4 {
|
1698 |
+
right: 33.33333333%;
|
1699 |
+
}
|
1700 |
+
.egg-container .col-xs-pull-3 {
|
1701 |
+
right: 25%;
|
1702 |
+
}
|
1703 |
+
.egg-container .col-xs-pull-2 {
|
1704 |
+
right: 16.66666667%;
|
1705 |
+
}
|
1706 |
+
.egg-container .col-xs-pull-1 {
|
1707 |
+
right: 8.33333333%;
|
1708 |
+
}
|
1709 |
+
.egg-container .col-xs-pull-0 {
|
1710 |
+
right: auto;
|
1711 |
+
}
|
1712 |
+
.egg-container .col-xs-push-12 {
|
1713 |
+
left: 100%;
|
1714 |
+
}
|
1715 |
+
.egg-container .col-xs-push-11 {
|
1716 |
+
left: 91.66666667%;
|
1717 |
+
}
|
1718 |
+
.egg-container .col-xs-push-10 {
|
1719 |
+
left: 83.33333333%;
|
1720 |
+
}
|
1721 |
+
.egg-container .col-xs-push-9 {
|
1722 |
+
left: 75%;
|
1723 |
+
}
|
1724 |
+
.egg-container .col-xs-push-8 {
|
1725 |
+
left: 66.66666667%;
|
1726 |
+
}
|
1727 |
+
.egg-container .col-xs-push-7 {
|
1728 |
+
left: 58.33333333%;
|
1729 |
+
}
|
1730 |
+
.egg-container .col-xs-push-6 {
|
1731 |
+
left: 50%;
|
1732 |
+
}
|
1733 |
+
.egg-container .col-xs-push-5 {
|
1734 |
+
left: 41.66666667%;
|
1735 |
+
}
|
1736 |
+
.egg-container .col-xs-push-4 {
|
1737 |
+
left: 33.33333333%;
|
1738 |
+
}
|
1739 |
+
.egg-container .col-xs-push-3 {
|
1740 |
+
left: 25%;
|
1741 |
+
}
|
1742 |
+
.egg-container .col-xs-push-2 {
|
1743 |
+
left: 16.66666667%;
|
1744 |
+
}
|
1745 |
+
.egg-container .col-xs-push-1 {
|
1746 |
+
left: 8.33333333%;
|
1747 |
+
}
|
1748 |
+
.egg-container .col-xs-push-0 {
|
1749 |
+
left: auto;
|
1750 |
+
}
|
1751 |
+
.egg-container .col-xs-offset-12 {
|
1752 |
+
margin-left: 100%;
|
1753 |
+
}
|
1754 |
+
.egg-container .col-xs-offset-11 {
|
1755 |
+
margin-left: 91.66666667%;
|
1756 |
+
}
|
1757 |
+
.egg-container .col-xs-offset-10 {
|
1758 |
+
margin-left: 83.33333333%;
|
1759 |
+
}
|
1760 |
+
.egg-container .col-xs-offset-9 {
|
1761 |
+
margin-left: 75%;
|
1762 |
+
}
|
1763 |
+
.egg-container .col-xs-offset-8 {
|
1764 |
+
margin-left: 66.66666667%;
|
1765 |
+
}
|
1766 |
+
.egg-container .col-xs-offset-7 {
|
1767 |
+
margin-left: 58.33333333%;
|
1768 |
+
}
|
1769 |
+
.egg-container .col-xs-offset-6 {
|
1770 |
+
margin-left: 50%;
|
1771 |
+
}
|
1772 |
+
.egg-container .col-xs-offset-5 {
|
1773 |
+
margin-left: 41.66666667%;
|
1774 |
+
}
|
1775 |
+
.egg-container .col-xs-offset-4 {
|
1776 |
+
margin-left: 33.33333333%;
|
1777 |
+
}
|
1778 |
+
.egg-container .col-xs-offset-3 {
|
1779 |
+
margin-left: 25%;
|
1780 |
+
}
|
1781 |
+
.egg-container .col-xs-offset-2 {
|
1782 |
+
margin-left: 16.66666667%;
|
1783 |
+
}
|
1784 |
+
.egg-container .col-xs-offset-1 {
|
1785 |
+
margin-left: 8.33333333%;
|
1786 |
+
}
|
1787 |
+
.egg-container .col-xs-offset-0 {
|
1788 |
+
margin-left: 0;
|
1789 |
+
}
|
1790 |
+
@media (min-width: 768px) {
|
1791 |
+
.egg-container .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
|
1792 |
+
float: left;
|
1793 |
+
}
|
1794 |
+
.egg-container .col-sm-12 {
|
1795 |
+
width: 100%;
|
1796 |
+
}
|
1797 |
+
.egg-container .col-sm-11 {
|
1798 |
+
width: 91.66666667%;
|
1799 |
+
}
|
1800 |
+
.egg-container .col-sm-10 {
|
1801 |
+
width: 83.33333333%;
|
1802 |
+
}
|
1803 |
+
.egg-container .col-sm-9 {
|
1804 |
+
width: 75%;
|
1805 |
+
}
|
1806 |
+
.egg-container .col-sm-8 {
|
1807 |
+
width: 66.66666667%;
|
1808 |
+
}
|
1809 |
+
.egg-container .col-sm-7 {
|
1810 |
+
width: 58.33333333%;
|
1811 |
+
}
|
1812 |
+
.egg-container .col-sm-6 {
|
1813 |
+
width: 50%;
|
1814 |
+
}
|
1815 |
+
.egg-container .col-sm-5 {
|
1816 |
+
width: 41.66666667%;
|
1817 |
+
}
|
1818 |
+
.egg-container .col-sm-4 {
|
1819 |
+
width: 33.33333333%;
|
1820 |
+
}
|
1821 |
+
.egg-container .col-sm-3 {
|
1822 |
+
width: 25%;
|
1823 |
+
}
|
1824 |
+
.egg-container .col-sm-2 {
|
1825 |
+
width: 16.66666667%;
|
1826 |
+
}
|
1827 |
+
.egg-container .col-sm-1 {
|
1828 |
+
width: 8.33333333%;
|
1829 |
+
}
|
1830 |
+
.egg-container .col-sm-pull-12 {
|
1831 |
+
right: 100%;
|
1832 |
+
}
|
1833 |
+
.egg-container .col-sm-pull-11 {
|
1834 |
+
right: 91.66666667%;
|
1835 |
+
}
|
1836 |
+
.egg-container .col-sm-pull-10 {
|
1837 |
+
right: 83.33333333%;
|
1838 |
+
}
|
1839 |
+
.egg-container .col-sm-pull-9 {
|
1840 |
+
right: 75%;
|
1841 |
+
}
|
1842 |
+
.egg-container .col-sm-pull-8 {
|
1843 |
+
right: 66.66666667%;
|
1844 |
+
}
|
1845 |
+
.egg-container .col-sm-pull-7 {
|
1846 |
+
right: 58.33333333%;
|
1847 |
+
}
|
1848 |
+
.egg-container .col-sm-pull-6 {
|
1849 |
+
right: 50%;
|
1850 |
+
}
|
1851 |
+
.egg-container .col-sm-pull-5 {
|
1852 |
+
right: 41.66666667%;
|
1853 |
+
}
|
1854 |
+
.egg-container .col-sm-pull-4 {
|
1855 |
+
right: 33.33333333%;
|
1856 |
+
}
|
1857 |
+
.egg-container .col-sm-pull-3 {
|
1858 |
+
right: 25%;
|
1859 |
+
}
|
1860 |
+
.egg-container .col-sm-pull-2 {
|
1861 |
+
right: 16.66666667%;
|
1862 |
+
}
|
1863 |
+
.egg-container .col-sm-pull-1 {
|
1864 |
+
right: 8.33333333%;
|
1865 |
+
}
|
1866 |
+
.egg-container .col-sm-pull-0 {
|
1867 |
+
right: auto;
|
1868 |
+
}
|
1869 |
+
.egg-container .col-sm-push-12 {
|
1870 |
+
left: 100%;
|
1871 |
+
}
|
1872 |
+
.egg-container .col-sm-push-11 {
|
1873 |
+
left: 91.66666667%;
|
1874 |
+
}
|
1875 |
+
.egg-container .col-sm-push-10 {
|
1876 |
+
left: 83.33333333%;
|
1877 |
+
}
|
1878 |
+
.egg-container .col-sm-push-9 {
|
1879 |
+
left: 75%;
|
1880 |
+
}
|
1881 |
+
.egg-container .col-sm-push-8 {
|
1882 |
+
left: 66.66666667%;
|
1883 |
+
}
|
1884 |
+
.egg-container .col-sm-push-7 {
|
1885 |
+
left: 58.33333333%;
|
1886 |
+
}
|
1887 |
+
.egg-container .col-sm-push-6 {
|
1888 |
+
left: 50%;
|
1889 |
+
}
|
1890 |
+
.egg-container .col-sm-push-5 {
|
1891 |
+
left: 41.66666667%;
|
1892 |
+
}
|
1893 |
+
.egg-container .col-sm-push-4 {
|
1894 |
+
left: 33.33333333%;
|
1895 |
+
}
|
1896 |
+
.egg-container .col-sm-push-3 {
|
1897 |
+
left: 25%;
|
1898 |
+
}
|
1899 |
+
.egg-container .col-sm-push-2 {
|
1900 |
+
left: 16.66666667%;
|
1901 |
+
}
|
1902 |
+
.egg-container .col-sm-push-1 {
|
1903 |
+
left: 8.33333333%;
|
1904 |
+
}
|
1905 |
+
.egg-container .col-sm-push-0 {
|
1906 |
+
left: auto;
|
1907 |
+
}
|
1908 |
+
.egg-container .col-sm-offset-12 {
|
1909 |
+
margin-left: 100%;
|
1910 |
+
}
|
1911 |
+
.egg-container .col-sm-offset-11 {
|
1912 |
+
margin-left: 91.66666667%;
|
1913 |
+
}
|
1914 |
+
.egg-container .col-sm-offset-10 {
|
1915 |
+
margin-left: 83.33333333%;
|
1916 |
+
}
|
1917 |
+
.egg-container .col-sm-offset-9 {
|
1918 |
+
margin-left: 75%;
|
1919 |
+
}
|
1920 |
+
.egg-container .col-sm-offset-8 {
|
1921 |
+
margin-left: 66.66666667%;
|
1922 |
+
}
|
1923 |
+
.egg-container .col-sm-offset-7 {
|
1924 |
+
margin-left: 58.33333333%;
|
1925 |
+
}
|
1926 |
+
.egg-container .col-sm-offset-6 {
|
1927 |
+
margin-left: 50%;
|
1928 |
+
}
|
1929 |
+
.egg-container .col-sm-offset-5 {
|
1930 |
+
margin-left: 41.66666667%;
|
1931 |
+
}
|
1932 |
+
.egg-container .col-sm-offset-4 {
|
1933 |
+
margin-left: 33.33333333%;
|
1934 |
+
}
|
1935 |
+
.egg-container .col-sm-offset-3 {
|
1936 |
+
margin-left: 25%;
|
1937 |
+
}
|
1938 |
+
.egg-container .col-sm-offset-2 {
|
1939 |
+
margin-left: 16.66666667%;
|
1940 |
+
}
|
1941 |
+
.egg-container .col-sm-offset-1 {
|
1942 |
+
margin-left: 8.33333333%;
|
1943 |
+
}
|
1944 |
+
.egg-container .col-sm-offset-0 {
|
1945 |
+
margin-left: 0;
|
1946 |
+
}
|
1947 |
+
}
|
1948 |
+
@media (min-width: 992px) {
|
1949 |
+
.egg-container .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
|
1950 |
+
float: left;
|
1951 |
+
}
|
1952 |
+
.egg-container .col-md-12 {
|
1953 |
+
width: 100%;
|
1954 |
+
}
|
1955 |
+
.egg-container .col-md-11 {
|
1956 |
+
width: 91.66666667%;
|
1957 |
+
}
|
1958 |
+
.egg-container .col-md-10 {
|
1959 |
+
width: 83.33333333%;
|
1960 |
+
}
|
1961 |
+
.egg-container .col-md-9 {
|
1962 |
+
width: 75%;
|
1963 |
+
}
|
1964 |
+
.egg-container .col-md-8 {
|
1965 |
+
width: 66.66666667%;
|
1966 |
+
}
|
1967 |
+
.egg-container .col-md-7 {
|
1968 |
+
width: 58.33333333%;
|
1969 |
+
}
|
1970 |
+
.egg-container .col-md-6 {
|
1971 |
+
width: 50%;
|
1972 |
+
}
|
1973 |
+
.egg-container .col-md-5 {
|
1974 |
+
width: 41.66666667%;
|
1975 |
+
}
|
1976 |
+
.egg-container .col-md-4 {
|
1977 |
+
width: 33.33333333%;
|
1978 |
+
}
|
1979 |
+
.egg-container .col-md-3 {
|
1980 |
+
width: 25%;
|
1981 |
+
}
|
1982 |
+
.egg-container .col-md-2 {
|
1983 |
+
width: 16.66666667%;
|
1984 |
+
}
|
1985 |
+
.egg-container .col-md-1 {
|
1986 |
+
width: 8.33333333%;
|
1987 |
+
}
|
1988 |
+
.egg-container .col-md-pull-12 {
|
1989 |
+
right: 100%;
|
1990 |
+
}
|
1991 |
+
.egg-container .col-md-pull-11 {
|
1992 |
+
right: 91.66666667%;
|
1993 |
+
}
|
1994 |
+
.egg-container .col-md-pull-10 {
|
1995 |
+
right: 83.33333333%;
|
1996 |
+
}
|
1997 |
+
.egg-container .col-md-pull-9 {
|
1998 |
+
right: 75%;
|
1999 |
+
}
|
2000 |
+
.egg-container .col-md-pull-8 {
|
2001 |
+
right: 66.66666667%;
|
2002 |
+
}
|
2003 |
+
.egg-container .col-md-pull-7 {
|
2004 |
+
right: 58.33333333%;
|
2005 |
+
}
|
2006 |
+
.egg-container .col-md-pull-6 {
|
2007 |
+
right: 50%;
|
2008 |
+
}
|
2009 |
+
.egg-container .col-md-pull-5 {
|
2010 |
+
right: 41.66666667%;
|
2011 |
+
}
|
2012 |
+
.egg-container .col-md-pull-4 {
|
2013 |
+
right: 33.33333333%;
|
2014 |
+
}
|
2015 |
+
.egg-container .col-md-pull-3 {
|
2016 |
+
right: 25%;
|
2017 |
+
}
|
2018 |
+
.egg-container .col-md-pull-2 {
|
2019 |
+
right: 16.66666667%;
|
2020 |
+
}
|
2021 |
+
.egg-container .col-md-pull-1 {
|
2022 |
+
right: 8.33333333%;
|
2023 |
+
}
|
2024 |
+
.egg-container .col-md-pull-0 {
|
2025 |
+
right: auto;
|
2026 |
+
}
|
2027 |
+
.egg-container .col-md-push-12 {
|
2028 |
+
left: 100%;
|
2029 |
+
}
|
2030 |
+
.egg-container .col-md-push-11 {
|
2031 |
+
left: 91.66666667%;
|
2032 |
+
}
|
2033 |
+
.egg-container .col-md-push-10 {
|
2034 |
+
left: 83.33333333%;
|
2035 |
+
}
|
2036 |
+
.egg-container .col-md-push-9 {
|
2037 |
+
left: 75%;
|
2038 |
+
}
|
2039 |
+
.egg-container .col-md-push-8 {
|
2040 |
+
left: 66.66666667%;
|
2041 |
+
}
|
2042 |
+
.egg-container .col-md-push-7 {
|
2043 |
+
left: 58.33333333%;
|
2044 |
+
}
|
2045 |
+
.egg-container .col-md-push-6 {
|
2046 |
+
left: 50%;
|
2047 |
+
}
|
2048 |
+
.egg-container .col-md-push-5 {
|
2049 |
+
left: 41.66666667%;
|
2050 |
+
}
|
2051 |
+
.egg-container .col-md-push-4 {
|
2052 |
+
left: 33.33333333%;
|
2053 |
+
}
|
2054 |
+
.egg-container .col-md-push-3 {
|
2055 |
+
left: 25%;
|
2056 |
+
}
|
2057 |
+
.egg-container .col-md-push-2 {
|
2058 |
+
left: 16.66666667%;
|
2059 |
+
}
|
2060 |
+
.egg-container .col-md-push-1 {
|
2061 |
+
left: 8.33333333%;
|
2062 |
+
}
|
2063 |
+
.egg-container .col-md-push-0 {
|
2064 |
+
left: auto;
|
2065 |
+
}
|
2066 |
+
.egg-container .col-md-offset-12 {
|
2067 |
+
margin-left: 100%;
|
2068 |
+
}
|
2069 |
+
.egg-container .col-md-offset-11 {
|
2070 |
+
margin-left: 91.66666667%;
|
2071 |
+
}
|
2072 |
+
.egg-container .col-md-offset-10 {
|
2073 |
+
margin-left: 83.33333333%;
|
2074 |
+
}
|
2075 |
+
.egg-container .col-md-offset-9 {
|
2076 |
+
margin-left: 75%;
|
2077 |
+
}
|
2078 |
+
.egg-container .col-md-offset-8 {
|
2079 |
+
margin-left: 66.66666667%;
|
2080 |
+
}
|
2081 |
+
.egg-container .col-md-offset-7 {
|
2082 |
+
margin-left: 58.33333333%;
|
2083 |
+
}
|
2084 |
+
.egg-container .col-md-offset-6 {
|
2085 |
+
margin-left: 50%;
|
2086 |
+
}
|
2087 |
+
.egg-container .col-md-offset-5 {
|
2088 |
+
margin-left: 41.66666667%;
|
2089 |
+
}
|
2090 |
+
.egg-container .col-md-offset-4 {
|
2091 |
+
margin-left: 33.33333333%;
|
2092 |
+
}
|
2093 |
+
.egg-container .col-md-offset-3 {
|
2094 |
+
margin-left: 25%;
|
2095 |
+
}
|
2096 |
+
.egg-container .col-md-offset-2 {
|
2097 |
+
margin-left: 16.66666667%;
|
2098 |
+
}
|
2099 |
+
.egg-container .col-md-offset-1 {
|
2100 |
+
margin-left: 8.33333333%;
|
2101 |
+
}
|
2102 |
+
.egg-container .col-md-offset-0 {
|
2103 |
+
margin-left: 0;
|
2104 |
+
}
|
2105 |
+
}
|
2106 |
+
@media (min-width: 1200px) {
|
2107 |
+
.egg-container .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
|
2108 |
+
float: left;
|
2109 |
+
}
|
2110 |
+
.egg-container .col-lg-12 {
|
2111 |
+
width: 100%;
|
2112 |
+
}
|
2113 |
+
.egg-container .col-lg-11 {
|
2114 |
+
width: 91.66666667%;
|
2115 |
+
}
|
2116 |
+
.egg-container .col-lg-10 {
|
2117 |
+
width: 83.33333333%;
|
2118 |
+
}
|
2119 |
+
.egg-container .col-lg-9 {
|
2120 |
+
width: 75%;
|
2121 |
+
}
|
2122 |
+
.egg-container .col-lg-8 {
|
2123 |
+
width: 66.66666667%;
|
2124 |
+
}
|
2125 |
+
.egg-container .col-lg-7 {
|
2126 |
+
width: 58.33333333%;
|
2127 |
+
}
|
2128 |
+
.egg-container .col-lg-6 {
|
2129 |
+
width: 50%;
|
2130 |
+
}
|
2131 |
+
.egg-container .col-lg-5 {
|
2132 |
+
width: 41.66666667%;
|
2133 |
+
}
|
2134 |
+
.egg-container .col-lg-4 {
|
2135 |
+
width: 33.33333333%;
|
2136 |
+
}
|
2137 |
+
.egg-container .col-lg-3 {
|
2138 |
+
width: 25%;
|
2139 |
+
}
|
2140 |
+
.egg-container .col-lg-2 {
|
2141 |
+
width: 16.66666667%;
|
2142 |
+
}
|
2143 |
+
.egg-container .col-lg-1 {
|
2144 |
+
width: 8.33333333%;
|
2145 |
+
}
|
2146 |
+
.egg-container .col-lg-pull-12 {
|
2147 |
+
right: 100%;
|
2148 |
+
}
|
2149 |
+
.egg-container .col-lg-pull-11 {
|
2150 |
+
right: 91.66666667%;
|
2151 |
+
}
|
2152 |
+
.egg-container .col-lg-pull-10 {
|
2153 |
+
right: 83.33333333%;
|
2154 |
+
}
|
2155 |
+
.egg-container .col-lg-pull-9 {
|
2156 |
+
right: 75%;
|
2157 |
+
}
|
2158 |
+
.egg-container .col-lg-pull-8 {
|
2159 |
+
right: 66.66666667%;
|
2160 |
+
}
|
2161 |
+
.egg-container .col-lg-pull-7 {
|
2162 |
+
right: 58.33333333%;
|
2163 |
+
}
|
2164 |
+
.egg-container .col-lg-pull-6 {
|
2165 |
+
right: 50%;
|
2166 |
+
}
|
2167 |
+
.egg-container .col-lg-pull-5 {
|
2168 |
+
right: 41.66666667%;
|
2169 |
+
}
|
2170 |
+
.egg-container .col-lg-pull-4 {
|
2171 |
+
right: 33.33333333%;
|
2172 |
+
}
|
2173 |
+
.egg-container .col-lg-pull-3 {
|
2174 |
+
right: 25%;
|
2175 |
+
}
|
2176 |
+
.egg-container .col-lg-pull-2 {
|
2177 |
+
right: 16.66666667%;
|
2178 |
+
}
|
2179 |
+
.egg-container .col-lg-pull-1 {
|
2180 |
+
right: 8.33333333%;
|
2181 |
+
}
|
2182 |
+
.egg-container .col-lg-pull-0 {
|
2183 |
+
right: auto;
|
2184 |
+
}
|
2185 |
+
.egg-container .col-lg-push-12 {
|
2186 |
+
left: 100%;
|
2187 |
+
}
|
2188 |
+
.egg-container .col-lg-push-11 {
|
2189 |
+
left: 91.66666667%;
|
2190 |
+
}
|
2191 |
+
.egg-container .col-lg-push-10 {
|
2192 |
+
left: 83.33333333%;
|
2193 |
+
}
|
2194 |
+
.egg-container .col-lg-push-9 {
|
2195 |
+
left: 75%;
|
2196 |
+
}
|
2197 |
+
.egg-container .col-lg-push-8 {
|
2198 |
+
left: 66.66666667%;
|
2199 |
+
}
|
2200 |
+
.egg-container .col-lg-push-7 {
|
2201 |
+
left: 58.33333333%;
|
2202 |
+
}
|
2203 |
+
.egg-container .col-lg-push-6 {
|
2204 |
+
left: 50%;
|
2205 |
+
}
|
2206 |
+
.egg-container .col-lg-push-5 {
|
2207 |
+
left: 41.66666667%;
|
2208 |
+
}
|
2209 |
+
.egg-container .col-lg-push-4 {
|
2210 |
+
left: 33.33333333%;
|
2211 |
+
}
|
2212 |
+
.egg-container .col-lg-push-3 {
|
2213 |
+
left: 25%;
|
2214 |
+
}
|
2215 |
+
.egg-container .col-lg-push-2 {
|
2216 |
+
left: 16.66666667%;
|
2217 |
+
}
|
2218 |
+
.egg-container .col-lg-push-1 {
|
2219 |
+
left: 8.33333333%;
|
2220 |
+
}
|
2221 |
+
.egg-container .col-lg-push-0 {
|
2222 |
+
left: auto;
|
2223 |
+
}
|
2224 |
+
.egg-container .col-lg-offset-12 {
|
2225 |
+
margin-left: 100%;
|
2226 |
+
}
|
2227 |
+
.egg-container .col-lg-offset-11 {
|
2228 |
+
margin-left: 91.66666667%;
|
2229 |
+
}
|
2230 |
+
.egg-container .col-lg-offset-10 {
|
2231 |
+
margin-left: 83.33333333%;
|
2232 |
+
}
|
2233 |
+
.egg-container .col-lg-offset-9 {
|
2234 |
+
margin-left: 75%;
|
2235 |
+
}
|
2236 |
+
.egg-container .col-lg-offset-8 {
|
2237 |
+
margin-left: 66.66666667%;
|
2238 |
+
}
|
2239 |
+
.egg-container .col-lg-offset-7 {
|
2240 |
+
margin-left: 58.33333333%;
|
2241 |
+
}
|
2242 |
+
.egg-container .col-lg-offset-6 {
|
2243 |
+
margin-left: 50%;
|
2244 |
+
}
|
2245 |
+
.egg-container .col-lg-offset-5 {
|
2246 |
+
margin-left: 41.66666667%;
|
2247 |
+
}
|
2248 |
+
.egg-container .col-lg-offset-4 {
|
2249 |
+
margin-left: 33.33333333%;
|
2250 |
+
}
|
2251 |
+
.egg-container .col-lg-offset-3 {
|
2252 |
+
margin-left: 25%;
|
2253 |
+
}
|
2254 |
+
.egg-container .col-lg-offset-2 {
|
2255 |
+
margin-left: 16.66666667%;
|
2256 |
+
}
|
2257 |
+
.egg-container .col-lg-offset-1 {
|
2258 |
+
margin-left: 8.33333333%;
|
2259 |
+
}
|
2260 |
+
.egg-container .col-lg-offset-0 {
|
2261 |
+
margin-left: 0;
|
2262 |
+
}
|
2263 |
+
}
|
2264 |
+
.egg-container table {
|
2265 |
+
background-color: transparent;
|
2266 |
+
}
|
2267 |
+
.egg-container caption {
|
2268 |
+
padding-top: 8px;
|
2269 |
+
padding-bottom: 8px;
|
2270 |
+
color: #777;
|
2271 |
+
text-align: left;
|
2272 |
+
}
|
2273 |
+
.egg-container th {
|
2274 |
+
text-align: left;
|
2275 |
+
}
|
2276 |
+
.egg-container .table {
|
2277 |
+
width: 100%;
|
2278 |
+
max-width: 100%;
|
2279 |
+
margin-bottom: 20px;
|
2280 |
+
}
|
2281 |
+
.egg-container .table > thead > tr > th,
|
2282 |
+
.egg-container .table > tbody > tr > th,
|
2283 |
+
.egg-container .table > tfoot > tr > th,
|
2284 |
+
.egg-container .table > thead > tr > td,
|
2285 |
+
.egg-container .table > tbody > tr > td,
|
2286 |
+
.egg-container .table > tfoot > tr > td {
|
2287 |
+
padding: 8px;
|
2288 |
+
line-height: 1.42857143;
|
2289 |
+
vertical-align: top;
|
2290 |
+
border-top: 1px solid #ddd;
|
2291 |
+
}
|
2292 |
+
.egg-container .table > thead > tr > th {
|
2293 |
+
vertical-align: bottom;
|
2294 |
+
border-bottom: 2px solid #ddd;
|
2295 |
+
}
|
2296 |
+
.egg-container .table > caption + thead > tr:first-child > th,
|
2297 |
+
.egg-container .table > colgroup + thead > tr:first-child > th,
|
2298 |
+
.egg-container .table > thead:first-child > tr:first-child > th,
|
2299 |
+
.egg-container .table > caption + thead > tr:first-child > td,
|
2300 |
+
.egg-container .table > colgroup + thead > tr:first-child > td,
|
2301 |
+
.egg-container .table > thead:first-child > tr:first-child > td {
|
2302 |
+
border-top: 0;
|
2303 |
+
}
|
2304 |
+
.egg-container .table > tbody + tbody {
|
2305 |
+
border-top: 2px solid #ddd;
|
2306 |
+
}
|
2307 |
+
.egg-container .table .table {
|
2308 |
+
background-color: #fff;
|
2309 |
+
}
|
2310 |
+
.egg-container .table-condensed > thead > tr > th,
|
2311 |
+
.egg-container .table-condensed > tbody > tr > th,
|
2312 |
+
.egg-container .table-condensed > tfoot > tr > th,
|
2313 |
+
.egg-container .table-condensed > thead > tr > td,
|
2314 |
+
.egg-container .table-condensed > tbody > tr > td,
|
2315 |
+
.egg-container .table-condensed > tfoot > tr > td {
|
2316 |
+
padding: 5px;
|
2317 |
+
}
|
2318 |
+
.egg-container .table-bordered {
|
2319 |
+
border: 1px solid #ddd;
|
2320 |
+
}
|
2321 |
+
.egg-container .table-bordered > thead > tr > th,
|
2322 |
+
.egg-container .table-bordered > tbody > tr > th,
|
2323 |
+
.egg-container .table-bordered > tfoot > tr > th,
|
2324 |
+
.egg-container .table-bordered > thead > tr > td,
|
2325 |
+
.egg-container .table-bordered > tbody > tr > td,
|
2326 |
+
.egg-container .table-bordered > tfoot > tr > td {
|
2327 |
+
border: 1px solid #ddd;
|
2328 |
+
}
|
2329 |
+
.egg-container .table-bordered > thead > tr > th,
|
2330 |
+
.egg-container .table-bordered > thead > tr > td {
|
2331 |
+
border-bottom-width: 2px;
|
2332 |
+
}
|
2333 |
+
.egg-container .table-striped > tbody > tr:nth-of-type(odd) {
|
2334 |
+
background-color: #f9f9f9;
|
2335 |
+
}
|
2336 |
+
.egg-container .table-hover > tbody > tr:hover {
|
2337 |
+
background-color: #f5f5f5;
|
2338 |
+
}
|
2339 |
+
.egg-container table col[class*="col-"] {
|
2340 |
+
position: static;
|
2341 |
+
display: table-column;
|
2342 |
+
float: none;
|
2343 |
+
}
|
2344 |
+
.egg-container table td[class*="col-"],
|
2345 |
+
.egg-container table th[class*="col-"] {
|
2346 |
+
position: static;
|
2347 |
+
display: table-cell;
|
2348 |
+
float: none;
|
2349 |
+
}
|
2350 |
+
.egg-container .table > thead > tr > td.active,
|
2351 |
+
.egg-container .table > tbody > tr > td.active,
|
2352 |
+
.egg-container .table > tfoot > tr > td.active,
|
2353 |
+
.egg-container .table > thead > tr > th.active,
|
2354 |
+
.egg-container .table > tbody > tr > th.active,
|
2355 |
+
.egg-container .table > tfoot > tr > th.active,
|
2356 |
+
.egg-container .table > thead > tr.active > td,
|
2357 |
+
.egg-container .table > tbody > tr.active > td,
|
2358 |
+
.egg-container .table > tfoot > tr.active > td,
|
2359 |
+
.egg-container .table > thead > tr.active > th,
|
2360 |
+
.egg-container .table > tbody > tr.active > th,
|
2361 |
+
.egg-container .table > tfoot > tr.active > th {
|
2362 |
+
background-color: #f5f5f5;
|
2363 |
+
}
|
2364 |
+
.egg-container .table-hover > tbody > tr > td.active:hover,
|
2365 |
+
.egg-container .table-hover > tbody > tr > th.active:hover,
|
2366 |
+
.egg-container .table-hover > tbody > tr.active:hover > td,
|
2367 |
+
.egg-container .table-hover > tbody > tr:hover > .active,
|
2368 |
+
.egg-container .table-hover > tbody > tr.active:hover > th {
|
2369 |
+
background-color: #e8e8e8;
|
2370 |
+
}
|
2371 |
+
.egg-container .table > thead > tr > td.success,
|
2372 |
+
.egg-container .table > tbody > tr > td.success,
|
2373 |
+
.egg-container .table > tfoot > tr > td.success,
|
2374 |
+
.egg-container .table > thead > tr > th.success,
|
2375 |
+
.egg-container .table > tbody > tr > th.success,
|
2376 |
+
.egg-container .table > tfoot > tr > th.success,
|
2377 |
+
.egg-container .table > thead > tr.success > td,
|
2378 |
+
.egg-container .table > tbody > tr.success > td,
|
2379 |
+
.egg-container .table > tfoot > tr.success > td,
|
2380 |
+
.egg-container .table > thead > tr.success > th,
|
2381 |
+
.egg-container .table > tbody > tr.success > th,
|
2382 |
+
.egg-container .table > tfoot > tr.success > th {
|
2383 |
+
background-color: #dff0d8;
|
2384 |
+
}
|
2385 |
+
.egg-container .table-hover > tbody > tr > td.success:hover,
|
2386 |
+
.egg-container .table-hover > tbody > tr > th.success:hover,
|
2387 |
+
.egg-container .table-hover > tbody > tr.success:hover > td,
|
2388 |
+
.egg-container .table-hover > tbody > tr:hover > .success,
|
2389 |
+
.egg-container .table-hover > tbody > tr.success:hover > th {
|
2390 |
+
background-color: #d0e9c6;
|
2391 |
+
}
|
2392 |
+
.egg-container .table > thead > tr > td.info,
|
2393 |
+
.egg-container .table > tbody > tr > td.info,
|
2394 |
+
.egg-container .table > tfoot > tr > td.info,
|
2395 |
+
.egg-container .table > thead > tr > th.info,
|
2396 |
+
.egg-container .table > tbody > tr > th.info,
|
2397 |
+
.egg-container .table > tfoot > tr > th.info,
|
2398 |
+
.egg-container .table > thead > tr.info > td,
|
2399 |
+
.egg-container .table > tbody > tr.info > td,
|
2400 |
+
.egg-container .table > tfoot > tr.info > td,
|
2401 |
+
.egg-container .table > thead > tr.info > th,
|
2402 |
+
.egg-container .table > tbody > tr.info > th,
|
2403 |
+
.egg-container .table > tfoot > tr.info > th {
|
2404 |
+
background-color: #d9edf7;
|
2405 |
+
}
|
2406 |
+
.egg-container .table-hover > tbody > tr > td.info:hover,
|
2407 |
+
.egg-container .table-hover > tbody > tr > th.info:hover,
|
2408 |
+
.egg-container .table-hover > tbody > tr.info:hover > td,
|
2409 |
+
.egg-container .table-hover > tbody > tr:hover > .info,
|
2410 |
+
.egg-container .table-hover > tbody > tr.info:hover > th {
|
2411 |
+
background-color: #c4e3f3;
|
2412 |
+
}
|
2413 |
+
.egg-container .table > thead > tr > td.warning,
|
2414 |
+
.egg-container .table > tbody > tr > td.warning,
|
2415 |
+
.egg-container .table > tfoot > tr > td.warning,
|
2416 |
+
.egg-container .table > thead > tr > th.warning,
|
2417 |
+
.egg-container .table > tbody > tr > th.warning,
|
2418 |
+
.egg-container .table > tfoot > tr > th.warning,
|
2419 |
+
.egg-container .table > thead > tr.warning > td,
|
2420 |
+
.egg-container .table > tbody > tr.warning > td,
|
2421 |
+
.egg-container .table > tfoot > tr.warning > td,
|
2422 |
+
.egg-container .table > thead > tr.warning > th,
|
2423 |
+
.egg-container .table > tbody > tr.warning > th,
|
2424 |
+
.egg-container .table > tfoot > tr.warning > th {
|
2425 |
+
background-color: #fcf8e3;
|
2426 |
+
}
|
2427 |
+
.egg-container .table-hover > tbody > tr > td.warning:hover,
|
2428 |
+
.egg-container .table-hover > tbody > tr > th.warning:hover,
|
2429 |
+
.egg-container .table-hover > tbody > tr.warning:hover > td,
|
2430 |
+
.egg-container .table-hover > tbody > tr:hover > .warning,
|
2431 |
+
.egg-container .table-hover > tbody > tr.warning:hover > th {
|
2432 |
+
background-color: #faf2cc;
|
2433 |
+
}
|
2434 |
+
.egg-container .table > thead > tr > td.danger,
|
2435 |
+
.egg-container .table > tbody > tr > td.danger,
|
2436 |
+
.egg-container .table > tfoot > tr > td.danger,
|
2437 |
+
.egg-container .table > thead > tr > th.danger,
|
2438 |
+
.egg-container .table > tbody > tr > th.danger,
|
2439 |
+
.egg-container .table > tfoot > tr > th.danger,
|
2440 |
+
.egg-container .table > thead > tr.danger > td,
|
2441 |
+
.egg-container .table > tbody > tr.danger > td,
|
2442 |
+
.egg-container .table > tfoot > tr.danger > td,
|
2443 |
+
.egg-container .table > thead > tr.danger > th,
|
2444 |
+
.egg-container .table > tbody > tr.danger > th,
|
2445 |
+
.egg-container .table > tfoot > tr.danger > th {
|
2446 |
+
background-color: #f2dede;
|
2447 |
+
}
|
2448 |
+
.egg-container .table-hover > tbody > tr > td.danger:hover,
|
2449 |
+
.egg-container .table-hover > tbody > tr > th.danger:hover,
|
2450 |
+
.egg-container .table-hover > tbody > tr.danger:hover > td,
|
2451 |
+
.egg-container .table-hover > tbody > tr:hover > .danger,
|
2452 |
+
.egg-container .table-hover > tbody > tr.danger:hover > th {
|
2453 |
+
background-color: #ebcccc;
|
2454 |
+
}
|
2455 |
+
.egg-container .table-responsive {
|
2456 |
+
min-height: .01%;
|
2457 |
+
overflow-x: auto;
|
2458 |
+
}
|
2459 |
+
@media screen and (max-width: 767px) {
|
2460 |
+
.egg-container .table-responsive {
|
2461 |
+
width: 100%;
|
2462 |
+
margin-bottom: 15px;
|
2463 |
+
overflow-y: hidden;
|
2464 |
+
-ms-overflow-style: -ms-autohiding-scrollbar;
|
2465 |
+
border: 1px solid #ddd;
|
2466 |
+
}
|
2467 |
+
.egg-container .table-responsive > .table {
|
2468 |
+
margin-bottom: 0;
|
2469 |
+
}
|
2470 |
+
.egg-container .table-responsive > .table > thead > tr > th,
|
2471 |
+
.egg-container .table-responsive > .table > tbody > tr > th,
|
2472 |
+
.egg-container .table-responsive > .table > tfoot > tr > th,
|
2473 |
+
.egg-container .table-responsive > .table > thead > tr > td,
|
2474 |
+
.egg-container .table-responsive > .table > tbody > tr > td,
|
2475 |
+
.egg-container .table-responsive > .table > tfoot > tr > td {
|
2476 |
+
white-space: nowrap;
|
2477 |
+
}
|
2478 |
+
.egg-container .table-responsive > .table-bordered {
|
2479 |
+
border: 0;
|
2480 |
+
}
|
2481 |
+
.egg-container .table-responsive > .table-bordered > thead > tr > th:first-child,
|
2482 |
+
.egg-container .table-responsive > .table-bordered > tbody > tr > th:first-child,
|
2483 |
+
.egg-container .table-responsive > .table-bordered > tfoot > tr > th:first-child,
|
2484 |
+
.egg-container .table-responsive > .table-bordered > thead > tr > td:first-child,
|
2485 |
+
.egg-container .table-responsive > .table-bordered > tbody > tr > td:first-child,
|
2486 |
+
.egg-container .table-responsive > .table-bordered > tfoot > tr > td:first-child {
|
2487 |
+
border-left: 0;
|
2488 |
+
}
|
2489 |
+
.egg-container .table-responsive > .table-bordered > thead > tr > th:last-child,
|
2490 |
+
.egg-container .table-responsive > .table-bordered > tbody > tr > th:last-child,
|
2491 |
+
.egg-container .table-responsive > .table-bordered > tfoot > tr > th:last-child,
|
2492 |
+
.egg-container .table-responsive > .table-bordered > thead > tr > td:last-child,
|
2493 |
+
.egg-container .table-responsive > .table-bordered > tbody > tr > td:last-child,
|
2494 |
+
.egg-container .table-responsive > .table-bordered > tfoot > tr > td:last-child {
|
2495 |
+
border-right: 0;
|
2496 |
+
}
|
2497 |
+
.egg-container .table-responsive > .table-bordered > tbody > tr:last-child > th,
|
2498 |
+
.egg-container .table-responsive > .table-bordered > tfoot > tr:last-child > th,
|
2499 |
+
.egg-container .table-responsive > .table-bordered > tbody > tr:last-child > td,
|
2500 |
+
.egg-container .table-responsive > .table-bordered > tfoot > tr:last-child > td {
|
2501 |
+
border-bottom: 0;
|
2502 |
+
}
|
2503 |
+
}
|
2504 |
+
.egg-container fieldset {
|
2505 |
+
min-width: 0;
|
2506 |
+
padding: 0;
|
2507 |
+
margin: 0;
|
2508 |
+
border: 0;
|
2509 |
+
}
|
2510 |
+
.egg-container legend {
|
2511 |
+
display: block;
|
2512 |
+
width: 100%;
|
2513 |
+
padding: 0;
|
2514 |
+
margin-bottom: 20px;
|
2515 |
+
font-size: 21px;
|
2516 |
+
line-height: inherit;
|
2517 |
+
color: #333;
|
2518 |
+
border: 0;
|
2519 |
+
border-bottom: 1px solid #e5e5e5;
|
2520 |
+
}
|
2521 |
+
.egg-container label {
|
2522 |
+
display: inline-block;
|
2523 |
+
max-width: 100%;
|
2524 |
+
margin-bottom: 5px;
|
2525 |
+
font-weight: bold;
|
2526 |
+
}
|
2527 |
+
.egg-container input[type="search"] {
|
2528 |
+
-webkit-box-sizing: border-box;
|
2529 |
+
-moz-box-sizing: border-box;
|
2530 |
+
box-sizing: border-box;
|
2531 |
+
}
|
2532 |
+
.egg-container input[type="radio"],
|
2533 |
+
.egg-container input[type="checkbox"] {
|
2534 |
+
margin: 4px 0 0;
|
2535 |
+
margin-top: 1px \9;
|
2536 |
+
line-height: normal;
|
2537 |
+
}
|
2538 |
+
.egg-container input[type="file"] {
|
2539 |
+
display: block;
|
2540 |
+
}
|
2541 |
+
.egg-container input[type="range"] {
|
2542 |
+
display: block;
|
2543 |
+
width: 100%;
|
2544 |
+
}
|
2545 |
+
.egg-container select[multiple],
|
2546 |
+
.egg-container select[size] {
|
2547 |
+
height: auto;
|
2548 |
+
}
|
2549 |
+
.egg-container input[type="file"]:focus,
|
2550 |
+
.egg-container input[type="radio"]:focus,
|
2551 |
+
.egg-container input[type="checkbox"]:focus {
|
2552 |
+
outline: thin dotted;
|
2553 |
+
outline: 5px auto -webkit-focus-ring-color;
|
2554 |
+
outline-offset: -2px;
|
2555 |
+
}
|
2556 |
+
.egg-container output {
|
2557 |
+
display: block;
|
2558 |
+
padding-top: 7px;
|
2559 |
+
font-size: 14px;
|
2560 |
+
line-height: 1.42857143;
|
2561 |
+
color: #555;
|
2562 |
+
}
|
2563 |
+
.egg-container .form-control {
|
2564 |
+
display: block;
|
2565 |
+
width: 100%;
|
2566 |
+
height: 34px;
|
2567 |
+
padding: 6px 12px;
|
2568 |
+
font-size: 14px;
|
2569 |
+
line-height: 1.42857143;
|
2570 |
+
color: #555;
|
2571 |
+
background-color: #fff;
|
2572 |
+
background-image: none;
|
2573 |
+
border: 1px solid #ccc;
|
2574 |
+
border-radius: 4px;
|
2575 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
|
2576 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
|
2577 |
+
-webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
|
2578 |
+
-o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
|
2579 |
+
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
|
2580 |
+
}
|
2581 |
+
.egg-container .form-control:focus {
|
2582 |
+
border-color: #66afe9;
|
2583 |
+
outline: 0;
|
2584 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
|
2585 |
+
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
|
2586 |
+
}
|
2587 |
+
.egg-container .form-control::-moz-placeholder {
|
2588 |
+
color: #999;
|
2589 |
+
opacity: 1;
|
2590 |
+
}
|
2591 |
+
.egg-container .form-control:-ms-input-placeholder {
|
2592 |
+
color: #999;
|
2593 |
+
}
|
2594 |
+
.egg-container .form-control::-webkit-input-placeholder {
|
2595 |
+
color: #999;
|
2596 |
+
}
|
2597 |
+
.egg-container .form-control[disabled],
|
2598 |
+
.egg-container .form-control[readonly],
|
2599 |
+
fieldset[disabled] .egg-container .form-control {
|
2600 |
+
background-color: #eee;
|
2601 |
+
opacity: 1;
|
2602 |
+
}
|
2603 |
+
.egg-container .form-control[disabled],
|
2604 |
+
fieldset[disabled] .egg-container .form-control {
|
2605 |
+
cursor: not-allowed;
|
2606 |
+
}
|
2607 |
+
textarea.egg-container .form-control {
|
2608 |
+
height: auto;
|
2609 |
+
}
|
2610 |
+
.egg-container input[type="search"] {
|
2611 |
+
-webkit-appearance: none;
|
2612 |
+
}
|
2613 |
+
@media screen and (-webkit-min-device-pixel-ratio: 0) {
|
2614 |
+
.egg-container input[type="date"],
|
2615 |
+
.egg-container input[type="time"],
|
2616 |
+
.egg-container input[type="datetime-local"],
|
2617 |
+
.egg-container input[type="month"] {
|
2618 |
+
line-height: 34px;
|
2619 |
+
}
|
2620 |
+
.egg-container input[type="date"].input-sm,
|
2621 |
+
.egg-container input[type="time"].input-sm,
|
2622 |
+
.egg-container input[type="datetime-local"].input-sm,
|
2623 |
+
.egg-container input[type="month"].input-sm,
|
2624 |
+
.input-group-sm .egg-container input[type="date"],
|
2625 |
+
.input-group-sm .egg-container input[type="time"],
|
2626 |
+
.input-group-sm .egg-container input[type="datetime-local"],
|
2627 |
+
.input-group-sm .egg-container input[type="month"] {
|
2628 |
+
line-height: 30px;
|
2629 |
+
}
|
2630 |
+
.egg-container input[type="date"].input-lg,
|
2631 |
+
.egg-container input[type="time"].input-lg,
|
2632 |
+
.egg-container input[type="datetime-local"].input-lg,
|
2633 |
+
.egg-container input[type="month"].input-lg,
|
2634 |
+
.input-group-lg .egg-container input[type="date"],
|
2635 |
+
.input-group-lg .egg-container input[type="time"],
|
2636 |
+
.input-group-lg .egg-container input[type="datetime-local"],
|
2637 |
+
.input-group-lg .egg-container input[type="month"] {
|
2638 |
+
line-height: 46px;
|
2639 |
+
}
|
2640 |
+
}
|
2641 |
+
.egg-container .form-group {
|
2642 |
+
margin-bottom: 15px;
|
2643 |
+
}
|
2644 |
+
.egg-container .radio,
|
2645 |
+
.egg-container .checkbox {
|
2646 |
+
position: relative;
|
2647 |
+
display: block;
|
2648 |
+
margin-top: 10px;
|
2649 |
+
margin-bottom: 10px;
|
2650 |
+
}
|
2651 |
+
.egg-container .radio label,
|
2652 |
+
.egg-container .checkbox label {
|
2653 |
+
min-height: 20px;
|
2654 |
+
padding-left: 20px;
|
2655 |
+
margin-bottom: 0;
|
2656 |
+
font-weight: normal;
|
2657 |
+
cursor: pointer;
|
2658 |
+
}
|
2659 |
+
.egg-container .radio input[type="radio"],
|
2660 |
+
.egg-container .radio-inline input[type="radio"],
|
2661 |
+
.egg-container .checkbox input[type="checkbox"],
|
2662 |
+
.egg-container .checkbox-inline input[type="checkbox"] {
|
2663 |
+
position: absolute;
|
2664 |
+
margin-top: 4px \9;
|
2665 |
+
margin-left: -20px;
|
2666 |
+
}
|
2667 |
+
.egg-container .radio + .radio,
|
2668 |
+
.egg-container .checkbox + .checkbox {
|
2669 |
+
margin-top: -5px;
|
2670 |
+
}
|
2671 |
+
.egg-container .radio-inline,
|
2672 |
+
.egg-container .checkbox-inline {
|
2673 |
+
position: relative;
|
2674 |
+
display: inline-block;
|
2675 |
+
padding-left: 20px;
|
2676 |
+
margin-bottom: 0;
|
2677 |
+
font-weight: normal;
|
2678 |
+
vertical-align: middle;
|
2679 |
+
cursor: pointer;
|
2680 |
+
}
|
2681 |
+
.egg-container .radio-inline + .radio-inline,
|
2682 |
+
.egg-container .checkbox-inline + .checkbox-inline {
|
2683 |
+
margin-top: 0;
|
2684 |
+
margin-left: 10px;
|
2685 |
+
}
|
2686 |
+
.egg-container input[type="radio"][disabled],
|
2687 |
+
.egg-container input[type="checkbox"][disabled],
|
2688 |
+
.egg-container input[type="radio"].disabled,
|
2689 |
+
.egg-container input[type="checkbox"].disabled,
|
2690 |
+
fieldset[disabled] .egg-container input[type="radio"],
|
2691 |
+
fieldset[disabled] .egg-container input[type="checkbox"] {
|
2692 |
+
cursor: not-allowed;
|
2693 |
+
}
|
2694 |
+
.egg-container .radio-inline.disabled,
|
2695 |
+
.egg-container .checkbox-inline.disabled,
|
2696 |
+
fieldset[disabled] .egg-container .radio-inline,
|
2697 |
+
fieldset[disabled] .egg-container .checkbox-inline {
|
2698 |
+
cursor: not-allowed;
|
2699 |
+
}
|
2700 |
+
.egg-container .radio.disabled label,
|
2701 |
+
.egg-container .checkbox.disabled label,
|
2702 |
+
fieldset[disabled] .egg-container .radio label,
|
2703 |
+
fieldset[disabled] .egg-container .checkbox label {
|
2704 |
+
cursor: not-allowed;
|
2705 |
+
}
|
2706 |
+
.egg-container .form-control-static {
|
2707 |
+
min-height: 34px;
|
2708 |
+
padding-top: 7px;
|
2709 |
+
padding-bottom: 7px;
|
2710 |
+
margin-bottom: 0;
|
2711 |
+
}
|
2712 |
+
.egg-container .form-control-static.input-lg,
|
2713 |
+
.egg-container .form-control-static.input-sm {
|
2714 |
+
padding-right: 0;
|
2715 |
+
padding-left: 0;
|
2716 |
+
}
|
2717 |
+
.egg-container .input-sm {
|
2718 |
+
height: 30px;
|
2719 |
+
padding: 5px 10px;
|
2720 |
+
font-size: 12px;
|
2721 |
+
line-height: 1.5;
|
2722 |
+
border-radius: 3px;
|
2723 |
+
}
|
2724 |
+
select.egg-container .input-sm {
|
2725 |
+
height: 30px;
|
2726 |
+
line-height: 30px;
|
2727 |
+
}
|
2728 |
+
textarea.egg-container .input-sm,
|
2729 |
+
select[multiple].egg-container .input-sm {
|
2730 |
+
height: auto;
|
2731 |
+
}
|
2732 |
+
.egg-container .form-group-sm .form-control {
|
2733 |
+
height: 30px;
|
2734 |
+
padding: 5px 10px;
|
2735 |
+
font-size: 12px;
|
2736 |
+
line-height: 1.5;
|
2737 |
+
border-radius: 3px;
|
2738 |
+
}
|
2739 |
+
select.egg-container .form-group-sm .form-control {
|
2740 |
+
height: 30px;
|
2741 |
+
line-height: 30px;
|
2742 |
+
}
|
2743 |
+
textarea.egg-container .form-group-sm .form-control,
|
2744 |
+
select[multiple].egg-container .form-group-sm .form-control {
|
2745 |
+
height: auto;
|
2746 |
+
}
|
2747 |
+
.egg-container .form-group-sm .form-control-static {
|
2748 |
+
height: 30px;
|
2749 |
+
min-height: 32px;
|
2750 |
+
padding: 5px 10px;
|
2751 |
+
font-size: 12px;
|
2752 |
+
line-height: 1.5;
|
2753 |
+
}
|
2754 |
+
.egg-container .input-lg {
|
2755 |
+
height: 46px;
|
2756 |
+
padding: 10px 16px;
|
2757 |
+
font-size: 18px;
|
2758 |
+
line-height: 1.3333333;
|
2759 |
+
border-radius: 6px;
|
2760 |
+
}
|
2761 |
+
select.egg-container .input-lg {
|
2762 |
+
height: 46px;
|
2763 |
+
line-height: 46px;
|
2764 |
+
}
|
2765 |
+
textarea.egg-container .input-lg,
|
2766 |
+
select[multiple].egg-container .input-lg {
|
2767 |
+
height: auto;
|
2768 |
+
}
|
2769 |
+
.egg-container .form-group-lg .form-control {
|
2770 |
+
height: 46px;
|
2771 |
+
padding: 10px 16px;
|
2772 |
+
font-size: 18px;
|
2773 |
+
line-height: 1.3333333;
|
2774 |
+
border-radius: 6px;
|
2775 |
+
}
|
2776 |
+
select.egg-container .form-group-lg .form-control {
|
2777 |
+
height: 46px;
|
2778 |
+
line-height: 46px;
|
2779 |
+
}
|
2780 |
+
textarea.egg-container .form-group-lg .form-control,
|
2781 |
+
select[multiple].egg-container .form-group-lg .form-control {
|
2782 |
+
height: auto;
|
2783 |
+
}
|
2784 |
+
.egg-container .form-group-lg .form-control-static {
|
2785 |
+
height: 46px;
|
2786 |
+
min-height: 38px;
|
2787 |
+
padding: 10px 16px;
|
2788 |
+
font-size: 18px;
|
2789 |
+
line-height: 1.3333333;
|
2790 |
+
}
|
2791 |
+
.egg-container .has-feedback {
|
2792 |
+
position: relative;
|
2793 |
+
}
|
2794 |
+
.egg-container .has-feedback .form-control {
|
2795 |
+
padding-right: 42.5px;
|
2796 |
+
}
|
2797 |
+
.egg-container .form-control-feedback {
|
2798 |
+
position: absolute;
|
2799 |
+
top: 0;
|
2800 |
+
right: 0;
|
2801 |
+
z-index: 2;
|
2802 |
+
display: block;
|
2803 |
+
width: 34px;
|
2804 |
+
height: 34px;
|
2805 |
+
line-height: 34px;
|
2806 |
+
text-align: center;
|
2807 |
+
pointer-events: none;
|
2808 |
+
}
|
2809 |
+
.egg-container .input-lg + .form-control-feedback {
|
2810 |
+
width: 46px;
|
2811 |
+
height: 46px;
|
2812 |
+
line-height: 46px;
|
2813 |
+
}
|
2814 |
+
.egg-container .input-sm + .form-control-feedback {
|
2815 |
+
width: 30px;
|
2816 |
+
height: 30px;
|
2817 |
+
line-height: 30px;
|
2818 |
+
}
|
2819 |
+
.egg-container .has-success .help-block,
|
2820 |
+
.egg-container .has-success .control-label,
|
2821 |
+
.egg-container .has-success .radio,
|
2822 |
+
.egg-container .has-success .checkbox,
|
2823 |
+
.egg-container .has-success .radio-inline,
|
2824 |
+
.egg-container .has-success .checkbox-inline,
|
2825 |
+
.egg-container .has-success.radio label,
|
2826 |
+
.egg-container .has-success.checkbox label,
|
2827 |
+
.egg-container .has-success.radio-inline label,
|
2828 |
+
.egg-container .has-success.checkbox-inline label {
|
2829 |
+
color: #3c763d;
|
2830 |
+
}
|
2831 |
+
.egg-container .has-success .form-control {
|
2832 |
+
border-color: #3c763d;
|
2833 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
|
2834 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
|
2835 |
+
}
|
2836 |
+
.egg-container .has-success .form-control:focus {
|
2837 |
+
border-color: #2b542c;
|
2838 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
|
2839 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
|
2840 |
+
}
|
2841 |
+
.egg-container .has-success .input-group-addon {
|
2842 |
+
color: #3c763d;
|
2843 |
+
background-color: #dff0d8;
|
2844 |
+
border-color: #3c763d;
|
2845 |
+
}
|
2846 |
+
.egg-container .has-success .form-control-feedback {
|
2847 |
+
color: #3c763d;
|
2848 |
+
}
|
2849 |
+
.egg-container .has-warning .help-block,
|
2850 |
+
.egg-container .has-warning .control-label,
|
2851 |
+
.egg-container .has-warning .radio,
|
2852 |
+
.egg-container .has-warning .checkbox,
|
2853 |
+
.egg-container .has-warning .radio-inline,
|
2854 |
+
.egg-container .has-warning .checkbox-inline,
|
2855 |
+
.egg-container .has-warning.radio label,
|
2856 |
+
.egg-container .has-warning.checkbox label,
|
2857 |
+
.egg-container .has-warning.radio-inline label,
|
2858 |
+
.egg-container .has-warning.checkbox-inline label {
|
2859 |
+
color: #8a6d3b;
|
2860 |
+
}
|
2861 |
+
.egg-container .has-warning .form-control {
|
2862 |
+
border-color: #8a6d3b;
|
2863 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
|
2864 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
|
2865 |
+
}
|
2866 |
+
.egg-container .has-warning .form-control:focus {
|
2867 |
+
border-color: #66512c;
|
2868 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
|
2869 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
|
2870 |
+
}
|
2871 |
+
.egg-container .has-warning .input-group-addon {
|
2872 |
+
color: #8a6d3b;
|
2873 |
+
background-color: #fcf8e3;
|
2874 |
+
border-color: #8a6d3b;
|
2875 |
+
}
|
2876 |
+
.egg-container .has-warning .form-control-feedback {
|
2877 |
+
color: #8a6d3b;
|
2878 |
+
}
|
2879 |
+
.egg-container .has-error .help-block,
|
2880 |
+
.egg-container .has-error .control-label,
|
2881 |
+
.egg-container .has-error .radio,
|
2882 |
+
.egg-container .has-error .checkbox,
|
2883 |
+
.egg-container .has-error .radio-inline,
|
2884 |
+
.egg-container .has-error .checkbox-inline,
|
2885 |
+
.egg-container .has-error.radio label,
|
2886 |
+
.egg-container .has-error.checkbox label,
|
2887 |
+
.egg-container .has-error.radio-inline label,
|
2888 |
+
.egg-container .has-error.checkbox-inline label {
|
2889 |
+
color: #a94442;
|
2890 |
+
}
|
2891 |
+
.egg-container .has-error .form-control {
|
2892 |
+
border-color: #a94442;
|
2893 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
|
2894 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
|
2895 |
+
}
|
2896 |
+
.egg-container .has-error .form-control:focus {
|
2897 |
+
border-color: #843534;
|
2898 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
|
2899 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
|
2900 |
+
}
|
2901 |
+
.egg-container .has-error .input-group-addon {
|
2902 |
+
color: #a94442;
|
2903 |
+
background-color: #f2dede;
|
2904 |
+
border-color: #a94442;
|
2905 |
+
}
|
2906 |
+
.egg-container .has-error .form-control-feedback {
|
2907 |
+
color: #a94442;
|
2908 |
+
}
|
2909 |
+
.egg-container .has-feedback label ~ .form-control-feedback {
|
2910 |
+
top: 25px;
|
2911 |
+
}
|
2912 |
+
.egg-container .has-feedback label.sr-only ~ .form-control-feedback {
|
2913 |
+
top: 0;
|
2914 |
+
}
|
2915 |
+
.egg-container .help-block {
|
2916 |
+
display: block;
|
2917 |
+
margin-top: 5px;
|
2918 |
+
margin-bottom: 10px;
|
2919 |
+
color: #737373;
|
2920 |
+
}
|
2921 |
+
@media (min-width: 768px) {
|
2922 |
+
.egg-container .form-inline .form-group {
|
2923 |
+
display: inline-block;
|
2924 |
+
margin-bottom: 0;
|
2925 |
+
vertical-align: middle;
|
2926 |
+
}
|
2927 |
+
.egg-container .form-inline .form-control {
|
2928 |
+
display: inline-block;
|
2929 |
+
width: auto;
|
2930 |
+
vertical-align: middle;
|
2931 |
+
}
|
2932 |
+
.egg-container .form-inline .form-control-static {
|
2933 |
+
display: inline-block;
|
2934 |
+
}
|
2935 |
+
.egg-container .form-inline .input-group {
|
2936 |
+
display: inline-table;
|
2937 |
+
vertical-align: middle;
|
2938 |
+
}
|
2939 |
+
.egg-container .form-inline .input-group .input-group-addon,
|
2940 |
+
.egg-container .form-inline .input-group .input-group-btn,
|
2941 |
+
.egg-container .form-inline .input-group .form-control {
|
2942 |
+
width: auto;
|
2943 |
+
}
|
2944 |
+
.egg-container .form-inline .input-group > .form-control {
|
2945 |
+
width: 100%;
|
2946 |
+
}
|
2947 |
+
.egg-container .form-inline .control-label {
|
2948 |
+
margin-bottom: 0;
|
2949 |
+
vertical-align: middle;
|
2950 |
+
}
|
2951 |
+
.egg-container .form-inline .radio,
|
2952 |
+
.egg-container .form-inline .checkbox {
|
2953 |
+
display: inline-block;
|
2954 |
+
margin-top: 0;
|
2955 |
+
margin-bottom: 0;
|
2956 |
+
vertical-align: middle;
|
2957 |
+
}
|
2958 |
+
.egg-container .form-inline .radio label,
|
2959 |
+
.egg-container .form-inline .checkbox label {
|
2960 |
+
padding-left: 0;
|
2961 |
+
}
|
2962 |
+
.egg-container .form-inline .radio input[type="radio"],
|
2963 |
+
.egg-container .form-inline .checkbox input[type="checkbox"] {
|
2964 |
+
position: relative;
|
2965 |
+
margin-left: 0;
|
2966 |
+
}
|
2967 |
+
.egg-container .form-inline .has-feedback .form-control-feedback {
|
2968 |
+
top: 0;
|
2969 |
+
}
|
2970 |
+
}
|
2971 |
+
.egg-container .form-horizontal .radio,
|
2972 |
+
.egg-container .form-horizontal .checkbox,
|
2973 |
+
.egg-container .form-horizontal .radio-inline,
|
2974 |
+
.egg-container .form-horizontal .checkbox-inline {
|
2975 |
+
padding-top: 7px;
|
2976 |
+
margin-top: 0;
|
2977 |
+
margin-bottom: 0;
|
2978 |
+
}
|
2979 |
+
.egg-container .form-horizontal .radio,
|
2980 |
+
.egg-container .form-horizontal .checkbox {
|
2981 |
+
min-height: 27px;
|
2982 |
+
}
|
2983 |
+
.egg-container .form-horizontal .form-group {
|
2984 |
+
margin-right: -15px;
|
2985 |
+
margin-left: -15px;
|
2986 |
+
}
|
2987 |
+
@media (min-width: 768px) {
|
2988 |
+
.egg-container .form-horizontal .control-label {
|
2989 |
+
padding-top: 7px;
|
2990 |
+
margin-bottom: 0;
|
2991 |
+
text-align: right;
|
2992 |
+
}
|
2993 |
+
}
|
2994 |
+
.egg-container .form-horizontal .has-feedback .form-control-feedback {
|
2995 |
+
right: 15px;
|
2996 |
+
}
|
2997 |
+
@media (min-width: 768px) {
|
2998 |
+
.egg-container .form-horizontal .form-group-lg .control-label {
|
2999 |
+
padding-top: 14.333333px;
|
3000 |
+
}
|
3001 |
+
}
|
3002 |
+
@media (min-width: 768px) {
|
3003 |
+
.egg-container .form-horizontal .form-group-sm .control-label {
|
3004 |
+
padding-top: 6px;
|
3005 |
+
}
|
3006 |
+
}
|
3007 |
+
.egg-container .btn {
|
3008 |
+
display: inline-block;
|
3009 |
+
padding: 6px 12px;
|
3010 |
+
margin-bottom: 0;
|
3011 |
+
font-size: 14px;
|
3012 |
+
font-weight: normal;
|
3013 |
+
line-height: 1.42857143;
|
3014 |
+
text-align: center;
|
3015 |
+
white-space: nowrap;
|
3016 |
+
vertical-align: middle;
|
3017 |
+
-ms-touch-action: manipulation;
|
3018 |
+
touch-action: manipulation;
|
3019 |
+
cursor: pointer;
|
3020 |
+
-webkit-user-select: none;
|
3021 |
+
-moz-user-select: none;
|
3022 |
+
-ms-user-select: none;
|
3023 |
+
user-select: none;
|
3024 |
+
background-image: none;
|
3025 |
+
border: 1px solid transparent;
|
3026 |
+
border-radius: 4px;
|
3027 |
+
}
|
3028 |
+
.egg-container .btn:focus,
|
3029 |
+
.egg-container .btn:active:focus,
|
3030 |
+
.egg-container .btn.active:focus,
|
3031 |
+
.egg-container .btn.focus,
|
3032 |
+
.egg-container .btn:active.focus,
|
3033 |
+
.egg-container .btn.active.focus {
|
3034 |
+
outline: thin dotted;
|
3035 |
+
outline: 5px auto -webkit-focus-ring-color;
|
3036 |
+
outline-offset: -2px;
|
3037 |
+
}
|
3038 |
+
.egg-container .btn:hover,
|
3039 |
+
.egg-container .btn:focus,
|
3040 |
+
.egg-container .btn.focus {
|
3041 |
+
color: #333;
|
3042 |
+
text-decoration: none;
|
3043 |
+
}
|
3044 |
+
.egg-container .btn:active,
|
3045 |
+
.egg-container .btn.active {
|
3046 |
+
background-image: none;
|
3047 |
+
outline: 0;
|
3048 |
+
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
|
3049 |
+
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
|
3050 |
+
}
|
3051 |
+
.egg-container .btn.disabled,
|
3052 |
+
.egg-container .btn[disabled],
|
3053 |
+
fieldset[disabled] .egg-container .btn {
|
3054 |
+
pointer-events: none;
|
3055 |
+
cursor: not-allowed;
|
3056 |
+
filter: alpha(opacity=65);
|
3057 |
+
-webkit-box-shadow: none;
|
3058 |
+
box-shadow: none;
|
3059 |
+
opacity: .65;
|
3060 |
+
}
|
3061 |
+
.egg-container .btn-default {
|
3062 |
+
color: #333;
|
3063 |
+
background-color: #fff;
|
3064 |
+
border-color: #ccc;
|
3065 |
+
}
|
3066 |
+
.egg-container .btn-default:hover,
|
3067 |
+
.egg-container .btn-default:focus,
|
3068 |
+
.egg-container .btn-default.focus,
|
3069 |
+
.egg-container .btn-default:active,
|
3070 |
+
.egg-container .btn-default.active,
|
3071 |
+
.open > .dropdown-toggle.egg-container .btn-default {
|
3072 |
+
color: #333;
|
3073 |
+
background-color: #e6e6e6;
|
3074 |
+
border-color: #adadad;
|
3075 |
+
}
|
3076 |
+
.egg-container .btn-default:active,
|
3077 |
+
.egg-container .btn-default.active,
|
3078 |
+
.open > .dropdown-toggle.egg-container .btn-default {
|
3079 |
+
background-image: none;
|
3080 |
+
}
|
3081 |
+
.egg-container .btn-default.disabled,
|
3082 |
+
.egg-container .btn-default[disabled],
|
3083 |
+
fieldset[disabled] .egg-container .btn-default,
|
3084 |
+
.egg-container .btn-default.disabled:hover,
|
3085 |
+
.egg-container .btn-default[disabled]:hover,
|
3086 |
+
fieldset[disabled] .egg-container .btn-default:hover,
|
3087 |
+
.egg-container .btn-default.disabled:focus,
|
3088 |
+
.egg-container .btn-default[disabled]:focus,
|
3089 |
+
fieldset[disabled] .egg-container .btn-default:focus,
|
3090 |
+
.egg-container .btn-default.disabled.focus,
|
3091 |
+
.egg-container .btn-default[disabled].focus,
|
3092 |
+
fieldset[disabled] .egg-container .btn-default.focus,
|
3093 |
+
.egg-container .btn-default.disabled:active,
|
3094 |
+
.egg-container .btn-default[disabled]:active,
|
3095 |
+
fieldset[disabled] .egg-container .btn-default:active,
|
3096 |
+
.egg-container .btn-default.disabled.active,
|
3097 |
+
.egg-container .btn-default[disabled].active,
|
3098 |
+
fieldset[disabled] .egg-container .btn-default.active {
|
3099 |
+
background-color: #fff;
|
3100 |
+
border-color: #ccc;
|
3101 |
+
}
|
3102 |
+
.egg-container .btn-default .badge {
|
3103 |
+
color: #fff;
|
3104 |
+
background-color: #333;
|
3105 |
+
}
|
3106 |
+
.egg-container .btn-primary {
|
3107 |
+
color: #fff;
|
3108 |
+
background-color: #337ab7;
|
3109 |
+
border-color: #2e6da4;
|
3110 |
+
}
|
3111 |
+
.egg-container .btn-primary:hover,
|
3112 |
+
.egg-container .btn-primary:focus,
|
3113 |
+
.egg-container .btn-primary.focus,
|
3114 |
+
.egg-container .btn-primary:active,
|
3115 |
+
.egg-container .btn-primary.active,
|
3116 |
+
.open > .dropdown-toggle.egg-container .btn-primary {
|
3117 |
+
color: #fff;
|
3118 |
+
background-color: #286090;
|
3119 |
+
border-color: #204d74;
|
3120 |
+
}
|
3121 |
+
.egg-container .btn-primary:active,
|
3122 |
+
.egg-container .btn-primary.active,
|
3123 |
+
.open > .dropdown-toggle.egg-container .btn-primary {
|
3124 |
+
background-image: none;
|
3125 |
+
}
|
3126 |
+
.egg-container .btn-primary.disabled,
|
3127 |
+
.egg-container .btn-primary[disabled],
|
3128 |
+
fieldset[disabled] .egg-container .btn-primary,
|
3129 |
+
.egg-container .btn-primary.disabled:hover,
|
3130 |
+
.egg-container .btn-primary[disabled]:hover,
|
3131 |
+
fieldset[disabled] .egg-container .btn-primary:hover,
|
3132 |
+
.egg-container .btn-primary.disabled:focus,
|
3133 |
+
.egg-container .btn-primary[disabled]:focus,
|
3134 |
+
fieldset[disabled] .egg-container .btn-primary:focus,
|
3135 |
+
.egg-container .btn-primary.disabled.focus,
|
3136 |
+
.egg-container .btn-primary[disabled].focus,
|
3137 |
+
fieldset[disabled] .egg-container .btn-primary.focus,
|
3138 |
+
.egg-container .btn-primary.disabled:active,
|
3139 |
+
.egg-container .btn-primary[disabled]:active,
|
3140 |
+
fieldset[disabled] .egg-container .btn-primary:active,
|
3141 |
+
.egg-container .btn-primary.disabled.active,
|
3142 |
+
.egg-container .btn-primary[disabled].active,
|
3143 |
+
fieldset[disabled] .egg-container .btn-primary.active {
|
3144 |
+
background-color: #337ab7;
|
3145 |
+
border-color: #2e6da4;
|
3146 |
+
}
|
3147 |
+
.egg-container .btn-primary .badge {
|
3148 |
+
color: #337ab7;
|
3149 |
+
background-color: #fff;
|
3150 |
+
}
|
3151 |
+
.egg-container .btn-success {
|
3152 |
+
color: #fff;
|
3153 |
+
background-color: #5cb85c;
|
3154 |
+
border-color: #4cae4c;
|
3155 |
+
text-decoration: none !important;
|
3156 |
+
}
|
3157 |
+
.egg-container .btn-success:hover,
|
3158 |
+
.egg-container .btn-success:focus,
|
3159 |
+
.egg-container .btn-success.focus,
|
3160 |
+
.egg-container .btn-success:active,
|
3161 |
+
.egg-container .btn-success.active,
|
3162 |
+
.open > .dropdown-toggle.egg-container .btn-success {
|
3163 |
+
color: #fff;
|
3164 |
+
background-color: #449d44;
|
3165 |
+
border-color: #398439;
|
3166 |
+
}
|
3167 |
+
.egg-container .btn-success:active,
|
3168 |
+
.egg-container .btn-success.active,
|
3169 |
+
.open > .dropdown-toggle.egg-container .btn-success {
|
3170 |
+
background-image: none;
|
3171 |
+
}
|
3172 |
+
.egg-container .btn-success.disabled,
|
3173 |
+
.egg-container .btn-success[disabled],
|
3174 |
+
fieldset[disabled] .egg-container .btn-success,
|
3175 |
+
.egg-container .btn-success.disabled:hover,
|
3176 |
+
.egg-container .btn-success[disabled]:hover,
|
3177 |
+
fieldset[disabled] .egg-container .btn-success:hover,
|
3178 |
+
.egg-container .btn-success.disabled:focus,
|
3179 |
+
.egg-container .btn-success[disabled]:focus,
|
3180 |
+
fieldset[disabled] .egg-container .btn-success:focus,
|
3181 |
+
.egg-container .btn-success.disabled.focus,
|
3182 |
+
.egg-container .btn-success[disabled].focus,
|
3183 |
+
fieldset[disabled] .egg-container .btn-success.focus,
|
3184 |
+
.egg-container .btn-success.disabled:active,
|
3185 |
+
.egg-container .btn-success[disabled]:active,
|
3186 |
+
fieldset[disabled] .egg-container .btn-success:active,
|
3187 |
+
.egg-container .btn-success.disabled.active,
|
3188 |
+
.egg-container .btn-success[disabled].active,
|
3189 |
+
fieldset[disabled] .egg-container .btn-success.active {
|
3190 |
+
background-color: #5cb85c;
|
3191 |
+
border-color: #4cae4c;
|
3192 |
+
}
|
3193 |
+
.egg-container .btn-success .badge {
|
3194 |
+
color: #5cb85c;
|
3195 |
+
background-color: #fff;
|
3196 |
+
}
|
3197 |
+
.egg-container .btn-info {
|
3198 |
+
color: #fff;
|
3199 |
+
background-color: #5bc0de;
|
3200 |
+
border-color: #46b8da;
|
3201 |
+
}
|
3202 |
+
.egg-container .btn-info:hover,
|
3203 |
+
.egg-container .btn-info:focus,
|
3204 |
+
.egg-container .btn-info.focus,
|
3205 |
+
.egg-container .btn-info:active,
|
3206 |
+
.egg-container .btn-info.active,
|
3207 |
+
.open > .dropdown-toggle.egg-container .btn-info {
|
3208 |
+
color: #fff;
|
3209 |
+
background-color: #31b0d5;
|
3210 |
+
border-color: #269abc;
|
3211 |
+
}
|
3212 |
+
.egg-container .btn-info:active,
|
3213 |
+
.egg-container .btn-info.active,
|
3214 |
+
.open > .dropdown-toggle.egg-container .btn-info {
|
3215 |
+
background-image: none;
|
3216 |
+
}
|
3217 |
+
.egg-container .btn-info.disabled,
|
3218 |
+
.egg-container .btn-info[disabled],
|
3219 |
+
fieldset[disabled] .egg-container .btn-info,
|
3220 |
+
.egg-container .btn-info.disabled:hover,
|
3221 |
+
.egg-container .btn-info[disabled]:hover,
|
3222 |
+
fieldset[disabled] .egg-container .btn-info:hover,
|
3223 |
+
.egg-container .btn-info.disabled:focus,
|
3224 |
+
.egg-container .btn-info[disabled]:focus,
|
3225 |
+
fieldset[disabled] .egg-container .btn-info:focus,
|
3226 |
+
.egg-container .btn-info.disabled.focus,
|
3227 |
+
.egg-container .btn-info[disabled].focus,
|
3228 |
+
fieldset[disabled] .egg-container .btn-info.focus,
|
3229 |
+
.egg-container .btn-info.disabled:active,
|
3230 |
+
.egg-container .btn-info[disabled]:active,
|
3231 |
+
fieldset[disabled] .egg-container .btn-info:active,
|
3232 |
+
.egg-container .btn-info.disabled.active,
|
3233 |
+
.egg-container .btn-info[disabled].active,
|
3234 |
+
fieldset[disabled] .egg-container .btn-info.active {
|
3235 |
+
background-color: #5bc0de;
|
3236 |
+
border-color: #46b8da;
|
3237 |
+
}
|
3238 |
+
.egg-container .btn-info .badge {
|
3239 |
+
color: #5bc0de;
|
3240 |
+
background-color: #fff;
|
3241 |
+
}
|
3242 |
+
.egg-container .btn-warning {
|
3243 |
+
color: #fff;
|
3244 |
+
background-color: #f0ad4e;
|
3245 |
+
border-color: #eea236;
|
3246 |
+
}
|
3247 |
+
.egg-container .btn-warning:hover,
|
3248 |
+
.egg-container .btn-warning:focus,
|
3249 |
+
.egg-container .btn-warning.focus,
|
3250 |
+
.egg-container .btn-warning:active,
|
3251 |
+
.egg-container .btn-warning.active,
|
3252 |
+
.open > .dropdown-toggle.egg-container .btn-warning {
|
3253 |
+
color: #fff;
|
3254 |
+
background-color: #ec971f;
|
3255 |
+
border-color: #d58512;
|
3256 |
+
}
|
3257 |
+
.egg-container .btn-warning:active,
|
3258 |
+
.egg-container .btn-warning.active,
|
3259 |
+
.open > .dropdown-toggle.egg-container .btn-warning {
|
3260 |
+
background-image: none;
|
3261 |
+
}
|
3262 |
+
.egg-container .btn-warning.disabled,
|
3263 |
+
.egg-container .btn-warning[disabled],
|
3264 |
+
fieldset[disabled] .egg-container .btn-warning,
|
3265 |
+
.egg-container .btn-warning.disabled:hover,
|
3266 |
+
.egg-container .btn-warning[disabled]:hover,
|
3267 |
+
fieldset[disabled] .egg-container .btn-warning:hover,
|
3268 |
+
.egg-container .btn-warning.disabled:focus,
|
3269 |
+
.egg-container .btn-warning[disabled]:focus,
|
3270 |
+
fieldset[disabled] .egg-container .btn-warning:focus,
|
3271 |
+
.egg-container .btn-warning.disabled.focus,
|
3272 |
+
.egg-container .btn-warning[disabled].focus,
|
3273 |
+
fieldset[disabled] .egg-container .btn-warning.focus,
|
3274 |
+
.egg-container .btn-warning.disabled:active,
|
3275 |
+
.egg-container .btn-warning[disabled]:active,
|
3276 |
+
fieldset[disabled] .egg-container .btn-warning:active,
|
3277 |
+
.egg-container .btn-warning.disabled.active,
|
3278 |
+
.egg-container .btn-warning[disabled].active,
|
3279 |
+
fieldset[disabled] .egg-container .btn-warning.active {
|
3280 |
+
background-color: #f0ad4e;
|
3281 |
+
border-color: #eea236;
|
3282 |
+
}
|
3283 |
+
.egg-container .btn-warning .badge {
|
3284 |
+
color: #f0ad4e;
|
3285 |
+
background-color: #fff;
|
3286 |
+
}
|
3287 |
+
.egg-container .btn-danger {
|
3288 |
+
color: #fff;
|
3289 |
+
background-color: #d9534f;
|
3290 |
+
border-color: #d43f3a;
|
3291 |
+
}
|
3292 |
+
.egg-container .btn-danger:hover,
|
3293 |
+
.egg-container .btn-danger:focus,
|
3294 |
+
.egg-container .btn-danger.focus,
|
3295 |
+
.egg-container .btn-danger:active,
|
3296 |
+
.egg-container .btn-danger.active,
|
3297 |
+
.open > .dropdown-toggle.egg-container .btn-danger {
|
3298 |
+
color: #fff;
|
3299 |
+
background-color: #c9302c;
|
3300 |
+
border-color: #ac2925;
|
3301 |
+
}
|
3302 |
+
.egg-container .btn-danger:active,
|
3303 |
+
.egg-container .btn-danger.active,
|
3304 |
+
.open > .dropdown-toggle.egg-container .btn-danger {
|
3305 |
+
background-image: none;
|
3306 |
+
}
|
3307 |
+
.egg-container .btn-danger.disabled,
|
3308 |
+
.egg-container .btn-danger[disabled],
|
3309 |
+
fieldset[disabled] .egg-container .btn-danger,
|
3310 |
+
.egg-container .btn-danger.disabled:hover,
|
3311 |
+
.egg-container .btn-danger[disabled]:hover,
|
3312 |
+
fieldset[disabled] .egg-container .btn-danger:hover,
|
3313 |
+
.egg-container .btn-danger.disabled:focus,
|
3314 |
+
.egg-container .btn-danger[disabled]:focus,
|
3315 |
+
fieldset[disabled] .egg-container .btn-danger:focus,
|
3316 |
+
.egg-container .btn-danger.disabled.focus,
|
3317 |
+
.egg-container .btn-danger[disabled].focus,
|
3318 |
+
fieldset[disabled] .egg-container .btn-danger.focus,
|
3319 |
+
.egg-container .btn-danger.disabled:active,
|
3320 |
+
.egg-container .btn-danger[disabled]:active,
|
3321 |
+
fieldset[disabled] .egg-container .btn-danger:active,
|
3322 |
+
.egg-container .btn-danger.disabled.active,
|
3323 |
+
.egg-container .btn-danger[disabled].active,
|
3324 |
+
fieldset[disabled] .egg-container .btn-danger.active {
|
3325 |
+
background-color: #d9534f;
|
3326 |
+
border-color: #d43f3a;
|
3327 |
+
}
|
3328 |
+
.egg-container .btn-danger .badge {
|
3329 |
+
color: #d9534f;
|
3330 |
+
background-color: #fff;
|
3331 |
+
}
|
3332 |
+
.egg-container .btn-link {
|
3333 |
+
font-weight: normal;
|
3334 |
+
color: #337ab7;
|
3335 |
+
border-radius: 0;
|
3336 |
+
}
|
3337 |
+
.egg-container .btn-link,
|
3338 |
+
.egg-container .btn-link:active,
|
3339 |
+
.egg-container .btn-link.active,
|
3340 |
+
.egg-container .btn-link[disabled],
|
3341 |
+
fieldset[disabled] .egg-container .btn-link {
|
3342 |
+
background-color: transparent;
|
3343 |
+
-webkit-box-shadow: none;
|
3344 |
+
box-shadow: none;
|
3345 |
+
}
|
3346 |
+
.egg-container .btn-link,
|
3347 |
+
.egg-container .btn-link:hover,
|
3348 |
+
.egg-container .btn-link:focus,
|
3349 |
+
.egg-container .btn-link:active {
|
3350 |
+
border-color: transparent;
|
3351 |
+
}
|
3352 |
+
.egg-container .btn-link:hover,
|
3353 |
+
.egg-container .btn-link:focus {
|
3354 |
+
color: #23527c;
|
3355 |
+
text-decoration: underline;
|
3356 |
+
background-color: transparent;
|
3357 |
+
}
|
3358 |
+
.egg-container .btn-link[disabled]:hover,
|
3359 |
+
fieldset[disabled] .egg-container .btn-link:hover,
|
3360 |
+
.egg-container .btn-link[disabled]:focus,
|
3361 |
+
fieldset[disabled] .egg-container .btn-link:focus {
|
3362 |
+
color: #777;
|
3363 |
+
text-decoration: none;
|
3364 |
+
}
|
3365 |
+
.egg-container .btn-lg {
|
3366 |
+
padding: 10px 16px;
|
3367 |
+
font-size: 18px;
|
3368 |
+
line-height: 1.3333333;
|
3369 |
+
border-radius: 6px;
|
3370 |
+
}
|
3371 |
+
.egg-container .btn-sm {
|
3372 |
+
padding: 5px 10px;
|
3373 |
+
font-size: 12px;
|
3374 |
+
line-height: 1.5;
|
3375 |
+
border-radius: 3px;
|
3376 |
+
}
|
3377 |
+
.egg-container .btn-xs {
|
3378 |
+
padding: 1px 5px;
|
3379 |
+
font-size: 12px;
|
3380 |
+
line-height: 1.5;
|
3381 |
+
border-radius: 3px;
|
3382 |
+
}
|
3383 |
+
.egg-container .btn-block {
|
3384 |
+
display: block;
|
3385 |
+
width: 100%;
|
3386 |
+
}
|
3387 |
+
.egg-container .btn-block + .btn-block {
|
3388 |
+
margin-top: 5px;
|
3389 |
+
}
|
3390 |
+
.egg-container input[type="submit"].btn-block,
|
3391 |
+
.egg-container input[type="reset"].btn-block,
|
3392 |
+
.egg-container input[type="button"].btn-block {
|
3393 |
+
width: 100%;
|
3394 |
+
}
|
3395 |
+
.egg-container .fade {
|
3396 |
+
opacity: 0;
|
3397 |
+
-webkit-transition: opacity .15s linear;
|
3398 |
+
-o-transition: opacity .15s linear;
|
3399 |
+
transition: opacity .15s linear;
|
3400 |
+
}
|
3401 |
+
.egg-container .fade.in {
|
3402 |
+
opacity: 1;
|
3403 |
+
}
|
3404 |
+
.egg-container .collapse {
|
3405 |
+
display: none;
|
3406 |
+
}
|
3407 |
+
.egg-container .collapse.in {
|
3408 |
+
display: block;
|
3409 |
+
}
|
3410 |
+
tr.egg-container .collapse.in {
|
3411 |
+
display: table-row;
|
3412 |
+
}
|
3413 |
+
tbody.egg-container .collapse.in {
|
3414 |
+
display: table-row-group;
|
3415 |
+
}
|
3416 |
+
.egg-container .collapsing {
|
3417 |
+
position: relative;
|
3418 |
+
height: 0;
|
3419 |
+
overflow: hidden;
|
3420 |
+
-webkit-transition-timing-function: ease;
|
3421 |
+
-o-transition-timing-function: ease;
|
3422 |
+
transition-timing-function: ease;
|
3423 |
+
-webkit-transition-duration: .35s;
|
3424 |
+
-o-transition-duration: .35s;
|
3425 |
+
transition-duration: .35s;
|
3426 |
+
-webkit-transition-property: height, visibility;
|
3427 |
+
-o-transition-property: height, visibility;
|
3428 |
+
transition-property: height, visibility;
|
3429 |
+
}
|
3430 |
+
.egg-container .caret {
|
3431 |
+
display: inline-block;
|
3432 |
+
width: 0;
|
3433 |
+
height: 0;
|
3434 |
+
margin-left: 2px;
|
3435 |
+
vertical-align: middle;
|
3436 |
+
border-top: 4px dashed;
|
3437 |
+
border-right: 4px solid transparent;
|
3438 |
+
border-left: 4px solid transparent;
|
3439 |
+
}
|
3440 |
+
.egg-container .dropup,
|
3441 |
+
.egg-container .dropdown {
|
3442 |
+
position: relative;
|
3443 |
+
}
|
3444 |
+
.egg-container .dropdown-toggle:focus {
|
3445 |
+
outline: 0;
|
3446 |
+
}
|
3447 |
+
.egg-container .dropdown-menu {
|
3448 |
+
position: absolute;
|
3449 |
+
top: 100%;
|
3450 |
+
left: 0;
|
3451 |
+
z-index: 1000;
|
3452 |
+
display: none;
|
3453 |
+
float: left;
|
3454 |
+
min-width: 160px;
|
3455 |
+
padding: 5px 0;
|
3456 |
+
margin: 2px 0 0;
|
3457 |
+
font-size: 14px;
|
3458 |
+
text-align: left;
|
3459 |
+
list-style: none;
|
3460 |
+
background-color: #fff;
|
3461 |
+
-webkit-background-clip: padding-box;
|
3462 |
+
background-clip: padding-box;
|
3463 |
+
border: 1px solid #ccc;
|
3464 |
+
border: 1px solid rgba(0, 0, 0, .15);
|
3465 |
+
border-radius: 4px;
|
3466 |
+
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
|
3467 |
+
box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
|
3468 |
+
}
|
3469 |
+
.egg-container .dropdown-menu.pull-right {
|
3470 |
+
right: 0;
|
3471 |
+
left: auto;
|
3472 |
+
}
|
3473 |
+
.egg-container .dropdown-menu .divider {
|
3474 |
+
height: 1px;
|
3475 |
+
margin: 9px 0;
|
3476 |
+
overflow: hidden;
|
3477 |
+
background-color: #e5e5e5;
|
3478 |
+
}
|
3479 |
+
.egg-container .dropdown-menu > li > a {
|
3480 |
+
display: block;
|
3481 |
+
padding: 3px 20px;
|
3482 |
+
clear: both;
|
3483 |
+
font-weight: normal;
|
3484 |
+
line-height: 1.42857143;
|
3485 |
+
color: #333;
|
3486 |
+
white-space: nowrap;
|
3487 |
+
}
|
3488 |
+
.egg-container .dropdown-menu > li > a:hover,
|
3489 |
+
.egg-container .dropdown-menu > li > a:focus {
|
3490 |
+
color: #262626;
|
3491 |
+
text-decoration: none;
|
3492 |
+
background-color: #f5f5f5;
|
3493 |
+
}
|
3494 |
+
.egg-container .dropdown-menu > .active > a,
|
3495 |
+
.egg-container .dropdown-menu > .active > a:hover,
|
3496 |
+
.egg-container .dropdown-menu > .active > a:focus {
|
3497 |
+
color: #fff;
|
3498 |
+
text-decoration: none;
|
3499 |
+
background-color: #337ab7;
|
3500 |
+
outline: 0;
|
3501 |
+
}
|
3502 |
+
.egg-container .dropdown-menu > .disabled > a,
|
3503 |
+
.egg-container .dropdown-menu > .disabled > a:hover,
|
3504 |
+
.egg-container .dropdown-menu > .disabled > a:focus {
|
3505 |
+
color: #777;
|
3506 |
+
}
|
3507 |
+
.egg-container .dropdown-menu > .disabled > a:hover,
|
3508 |
+
.egg-container .dropdown-menu > .disabled > a:focus {
|
3509 |
+
text-decoration: none;
|
3510 |
+
cursor: not-allowed;
|
3511 |
+
background-color: transparent;
|
3512 |
+
background-image: none;
|
3513 |
+
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
3514 |
+
}
|
3515 |
+
.egg-container .open > .dropdown-menu {
|
3516 |
+
display: block;
|
3517 |
+
}
|
3518 |
+
.egg-container .open > a {
|
3519 |
+
outline: 0;
|
3520 |
+
}
|
3521 |
+
.egg-container .dropdown-menu-right {
|
3522 |
+
right: 0;
|
3523 |
+
left: auto;
|
3524 |
+
}
|
3525 |
+
.egg-container .dropdown-menu-left {
|
3526 |
+
right: auto;
|
3527 |
+
left: 0;
|
3528 |
+
}
|
3529 |
+
.egg-container .dropdown-header {
|
3530 |
+
display: block;
|
3531 |
+
padding: 3px 20px;
|
3532 |
+
font-size: 12px;
|
3533 |
+
line-height: 1.42857143;
|
3534 |
+
color: #777;
|
3535 |
+
white-space: nowrap;
|
3536 |
+
}
|
3537 |
+
.egg-container .dropdown-backdrop {
|
3538 |
+
position: fixed;
|
3539 |
+
top: 0;
|
3540 |
+
right: 0;
|
3541 |
+
bottom: 0;
|
3542 |
+
left: 0;
|
3543 |
+
z-index: 990;
|
3544 |
+
}
|
3545 |
+
.egg-container .pull-right > .dropdown-menu {
|
3546 |
+
right: 0;
|
3547 |
+
left: auto;
|
3548 |
+
}
|
3549 |
+
.egg-container .dropup .caret,
|
3550 |
+
.egg-container .navbar-fixed-bottom .dropdown .caret {
|
3551 |
+
content: "";
|
3552 |
+
border-top: 0;
|
3553 |
+
border-bottom: 4px solid;
|
3554 |
+
}
|
3555 |
+
.egg-container .dropup .dropdown-menu,
|
3556 |
+
.egg-container .navbar-fixed-bottom .dropdown .dropdown-menu {
|
3557 |
+
top: auto;
|
3558 |
+
bottom: 100%;
|
3559 |
+
margin-bottom: 2px;
|
3560 |
+
}
|
3561 |
+
@media (min-width: 768px) {
|
3562 |
+
.egg-container .navbar-right .dropdown-menu {
|
3563 |
+
right: 0;
|
3564 |
+
left: auto;
|
3565 |
+
}
|
3566 |
+
.egg-container .navbar-right .dropdown-menu-left {
|
3567 |
+
right: auto;
|
3568 |
+
left: 0;
|
3569 |
+
}
|
3570 |
+
}
|
3571 |
+
.egg-container .btn-group,
|
3572 |
+
.egg-container .btn-group-vertical {
|
3573 |
+
position: relative;
|
3574 |
+
display: inline-block;
|
3575 |
+
vertical-align: middle;
|
3576 |
+
}
|
3577 |
+
.egg-container .btn-group > .btn,
|
3578 |
+
.egg-container .btn-group-vertical > .btn {
|
3579 |
+
position: relative;
|
3580 |
+
float: left;
|
3581 |
+
}
|
3582 |
+
.egg-container .btn-group > .btn:hover,
|
3583 |
+
.egg-container .btn-group-vertical > .btn:hover,
|
3584 |
+
.egg-container .btn-group > .btn:focus,
|
3585 |
+
.egg-container .btn-group-vertical > .btn:focus,
|
3586 |
+
.egg-container .btn-group > .btn:active,
|
3587 |
+
.egg-container .btn-group-vertical > .btn:active,
|
3588 |
+
.egg-container .btn-group > .btn.active,
|
3589 |
+
.egg-container .btn-group-vertical > .btn.active {
|
3590 |
+
z-index: 2;
|
3591 |
+
}
|
3592 |
+
.egg-container .btn-group .btn + .btn,
|
3593 |
+
.egg-container .btn-group .btn + .btn-group,
|
3594 |
+
.egg-container .btn-group .btn-group + .btn,
|
3595 |
+
.egg-container .btn-group .btn-group + .btn-group {
|
3596 |
+
margin-left: -1px;
|
3597 |
+
}
|
3598 |
+
.egg-container .btn-toolbar {
|
3599 |
+
margin-left: -5px;
|
3600 |
+
}
|
3601 |
+
.egg-container .btn-toolbar .btn-group,
|
3602 |
+
.egg-container .btn-toolbar .input-group {
|
3603 |
+
float: left;
|
3604 |
+
}
|
3605 |
+
.egg-container .btn-toolbar > .btn,
|
3606 |
+
.egg-container .btn-toolbar > .btn-group,
|
3607 |
+
.egg-container .btn-toolbar > .input-group {
|
3608 |
+
margin-left: 5px;
|
3609 |
+
}
|
3610 |
+
.egg-container .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
|
3611 |
+
border-radius: 0;
|
3612 |
+
}
|
3613 |
+
.egg-container .btn-group > .btn:first-child {
|
3614 |
+
margin-left: 0;
|
3615 |
+
}
|
3616 |
+
.egg-container .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
|
3617 |
+
border-top-right-radius: 0;
|
3618 |
+
border-bottom-right-radius: 0;
|
3619 |
+
}
|
3620 |
+
.egg-container .btn-group > .btn:last-child:not(:first-child),
|
3621 |
+
.egg-container .btn-group > .dropdown-toggle:not(:first-child) {
|
3622 |
+
border-top-left-radius: 0;
|
3623 |
+
border-bottom-left-radius: 0;
|
3624 |
+
}
|
3625 |
+
.egg-container .btn-group > .btn-group {
|
3626 |
+
float: left;
|
3627 |
+
}
|
3628 |
+
.egg-container .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
|
3629 |
+
border-radius: 0;
|
3630 |
+
}
|
3631 |
+
.egg-container .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
|
3632 |
+
.egg-container .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
|
3633 |
+
border-top-right-radius: 0;
|
3634 |
+
border-bottom-right-radius: 0;
|
3635 |
+
}
|
3636 |
+
.egg-container .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
|
3637 |
+
border-top-left-radius: 0;
|
3638 |
+
border-bottom-left-radius: 0;
|
3639 |
+
}
|
3640 |
+
.egg-container .btn-group .dropdown-toggle:active,
|
3641 |
+
.egg-container .btn-group.open .dropdown-toggle {
|
3642 |
+
outline: 0;
|
3643 |
+
}
|
3644 |
+
.egg-container .btn-group > .btn + .dropdown-toggle {
|
3645 |
+
padding-right: 8px;
|
3646 |
+
padding-left: 8px;
|
3647 |
+
}
|
3648 |
+
.egg-container .btn-group > .btn-lg + .dropdown-toggle {
|
3649 |
+
padding-right: 12px;
|
3650 |
+
padding-left: 12px;
|
3651 |
+
}
|
3652 |
+
.egg-container .btn-group.open .dropdown-toggle {
|
3653 |
+
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
|
3654 |
+
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
|
3655 |
+
}
|
3656 |
+
.egg-container .btn-group.open .dropdown-toggle.btn-link {
|
3657 |
+
-webkit-box-shadow: none;
|
3658 |
+
box-shadow: none;
|
3659 |
+
}
|
3660 |
+
.egg-container .btn .caret {
|
3661 |
+
margin-left: 0;
|
3662 |
+
}
|
3663 |
+
.egg-container .btn-lg .caret {
|
3664 |
+
border-width: 5px 5px 0;
|
3665 |
+
border-bottom-width: 0;
|
3666 |
+
}
|
3667 |
+
.egg-container .dropup .btn-lg .caret {
|
3668 |
+
border-width: 0 5px 5px;
|
3669 |
+
}
|
3670 |
+
.egg-container .btn-group-vertical > .btn,
|
3671 |
+
.egg-container .btn-group-vertical > .btn-group,
|
3672 |
+
.egg-container .btn-group-vertical > .btn-group > .btn {
|
3673 |
+
display: block;
|
3674 |
+
float: none;
|
3675 |
+
width: 100%;
|
3676 |
+
max-width: 100%;
|
3677 |
+
}
|
3678 |
+
.egg-container .btn-group-vertical > .btn-group > .btn {
|
3679 |
+
float: none;
|
3680 |
+
}
|
3681 |
+
.egg-container .btn-group-vertical > .btn + .btn,
|
3682 |
+
.egg-container .btn-group-vertical > .btn + .btn-group,
|
3683 |
+
.egg-container .btn-group-vertical > .btn-group + .btn,
|
3684 |
+
.egg-container .btn-group-vertical > .btn-group + .btn-group {
|
3685 |
+
margin-top: -1px;
|
3686 |
+
margin-left: 0;
|
3687 |
+
}
|
3688 |
+
.egg-container .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
|
3689 |
+
border-radius: 0;
|
3690 |
+
}
|
3691 |
+
.egg-container .btn-group-vertical > .btn:first-child:not(:last-child) {
|
3692 |
+
border-top-right-radius: 4px;
|
3693 |
+
border-bottom-right-radius: 0;
|
3694 |
+
border-bottom-left-radius: 0;
|
3695 |
+
}
|
3696 |
+
.egg-container .btn-group-vertical > .btn:last-child:not(:first-child) {
|
3697 |
+
border-top-left-radius: 0;
|
3698 |
+
border-top-right-radius: 0;
|
3699 |
+
border-bottom-left-radius: 4px;
|
3700 |
+
}
|
3701 |
+
.egg-container .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
|
3702 |
+
border-radius: 0;
|
3703 |
+
}
|
3704 |
+
.egg-container .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
|
3705 |
+
.egg-container .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
|
3706 |
+
border-bottom-right-radius: 0;
|
3707 |
+
border-bottom-left-radius: 0;
|
3708 |
+
}
|
3709 |
+
.egg-container .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
|
3710 |
+
border-top-left-radius: 0;
|
3711 |
+
border-top-right-radius: 0;
|
3712 |
+
}
|
3713 |
+
.egg-container .btn-group-justified {
|
3714 |
+
display: table;
|
3715 |
+
width: 100%;
|
3716 |
+
table-layout: fixed;
|
3717 |
+
border-collapse: separate;
|
3718 |
+
}
|
3719 |
+
.egg-container .btn-group-justified > .btn,
|
3720 |
+
.egg-container .btn-group-justified > .btn-group {
|
3721 |
+
display: table-cell;
|
3722 |
+
float: none;
|
3723 |
+
width: 1%;
|
3724 |
+
}
|
3725 |
+
.egg-container .btn-group-justified > .btn-group .btn {
|
3726 |
+
width: 100%;
|
3727 |
+
}
|
3728 |
+
.egg-container .btn-group-justified > .btn-group .dropdown-menu {
|
3729 |
+
left: auto;
|
3730 |
+
}
|
3731 |
+
.egg-container [data-toggle="buttons"] > .btn input[type="radio"],
|
3732 |
+
.egg-container [data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
|
3733 |
+
.egg-container [data-toggle="buttons"] > .btn input[type="checkbox"],
|
3734 |
+
.egg-container [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
|
3735 |
+
position: absolute;
|
3736 |
+
clip: rect(0, 0, 0, 0);
|
3737 |
+
pointer-events: none;
|
3738 |
+
}
|
3739 |
+
.egg-container .input-group {
|
3740 |
+
position: relative;
|
3741 |
+
display: table;
|
3742 |
+
border-collapse: separate;
|
3743 |
+
}
|
3744 |
+
.egg-container .input-group[class*="col-"] {
|
3745 |
+
float: none;
|
3746 |
+
padding-right: 0;
|
3747 |
+
padding-left: 0;
|
3748 |
+
}
|
3749 |
+
.egg-container .input-group .form-control {
|
3750 |
+
position: relative;
|
3751 |
+
z-index: 2;
|
3752 |
+
float: left;
|
3753 |
+
width: 100%;
|
3754 |
+
margin-bottom: 0;
|
3755 |
+
}
|
3756 |
+
.egg-container .input-group-lg > .form-control,
|
3757 |
+
.egg-container .input-group-lg > .input-group-addon,
|
3758 |
+
.egg-container .input-group-lg > .input-group-btn > .btn {
|
3759 |
+
height: 46px;
|
3760 |
+
padding: 10px 16px;
|
3761 |
+
font-size: 18px;
|
3762 |
+
line-height: 1.3333333;
|
3763 |
+
border-radius: 6px;
|
3764 |
+
}
|
3765 |
+
select.egg-container .input-group-lg > .form-control,
|
3766 |
+
select.egg-container .input-group-lg > .input-group-addon,
|
3767 |
+
select.egg-container .input-group-lg > .input-group-btn > .btn {
|
3768 |
+
height: 46px;
|
3769 |
+
line-height: 46px;
|
3770 |
+
}
|
3771 |
+
textarea.egg-container .input-group-lg > .form-control,
|
3772 |
+
textarea.egg-container .input-group-lg > .input-group-addon,
|
3773 |
+
textarea.egg-container .input-group-lg > .input-group-btn > .btn,
|
3774 |
+
select[multiple].egg-container .input-group-lg > .form-control,
|
3775 |
+
select[multiple].egg-container .input-group-lg > .input-group-addon,
|
3776 |
+
select[multiple].egg-container .input-group-lg > .input-group-btn > .btn {
|
3777 |
+
height: auto;
|
3778 |
+
}
|
3779 |
+
.egg-container .input-group-sm > .form-control,
|
3780 |
+
.egg-container .input-group-sm > .input-group-addon,
|
3781 |
+
.egg-container .input-group-sm > .input-group-btn > .btn {
|
3782 |
+
height: 30px;
|
3783 |
+
padding: 5px 10px;
|
3784 |
+
font-size: 12px;
|
3785 |
+
line-height: 1.5;
|
3786 |
+
border-radius: 3px;
|
3787 |
+
}
|
3788 |
+
select.egg-container .input-group-sm > .form-control,
|
3789 |
+
select.egg-container .input-group-sm > .input-group-addon,
|
3790 |
+
select.egg-container .input-group-sm > .input-group-btn > .btn {
|
3791 |
+
height: 30px;
|
3792 |
+
line-height: 30px;
|
3793 |
+
}
|
3794 |
+
textarea.egg-container .input-group-sm > .form-control,
|
3795 |
+
textarea.egg-container .input-group-sm > .input-group-addon,
|
3796 |
+
textarea.egg-container .input-group-sm > .input-group-btn > .btn,
|
3797 |
+
select[multiple].egg-container .input-group-sm > .form-control,
|
3798 |
+
select[multiple].egg-container .input-group-sm > .input-group-addon,
|
3799 |
+
select[multiple].egg-container .input-group-sm > .input-group-btn > .btn {
|
3800 |
+
height: auto;
|
3801 |
+
}
|
3802 |
+
.egg-container .input-group-addon,
|
3803 |
+
.egg-container .input-group-btn,
|
3804 |
+
.egg-container .input-group .form-control {
|
3805 |
+
display: table-cell;
|
3806 |
+
}
|
3807 |
+
.egg-container .input-group-addon:not(:first-child):not(:last-child),
|
3808 |
+
.egg-container .input-group-btn:not(:first-child):not(:last-child),
|
3809 |
+
.egg-container .input-group .form-control:not(:first-child):not(:last-child) {
|
3810 |
+
border-radius: 0;
|
3811 |
+
}
|
3812 |
+
.egg-container .input-group-addon,
|
3813 |
+
.egg-container .input-group-btn {
|
3814 |
+
width: 1%;
|
3815 |
+
white-space: nowrap;
|
3816 |
+
vertical-align: middle;
|
3817 |
+
}
|
3818 |
+
.egg-container .input-group-addon {
|
3819 |
+
padding: 6px 12px;
|
3820 |
+
font-size: 14px;
|
3821 |
+
font-weight: normal;
|
3822 |
+
line-height: 1;
|
3823 |
+
color: #555;
|
3824 |
+
text-align: center;
|
3825 |
+
background-color: #eee;
|
3826 |
+
border: 1px solid #ccc;
|
3827 |
+
border-radius: 4px;
|
3828 |
+
}
|
3829 |
+
.egg-container .input-group-addon.input-sm {
|
3830 |
+
padding: 5px 10px;
|
3831 |
+
font-size: 12px;
|
3832 |
+
border-radius: 3px;
|
3833 |
+
}
|
3834 |
+
.egg-container .input-group-addon.input-lg {
|
3835 |
+
padding: 10px 16px;
|
3836 |
+
font-size: 18px;
|
3837 |
+
border-radius: 6px;
|
3838 |
+
}
|
3839 |
+
.egg-container .input-group-addon input[type="radio"],
|
3840 |
+
.egg-container .input-group-addon input[type="checkbox"] {
|
3841 |
+
margin-top: 0;
|
3842 |
+
}
|
3843 |
+
.egg-container .input-group .form-control:first-child,
|
3844 |
+
.egg-container .input-group-addon:first-child,
|
3845 |
+
.egg-container .input-group-btn:first-child > .btn,
|
3846 |
+
.egg-container .input-group-btn:first-child > .btn-group > .btn,
|
3847 |
+
.egg-container .input-group-btn:first-child > .dropdown-toggle,
|
3848 |
+
.egg-container .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
|
3849 |
+
.egg-container .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
|
3850 |
+
border-top-right-radius: 0;
|
3851 |
+
border-bottom-right-radius: 0;
|
3852 |
+
}
|
3853 |
+
.egg-container .input-group-addon:first-child {
|
3854 |
+
border-right: 0;
|
3855 |
+
}
|
3856 |
+
.egg-container .input-group .form-control:last-child,
|
3857 |
+
.egg-container .input-group-addon:last-child,
|
3858 |
+
.egg-container .input-group-btn:last-child > .btn,
|
3859 |
+
.egg-container .input-group-btn:last-child > .btn-group > .btn,
|
3860 |
+
.egg-container .input-group-btn:last-child > .dropdown-toggle,
|
3861 |
+
.egg-container .input-group-btn:first-child > .btn:not(:first-child),
|
3862 |
+
.egg-container .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
|
3863 |
+
border-top-left-radius: 0;
|
3864 |
+
border-bottom-left-radius: 0;
|
3865 |
+
}
|
3866 |
+
.egg-container .input-group-addon:last-child {
|
3867 |
+
border-left: 0;
|
3868 |
+
}
|
3869 |
+
.egg-container .input-group-btn {
|
3870 |
+
position: relative;
|
3871 |
+
font-size: 0;
|
3872 |
+
white-space: nowrap;
|
3873 |
+
}
|
3874 |
+
.egg-container .input-group-btn > .btn {
|
3875 |
+
position: relative;
|
3876 |
+
}
|
3877 |
+
.egg-container .input-group-btn > .btn + .btn {
|
3878 |
+
margin-left: -1px;
|
3879 |
+
}
|
3880 |
+
.egg-container .input-group-btn > .btn:hover,
|
3881 |
+
.egg-container .input-group-btn > .btn:focus,
|
3882 |
+
.egg-container .input-group-btn > .btn:active {
|
3883 |
+
z-index: 2;
|
3884 |
+
}
|
3885 |
+
.egg-container .input-group-btn:first-child > .btn,
|
3886 |
+
.egg-container .input-group-btn:first-child > .btn-group {
|
3887 |
+
margin-right: -1px;
|
3888 |
+
}
|
3889 |
+
.egg-container .input-group-btn:last-child > .btn,
|
3890 |
+
.egg-container .input-group-btn:last-child > .btn-group {
|
3891 |
+
margin-left: -1px;
|
3892 |
+
}
|
3893 |
+
.egg-container .nav {
|
3894 |
+
padding-left: 0;
|
3895 |
+
margin-bottom: 0;
|
3896 |
+
list-style: none;
|
3897 |
+
}
|
3898 |
+
.egg-container .nav > li {
|
3899 |
+
position: relative;
|
3900 |
+
display: block;
|
3901 |
+
}
|
3902 |
+
.egg-container .nav > li > a {
|
3903 |
+
position: relative;
|
3904 |
+
display: block;
|
3905 |
+
padding: 10px 15px;
|
3906 |
+
}
|
3907 |
+
.egg-container .nav > li > a:hover,
|
3908 |
+
.egg-container .nav > li > a:focus {
|
3909 |
+
text-decoration: none;
|
3910 |
+
background-color: #eee;
|
3911 |
+
}
|
3912 |
+
.egg-container .nav > li.disabled > a {
|
3913 |
+
color: #777;
|
3914 |
+
}
|
3915 |
+
.egg-container .nav > li.disabled > a:hover,
|
3916 |
+
.egg-container .nav > li.disabled > a:focus {
|
3917 |
+
color: #777;
|
3918 |
+
text-decoration: none;
|
3919 |
+
cursor: not-allowed;
|
3920 |
+
background-color: transparent;
|
3921 |
+
}
|
3922 |
+
.egg-container .nav .open > a,
|
3923 |
+
.egg-container .nav .open > a:hover,
|
3924 |
+
.egg-container .nav .open > a:focus {
|
3925 |
+
background-color: #eee;
|
3926 |
+
border-color: #337ab7;
|
3927 |
+
}
|
3928 |
+
.egg-container .nav .nav-divider {
|
3929 |
+
height: 1px;
|
3930 |
+
margin: 9px 0;
|
3931 |
+
overflow: hidden;
|
3932 |
+
background-color: #e5e5e5;
|
3933 |
+
}
|
3934 |
+
.egg-container .nav > li > a > img {
|
3935 |
+
max-width: none;
|
3936 |
+
}
|
3937 |
+
.egg-container .nav-tabs {
|
3938 |
+
border-bottom: 1px solid #ddd;
|
3939 |
+
}
|
3940 |
+
.egg-container .nav-tabs > li {
|
3941 |
+
float: left;
|
3942 |
+
margin-bottom: -1px;
|
3943 |
+
}
|
3944 |
+
.egg-container .nav-tabs > li > a {
|
3945 |
+
margin-right: 2px;
|
3946 |
+
line-height: 1.42857143;
|
3947 |
+
border: 1px solid transparent;
|
3948 |
+
border-radius: 4px 4px 0 0;
|
3949 |
+
}
|
3950 |
+
.egg-container .nav-tabs > li > a:hover {
|
3951 |
+
border-color: #eee #eee #ddd;
|
3952 |
+
}
|
3953 |
+
.egg-container .nav-tabs > li.active > a,
|
3954 |
+
.egg-container .nav-tabs > li.active > a:hover,
|
3955 |
+
.egg-container .nav-tabs > li.active > a:focus {
|
3956 |
+
color: #555;
|
3957 |
+
cursor: default;
|
3958 |
+
background-color: #fff;
|
3959 |
+
border: 1px solid #ddd;
|
3960 |
+
border-bottom-color: transparent;
|
3961 |
+
}
|
3962 |
+
.egg-container .nav-tabs.nav-justified {
|
3963 |
+
width: 100%;
|
3964 |
+
border-bottom: 0;
|
3965 |
+
}
|
3966 |
+
.egg-container .nav-tabs.nav-justified > li {
|
3967 |
+
float: none;
|
3968 |
+
}
|
3969 |
+
.egg-container .nav-tabs.nav-justified > li > a {
|
3970 |
+
margin-bottom: 5px;
|
3971 |
+
text-align: center;
|
3972 |
+
}
|
3973 |
+
.egg-container .nav-tabs.nav-justified > .dropdown .dropdown-menu {
|
3974 |
+
top: auto;
|
3975 |
+
left: auto;
|
3976 |
+
}
|
3977 |
+
@media (min-width: 768px) {
|
3978 |
+
.egg-container .nav-tabs.nav-justified > li {
|
3979 |
+
display: table-cell;
|
3980 |
+
width: 1%;
|
3981 |
+
}
|
3982 |
+
.egg-container .nav-tabs.nav-justified > li > a {
|
3983 |
+
margin-bottom: 0;
|
3984 |
+
}
|
3985 |
+
}
|
3986 |
+
.egg-container .nav-tabs.nav-justified > li > a {
|
3987 |
+
margin-right: 0;
|
3988 |
+
border-radius: 4px;
|
3989 |
+
}
|
3990 |
+
.egg-container .nav-tabs.nav-justified > .active > a,
|
3991 |
+
.egg-container .nav-tabs.nav-justified > .active > a:hover,
|
3992 |
+
.egg-container .nav-tabs.nav-justified > .active > a:focus {
|
3993 |
+
border: 1px solid #ddd;
|
3994 |
+
}
|
3995 |
+
@media (min-width: 768px) {
|
3996 |
+
.egg-container .nav-tabs.nav-justified > li > a {
|
3997 |
+
border-bottom: 1px solid #ddd;
|
3998 |
+
border-radius: 4px 4px 0 0;
|
3999 |
+
}
|
4000 |
+
.egg-container .nav-tabs.nav-justified > .active > a,
|
4001 |
+
.egg-container .nav-tabs.nav-justified > .active > a:hover,
|
4002 |
+
.egg-container .nav-tabs.nav-justified > .active > a:focus {
|
4003 |
+
border-bottom-color: #fff;
|
4004 |
+
}
|
4005 |
+
}
|
4006 |
+
.egg-container .nav-pills > li {
|
4007 |
+
float: left;
|
4008 |
+
}
|
4009 |
+
.egg-container .nav-pills > li > a {
|
4010 |
+
border-radius: 4px;
|
4011 |
+
}
|
4012 |
+
.egg-container .nav-pills > li + li {
|
4013 |
+
margin-left: 2px;
|
4014 |
+
}
|
4015 |
+
.egg-container .nav-pills > li.active > a,
|
4016 |
+
.egg-container .nav-pills > li.active > a:hover,
|
4017 |
+
.egg-container .nav-pills > li.active > a:focus {
|
4018 |
+
color: #fff;
|
4019 |
+
background-color: #337ab7;
|
4020 |
+
}
|
4021 |
+
.egg-container .nav-stacked > li {
|
4022 |
+
float: none;
|
4023 |
+
}
|
4024 |
+
.egg-container .nav-stacked > li + li {
|
4025 |
+
margin-top: 2px;
|
4026 |
+
margin-left: 0;
|
4027 |
+
}
|
4028 |
+
.egg-container .nav-justified {
|
4029 |
+
width: 100%;
|
4030 |
+
}
|
4031 |
+
.egg-container .nav-justified > li {
|
4032 |
+
float: none;
|
4033 |
+
}
|
4034 |
+
.egg-container .nav-justified > li > a {
|
4035 |
+
margin-bottom: 5px;
|
4036 |
+
text-align: center;
|
4037 |
+
}
|
4038 |
+
.egg-container .nav-justified > .dropdown .dropdown-menu {
|
4039 |
+
top: auto;
|
4040 |
+
left: auto;
|
4041 |
+
}
|
4042 |
+
@media (min-width: 768px) {
|
4043 |
+
.egg-container .nav-justified > li {
|
4044 |
+
display: table-cell;
|
4045 |
+
width: 1%;
|
4046 |
+
}
|
4047 |
+
.egg-container .nav-justified > li > a {
|
4048 |
+
margin-bottom: 0;
|
4049 |
+
}
|
4050 |
+
}
|
4051 |
+
.egg-container .nav-tabs-justified {
|
4052 |
+
border-bottom: 0;
|
4053 |
+
}
|
4054 |
+
.egg-container .nav-tabs-justified > li > a {
|
4055 |
+
margin-right: 0;
|
4056 |
+
border-radius: 4px;
|
4057 |
+
}
|
4058 |
+
.egg-container .nav-tabs-justified > .active > a,
|
4059 |
+
.egg-container .nav-tabs-justified > .active > a:hover,
|
4060 |
+
.egg-container .nav-tabs-justified > .active > a:focus {
|
4061 |
+
border: 1px solid #ddd;
|
4062 |
+
}
|
4063 |
+
@media (min-width: 768px) {
|
4064 |
+
.egg-container .nav-tabs-justified > li > a {
|
4065 |
+
border-bottom: 1px solid #ddd;
|
4066 |
+
border-radius: 4px 4px 0 0;
|
4067 |
+
}
|
4068 |
+
.egg-container .nav-tabs-justified > .active > a,
|
4069 |
+
.egg-container .nav-tabs-justified > .active > a:hover,
|
4070 |
+
.egg-container .nav-tabs-justified > .active > a:focus {
|
4071 |
+
border-bottom-color: #fff;
|
4072 |
+
}
|
4073 |
+
}
|
4074 |
+
.egg-container .tab-content > .tab-pane {
|
4075 |
+
display: none;
|
4076 |
+
}
|
4077 |
+
.egg-container .tab-content > .active {
|
4078 |
+
display: block;
|
4079 |
+
}
|
4080 |
+
.egg-container .nav-tabs .dropdown-menu {
|
4081 |
+
margin-top: -1px;
|
4082 |
+
border-top-left-radius: 0;
|
4083 |
+
border-top-right-radius: 0;
|
4084 |
+
}
|
4085 |
+
.egg-container .breadcrumb {
|
4086 |
+
padding: 8px 15px;
|
4087 |
+
margin-bottom: 20px;
|
4088 |
+
list-style: none;
|
4089 |
+
background-color: #f5f5f5;
|
4090 |
+
border-radius: 4px;
|
4091 |
+
}
|
4092 |
+
.egg-container .breadcrumb > li {
|
4093 |
+
display: inline-block;
|
4094 |
+
}
|
4095 |
+
.egg-container .breadcrumb > li + li:before {
|
4096 |
+
padding: 0 5px;
|
4097 |
+
color: #ccc;
|
4098 |
+
content: "/\00a0";
|
4099 |
+
}
|
4100 |
+
.egg-container .breadcrumb > .active {
|
4101 |
+
color: #777;
|
4102 |
+
}
|
4103 |
+
.egg-container .label {
|
4104 |
+
display: inline;
|
4105 |
+
padding: .2em .6em .3em;
|
4106 |
+
font-size: 75%;
|
4107 |
+
font-weight: bold;
|
4108 |
+
line-height: 1;
|
4109 |
+
color: #fff;
|
4110 |
+
text-align: center;
|
4111 |
+
white-space: nowrap;
|
4112 |
+
vertical-align: baseline;
|
4113 |
+
border-radius: .25em;
|
4114 |
+
}
|
4115 |
+
a.egg-container .label:hover,
|
4116 |
+
a.egg-container .label:focus {
|
4117 |
+
color: #fff;
|
4118 |
+
text-decoration: none;
|
4119 |
+
cursor: pointer;
|
4120 |
+
}
|
4121 |
+
.egg-container .label:empty {
|
4122 |
+
display: none;
|
4123 |
+
}
|
4124 |
+
.btn .egg-container .label {
|
4125 |
+
position: relative;
|
4126 |
+
top: -1px;
|
4127 |
+
}
|
4128 |
+
.egg-container .label-default {
|
4129 |
+
background-color: #777;
|
4130 |
+
}
|
4131 |
+
.egg-container .label-default[href]:hover,
|
4132 |
+
.egg-container .label-default[href]:focus {
|
4133 |
+
background-color: #5e5e5e;
|
4134 |
+
}
|
4135 |
+
.egg-container .label-primary {
|
4136 |
+
background-color: #337ab7;
|
4137 |
+
}
|
4138 |
+
.egg-container .label-primary[href]:hover,
|
4139 |
+
.egg-container .label-primary[href]:focus {
|
4140 |
+
background-color: #286090;
|
4141 |
+
}
|
4142 |
+
.egg-container .label-success {
|
4143 |
+
background-color: #5cb85c;
|
4144 |
+
}
|
4145 |
+
.egg-container .label-success[href]:hover,
|
4146 |
+
.egg-container .label-success[href]:focus {
|
4147 |
+
background-color: #449d44;
|
4148 |
+
}
|
4149 |
+
.egg-container .label-info {
|
4150 |
+
background-color: #5bc0de;
|
4151 |
+
}
|
4152 |
+
.egg-container .label-info[href]:hover,
|
4153 |
+
.egg-container .label-info[href]:focus {
|
4154 |
+
background-color: #31b0d5;
|
4155 |
+
}
|
4156 |
+
.egg-container .label-warning {
|
4157 |
+
background-color: #f0ad4e;
|
4158 |
+
}
|
4159 |
+
.egg-container .label-warning[href]:hover,
|
4160 |
+
.egg-container .label-warning[href]:focus {
|
4161 |
+
background-color: #ec971f;
|
4162 |
+
}
|
4163 |
+
.egg-container .label-danger {
|
4164 |
+
background-color: #d9534f;
|
4165 |
+
}
|
4166 |
+
.egg-container .label-danger[href]:hover,
|
4167 |
+
.egg-container .label-danger[href]:focus {
|
4168 |
+
background-color: #c9302c;
|
4169 |
+
}
|
4170 |
+
.egg-container .badge {
|
4171 |
+
display: inline-block;
|
4172 |
+
min-width: 10px;
|
4173 |
+
padding: 3px 7px;
|
4174 |
+
font-size: 12px;
|
4175 |
+
font-weight: bold;
|
4176 |
+
line-height: 1;
|
4177 |
+
color: #fff;
|
4178 |
+
text-align: center;
|
4179 |
+
white-space: nowrap;
|
4180 |
+
vertical-align: baseline;
|
4181 |
+
background-color: #777;
|
4182 |
+
border-radius: 10px;
|
4183 |
+
}
|
4184 |
+
.egg-container .badge:empty {
|
4185 |
+
display: none;
|
4186 |
+
}
|
4187 |
+
.btn .egg-container .badge {
|
4188 |
+
position: relative;
|
4189 |
+
top: -1px;
|
4190 |
+
}
|
4191 |
+
.btn-xs .egg-container .badge,
|
4192 |
+
.btn-group-xs > .btn .egg-container .badge {
|
4193 |
+
top: 0;
|
4194 |
+
padding: 1px 5px;
|
4195 |
+
}
|
4196 |
+
a.egg-container .badge:hover,
|
4197 |
+
a.egg-container .badge:focus {
|
4198 |
+
color: #fff;
|
4199 |
+
text-decoration: none;
|
4200 |
+
cursor: pointer;
|
4201 |
+
}
|
4202 |
+
.list-group-item.active > .egg-container .badge,
|
4203 |
+
.nav-pills > .active > a > .egg-container .badge {
|
4204 |
+
color: #337ab7;
|
4205 |
+
background-color: #fff;
|
4206 |
+
}
|
4207 |
+
.list-group-item > .egg-container .badge {
|
4208 |
+
float: right;
|
4209 |
+
}
|
4210 |
+
.list-group-item > .egg-container .badge + .egg-container .badge {
|
4211 |
+
margin-right: 5px;
|
4212 |
+
}
|
4213 |
+
.nav-pills > li > a > .egg-container .badge {
|
4214 |
+
margin-left: 3px;
|
4215 |
+
}
|
4216 |
+
.egg-container .thumbnail {
|
4217 |
+
display: block;
|
4218 |
+
padding: 4px;
|
4219 |
+
margin-bottom: 20px;
|
4220 |
+
line-height: 1.42857143;
|
4221 |
+
background-color: #fff;
|
4222 |
+
border: 1px solid #ddd;
|
4223 |
+
border-radius: 4px;
|
4224 |
+
-webkit-transition: border .2s ease-in-out;
|
4225 |
+
-o-transition: border .2s ease-in-out;
|
4226 |
+
transition: border .2s ease-in-out;
|
4227 |
+
}
|
4228 |
+
.egg-container .thumbnail > img,
|
4229 |
+
.egg-container .thumbnail a > img {
|
4230 |
+
margin-right: auto;
|
4231 |
+
margin-left: auto;
|
4232 |
+
}
|
4233 |
+
|
4234 |
+
.egg-container a.thumbnail:hover,
|
4235 |
+
.egg-container a.thumbnail:focus,
|
4236 |
+
.egg-container a.thumbnail.active {
|
4237 |
+
border-color: #337ab7;
|
4238 |
+
}
|
4239 |
+
|
4240 |
+
.egg-container .thumbnail .caption {
|
4241 |
+
padding: 9px;
|
4242 |
+
color: #333;
|
4243 |
+
}
|
4244 |
+
.egg-container .alert {
|
4245 |
+
padding: 15px;
|
4246 |
+
margin-bottom: 20px;
|
4247 |
+
border: 1px solid transparent;
|
4248 |
+
border-radius: 4px;
|
4249 |
+
}
|
4250 |
+
.egg-container .alert h4 {
|
4251 |
+
margin-top: 0;
|
4252 |
+
color: inherit;
|
4253 |
+
}
|
4254 |
+
.egg-container .alert .alert-link {
|
4255 |
+
font-weight: bold;
|
4256 |
+
}
|
4257 |
+
.egg-container .alert > p,
|
4258 |
+
.egg-container .alert > ul {
|
4259 |
+
margin-bottom: 0;
|
4260 |
+
}
|
4261 |
+
.egg-container .alert > p + p {
|
4262 |
+
margin-top: 5px;
|
4263 |
+
}
|
4264 |
+
.egg-container .alert-dismissable,
|
4265 |
+
.egg-container .alert-dismissible {
|
4266 |
+
padding-right: 35px;
|
4267 |
+
}
|
4268 |
+
.egg-container .alert-dismissable .close,
|
4269 |
+
.egg-container .alert-dismissible .close {
|
4270 |
+
position: relative;
|
4271 |
+
top: -2px;
|
4272 |
+
right: -21px;
|
4273 |
+
color: inherit;
|
4274 |
+
}
|
4275 |
+
.egg-container .alert-success {
|
4276 |
+
color: #3c763d;
|
4277 |
+
background-color: #dff0d8;
|
4278 |
+
border-color: #d6e9c6;
|
4279 |
+
}
|
4280 |
+
.egg-container .alert-success hr {
|
4281 |
+
border-top-color: #c9e2b3;
|
4282 |
+
}
|
4283 |
+
.egg-container .alert-success .alert-link {
|
4284 |
+
color: #2b542c;
|
4285 |
+
}
|
4286 |
+
.egg-container .alert-info {
|
4287 |
+
color: #31708f;
|
4288 |
+
background-color: #d9edf7;
|
4289 |
+
border-color: #bce8f1;
|
4290 |
+
}
|
4291 |
+
.egg-container .alert-info hr {
|
4292 |
+
border-top-color: #a6e1ec;
|
4293 |
+
}
|
4294 |
+
.egg-container .alert-info .alert-link {
|
4295 |
+
color: #245269;
|
4296 |
+
}
|
4297 |
+
.egg-container .alert-warning {
|
4298 |
+
color: #8a6d3b;
|
4299 |
+
background-color: #fcf8e3;
|
4300 |
+
border-color: #faebcc;
|
4301 |
+
}
|
4302 |
+
.egg-container .alert-warning hr {
|
4303 |
+
border-top-color: #f7e1b5;
|
4304 |
+
}
|
4305 |
+
.egg-container .alert-warning .alert-link {
|
4306 |
+
color: #66512c;
|
4307 |
+
}
|
4308 |
+
.egg-container .alert-danger {
|
4309 |
+
color: #a94442;
|
4310 |
+
background-color: #f2dede;
|
4311 |
+
border-color: #ebccd1;
|
4312 |
+
}
|
4313 |
+
.egg-container .alert-danger hr {
|
4314 |
+
border-top-color: #e4b9c0;
|
4315 |
+
}
|
4316 |
+
.egg-container .alert-danger .alert-link {
|
4317 |
+
color: #843534;
|
4318 |
+
}
|
4319 |
+
@-webkit-keyframes progress-bar-stripes {
|
4320 |
+
from {
|
4321 |
+
background-position: 40px 0;
|
4322 |
+
}
|
4323 |
+
to {
|
4324 |
+
background-position: 0 0;
|
4325 |
+
}
|
4326 |
+
}
|
4327 |
+
@-o-keyframes progress-bar-stripes {
|
4328 |
+
from {
|
4329 |
+
background-position: 40px 0;
|
4330 |
+
}
|
4331 |
+
to {
|
4332 |
+
background-position: 0 0;
|
4333 |
+
}
|
4334 |
+
}
|
4335 |
+
@keyframes progress-bar-stripes {
|
4336 |
+
from {
|
4337 |
+
background-position: 40px 0;
|
4338 |
+
}
|
4339 |
+
to {
|
4340 |
+
background-position: 0 0;
|
4341 |
+
}
|
4342 |
+
}
|
4343 |
+
.egg-container .progress {
|
4344 |
+
height: 20px;
|
4345 |
+
margin-bottom: 20px;
|
4346 |
+
overflow: hidden;
|
4347 |
+
background-color: #f5f5f5;
|
4348 |
+
border-radius: 4px;
|
4349 |
+
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
|
4350 |
+
box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
|
4351 |
+
}
|
4352 |
+
.egg-container .progress-bar {
|
4353 |
+
float: left;
|
4354 |
+
width: 0;
|
4355 |
+
height: 100%;
|
4356 |
+
font-size: 12px;
|
4357 |
+
line-height: 20px;
|
4358 |
+
color: #fff;
|
4359 |
+
text-align: center;
|
4360 |
+
background-color: #337ab7;
|
4361 |
+
-webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
|
4362 |
+
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
|
4363 |
+
-webkit-transition: width .6s ease;
|
4364 |
+
-o-transition: width .6s ease;
|
4365 |
+
transition: width .6s ease;
|
4366 |
+
}
|
4367 |
+
.egg-container .progress-striped .progress-bar,
|
4368 |
+
.egg-container .progress-bar-striped {
|
4369 |
+
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
4370 |
+
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
4371 |
+
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
4372 |
+
-webkit-background-size: 40px 40px;
|
4373 |
+
background-size: 40px 40px;
|
4374 |
+
}
|
4375 |
+
.egg-container .progress.active .progress-bar,
|
4376 |
+
.egg-container .progress-bar.active {
|
4377 |
+
-webkit-animation: progress-bar-stripes 2s linear infinite;
|
4378 |
+
-o-animation: progress-bar-stripes 2s linear infinite;
|
4379 |
+
animation: progress-bar-stripes 2s linear infinite;
|
4380 |
+
}
|
4381 |
+
.egg-container .progress-bar-success {
|
4382 |
+
background-color: #5cb85c;
|
4383 |
+
}
|
4384 |
+
.progress-striped .egg-container .progress-bar-success {
|
4385 |
+
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
4386 |
+
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
4387 |
+
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
4388 |
+
}
|
4389 |
+
.egg-container .progress-bar-info {
|
4390 |
+
background-color: #5bc0de;
|
4391 |
+
}
|
4392 |
+
.progress-striped .egg-container .progress-bar-info {
|
4393 |
+
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
4394 |
+
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
4395 |
+
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
4396 |
+
}
|
4397 |
+
.egg-container .progress-bar-warning {
|
4398 |
+
background-color: #f0ad4e;
|
4399 |
+
}
|
4400 |
+
.progress-striped .egg-container .progress-bar-warning {
|
4401 |
+
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
4402 |
+
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
4403 |
+
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
4404 |
+
}
|
4405 |
+
.egg-container .progress-bar-danger {
|
4406 |
+
background-color: #d9534f;
|
4407 |
+
}
|
4408 |
+
.progress-striped .egg-container .progress-bar-danger {
|
4409 |
+
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
4410 |
+
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
4411 |
+
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
4412 |
+
}
|
4413 |
+
.egg-container .media {
|
4414 |
+
margin-top: 15px;
|
4415 |
+
}
|
4416 |
+
.egg-container .media:first-child {
|
4417 |
+
margin-top: 0;
|
4418 |
+
}
|
4419 |
+
.egg-container .media,
|
4420 |
+
.egg-container .media-body {
|
4421 |
+
overflow: hidden;
|
4422 |
+
zoom: 1;
|
4423 |
+
}
|
4424 |
+
.egg-container .media-body {
|
4425 |
+
width: 10000px;
|
4426 |
+
}
|
4427 |
+
.egg-container .media-object {
|
4428 |
+
display: block;
|
4429 |
+
}
|
4430 |
+
.egg-container .media-right,
|
4431 |
+
.egg-container .media > .pull-right {
|
4432 |
+
padding-left: 10px;
|
4433 |
+
}
|
4434 |
+
.egg-container .media-left,
|
4435 |
+
.egg-container .media > .pull-left {
|
4436 |
+
padding-right: 20px;
|
4437 |
+
}
|
4438 |
+
.egg-container .media-left,
|
4439 |
+
.egg-container .media-right,
|
4440 |
+
.egg-container .media-body {
|
4441 |
+
display: table-cell;
|
4442 |
+
vertical-align: top;
|
4443 |
+
}
|
4444 |
+
.egg-container .media-middle {
|
4445 |
+
vertical-align: middle;
|
4446 |
+
}
|
4447 |
+
.egg-container .media-bottom {
|
4448 |
+
vertical-align: bottom;
|
4449 |
+
}
|
4450 |
+
/*.egg-container .media-heading {
|
4451 |
+
margin-top: 0;
|
4452 |
+
margin-bottom: 10px;
|
4453 |
+
}*/
|
4454 |
+
.egg-container .media-list {
|
4455 |
+
padding-left: 0;
|
4456 |
+
list-style: none;
|
4457 |
+
}
|
4458 |
+
.egg-container .list-group {
|
4459 |
+
padding-left: 0;
|
4460 |
+
margin-bottom: 20px;
|
4461 |
+
}
|
4462 |
+
.egg-container .list-group-item {
|
4463 |
+
position: relative;
|
4464 |
+
display: block;
|
4465 |
+
padding: 10px 15px;
|
4466 |
+
margin-bottom: -1px;
|
4467 |
+
background-color: #fff;
|
4468 |
+
border: 1px solid #ddd;
|
4469 |
+
}
|
4470 |
+
.egg-container .list-group-item:first-child {
|
4471 |
+
border-top-left-radius: 4px;
|
4472 |
+
border-top-right-radius: 4px;
|
4473 |
+
}
|
4474 |
+
.egg-container .list-group-item:last-child {
|
4475 |
+
margin-bottom: 0;
|
4476 |
+
border-bottom-right-radius: 4px;
|
4477 |
+
border-bottom-left-radius: 4px;
|
4478 |
+
}
|
4479 |
+
.egg-container a.list-group-item {
|
4480 |
+
color: #555;
|
4481 |
+
}
|
4482 |
+
.egg-container a.list-group-item .list-group-item-heading {
|
4483 |
+
color: #333;
|
4484 |
+
}
|
4485 |
+
.egg-container a.list-group-item:hover,
|
4486 |
+
.egg-container a.list-group-item:focus {
|
4487 |
+
color: #555;
|
4488 |
+
text-decoration: none;
|
4489 |
+
background-color: #f5f5f5;
|
4490 |
+
}
|
4491 |
+
.egg-container .list-group-item.disabled,
|
4492 |
+
.egg-container .list-group-item.disabled:hover,
|
4493 |
+
.egg-container .list-group-item.disabled:focus {
|
4494 |
+
color: #777;
|
4495 |
+
cursor: not-allowed;
|
4496 |
+
background-color: #eee;
|
4497 |
+
}
|
4498 |
+
.egg-container .list-group-item.disabled .list-group-item-heading,
|
4499 |
+
.egg-container .list-group-item.disabled:hover .list-group-item-heading,
|
4500 |
+
.egg-container .list-group-item.disabled:focus .list-group-item-heading {
|
4501 |
+
color: inherit;
|
4502 |
+
}
|
4503 |
+
.egg-container .list-group-item.disabled .list-group-item-text,
|
4504 |
+
.egg-container .list-group-item.disabled:hover .list-group-item-text,
|
4505 |
+
.egg-container .list-group-item.disabled:focus .list-group-item-text {
|
4506 |
+
color: #777;
|
4507 |
+
}
|
4508 |
+
.egg-container .list-group-item.active,
|
4509 |
+
.egg-container .list-group-item.active:hover,
|
4510 |
+
.egg-container .list-group-item.active:focus {
|
4511 |
+
z-index: 2;
|
4512 |
+
color: #fff;
|
4513 |
+
background-color: #337ab7;
|
4514 |
+
border-color: #337ab7;
|
4515 |
+
}
|
4516 |
+
.egg-container .list-group-item.active .list-group-item-heading,
|
4517 |
+
.egg-container .list-group-item.active:hover .list-group-item-heading,
|
4518 |
+
.egg-container .list-group-item.active:focus .list-group-item-heading,
|
4519 |
+
.egg-container .list-group-item.active .list-group-item-heading > small,
|
4520 |
+
.egg-container .list-group-item.active:hover .list-group-item-heading > small,
|
4521 |
+
.egg-container .list-group-item.active:focus .list-group-item-heading > small,
|
4522 |
+
.egg-container .list-group-item.active .list-group-item-heading > .small,
|
4523 |
+
.egg-container .list-group-item.active:hover .list-group-item-heading > .small,
|
4524 |
+
.egg-container .list-group-item.active:focus .list-group-item-heading > .small {
|
4525 |
+
color: inherit;
|
4526 |
+
}
|
4527 |
+
.egg-container .list-group-item.active .list-group-item-text,
|
4528 |
+
.egg-container .list-group-item.active:hover .list-group-item-text,
|
4529 |
+
.egg-container .list-group-item.active:focus .list-group-item-text {
|
4530 |
+
color: #c7ddef;
|
4531 |
+
}
|
4532 |
+
.egg-container .list-group-item-success {
|
4533 |
+
color: #3c763d;
|
4534 |
+
background-color: #dff0d8;
|
4535 |
+
}
|
4536 |
+
a.egg-container .list-group-item-success {
|
4537 |
+
color: #3c763d;
|
4538 |
+
}
|
4539 |
+
a.egg-container .list-group-item-success .list-group-item-heading {
|
4540 |
+
color: inherit;
|
4541 |
+
}
|
4542 |
+
a.egg-container .list-group-item-success:hover,
|
4543 |
+
a.egg-container .list-group-item-success:focus {
|
4544 |
+
color: #3c763d;
|
4545 |
+
background-color: #d0e9c6;
|
4546 |
+
}
|
4547 |
+
a.egg-container .list-group-item-success.active,
|
4548 |
+
a.egg-container .list-group-item-success.active:hover,
|
4549 |
+
a.egg-container .list-group-item-success.active:focus {
|
4550 |
+
color: #fff;
|
4551 |
+
background-color: #3c763d;
|
4552 |
+
border-color: #3c763d;
|
4553 |
+
}
|
4554 |
+
.egg-container .list-group-item-info {
|
4555 |
+
color: #31708f;
|
4556 |
+
background-color: #d9edf7;
|
4557 |
+
}
|
4558 |
+
a.egg-container .list-group-item-info {
|
4559 |
+
color: #31708f;
|
4560 |
+
}
|
4561 |
+
a.egg-container .list-group-item-info .list-group-item-heading {
|
4562 |
+
color: inherit;
|
4563 |
+
}
|
4564 |
+
a.egg-container .list-group-item-info:hover,
|
4565 |
+
a.egg-container .list-group-item-info:focus {
|
4566 |
+
color: #31708f;
|
4567 |
+
background-color: #c4e3f3;
|
4568 |
+
}
|
4569 |
+
a.egg-container .list-group-item-info.active,
|
4570 |
+
a.egg-container .list-group-item-info.active:hover,
|
4571 |
+
a.egg-container .list-group-item-info.active:focus {
|
4572 |
+
color: #fff;
|
4573 |
+
background-color: #31708f;
|
4574 |
+
border-color: #31708f;
|
4575 |
+
}
|
4576 |
+
.egg-container .list-group-item-warning {
|
4577 |
+
color: #8a6d3b;
|
4578 |
+
background-color: #fcf8e3;
|
4579 |
+
}
|
4580 |
+
a.egg-container .list-group-item-warning {
|
4581 |
+
color: #8a6d3b;
|
4582 |
+
}
|
4583 |
+
a.egg-container .list-group-item-warning .list-group-item-heading {
|
4584 |
+
color: inherit;
|
4585 |
+
}
|
4586 |
+
a.egg-container .list-group-item-warning:hover,
|
4587 |
+
a.egg-container .list-group-item-warning:focus {
|
4588 |
+
color: #8a6d3b;
|
4589 |
+
background-color: #faf2cc;
|
4590 |
+
}
|
4591 |
+
a.egg-container .list-group-item-warning.active,
|
4592 |
+
a.egg-container .list-group-item-warning.active:hover,
|
4593 |
+
a.egg-container .list-group-item-warning.active:focus {
|
4594 |
+
color: #fff;
|
4595 |
+
background-color: #8a6d3b;
|
4596 |
+
border-color: #8a6d3b;
|
4597 |
+
}
|
4598 |
+
.egg-container .list-group-item-danger {
|
4599 |
+
color: #a94442;
|
4600 |
+
background-color: #f2dede;
|
4601 |
+
}
|
4602 |
+
a.egg-container .list-group-item-danger {
|
4603 |
+
color: #a94442;
|
4604 |
+
}
|
4605 |
+
a.egg-container .list-group-item-danger .list-group-item-heading {
|
4606 |
+
color: inherit;
|
4607 |
+
}
|
4608 |
+
a.egg-container .list-group-item-danger:hover,
|
4609 |
+
a.egg-container .list-group-item-danger:focus {
|
4610 |
+
color: #a94442;
|
4611 |
+
background-color: #ebcccc;
|
4612 |
+
}
|
4613 |
+
a.egg-container .list-group-item-danger.active,
|
4614 |
+
a.egg-container .list-group-item-danger.active:hover,
|
4615 |
+
a.egg-container .list-group-item-danger.active:focus {
|
4616 |
+
color: #fff;
|
4617 |
+
background-color: #a94442;
|
4618 |
+
border-color: #a94442;
|
4619 |
+
}
|
4620 |
+
.egg-container .list-group-item-heading {
|
4621 |
+
margin-top: 0;
|
4622 |
+
margin-bottom: 5px;
|
4623 |
+
}
|
4624 |
+
.egg-container .list-group-item-text {
|
4625 |
+
margin-bottom: 0;
|
4626 |
+
line-height: 1.3;
|
4627 |
+
}
|
4628 |
+
.egg-container .panel {
|
4629 |
+
margin-bottom: 20px;
|
4630 |
+
background-color: #fff;
|
4631 |
+
border: 1px solid transparent;
|
4632 |
+
border-radius: 4px;
|
4633 |
+
-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
|
4634 |
+
box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
|
4635 |
+
}
|
4636 |
+
.egg-container .panel-body {
|
4637 |
+
padding: 15px;
|
4638 |
+
}
|
4639 |
+
.egg-container .panel-heading {
|
4640 |
+
padding: 10px 15px;
|
4641 |
+
border-bottom: 1px solid transparent;
|
4642 |
+
border-top-left-radius: 3px;
|
4643 |
+
border-top-right-radius: 3px;
|
4644 |
+
}
|
4645 |
+
.egg-container .panel-heading > .dropdown .dropdown-toggle {
|
4646 |
+
color: inherit;
|
4647 |
+
}
|
4648 |
+
.egg-container .panel-title {
|
4649 |
+
margin-top: 0;
|
4650 |
+
margin-bottom: 0;
|
4651 |
+
font-size: 16px;
|
4652 |
+
color: inherit;
|
4653 |
+
}
|
4654 |
+
.egg-container .panel-title > a,
|
4655 |
+
.egg-container .panel-title > small,
|
4656 |
+
.egg-container .panel-title > .small,
|
4657 |
+
.egg-container .panel-title > small > a,
|
4658 |
+
.egg-container .panel-title > .small > a {
|
4659 |
+
color: inherit;
|
4660 |
+
}
|
4661 |
+
.egg-container .panel-footer {
|
4662 |
+
padding: 10px 15px;
|
4663 |
+
background-color: #f5f5f5;
|
4664 |
+
border-top: 1px solid #ddd;
|
4665 |
+
border-bottom-right-radius: 3px;
|
4666 |
+
border-bottom-left-radius: 3px;
|
4667 |
+
}
|
4668 |
+
.egg-container .panel > .list-group,
|
4669 |
+
.egg-container .panel > .panel-collapse > .list-group {
|
4670 |
+
margin-bottom: 0;
|
4671 |
+
}
|
4672 |
+
.egg-container .panel > .list-group .list-group-item,
|
4673 |
+
.egg-container .panel > .panel-collapse > .list-group .list-group-item {
|
4674 |
+
border-width: 1px 0;
|
4675 |
+
border-radius: 0;
|
4676 |
+
}
|
4677 |
+
.egg-container .panel > .list-group:first-child .list-group-item:first-child,
|
4678 |
+
.egg-container .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
|
4679 |
+
border-top: 0;
|
4680 |
+
border-top-left-radius: 3px;
|
4681 |
+
border-top-right-radius: 3px;
|
4682 |
+
}
|
4683 |
+
.egg-container .panel > .list-group:last-child .list-group-item:last-child,
|
4684 |
+
.egg-container .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
|
4685 |
+
border-bottom: 0;
|
4686 |
+
border-bottom-right-radius: 3px;
|
4687 |
+
border-bottom-left-radius: 3px;
|
4688 |
+
}
|
4689 |
+
.egg-container .panel-heading + .list-group .list-group-item:first-child {
|
4690 |
+
border-top-width: 0;
|
4691 |
+
}
|
4692 |
+
.egg-container .list-group + .panel-footer {
|
4693 |
+
border-top-width: 0;
|
4694 |
+
}
|
4695 |
+
.egg-container .panel > .table,
|
4696 |
+
.egg-container .panel > .table-responsive > .table,
|
4697 |
+
.egg-container .panel > .panel-collapse > .table {
|
4698 |
+
margin-bottom: 0;
|
4699 |
+
}
|
4700 |
+
.egg-container .panel > .table caption,
|
4701 |
+
.egg-container .panel > .table-responsive > .table caption,
|
4702 |
+
.egg-container .panel > .panel-collapse > .table caption {
|
4703 |
+
padding-right: 15px;
|
4704 |
+
padding-left: 15px;
|
4705 |
+
}
|
4706 |
+
.egg-container .panel > .table:first-child,
|
4707 |
+
.egg-container .panel > .table-responsive:first-child > .table:first-child {
|
4708 |
+
border-top-left-radius: 3px;
|
4709 |
+
border-top-right-radius: 3px;
|
4710 |
+
}
|
4711 |
+
.egg-container .panel > .table:first-child > thead:first-child > tr:first-child,
|
4712 |
+
.egg-container .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
|
4713 |
+
.egg-container .panel > .table:first-child > tbody:first-child > tr:first-child,
|
4714 |
+
.egg-container .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
|
4715 |
+
border-top-left-radius: 3px;
|
4716 |
+
border-top-right-radius: 3px;
|
4717 |
+
}
|
4718 |
+
.egg-container .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
|
4719 |
+
.egg-container .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
|
4720 |
+
.egg-container .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
|
4721 |
+
.egg-container .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
|
4722 |
+
.egg-container .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
|
4723 |
+
.egg-container .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
|
4724 |
+
.egg-container .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
|
4725 |
+
.egg-container .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
|
4726 |
+
border-top-left-radius: 3px;
|
4727 |
+
}
|
4728 |
+
.egg-container .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
|
4729 |
+
.egg-container .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
|
4730 |
+
.egg-container .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
|
4731 |
+
.egg-container .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
|
4732 |
+
.egg-container .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
|
4733 |
+
.egg-container .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
|
4734 |
+
.egg-container .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
|
4735 |
+
.egg-container .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
|
4736 |
+
border-top-right-radius: 3px;
|
4737 |
+
}
|
4738 |
+
.egg-container .panel > .table:last-child,
|
4739 |
+
.egg-container .panel > .table-responsive:last-child > .table:last-child {
|
4740 |
+
border-bottom-right-radius: 3px;
|
4741 |
+
border-bottom-left-radius: 3px;
|
4742 |
+
}
|
4743 |
+
.egg-container .panel > .table:last-child > tbody:last-child > tr:last-child,
|
4744 |
+
.egg-container .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
|
4745 |
+
.egg-container .panel > .table:last-child > tfoot:last-child > tr:last-child,
|
4746 |
+
.egg-container .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
|
4747 |
+
border-bottom-right-radius: 3px;
|
4748 |
+
border-bottom-left-radius: 3px;
|
4749 |
+
}
|
4750 |
+
.egg-container .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
|
4751 |
+
.egg-container .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
|
4752 |
+
.egg-container .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
|
4753 |
+
.egg-container .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
|
4754 |
+
.egg-container .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
|
4755 |
+
.egg-container .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
|
4756 |
+
.egg-container .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
|
4757 |
+
.egg-container .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
|
4758 |
+
border-bottom-left-radius: 3px;
|
4759 |
+
}
|
4760 |
+
.egg-container .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
|
4761 |
+
.egg-container .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
|
4762 |
+
.egg-container .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
|
4763 |
+
.egg-container .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
|
4764 |
+
.egg-container .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
|
4765 |
+
.egg-container .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
|
4766 |
+
.egg-container .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
|
4767 |
+
.egg-container .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
|
4768 |
+
border-bottom-right-radius: 3px;
|
4769 |
+
}
|
4770 |
+
.egg-container .panel > .panel-body + .table,
|
4771 |
+
.egg-container .panel > .panel-body + .table-responsive,
|
4772 |
+
.egg-container .panel > .table + .panel-body,
|
4773 |
+
.egg-container .panel > .table-responsive + .panel-body {
|
4774 |
+
border-top: 1px solid #ddd;
|
4775 |
+
}
|
4776 |
+
.egg-container .panel > .table > tbody:first-child > tr:first-child th,
|
4777 |
+
.egg-container .panel > .table > tbody:first-child > tr:first-child td {
|
4778 |
+
border-top: 0;
|
4779 |
+
}
|
4780 |
+
.egg-container .panel > .table-bordered,
|
4781 |
+
.egg-container .panel > .table-responsive > .table-bordered {
|
4782 |
+
border: 0;
|
4783 |
+
}
|
4784 |
+
.egg-container .panel > .table-bordered > thead > tr > th:first-child,
|
4785 |
+
.egg-container .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
|
4786 |
+
.egg-container .panel > .table-bordered > tbody > tr > th:first-child,
|
4787 |
+
.egg-container .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
|
4788 |
+
.egg-container .panel > .table-bordered > tfoot > tr > th:first-child,
|
4789 |
+
.egg-container .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
|
4790 |
+
.egg-container .panel > .table-bordered > thead > tr > td:first-child,
|
4791 |
+
.egg-container .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
|
4792 |
+
.egg-container .panel > .table-bordered > tbody > tr > td:first-child,
|
4793 |
+
.egg-container .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
|
4794 |
+
.egg-container .panel > .table-bordered > tfoot > tr > td:first-child,
|
4795 |
+
.egg-container .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
|
4796 |
+
border-left: 0;
|
4797 |
+
}
|
4798 |
+
.egg-container .panel > .table-bordered > thead > tr > th:last-child,
|
4799 |
+
.egg-container .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
|
4800 |
+
.egg-container .panel > .table-bordered > tbody > tr > th:last-child,
|
4801 |
+
.egg-container .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
|
4802 |
+
.egg-container .panel > .table-bordered > tfoot > tr > th:last-child,
|
4803 |
+
.egg-container .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
|
4804 |
+
.egg-container .panel > .table-bordered > thead > tr > td:last-child,
|
4805 |
+
.egg-container .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
|
4806 |
+
.egg-container .panel > .table-bordered > tbody > tr > td:last-child,
|
4807 |
+
.egg-container .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
|
4808 |
+
.egg-container .panel > .table-bordered > tfoot > tr > td:last-child,
|
4809 |
+
.egg-container .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
|
4810 |
+
border-right: 0;
|
4811 |
+
}
|
4812 |
+
.egg-container .panel > .table-bordered > thead > tr:first-child > td,
|
4813 |
+
.egg-container .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
|
4814 |
+
.egg-container .panel > .table-bordered > tbody > tr:first-child > td,
|
4815 |
+
.egg-container .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
|
4816 |
+
.egg-container .panel > .table-bordered > thead > tr:first-child > th,
|
4817 |
+
.egg-container .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
|
4818 |
+
.egg-container .panel > .table-bordered > tbody > tr:first-child > th,
|
4819 |
+
.egg-container .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
|
4820 |
+
border-bottom: 0;
|
4821 |
+
}
|
4822 |
+
.egg-container .panel > .table-bordered > tbody > tr:last-child > td,
|
4823 |
+
.egg-container .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
|
4824 |
+
.egg-container .panel > .table-bordered > tfoot > tr:last-child > td,
|
4825 |
+
.egg-container .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
|
4826 |
+
.egg-container .panel > .table-bordered > tbody > tr:last-child > th,
|
4827 |
+
.egg-container .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
|
4828 |
+
.egg-container .panel > .table-bordered > tfoot > tr:last-child > th,
|
4829 |
+
.egg-container .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
|
4830 |
+
border-bottom: 0;
|
4831 |
+
}
|
4832 |
+
.egg-container .panel > .table-responsive {
|
4833 |
+
margin-bottom: 0;
|
4834 |
+
border: 0;
|
4835 |
+
}
|
4836 |
+
.egg-container .panel-group {
|
4837 |
+
margin-bottom: 20px;
|
4838 |
+
}
|
4839 |
+
.egg-container .panel-group .panel {
|
4840 |
+
margin-bottom: 0;
|
4841 |
+
border-radius: 4px;
|
4842 |
+
}
|
4843 |
+
.egg-container .panel-group .panel + .panel {
|
4844 |
+
margin-top: 5px;
|
4845 |
+
}
|
4846 |
+
.egg-container .panel-group .panel-heading {
|
4847 |
+
border-bottom: 0;
|
4848 |
+
}
|
4849 |
+
.egg-container .panel-group .panel-heading + .panel-collapse > .panel-body,
|
4850 |
+
.egg-container .panel-group .panel-heading + .panel-collapse > .list-group {
|
4851 |
+
border-top: 1px solid #ddd;
|
4852 |
+
}
|
4853 |
+
.egg-container .panel-group .panel-footer {
|
4854 |
+
border-top: 0;
|
4855 |
+
}
|
4856 |
+
.egg-container .panel-group .panel-footer + .panel-collapse .panel-body {
|
4857 |
+
border-bottom: 1px solid #ddd;
|
4858 |
+
}
|
4859 |
+
.egg-container .panel-default {
|
4860 |
+
border-color: #ddd;
|
4861 |
+
}
|
4862 |
+
.egg-container .panel-default > .panel-heading {
|
4863 |
+
color: #333;
|
4864 |
+
background-color: #f5f5f5;
|
4865 |
+
border-color: #ddd;
|
4866 |
+
}
|
4867 |
+
.egg-container .panel-default > .panel-heading + .panel-collapse > .panel-body {
|
4868 |
+
border-top-color: #ddd;
|
4869 |
+
}
|
4870 |
+
.egg-container .panel-default > .panel-heading .badge {
|
4871 |
+
color: #f5f5f5;
|
4872 |
+
background-color: #333;
|
4873 |
+
}
|
4874 |
+
.egg-container .panel-default > .panel-footer + .panel-collapse > .panel-body {
|
4875 |
+
border-bottom-color: #ddd;
|
4876 |
+
}
|
4877 |
+
.egg-container .panel-primary {
|
4878 |
+
border-color: #337ab7;
|
4879 |
+
}
|
4880 |
+
.egg-container .panel-primary > .panel-heading {
|
4881 |
+
color: #fff;
|
4882 |
+
background-color: #337ab7;
|
4883 |
+
border-color: #337ab7;
|
4884 |
+
}
|
4885 |
+
.egg-container .panel-primary > .panel-heading + .panel-collapse > .panel-body {
|
4886 |
+
border-top-color: #337ab7;
|
4887 |
+
}
|
4888 |
+
.egg-container .panel-primary > .panel-heading .badge {
|
4889 |
+
color: #337ab7;
|
4890 |
+
background-color: #fff;
|
4891 |
+
}
|
4892 |
+
.egg-container .panel-primary > .panel-footer + .panel-collapse > .panel-body {
|
4893 |
+
border-bottom-color: #337ab7;
|
4894 |
+
}
|
4895 |
+
.egg-container .panel-success {
|
4896 |
+
border-color: #d6e9c6;
|
4897 |
+
}
|
4898 |
+
.egg-container .panel-success > .panel-heading {
|
4899 |
+
color: #3c763d;
|
4900 |
+
background-color: #dff0d8;
|
4901 |
+
border-color: #d6e9c6;
|
4902 |
+
}
|
4903 |
+
.egg-container .panel-success > .panel-heading + .panel-collapse > .panel-body {
|
4904 |
+
border-top-color: #d6e9c6;
|
4905 |
+
}
|
4906 |
+
.egg-container .panel-success > .panel-heading .badge {
|
4907 |
+
color: #dff0d8;
|
4908 |
+
background-color: #3c763d;
|
4909 |
+
}
|
4910 |
+
.egg-container .panel-success > .panel-footer + .panel-collapse > .panel-body {
|
4911 |
+
border-bottom-color: #d6e9c6;
|
4912 |
+
}
|
4913 |
+
.egg-container .panel-info {
|
4914 |
+
border-color: #bce8f1;
|
4915 |
+
}
|
4916 |
+
.egg-container .panel-info > .panel-heading {
|
4917 |
+
color: #31708f;
|
4918 |
+
background-color: #d9edf7;
|
4919 |
+
border-color: #bce8f1;
|
4920 |
+
}
|
4921 |
+
.egg-container .panel-info > .panel-heading + .panel-collapse > .panel-body {
|
4922 |
+
border-top-color: #bce8f1;
|
4923 |
+
}
|
4924 |
+
.egg-container .panel-info > .panel-heading .badge {
|
4925 |
+
color: #d9edf7;
|
4926 |
+
background-color: #31708f;
|
4927 |
+
}
|
4928 |
+
.egg-container .panel-info > .panel-footer + .panel-collapse > .panel-body {
|
4929 |
+
border-bottom-color: #bce8f1;
|
4930 |
+
}
|
4931 |
+
.egg-container .panel-warning {
|
4932 |
+
border-color: #faebcc;
|
4933 |
+
}
|
4934 |
+
.egg-container .panel-warning > .panel-heading {
|
4935 |
+
color: #8a6d3b;
|
4936 |
+
background-color: #fcf8e3;
|
4937 |
+
border-color: #faebcc;
|
4938 |
+
}
|
4939 |
+
.egg-container .panel-warning > .panel-heading + .panel-collapse > .panel-body {
|
4940 |
+
border-top-color: #faebcc;
|
4941 |
+
}
|
4942 |
+
.egg-container .panel-warning > .panel-heading .badge {
|
4943 |
+
color: #fcf8e3;
|
4944 |
+
background-color: #8a6d3b;
|
4945 |
+
}
|
4946 |
+
.egg-container .panel-warning > .panel-footer + .panel-collapse > .panel-body {
|
4947 |
+
border-bottom-color: #faebcc;
|
4948 |
+
}
|
4949 |
+
.egg-container .panel-danger {
|
4950 |
+
border-color: #ebccd1;
|
4951 |
+
}
|
4952 |
+
.egg-container .panel-danger > .panel-heading {
|
4953 |
+
color: #a94442;
|
4954 |
+
background-color: #f2dede;
|
4955 |
+
border-color: #ebccd1;
|
4956 |
+
}
|
4957 |
+
.egg-container .panel-danger > .panel-heading + .panel-collapse > .panel-body {
|
4958 |
+
border-top-color: #ebccd1;
|
4959 |
+
}
|
4960 |
+
.egg-container .panel-danger > .panel-heading .badge {
|
4961 |
+
color: #f2dede;
|
4962 |
+
background-color: #a94442;
|
4963 |
+
}
|
4964 |
+
.egg-container .panel-danger > .panel-footer + .panel-collapse > .panel-body {
|
4965 |
+
border-bottom-color: #ebccd1;
|
4966 |
+
}
|
4967 |
+
.egg-container .embed-responsive {
|
4968 |
+
position: relative;
|
4969 |
+
display: block;
|
4970 |
+
height: 0;
|
4971 |
+
padding: 0;
|
4972 |
+
overflow: hidden;
|
4973 |
+
}
|
4974 |
+
.egg-container .embed-responsive .embed-responsive-item,
|
4975 |
+
.egg-container .embed-responsive iframe,
|
4976 |
+
.egg-container .embed-responsive embed,
|
4977 |
+
.egg-container .embed-responsive object,
|
4978 |
+
.egg-container .embed-responsive video {
|
4979 |
+
position: absolute;
|
4980 |
+
top: 0;
|
4981 |
+
bottom: 0;
|
4982 |
+
left: 0;
|
4983 |
+
width: 100%;
|
4984 |
+
height: 100%;
|
4985 |
+
border: 0;
|
4986 |
+
}
|
4987 |
+
.egg-container .embed-responsive-16by9 {
|
4988 |
+
padding-bottom: 56.25%;
|
4989 |
+
}
|
4990 |
+
.egg-container .embed-responsive-4by3 {
|
4991 |
+
padding-bottom: 75%;
|
4992 |
+
}
|
4993 |
+
.egg-container .well {
|
4994 |
+
min-height: 20px;
|
4995 |
+
padding: 19px;
|
4996 |
+
margin-bottom: 20px;
|
4997 |
+
background-color: #f5f5f5;
|
4998 |
+
border: 1px solid #e3e3e3;
|
4999 |
+
border-radius: 4px;
|
5000 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
|
5001 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
|
5002 |
+
}
|
5003 |
+
.egg-container .well blockquote {
|
5004 |
+
border-color: #ddd;
|
5005 |
+
border-color: rgba(0, 0, 0, .15);
|
5006 |
+
}
|
5007 |
+
.egg-container .well-lg {
|
5008 |
+
padding: 24px;
|
5009 |
+
border-radius: 6px;
|
5010 |
+
}
|
5011 |
+
.egg-container .well-sm {
|
5012 |
+
padding: 9px;
|
5013 |
+
border-radius: 3px;
|
5014 |
+
}
|
5015 |
+
.egg-container .close {
|
5016 |
+
float: right;
|
5017 |
+
font-size: 21px;
|
5018 |
+
font-weight: bold;
|
5019 |
+
line-height: 1;
|
5020 |
+
color: #000;
|
5021 |
+
text-shadow: 0 1px 0 #fff;
|
5022 |
+
filter: alpha(opacity=20);
|
5023 |
+
opacity: .2;
|
5024 |
+
}
|
5025 |
+
.egg-container .close:hover,
|
5026 |
+
.egg-container .close:focus {
|
5027 |
+
color: #000;
|
5028 |
+
text-decoration: none;
|
5029 |
+
cursor: pointer;
|
5030 |
+
filter: alpha(opacity=50);
|
5031 |
+
opacity: .5;
|
5032 |
+
}
|
5033 |
+
button.egg-container .close {
|
5034 |
+
-webkit-appearance: none;
|
5035 |
+
padding: 0;
|
5036 |
+
cursor: pointer;
|
5037 |
+
background: transparent;
|
5038 |
+
border: 0;
|
5039 |
+
}
|
5040 |
+
.egg-container .clearfix:before,
|
5041 |
+
.egg-container .clearfix:after,
|
5042 |
+
.egg-container .dl-horizontal dd:before,
|
5043 |
+
.egg-container .dl-horizontal dd:after,
|
5044 |
+
.egg-container .container:before,
|
5045 |
+
.egg-container .container:after,
|
5046 |
+
.egg-container .container-fluid:before,
|
5047 |
+
.egg-container .container-fluid:after,
|
5048 |
+
.egg-container .row:before,
|
5049 |
+
.egg-container .row:after,
|
5050 |
+
.egg-container .form-horizontal .form-group:before,
|
5051 |
+
.egg-container .form-horizontal .form-group:after,
|
5052 |
+
.egg-container .btn-toolbar:before,
|
5053 |
+
.egg-container .btn-toolbar:after,
|
5054 |
+
.egg-container .btn-group-vertical > .btn-group:before,
|
5055 |
+
.egg-container .btn-group-vertical > .btn-group:after,
|
5056 |
+
.egg-container .nav:before,
|
5057 |
+
.egg-container .nav:after,
|
5058 |
+
.egg-container .panel-body:before,
|
5059 |
+
.egg-container .panel-body:after {
|
5060 |
+
display: table;
|
5061 |
+
content: " ";
|
5062 |
+
}
|
5063 |
+
.egg-container .clearfix:after,
|
5064 |
+
.egg-container .dl-horizontal dd:after,
|
5065 |
+
.egg-container .container:after,
|
5066 |
+
.egg-container .container-fluid:after,
|
5067 |
+
.egg-container .row:after,
|
5068 |
+
.egg-container .form-horizontal .form-group:after,
|
5069 |
+
.egg-container .btn-toolbar:after,
|
5070 |
+
.egg-container .btn-group-vertical > .btn-group:after,
|
5071 |
+
.egg-container .nav:after,
|
5072 |
+
.egg-container .panel-body:after {
|
5073 |
+
clear: both;
|
5074 |
+
}
|
5075 |
+
.egg-container .center-block {
|
5076 |
+
display: block;
|
5077 |
+
margin-right: auto;
|
5078 |
+
margin-left: auto;
|
5079 |
+
}
|
5080 |
+
.egg-container .pull-right {
|
5081 |
+
float: right !important;
|
5082 |
+
}
|
5083 |
+
.egg-container .pull-left {
|
5084 |
+
float: left !important;
|
5085 |
+
}
|
5086 |
+
.egg-container .hide {
|
5087 |
+
display: none !important;
|
5088 |
+
}
|
5089 |
+
.egg-container .show {
|
5090 |
+
display: block !important;
|
5091 |
+
}
|
5092 |
+
.egg-container .invisible {
|
5093 |
+
visibility: hidden;
|
5094 |
+
}
|
5095 |
+
.egg-container .text-hide {
|
5096 |
+
font: 0/0 a;
|
5097 |
+
color: transparent;
|
5098 |
+
text-shadow: none;
|
5099 |
+
background-color: transparent;
|
5100 |
+
border: 0;
|
5101 |
+
}
|
5102 |
+
.egg-container .hidden {
|
5103 |
+
display: none !important;
|
5104 |
+
}
|
5105 |
+
.egg-container .affix {
|
5106 |
+
position: fixed;
|
5107 |
+
}
|
5108 |
+
@-ms-viewport {
|
5109 |
+
width: device-width;
|
5110 |
+
}
|
5111 |
+
.egg-container .visible-xs,
|
5112 |
+
.egg-container .visible-sm,
|
5113 |
+
.egg-container .visible-md,
|
5114 |
+
.egg-container .visible-lg {
|
5115 |
+
display: none !important;
|
5116 |
+
}
|
5117 |
+
.egg-container .visible-xs-block,
|
5118 |
+
.egg-container .visible-xs-inline,
|
5119 |
+
.egg-container .visible-xs-inline-block,
|
5120 |
+
.egg-container .visible-sm-block,
|
5121 |
+
.egg-container .visible-sm-inline,
|
5122 |
+
.egg-container .visible-sm-inline-block,
|
5123 |
+
.egg-container .visible-md-block,
|
5124 |
+
.egg-container .visible-md-inline,
|
5125 |
+
.egg-container .visible-md-inline-block,
|
5126 |
+
.egg-container .visible-lg-block,
|
5127 |
+
.egg-container .visible-lg-inline,
|
5128 |
+
.egg-container .visible-lg-inline-block {
|
5129 |
+
display: none !important;
|
5130 |
+
}
|
5131 |
+
@media (max-width: 767px) {
|
5132 |
+
.egg-container .visible-xs {
|
5133 |
+
display: block !important;
|
5134 |
+
}
|
5135 |
+
table.egg-container .visible-xs {
|
5136 |
+
display: table;
|
5137 |
+
}
|
5138 |
+
tr.egg-container .visible-xs {
|
5139 |
+
display: table-row !important;
|
5140 |
+
}
|
5141 |
+
th.egg-container .visible-xs,
|
5142 |
+
td.egg-container .visible-xs {
|
5143 |
+
display: table-cell !important;
|
5144 |
+
}
|
5145 |
+
}
|
5146 |
+
@media (max-width: 767px) {
|
5147 |
+
.egg-container .visible-xs-block {
|
5148 |
+
display: block !important;
|
5149 |
+
}
|
5150 |
+
}
|
5151 |
+
@media (max-width: 767px) {
|
5152 |
+
.egg-container .visible-xs-inline {
|
5153 |
+
display: inline !important;
|
5154 |
+
}
|
5155 |
+
}
|
5156 |
+
@media (max-width: 767px) {
|
5157 |
+
.egg-container .visible-xs-inline-block {
|
5158 |
+
display: inline-block !important;
|
5159 |
+
}
|
5160 |
+
}
|
5161 |
+
@media (min-width: 768px) and (max-width: 991px) {
|
5162 |
+
.egg-container .visible-sm {
|
5163 |
+
display: block !important;
|
5164 |
+
}
|
5165 |
+
table.egg-container .visible-sm {
|
5166 |
+
display: table;
|
5167 |
+
}
|
5168 |
+
tr.egg-container .visible-sm {
|
5169 |
+
display: table-row !important;
|
5170 |
+
}
|
5171 |
+
th.egg-container .visible-sm,
|
5172 |
+
td.egg-container .visible-sm {
|
5173 |
+
display: table-cell !important;
|
5174 |
+
}
|
5175 |
+
}
|
5176 |
+
@media (min-width: 768px) and (max-width: 991px) {
|
5177 |
+
.egg-container .visible-sm-block {
|
5178 |
+
display: block !important;
|
5179 |
+
}
|
5180 |
+
}
|
5181 |
+
@media (min-width: 768px) and (max-width: 991px) {
|
5182 |
+
.egg-container .visible-sm-inline {
|
5183 |
+
display: inline !important;
|
5184 |
+
}
|
5185 |
+
}
|
5186 |
+
@media (min-width: 768px) and (max-width: 991px) {
|
5187 |
+
.egg-container .visible-sm-inline-block {
|
5188 |
+
display: inline-block !important;
|
5189 |
+
}
|
5190 |
+
}
|
5191 |
+
@media (min-width: 992px) and (max-width: 1199px) {
|
5192 |
+
.egg-container .visible-md {
|
5193 |
+
display: block !important;
|
5194 |
+
}
|
5195 |
+
table.egg-container .visible-md {
|
5196 |
+
display: table;
|
5197 |
+
}
|
5198 |
+
tr.egg-container .visible-md {
|
5199 |
+
display: table-row !important;
|
5200 |
+
}
|
5201 |
+
th.egg-container .visible-md,
|
5202 |
+
td.egg-container .visible-md {
|
5203 |
+
display: table-cell !important;
|
5204 |
+
}
|
5205 |
+
}
|
5206 |
+
@media (min-width: 992px) and (max-width: 1199px) {
|
5207 |
+
.egg-container .visible-md-block {
|
5208 |
+
display: block !important;
|
5209 |
+
}
|
5210 |
+
}
|
5211 |
+
@media (min-width: 992px) and (max-width: 1199px) {
|
5212 |
+
.egg-container .visible-md-inline {
|
5213 |
+
display: inline !important;
|
5214 |
+
}
|
5215 |
+
}
|
5216 |
+
@media (min-width: 992px) and (max-width: 1199px) {
|
5217 |
+
.egg-container .visible-md-inline-block {
|
5218 |
+
display: inline-block !important;
|
5219 |
+
}
|
5220 |
+
}
|
5221 |
+
@media (min-width: 1200px) {
|
5222 |
+
.egg-container .visible-lg {
|
5223 |
+
display: block !important;
|
5224 |
+
}
|
5225 |
+
table.egg-container .visible-lg {
|
5226 |
+
display: table;
|
5227 |
+
}
|
5228 |
+
tr.egg-container .visible-lg {
|
5229 |
+
display: table-row !important;
|
5230 |
+
}
|
5231 |
+
th.egg-container .visible-lg,
|
5232 |
+
td.egg-container .visible-lg {
|
5233 |
+
display: table-cell !important;
|
5234 |
+
}
|
5235 |
+
}
|
5236 |
+
@media (min-width: 1200px) {
|
5237 |
+
.egg-container .visible-lg-block {
|
5238 |
+
display: block !important;
|
5239 |
+
}
|
5240 |
+
}
|
5241 |
+
@media (min-width: 1200px) {
|
5242 |
+
.egg-container .visible-lg-inline {
|
5243 |
+
display: inline !important;
|
5244 |
+
}
|
5245 |
+
}
|
5246 |
+
@media (min-width: 1200px) {
|
5247 |
+
.egg-container .visible-lg-inline-block {
|
5248 |
+
display: inline-block !important;
|
5249 |
+
}
|
5250 |
+
}
|
5251 |
+
@media (max-width: 767px) {
|
5252 |
+
.egg-container .hidden-xs {
|
5253 |
+
display: none !important;
|
5254 |
+
}
|
5255 |
+
}
|
5256 |
+
@media (min-width: 768px) and (max-width: 991px) {
|
5257 |
+
.egg-container .hidden-sm {
|
5258 |
+
display: none !important;
|
5259 |
+
}
|
5260 |
+
}
|
5261 |
+
@media (min-width: 992px) and (max-width: 1199px) {
|
5262 |
+
.egg-container .hidden-md {
|
5263 |
+
display: none !important;
|
5264 |
+
}
|
5265 |
+
}
|
5266 |
+
@media (min-width: 1200px) {
|
5267 |
+
.egg-container .hidden-lg {
|
5268 |
+
display: none !important;
|
5269 |
+
}
|
5270 |
+
}
|
5271 |
+
.egg-container .visible-print {
|
5272 |
+
display: none !important;
|
5273 |
+
}
|
5274 |
+
@media print {
|
5275 |
+
.egg-container .visible-print {
|
5276 |
+
display: block !important;
|
5277 |
+
}
|
5278 |
+
table.egg-container .visible-print {
|
5279 |
+
display: table;
|
5280 |
+
}
|
5281 |
+
tr.egg-container .visible-print {
|
5282 |
+
display: table-row !important;
|
5283 |
+
}
|
5284 |
+
th.egg-container .visible-print,
|
5285 |
+
td.egg-container .visible-print {
|
5286 |
+
display: table-cell !important;
|
5287 |
+
}
|
5288 |
+
}
|
5289 |
+
.egg-container .visible-print-block {
|
5290 |
+
display: none !important;
|
5291 |
+
}
|
5292 |
+
@media print {
|
5293 |
+
.egg-container .visible-print-block {
|
5294 |
+
display: block !important;
|
5295 |
+
}
|
5296 |
+
}
|
5297 |
+
.egg-container .visible-print-inline {
|
5298 |
+
display: none !important;
|
5299 |
+
}
|
5300 |
+
@media print {
|
5301 |
+
.egg-container .visible-print-inline {
|
5302 |
+
display: inline !important;
|
5303 |
+
}
|
5304 |
+
}
|
5305 |
+
.egg-container .visible-print-inline-block {
|
5306 |
+
display: none !important;
|
5307 |
+
}
|
5308 |
+
@media print {
|
5309 |
+
.egg-container .visible-print-inline-block {
|
5310 |
+
display: inline-block !important;
|
5311 |
+
}
|
5312 |
+
}
|
5313 |
+
@media print {
|
5314 |
+
.egg-container .hidden-print {
|
5315 |
+
display: none !important;
|
5316 |
+
}
|
5317 |
+
}
|
5318 |
+
/*# sourceMappingURL=bootstrap.css.map */
|
5319 |
+
.egg-container .products .col-md-5{ text-align: center;}
|
res/bootstrap/js/bootstrap.js
ADDED
@@ -0,0 +1,2317 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Bootstrap v3.3.4 (http://getbootstrap.com)
|
3 |
+
* Copyright 2011-2015 Twitter, Inc.
|
4 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5 |
+
*/
|
6 |
+
|
7 |
+
if (typeof jQuery === 'undefined') {
|
8 |
+
throw new Error('Bootstrap\'s JavaScript requires jQuery')
|
9 |
+
}
|
10 |
+
|
11 |
+
+function ($) {
|
12 |
+
'use strict';
|
13 |
+
var version = $.fn.jquery.split(' ')[0].split('.')
|
14 |
+
if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {
|
15 |
+
throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher')
|
16 |
+
}
|
17 |
+
}(jQuery);
|
18 |
+
|
19 |
+
/* ========================================================================
|
20 |
+
* Bootstrap: transition.js v3.3.4
|
21 |
+
* http://getbootstrap.com/javascript/#transitions
|
22 |
+
* ========================================================================
|
23 |
+
* Copyright 2011-2015 Twitter, Inc.
|
24 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
25 |
+
* ======================================================================== */
|
26 |
+
|
27 |
+
|
28 |
+
+function ($) {
|
29 |
+
'use strict';
|
30 |
+
|
31 |
+
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
|
32 |
+
// ============================================================
|
33 |
+
|
34 |
+
function transitionEnd() {
|
35 |
+
var el = document.createElement('bootstrap')
|
36 |
+
|
37 |
+
var transEndEventNames = {
|
38 |
+
WebkitTransition : 'webkitTransitionEnd',
|
39 |
+
MozTransition : 'transitionend',
|
40 |
+
OTransition : 'oTransitionEnd otransitionend',
|
41 |
+
transition : 'transitionend'
|
42 |
+
}
|
43 |
+
|
44 |
+
for (var name in transEndEventNames) {
|
45 |
+
if (el.style[name] !== undefined) {
|
46 |
+
return { end: transEndEventNames[name] }
|
47 |
+
}
|
48 |
+
}
|
49 |
+
|
50 |
+
return false // explicit for ie8 ( ._.)
|
51 |
+
}
|
52 |
+
|
53 |
+
// http://blog.alexmaccaw.com/css-transitions
|
54 |
+
$.fn.emulateTransitionEnd = function (duration) {
|
55 |
+
var called = false
|
56 |
+
var $el = this
|
57 |
+
$(this).one('bsTransitionEnd', function () { called = true })
|
58 |
+
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
|
59 |
+
setTimeout(callback, duration)
|
60 |
+
return this
|
61 |
+
}
|
62 |
+
|
63 |
+
$(function () {
|
64 |
+
$.support.transition = transitionEnd()
|
65 |
+
|
66 |
+
if (!$.support.transition) return
|
67 |
+
|
68 |
+
$.event.special.bsTransitionEnd = {
|
69 |
+
bindType: $.support.transition.end,
|
70 |
+
delegateType: $.support.transition.end,
|
71 |
+
handle: function (e) {
|
72 |
+
if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
|
73 |
+
}
|
74 |
+
}
|
75 |
+
})
|
76 |
+
|
77 |
+
}(jQuery);
|
78 |
+
|
79 |
+
/* ========================================================================
|
80 |
+
* Bootstrap: alert.js v3.3.4
|
81 |
+
* http://getbootstrap.com/javascript/#alerts
|
82 |
+
* ========================================================================
|
83 |
+
* Copyright 2011-2015 Twitter, Inc.
|
84 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
85 |
+
* ======================================================================== */
|
86 |
+
|
87 |
+
|
88 |
+
+function ($) {
|
89 |
+
'use strict';
|
90 |
+
|
91 |
+
// ALERT CLASS DEFINITION
|
92 |
+
// ======================
|
93 |
+
|
94 |
+
var dismiss = '[data-dismiss="alert"]'
|
95 |
+
var Alert = function (el) {
|
96 |
+
$(el).on('click', dismiss, this.close)
|
97 |
+
}
|
98 |
+
|
99 |
+
Alert.VERSION = '3.3.4'
|
100 |
+
|
101 |
+
Alert.TRANSITION_DURATION = 150
|
102 |
+
|
103 |
+
Alert.prototype.close = function (e) {
|
104 |
+
var $this = $(this)
|
105 |
+
var selector = $this.attr('data-target')
|
106 |
+
|
107 |
+
if (!selector) {
|
108 |
+
selector = $this.attr('href')
|
109 |
+
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
|
110 |
+
}
|
111 |
+
|
112 |
+
var $parent = $(selector)
|
113 |
+
|
114 |
+
if (e) e.preventDefault()
|
115 |
+
|
116 |
+
if (!$parent.length) {
|
117 |
+
$parent = $this.closest('.alert')
|
118 |
+
}
|
119 |
+
|
120 |
+
$parent.trigger(e = $.Event('close.bs.alert'))
|
121 |
+
|
122 |
+
if (e.isDefaultPrevented()) return
|
123 |
+
|
124 |
+
$parent.removeClass('in')
|
125 |
+
|
126 |
+
function removeElement() {
|
127 |
+
// detach from parent, fire event then clean up data
|
128 |
+
$parent.detach().trigger('closed.bs.alert').remove()
|
129 |
+
}
|
130 |
+
|
131 |
+
$.support.transition && $parent.hasClass('fade') ?
|
132 |
+
$parent
|
133 |
+
.one('bsTransitionEnd', removeElement)
|
134 |
+
.emulateTransitionEnd(Alert.TRANSITION_DURATION) :
|
135 |
+
removeElement()
|
136 |
+
}
|
137 |
+
|
138 |
+
|
139 |
+
// ALERT PLUGIN DEFINITION
|
140 |
+
// =======================
|
141 |
+
|
142 |
+
function Plugin(option) {
|
143 |
+
return this.each(function () {
|
144 |
+
var $this = $(this)
|
145 |
+
var data = $this.data('bs.alert')
|
146 |
+
|
147 |
+
if (!data) $this.data('bs.alert', (data = new Alert(this)))
|
148 |
+
if (typeof option == 'string') data[option].call($this)
|
149 |
+
})
|
150 |
+
}
|
151 |
+
|
152 |
+
var old = $.fn.alert
|
153 |
+
|
154 |
+
$.fn.alert = Plugin
|
155 |
+
$.fn.alert.Constructor = Alert
|
156 |
+
|
157 |
+
|
158 |
+
// ALERT NO CONFLICT
|
159 |
+
// =================
|
160 |
+
|
161 |
+
$.fn.alert.noConflict = function () {
|
162 |
+
$.fn.alert = old
|
163 |
+
return this
|
164 |
+
}
|
165 |
+
|
166 |
+
|
167 |
+
// ALERT DATA-API
|
168 |
+
// ==============
|
169 |
+
|
170 |
+
$(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
|
171 |
+
|
172 |
+
}(jQuery);
|
173 |
+
|
174 |
+
/* ========================================================================
|
175 |
+
* Bootstrap: button.js v3.3.4
|
176 |
+
* http://getbootstrap.com/javascript/#buttons
|
177 |
+
* ========================================================================
|
178 |
+
* Copyright 2011-2015 Twitter, Inc.
|
179 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
180 |
+
* ======================================================================== */
|
181 |
+
|
182 |
+
|
183 |
+
+function ($) {
|
184 |
+
'use strict';
|
185 |
+
|
186 |
+
// BUTTON PUBLIC CLASS DEFINITION
|
187 |
+
// ==============================
|
188 |
+
|
189 |
+
var Button = function (element, options) {
|
190 |
+
this.$element = $(element)
|
191 |
+
this.options = $.extend({}, Button.DEFAULTS, options)
|
192 |
+
this.isLoading = false
|
193 |
+
}
|
194 |
+
|
195 |
+
Button.VERSION = '3.3.4'
|
196 |
+
|
197 |
+
Button.DEFAULTS = {
|
198 |
+
loadingText: 'loading...'
|
199 |
+
}
|
200 |
+
|
201 |
+
Button.prototype.setState = function (state) {
|
202 |
+
var d = 'disabled'
|
203 |
+
var $el = this.$element
|
204 |
+
var val = $el.is('input') ? 'val' : 'html'
|
205 |
+
var data = $el.data()
|
206 |
+
|
207 |
+
state = state + 'Text'
|
208 |
+
|
209 |
+
if (data.resetText == null) $el.data('resetText', $el[val]())
|
210 |
+
|
211 |
+
// push to event loop to allow forms to submit
|
212 |
+
setTimeout($.proxy(function () {
|
213 |
+
$el[val](data[state] == null ? this.options[state] : data[state])
|
214 |
+
|
215 |
+
if (state == 'loadingText') {
|
216 |
+
this.isLoading = true
|
217 |
+
$el.addClass(d).attr(d, d)
|
218 |
+
} else if (this.isLoading) {
|
219 |
+
this.isLoading = false
|
220 |
+
$el.removeClass(d).removeAttr(d)
|
221 |
+
}
|
222 |
+
}, this), 0)
|
223 |
+
}
|
224 |
+
|
225 |
+
Button.prototype.toggle = function () {
|
226 |
+
var changed = true
|
227 |
+
var $parent = this.$element.closest('[data-toggle="buttons"]')
|
228 |
+
|
229 |
+
if ($parent.length) {
|
230 |
+
var $input = this.$element.find('input')
|
231 |
+
if ($input.prop('type') == 'radio') {
|
232 |
+
if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
|
233 |
+
else $parent.find('.active').removeClass('active')
|
234 |
+
}
|
235 |
+
if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
|
236 |
+
} else {
|
237 |
+
this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
|
238 |
+
}
|
239 |
+
|
240 |
+
if (changed) this.$element.toggleClass('active')
|
241 |
+
}
|
242 |
+
|
243 |
+
|
244 |
+
// BUTTON PLUGIN DEFINITION
|
245 |
+
// ========================
|
246 |
+
|
247 |
+
function Plugin(option) {
|
248 |
+
return this.each(function () {
|
249 |
+
var $this = $(this)
|
250 |
+
var data = $this.data('bs.button')
|
251 |
+
var options = typeof option == 'object' && option
|
252 |
+
|
253 |
+
if (!data) $this.data('bs.button', (data = new Button(this, options)))
|
254 |
+
|
255 |
+
if (option == 'toggle') data.toggle()
|
256 |
+
else if (option) data.setState(option)
|
257 |
+
})
|
258 |
+
}
|
259 |
+
|
260 |
+
var old = $.fn.button
|
261 |
+
|
262 |
+
$.fn.button = Plugin
|
263 |
+
$.fn.button.Constructor = Button
|
264 |
+
|
265 |
+
|
266 |
+
// BUTTON NO CONFLICT
|
267 |
+
// ==================
|
268 |
+
|
269 |
+
$.fn.button.noConflict = function () {
|
270 |
+
$.fn.button = old
|
271 |
+
return this
|
272 |
+
}
|
273 |
+
|
274 |
+
|
275 |
+
// BUTTON DATA-API
|
276 |
+
// ===============
|
277 |
+
|
278 |
+
$(document)
|
279 |
+
.on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
|
280 |
+
var $btn = $(e.target)
|
281 |
+
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
|
282 |
+
Plugin.call($btn, 'toggle')
|
283 |
+
e.preventDefault()
|
284 |
+
})
|
285 |
+
.on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
|
286 |
+
$(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
|
287 |
+
})
|
288 |
+
|
289 |
+
}(jQuery);
|
290 |
+
|
291 |
+
/* ========================================================================
|
292 |
+
* Bootstrap: carousel.js v3.3.4
|
293 |
+
* http://getbootstrap.com/javascript/#carousel
|
294 |
+
* ========================================================================
|
295 |
+
* Copyright 2011-2015 Twitter, Inc.
|
296 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
297 |
+
* ======================================================================== */
|
298 |
+
|
299 |
+
|
300 |
+
+function ($) {
|
301 |
+
'use strict';
|
302 |
+
|
303 |
+
// CAROUSEL CLASS DEFINITION
|
304 |
+
// =========================
|
305 |
+
|
306 |
+
var Carousel = function (element, options) {
|
307 |
+
this.$element = $(element)
|
308 |
+
this.$indicators = this.$element.find('.carousel-indicators')
|
309 |
+
this.options = options
|
310 |
+
this.paused = null
|
311 |
+
this.sliding = null
|
312 |
+
this.interval = null
|
313 |
+
this.$active = null
|
314 |
+
this.$items = null
|
315 |
+
|
316 |
+
this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
|
317 |
+
|
318 |
+
this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
|
319 |
+
.on('mouseenter.bs.carousel', $.proxy(this.pause, this))
|
320 |
+
.on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
|
321 |
+
}
|
322 |
+
|
323 |
+
Carousel.VERSION = '3.3.4'
|
324 |
+
|
325 |
+
Carousel.TRANSITION_DURATION = 600
|
326 |
+
|
327 |
+
Carousel.DEFAULTS = {
|
328 |
+
interval: 5000,
|
329 |
+
pause: 'hover',
|
330 |
+
wrap: true,
|
331 |
+
keyboard: true
|
332 |
+
}
|
333 |
+
|
334 |
+
Carousel.prototype.keydown = function (e) {
|
335 |
+
if (/input|textarea/i.test(e.target.tagName)) return
|
336 |
+
switch (e.which) {
|
337 |
+
case 37: this.prev(); break
|
338 |
+
case 39: this.next(); break
|
339 |
+
default: return
|
340 |
+
}
|
341 |
+
|
342 |
+
e.preventDefault()
|
343 |
+
}
|
344 |
+
|
345 |
+
Carousel.prototype.cycle = function (e) {
|
346 |
+
e || (this.paused = false)
|
347 |
+
|
348 |
+
this.interval && clearInterval(this.interval)
|
349 |
+
|
350 |
+
this.options.interval
|
351 |
+
&& !this.paused
|
352 |
+
&& (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
|
353 |
+
|
354 |
+
return this
|
355 |
+
}
|
356 |
+
|
357 |
+
Carousel.prototype.getItemIndex = function (item) {
|
358 |
+
this.$items = item.parent().children('.item')
|
359 |
+
return this.$items.index(item || this.$active)
|
360 |
+
}
|
361 |
+
|
362 |
+
Carousel.prototype.getItemForDirection = function (direction, active) {
|
363 |
+
var activeIndex = this.getItemIndex(active)
|
364 |
+
var willWrap = (direction == 'prev' && activeIndex === 0)
|
365 |
+
|| (direction == 'next' && activeIndex == (this.$items.length - 1))
|
366 |
+
if (willWrap && !this.options.wrap) return active
|
367 |
+
var delta = direction == 'prev' ? -1 : 1
|
368 |
+
var itemIndex = (activeIndex + delta) % this.$items.length
|
369 |
+
return this.$items.eq(itemIndex)
|
370 |
+
}
|
371 |
+
|
372 |
+
Carousel.prototype.to = function (pos) {
|
373 |
+
var that = this
|
374 |
+
var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
|
375 |
+
|
376 |
+
if (pos > (this.$items.length - 1) || pos < 0) return
|
377 |
+
|
378 |
+
if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
|
379 |
+
if (activeIndex == pos) return this.pause().cycle()
|
380 |
+
|
381 |
+
return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
|
382 |
+
}
|
383 |
+
|
384 |
+
Carousel.prototype.pause = function (e) {
|
385 |
+
e || (this.paused = true)
|
386 |
+
|
387 |
+
if (this.$element.find('.next, .prev').length && $.support.transition) {
|
388 |
+
this.$element.trigger($.support.transition.end)
|
389 |
+
this.cycle(true)
|
390 |
+
}
|
391 |
+
|
392 |
+
this.interval = clearInterval(this.interval)
|
393 |
+
|
394 |
+
return this
|
395 |
+
}
|
396 |
+
|
397 |
+
Carousel.prototype.next = function () {
|
398 |
+
if (this.sliding) return
|
399 |
+
return this.slide('next')
|
400 |
+
}
|
401 |
+
|
402 |
+
Carousel.prototype.prev = function () {
|
403 |
+
if (this.sliding) return
|
404 |
+
return this.slide('prev')
|
405 |
+
}
|
406 |
+
|
407 |
+
Carousel.prototype.slide = function (type, next) {
|
408 |
+
var $active = this.$element.find('.item.active')
|
409 |
+
var $next = next || this.getItemForDirection(type, $active)
|
410 |
+
var isCycling = this.interval
|
411 |
+
var direction = type == 'next' ? 'left' : 'right'
|
412 |
+
var that = this
|
413 |
+
|
414 |
+
if ($next.hasClass('active')) return (this.sliding = false)
|
415 |
+
|
416 |
+
var relatedTarget = $next[0]
|
417 |
+
var slideEvent = $.Event('slide.bs.carousel', {
|
418 |
+
relatedTarget: relatedTarget,
|
419 |
+
direction: direction
|
420 |
+
})
|
421 |
+
this.$element.trigger(slideEvent)
|
422 |
+
if (slideEvent.isDefaultPrevented()) return
|
423 |
+
|
424 |
+
this.sliding = true
|
425 |
+
|
426 |
+
isCycling && this.pause()
|
427 |
+
|
428 |
+
if (this.$indicators.length) {
|
429 |
+
this.$indicators.find('.active').removeClass('active')
|
430 |
+
var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
|
431 |
+
$nextIndicator && $nextIndicator.addClass('active')
|
432 |
+
}
|
433 |
+
|
434 |
+
var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
|
435 |
+
if ($.support.transition && this.$element.hasClass('slide')) {
|
436 |
+
$next.addClass(type)
|
437 |
+
$next[0].offsetWidth // force reflow
|
438 |
+
$active.addClass(direction)
|
439 |
+
$next.addClass(direction)
|
440 |
+
$active
|
441 |
+
.one('bsTransitionEnd', function () {
|
442 |
+
$next.removeClass([type, direction].join(' ')).addClass('active')
|
443 |
+
$active.removeClass(['active', direction].join(' '))
|
444 |
+
that.sliding = false
|
445 |
+
setTimeout(function () {
|
446 |
+
that.$element.trigger(slidEvent)
|
447 |
+
}, 0)
|
448 |
+
})
|
449 |
+
.emulateTransitionEnd(Carousel.TRANSITION_DURATION)
|
450 |
+
} else {
|
451 |
+
$active.removeClass('active')
|
452 |
+
$next.addClass('active')
|
453 |
+
this.sliding = false
|
454 |
+
this.$element.trigger(slidEvent)
|
455 |
+
}
|
456 |
+
|
457 |
+
isCycling && this.cycle()
|
458 |
+
|
459 |
+
return this
|
460 |
+
}
|
461 |
+
|
462 |
+
|
463 |
+
// CAROUSEL PLUGIN DEFINITION
|
464 |
+
// ==========================
|
465 |
+
|
466 |
+
function Plugin(option) {
|
467 |
+
return this.each(function () {
|
468 |
+
var $this = $(this)
|
469 |
+
var data = $this.data('bs.carousel')
|
470 |
+
var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
|
471 |
+
var action = typeof option == 'string' ? option : options.slide
|
472 |
+
|
473 |
+
if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
|
474 |
+
if (typeof option == 'number') data.to(option)
|
475 |
+
else if (action) data[action]()
|
476 |
+
else if (options.interval) data.pause().cycle()
|
477 |
+
})
|
478 |
+
}
|
479 |
+
|
480 |
+
var old = $.fn.carousel
|
481 |
+
|
482 |
+
$.fn.carousel = Plugin
|
483 |
+
$.fn.carousel.Constructor = Carousel
|
484 |
+
|
485 |
+
|
486 |
+
// CAROUSEL NO CONFLICT
|
487 |
+
// ====================
|
488 |
+
|
489 |
+
$.fn.carousel.noConflict = function () {
|
490 |
+
$.fn.carousel = old
|
491 |
+
return this
|
492 |
+
}
|
493 |
+
|
494 |
+
|
495 |
+
// CAROUSEL DATA-API
|
496 |
+
// =================
|
497 |
+
|
498 |
+
var clickHandler = function (e) {
|
499 |
+
var href
|
500 |
+
var $this = $(this)
|
501 |
+
var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
|
502 |
+
if (!$target.hasClass('carousel')) return
|
503 |
+
var options = $.extend({}, $target.data(), $this.data())
|
504 |
+
var slideIndex = $this.attr('data-slide-to')
|
505 |
+
if (slideIndex) options.interval = false
|
506 |
+
|
507 |
+
Plugin.call($target, options)
|
508 |
+
|
509 |
+
if (slideIndex) {
|
510 |
+
$target.data('bs.carousel').to(slideIndex)
|
511 |
+
}
|
512 |
+
|
513 |
+
e.preventDefault()
|
514 |
+
}
|
515 |
+
|
516 |
+
$(document)
|
517 |
+
.on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
|
518 |
+
.on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
|
519 |
+
|
520 |
+
$(window).on('load', function () {
|
521 |
+
$('[data-ride="carousel"]').each(function () {
|
522 |
+
var $carousel = $(this)
|
523 |
+
Plugin.call($carousel, $carousel.data())
|
524 |
+
})
|
525 |
+
})
|
526 |
+
|
527 |
+
}(jQuery);
|
528 |
+
|
529 |
+
/* ========================================================================
|
530 |
+
* Bootstrap: collapse.js v3.3.4
|
531 |
+
* http://getbootstrap.com/javascript/#collapse
|
532 |
+
* ========================================================================
|
533 |
+
* Copyright 2011-2015 Twitter, Inc.
|
534 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
535 |
+
* ======================================================================== */
|
536 |
+
|
537 |
+
|
538 |
+
+function ($) {
|
539 |
+
'use strict';
|
540 |
+
|
541 |
+
// COLLAPSE PUBLIC CLASS DEFINITION
|
542 |
+
// ================================
|
543 |
+
|
544 |
+
var Collapse = function (element, options) {
|
545 |
+
this.$element = $(element)
|
546 |
+
this.options = $.extend({}, Collapse.DEFAULTS, options)
|
547 |
+
this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
|
548 |
+
'[data-toggle="collapse"][data-target="#' + element.id + '"]')
|
549 |
+
this.transitioning = null
|
550 |
+
|
551 |
+
if (this.options.parent) {
|
552 |
+
this.$parent = this.getParent()
|
553 |
+
} else {
|
554 |
+
this.addAriaAndCollapsedClass(this.$element, this.$trigger)
|
555 |
+
}
|
556 |
+
|
557 |
+
if (this.options.toggle) this.toggle()
|
558 |
+
}
|
559 |
+
|
560 |
+
Collapse.VERSION = '3.3.4'
|
561 |
+
|
562 |
+
Collapse.TRANSITION_DURATION = 350
|
563 |
+
|
564 |
+
Collapse.DEFAULTS = {
|
565 |
+
toggle: true
|
566 |
+
}
|
567 |
+
|
568 |
+
Collapse.prototype.dimension = function () {
|
569 |
+
var hasWidth = this.$element.hasClass('width')
|
570 |
+
return hasWidth ? 'width' : 'height'
|
571 |
+
}
|
572 |
+
|
573 |
+
Collapse.prototype.show = function () {
|
574 |
+
if (this.transitioning || this.$element.hasClass('in')) return
|
575 |
+
|
576 |
+
var activesData
|
577 |
+
var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
|
578 |
+
|
579 |
+
if (actives && actives.length) {
|
580 |
+
activesData = actives.data('bs.collapse')
|
581 |
+
if (activesData && activesData.transitioning) return
|
582 |
+
}
|
583 |
+
|
584 |
+
var startEvent = $.Event('show.bs.collapse')
|
585 |
+
this.$element.trigger(startEvent)
|
586 |
+
if (startEvent.isDefaultPrevented()) return
|
587 |
+
|
588 |
+
if (actives && actives.length) {
|
589 |
+
Plugin.call(actives, 'hide')
|
590 |
+
activesData || actives.data('bs.collapse', null)
|
591 |
+
}
|
592 |
+
|
593 |
+
var dimension = this.dimension()
|
594 |
+
|
595 |
+
this.$element
|
596 |
+
.removeClass('collapse')
|
597 |
+
.addClass('collapsing')[dimension](0)
|
598 |
+
.attr('aria-expanded', true)
|
599 |
+
|
600 |
+
this.$trigger
|
601 |
+
.removeClass('collapsed')
|
602 |
+
.attr('aria-expanded', true)
|
603 |
+
|
604 |
+
this.transitioning = 1
|
605 |
+
|
606 |
+
var complete = function () {
|
607 |
+
this.$element
|
608 |
+
.removeClass('collapsing')
|
609 |
+
.addClass('collapse in')[dimension]('')
|
610 |
+
this.transitioning = 0
|
611 |
+
this.$element
|
612 |
+
.trigger('shown.bs.collapse')
|
613 |
+
}
|
614 |
+
|
615 |
+
if (!$.support.transition) return complete.call(this)
|
616 |
+
|
617 |
+
var scrollSize = $.camelCase(['scroll', dimension].join('-'))
|
618 |
+
|
619 |
+
this.$element
|
620 |
+
.one('bsTransitionEnd', $.proxy(complete, this))
|
621 |
+
.emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
|
622 |
+
}
|
623 |
+
|
624 |
+
Collapse.prototype.hide = function () {
|
625 |
+
if (this.transitioning || !this.$element.hasClass('in')) return
|
626 |
+
|
627 |
+
var startEvent = $.Event('hide.bs.collapse')
|
628 |
+
this.$element.trigger(startEvent)
|
629 |
+
if (startEvent.isDefaultPrevented()) return
|
630 |
+
|
631 |
+
var dimension = this.dimension()
|
632 |
+
|
633 |
+
this.$element[dimension](this.$element[dimension]())[0].offsetHeight
|
634 |
+
|
635 |
+
this.$element
|
636 |
+
.addClass('collapsing')
|
637 |
+
.removeClass('collapse in')
|
638 |
+
.attr('aria-expanded', false)
|
639 |
+
|
640 |
+
this.$trigger
|
641 |
+
.addClass('collapsed')
|
642 |
+
.attr('aria-expanded', false)
|
643 |
+
|
644 |
+
this.transitioning = 1
|
645 |
+
|
646 |
+
var complete = function () {
|
647 |
+
this.transitioning = 0
|
648 |
+
this.$element
|
649 |
+
.removeClass('collapsing')
|
650 |
+
.addClass('collapse')
|
651 |
+
.trigger('hidden.bs.collapse')
|
652 |
+
}
|
653 |
+
|
654 |
+
if (!$.support.transition) return complete.call(this)
|
655 |
+
|
656 |
+
this.$element
|
657 |
+
[dimension](0)
|
658 |
+
.one('bsTransitionEnd', $.proxy(complete, this))
|
659 |
+
.emulateTransitionEnd(Collapse.TRANSITION_DURATION)
|
660 |
+
}
|
661 |
+
|
662 |
+
Collapse.prototype.toggle = function () {
|
663 |
+
this[this.$element.hasClass('in') ? 'hide' : 'show']()
|
664 |
+
}
|
665 |
+
|
666 |
+
Collapse.prototype.getParent = function () {
|
667 |
+
return $(this.options.parent)
|
668 |
+
.find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
|
669 |
+
.each($.proxy(function (i, element) {
|
670 |
+
var $element = $(element)
|
671 |
+
this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
|
672 |
+
}, this))
|
673 |
+
.end()
|
674 |
+
}
|
675 |
+
|
676 |
+
Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
|
677 |
+
var isOpen = $element.hasClass('in')
|
678 |
+
|
679 |
+
$element.attr('aria-expanded', isOpen)
|
680 |
+
$trigger
|
681 |
+
.toggleClass('collapsed', !isOpen)
|
682 |
+
.attr('aria-expanded', isOpen)
|
683 |
+
}
|
684 |
+
|
685 |
+
function getTargetFromTrigger($trigger) {
|
686 |
+
var href
|
687 |
+
var target = $trigger.attr('data-target')
|
688 |
+
|| (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
|
689 |
+
|
690 |
+
return $(target)
|
691 |
+
}
|
692 |
+
|
693 |
+
|
694 |
+
// COLLAPSE PLUGIN DEFINITION
|
695 |
+
// ==========================
|
696 |
+
|
697 |
+
function Plugin(option) {
|
698 |
+
return this.each(function () {
|
699 |
+
var $this = $(this)
|
700 |
+
var data = $this.data('bs.collapse')
|
701 |
+
var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
|
702 |
+
|
703 |
+
if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
|
704 |
+
if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
|
705 |
+
if (typeof option == 'string') data[option]()
|
706 |
+
})
|
707 |
+
}
|
708 |
+
|
709 |
+
var old = $.fn.collapse
|
710 |
+
|
711 |
+
$.fn.collapse = Plugin
|
712 |
+
$.fn.collapse.Constructor = Collapse
|
713 |
+
|
714 |
+
|
715 |
+
// COLLAPSE NO CONFLICT
|
716 |
+
// ====================
|
717 |
+
|
718 |
+
$.fn.collapse.noConflict = function () {
|
719 |
+
$.fn.collapse = old
|
720 |
+
return this
|
721 |
+
}
|
722 |
+
|
723 |
+
|
724 |
+
// COLLAPSE DATA-API
|
725 |
+
// =================
|
726 |
+
|
727 |
+
$(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
|
728 |
+
var $this = $(this)
|
729 |
+
|
730 |
+
if (!$this.attr('data-target')) e.preventDefault()
|
731 |
+
|
732 |
+
var $target = getTargetFromTrigger($this)
|
733 |
+
var data = $target.data('bs.collapse')
|
734 |
+
var option = data ? 'toggle' : $this.data()
|
735 |
+
|
736 |
+
Plugin.call($target, option)
|
737 |
+
})
|
738 |
+
|
739 |
+
}(jQuery);
|
740 |
+
|
741 |
+
/* ========================================================================
|
742 |
+
* Bootstrap: dropdown.js v3.3.4
|
743 |
+
* http://getbootstrap.com/javascript/#dropdowns
|
744 |
+
* ========================================================================
|
745 |
+
* Copyright 2011-2015 Twitter, Inc.
|
746 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
747 |
+
* ======================================================================== */
|
748 |
+
|
749 |
+
|
750 |
+
+function ($) {
|
751 |
+
'use strict';
|
752 |
+
|
753 |
+
// DROPDOWN CLASS DEFINITION
|
754 |
+
// =========================
|
755 |
+
|
756 |
+
var backdrop = '.dropdown-backdrop'
|
757 |
+
var toggle = '[data-toggle="dropdown"]'
|
758 |
+
var Dropdown = function (element) {
|
759 |
+
$(element).on('click.bs.dropdown', this.toggle)
|
760 |
+
}
|
761 |
+
|
762 |
+
Dropdown.VERSION = '3.3.4'
|
763 |
+
|
764 |
+
Dropdown.prototype.toggle = function (e) {
|
765 |
+
var $this = $(this)
|
766 |
+
|
767 |
+
if ($this.is('.disabled, :disabled')) return
|
768 |
+
|
769 |
+
var $parent = getParent($this)
|
770 |
+
var isActive = $parent.hasClass('open')
|
771 |
+
|
772 |
+
clearMenus()
|
773 |
+
|
774 |
+
if (!isActive) {
|
775 |
+
if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
|
776 |
+
// if mobile we use a backdrop because click events don't delegate
|
777 |
+
$('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
|
778 |
+
}
|
779 |
+
|
780 |
+
var relatedTarget = { relatedTarget: this }
|
781 |
+
$parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
|
782 |
+
|
783 |
+
if (e.isDefaultPrevented()) return
|
784 |
+
|
785 |
+
$this
|
786 |
+
.trigger('focus')
|
787 |
+
.attr('aria-expanded', 'true')
|
788 |
+
|
789 |
+
$parent
|
790 |
+
.toggleClass('open')
|
791 |
+
.trigger('shown.bs.dropdown', relatedTarget)
|
792 |
+
}
|
793 |
+
|
794 |
+
return false
|
795 |
+
}
|
796 |
+
|
797 |
+
Dropdown.prototype.keydown = function (e) {
|
798 |
+
if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
|
799 |
+
|
800 |
+
var $this = $(this)
|
801 |
+
|
802 |
+
e.preventDefault()
|
803 |
+
e.stopPropagation()
|
804 |
+
|
805 |
+
if ($this.is('.disabled, :disabled')) return
|
806 |
+
|
807 |
+
var $parent = getParent($this)
|
808 |
+
var isActive = $parent.hasClass('open')
|
809 |
+
|
810 |
+
if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {
|
811 |
+
if (e.which == 27) $parent.find(toggle).trigger('focus')
|
812 |
+
return $this.trigger('click')
|
813 |
+
}
|
814 |
+
|
815 |
+
var desc = ' li:not(.disabled):visible a'
|
816 |
+
var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
|
817 |
+
|
818 |
+
if (!$items.length) return
|
819 |
+
|
820 |
+
var index = $items.index(e.target)
|
821 |
+
|
822 |
+
if (e.which == 38 && index > 0) index-- // up
|
823 |
+
if (e.which == 40 && index < $items.length - 1) index++ // down
|
824 |
+
if (!~index) index = 0
|
825 |
+
|
826 |
+
$items.eq(index).trigger('focus')
|
827 |
+
}
|
828 |
+
|
829 |
+
function clearMenus(e) {
|
830 |
+
if (e && e.which === 3) return
|
831 |
+
$(backdrop).remove()
|
832 |
+
$(toggle).each(function () {
|
833 |
+
var $this = $(this)
|
834 |
+
var $parent = getParent($this)
|
835 |
+
var relatedTarget = { relatedTarget: this }
|
836 |
+
|
837 |
+
if (!$parent.hasClass('open')) return
|
838 |
+
|
839 |
+
$parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
|
840 |
+
|
841 |
+
if (e.isDefaultPrevented()) return
|
842 |
+
|
843 |
+
$this.attr('aria-expanded', 'false')
|
844 |
+
$parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
|
845 |
+
})
|
846 |
+
}
|
847 |
+
|
848 |
+
function getParent($this) {
|
849 |
+
var selector = $this.attr('data-target')
|
850 |
+
|
851 |
+
if (!selector) {
|
852 |
+
selector = $this.attr('href')
|
853 |
+
selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
|
854 |
+
}
|
855 |
+
|
856 |
+
var $parent = selector && $(selector)
|
857 |
+
|
858 |
+
return $parent && $parent.length ? $parent : $this.parent()
|
859 |
+
}
|
860 |
+
|
861 |
+
|
862 |
+
// DROPDOWN PLUGIN DEFINITION
|
863 |
+
// ==========================
|
864 |
+
|
865 |
+
function Plugin(option) {
|
866 |
+
return this.each(function () {
|
867 |
+
var $this = $(this)
|
868 |
+
var data = $this.data('bs.dropdown')
|
869 |
+
|
870 |
+
if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
|
871 |
+
if (typeof option == 'string') data[option].call($this)
|
872 |
+
})
|
873 |
+
}
|
874 |
+
|
875 |
+
var old = $.fn.dropdown
|
876 |
+
|
877 |
+
$.fn.dropdown = Plugin
|
878 |
+
$.fn.dropdown.Constructor = Dropdown
|
879 |
+
|
880 |
+
|
881 |
+
// DROPDOWN NO CONFLICT
|
882 |
+
// ====================
|
883 |
+
|
884 |
+
$.fn.dropdown.noConflict = function () {
|
885 |
+
$.fn.dropdown = old
|
886 |
+
return this
|
887 |
+
}
|
888 |
+
|
889 |
+
|
890 |
+
// APPLY TO STANDARD DROPDOWN ELEMENTS
|
891 |
+
// ===================================
|
892 |
+
|
893 |
+
$(document)
|
894 |
+
.on('click.bs.dropdown.data-api', clearMenus)
|
895 |
+
.on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
|
896 |
+
.on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
|
897 |
+
.on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
|
898 |
+
.on('keydown.bs.dropdown.data-api', '[role="menu"]', Dropdown.prototype.keydown)
|
899 |
+
.on('keydown.bs.dropdown.data-api', '[role="listbox"]', Dropdown.prototype.keydown)
|
900 |
+
|
901 |
+
}(jQuery);
|
902 |
+
|
903 |
+
/* ========================================================================
|
904 |
+
* Bootstrap: modal.js v3.3.4
|
905 |
+
* http://getbootstrap.com/javascript/#modals
|
906 |
+
* ========================================================================
|
907 |
+
* Copyright 2011-2015 Twitter, Inc.
|
908 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
909 |
+
* ======================================================================== */
|
910 |
+
|
911 |
+
|
912 |
+
+function ($) {
|
913 |
+
'use strict';
|
914 |
+
|
915 |
+
// MODAL CLASS DEFINITION
|
916 |
+
// ======================
|
917 |
+
|
918 |
+
var Modal = function (element, options) {
|
919 |
+
this.options = options
|
920 |
+
this.$body = $(document.body)
|
921 |
+
this.$element = $(element)
|
922 |
+
this.$dialog = this.$element.find('.modal-dialog')
|
923 |
+
this.$backdrop = null
|
924 |
+
this.isShown = null
|
925 |
+
this.originalBodyPad = null
|
926 |
+
this.scrollbarWidth = 0
|
927 |
+
this.ignoreBackdropClick = false
|
928 |
+
|
929 |
+
if (this.options.remote) {
|
930 |
+
this.$element
|
931 |
+
.find('.modal-content')
|
932 |
+
.load(this.options.remote, $.proxy(function () {
|
933 |
+
this.$element.trigger('loaded.bs.modal')
|
934 |
+
}, this))
|
935 |
+
}
|
936 |
+
}
|
937 |
+
|
938 |
+
Modal.VERSION = '3.3.4'
|
939 |
+
|
940 |
+
Modal.TRANSITION_DURATION = 300
|
941 |
+
Modal.BACKDROP_TRANSITION_DURATION = 150
|
942 |
+
|
943 |
+
Modal.DEFAULTS = {
|
944 |
+
backdrop: true,
|
945 |
+
keyboard: true,
|
946 |
+
show: true
|
947 |
+
}
|
948 |
+
|
949 |
+
Modal.prototype.toggle = function (_relatedTarget) {
|
950 |
+
return this.isShown ? this.hide() : this.show(_relatedTarget)
|
951 |
+
}
|
952 |
+
|
953 |
+
Modal.prototype.show = function (_relatedTarget) {
|
954 |
+
var that = this
|
955 |
+
var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
|
956 |
+
|
957 |
+
this.$element.trigger(e)
|
958 |
+
|
959 |
+
if (this.isShown || e.isDefaultPrevented()) return
|
960 |
+
|
961 |
+
this.isShown = true
|
962 |
+
|
963 |
+
this.checkScrollbar()
|
964 |
+
this.setScrollbar()
|
965 |
+
this.$body.addClass('modal-open')
|
966 |
+
|
967 |
+
this.escape()
|
968 |
+
this.resize()
|
969 |
+
|
970 |
+
this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
|
971 |
+
|
972 |
+
this.$dialog.on('mousedown.dismiss.bs.modal', function () {
|
973 |
+
that.$element.one('mouseup.dismiss.bs.modal', function (e) {
|
974 |
+
if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
|
975 |
+
})
|
976 |
+
})
|
977 |
+
|
978 |
+
this.backdrop(function () {
|
979 |
+
var transition = $.support.transition && that.$element.hasClass('fade')
|
980 |
+
|
981 |
+
if (!that.$element.parent().length) {
|
982 |
+
that.$element.appendTo(that.$body) // don't move modals dom position
|
983 |
+
}
|
984 |
+
|
985 |
+
that.$element
|
986 |
+
.show()
|
987 |
+
.scrollTop(0)
|
988 |
+
|
989 |
+
that.adjustDialog()
|
990 |
+
|
991 |
+
if (transition) {
|
992 |
+
that.$element[0].offsetWidth // force reflow
|
993 |
+
}
|
994 |
+
|
995 |
+
that.$element
|
996 |
+
.addClass('in')
|
997 |
+
.attr('aria-hidden', false)
|
998 |
+
|
999 |
+
that.enforceFocus()
|
1000 |
+
|
1001 |
+
var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
|
1002 |
+
|
1003 |
+
transition ?
|
1004 |
+
that.$dialog // wait for modal to slide in
|
1005 |
+
.one('bsTransitionEnd', function () {
|
1006 |
+
that.$element.trigger('focus').trigger(e)
|
1007 |
+
})
|
1008 |
+
.emulateTransitionEnd(Modal.TRANSITION_DURATION) :
|
1009 |
+
that.$element.trigger('focus').trigger(e)
|
1010 |
+
})
|
1011 |
+
}
|
1012 |
+
|
1013 |
+
Modal.prototype.hide = function (e) {
|
1014 |
+
if (e) e.preventDefault()
|
1015 |
+
|
1016 |
+
e = $.Event('hide.bs.modal')
|
1017 |
+
|
1018 |
+
this.$element.trigger(e)
|
1019 |
+
|
1020 |
+
if (!this.isShown || e.isDefaultPrevented()) return
|
1021 |
+
|
1022 |
+
this.isShown = false
|
1023 |
+
|
1024 |
+
this.escape()
|
1025 |
+
this.resize()
|
1026 |
+
|
1027 |
+
$(document).off('focusin.bs.modal')
|
1028 |
+
|
1029 |
+
this.$element
|
1030 |
+
.removeClass('in')
|
1031 |
+
.attr('aria-hidden', true)
|
1032 |
+
.off('click.dismiss.bs.modal')
|
1033 |
+
.off('mouseup.dismiss.bs.modal')
|
1034 |
+
|
1035 |
+
this.$dialog.off('mousedown.dismiss.bs.modal')
|
1036 |
+
|
1037 |
+
$.support.transition && this.$element.hasClass('fade') ?
|
1038 |
+
this.$element
|
1039 |
+
.one('bsTransitionEnd', $.proxy(this.hideModal, this))
|
1040 |
+
.emulateTransitionEnd(Modal.TRANSITION_DURATION) :
|
1041 |
+
this.hideModal()
|
1042 |
+
}
|
1043 |
+
|
1044 |
+
Modal.prototype.enforceFocus = function () {
|
1045 |
+
$(document)
|
1046 |
+
.off('focusin.bs.modal') // guard against infinite focus loop
|
1047 |
+
.on('focusin.bs.modal', $.proxy(function (e) {
|
1048 |
+
if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
|
1049 |
+
this.$element.trigger('focus')
|
1050 |
+
}
|
1051 |
+
}, this))
|
1052 |
+
}
|
1053 |
+
|
1054 |
+
Modal.prototype.escape = function () {
|
1055 |
+
if (this.isShown && this.options.keyboard) {
|
1056 |
+
this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
|
1057 |
+
e.which == 27 && this.hide()
|
1058 |
+
}, this))
|
1059 |
+
} else if (!this.isShown) {
|
1060 |
+
this.$element.off('keydown.dismiss.bs.modal')
|
1061 |
+
}
|
1062 |
+
}
|
1063 |
+
|
1064 |
+
Modal.prototype.resize = function () {
|
1065 |
+
if (this.isShown) {
|
1066 |
+
$(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
|
1067 |
+
} else {
|
1068 |
+
$(window).off('resize.bs.modal')
|
1069 |
+
}
|
1070 |
+
}
|
1071 |
+
|
1072 |
+
Modal.prototype.hideModal = function () {
|
1073 |
+
var that = this
|
1074 |
+
this.$element.hide()
|
1075 |
+
this.backdrop(function () {
|
1076 |
+
that.$body.removeClass('modal-open')
|
1077 |
+
that.resetAdjustments()
|
1078 |
+
that.resetScrollbar()
|
1079 |
+
that.$element.trigger('hidden.bs.modal')
|
1080 |
+
})
|
1081 |
+
}
|
1082 |
+
|
1083 |
+
Modal.prototype.removeBackdrop = function () {
|
1084 |
+
this.$backdrop && this.$backdrop.remove()
|
1085 |
+
this.$backdrop = null
|
1086 |
+
}
|
1087 |
+
|
1088 |
+
Modal.prototype.backdrop = function (callback) {
|
1089 |
+
var that = this
|
1090 |
+
var animate = this.$element.hasClass('fade') ? 'fade' : ''
|
1091 |
+
|
1092 |
+
if (this.isShown && this.options.backdrop) {
|
1093 |
+
var doAnimate = $.support.transition && animate
|
1094 |
+
|
1095 |
+
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
|
1096 |
+
.appendTo(this.$body)
|
1097 |
+
|
1098 |
+
this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
|
1099 |
+
if (this.ignoreBackdropClick) {
|
1100 |
+
this.ignoreBackdropClick = false
|
1101 |
+
return
|
1102 |
+
}
|
1103 |
+
if (e.target !== e.currentTarget) return
|
1104 |
+
this.options.backdrop == 'static'
|
1105 |
+
? this.$element[0].focus()
|
1106 |
+
: this.hide()
|
1107 |
+
}, this))
|
1108 |
+
|
1109 |
+
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
|
1110 |
+
|
1111 |
+
this.$backdrop.addClass('in')
|
1112 |
+
|
1113 |
+
if (!callback) return
|
1114 |
+
|
1115 |
+
doAnimate ?
|
1116 |
+
this.$backdrop
|
1117 |
+
.one('bsTransitionEnd', callback)
|
1118 |
+
.emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
|
1119 |
+
callback()
|
1120 |
+
|
1121 |
+
} else if (!this.isShown && this.$backdrop) {
|
1122 |
+
this.$backdrop.removeClass('in')
|
1123 |
+
|
1124 |
+
var callbackRemove = function () {
|
1125 |
+
that.removeBackdrop()
|
1126 |
+
callback && callback()
|
1127 |
+
}
|
1128 |
+
$.support.transition && this.$element.hasClass('fade') ?
|
1129 |
+
this.$backdrop
|
1130 |
+
.one('bsTransitionEnd', callbackRemove)
|
1131 |
+
.emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
|
1132 |
+
callbackRemove()
|
1133 |
+
|
1134 |
+
} else if (callback) {
|
1135 |
+
callback()
|
1136 |
+
}
|
1137 |
+
}
|
1138 |
+
|
1139 |
+
// these following methods are used to handle overflowing modals
|
1140 |
+
|
1141 |
+
Modal.prototype.handleUpdate = function () {
|
1142 |
+
this.adjustDialog()
|
1143 |
+
}
|
1144 |
+
|
1145 |
+
Modal.prototype.adjustDialog = function () {
|
1146 |
+
var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
|
1147 |
+
|
1148 |
+
this.$element.css({
|
1149 |
+
paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
|
1150 |
+
paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
|
1151 |
+
})
|
1152 |
+
}
|
1153 |
+
|
1154 |
+
Modal.prototype.resetAdjustments = function () {
|
1155 |
+
this.$element.css({
|
1156 |
+
paddingLeft: '',
|
1157 |
+
paddingRight: ''
|
1158 |
+
})
|
1159 |
+
}
|
1160 |
+
|
1161 |
+
Modal.prototype.checkScrollbar = function () {
|
1162 |
+
var fullWindowWidth = window.innerWidth
|
1163 |
+
if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
|
1164 |
+
var documentElementRect = document.documentElement.getBoundingClientRect()
|
1165 |
+
fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
|
1166 |
+
}
|
1167 |
+
this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
|
1168 |
+
this.scrollbarWidth = this.measureScrollbar()
|
1169 |
+
}
|
1170 |
+
|
1171 |
+
Modal.prototype.setScrollbar = function () {
|
1172 |
+
var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
|
1173 |
+
this.originalBodyPad = document.body.style.paddingRight || ''
|
1174 |
+
if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
|
1175 |
+
}
|
1176 |
+
|
1177 |
+
Modal.prototype.resetScrollbar = function () {
|
1178 |
+
this.$body.css('padding-right', this.originalBodyPad)
|
1179 |
+
}
|
1180 |
+
|
1181 |
+
Modal.prototype.measureScrollbar = function () { // thx walsh
|
1182 |
+
var scrollDiv = document.createElement('div')
|
1183 |
+
scrollDiv.className = 'modal-scrollbar-measure'
|
1184 |
+
this.$body.append(scrollDiv)
|
1185 |
+
var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
|
1186 |
+
this.$body[0].removeChild(scrollDiv)
|
1187 |
+
return scrollbarWidth
|
1188 |
+
}
|
1189 |
+
|
1190 |
+
|
1191 |
+
// MODAL PLUGIN DEFINITION
|
1192 |
+
// =======================
|
1193 |
+
|
1194 |
+
function Plugin(option, _relatedTarget) {
|
1195 |
+
return this.each(function () {
|
1196 |
+
var $this = $(this)
|
1197 |
+
var data = $this.data('bs.modal')
|
1198 |
+
var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
|
1199 |
+
|
1200 |
+
if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
|
1201 |
+
if (typeof option == 'string') data[option](_relatedTarget)
|
1202 |
+
else if (options.show) data.show(_relatedTarget)
|
1203 |
+
})
|
1204 |
+
}
|
1205 |
+
|
1206 |
+
var old = $.fn.modal
|
1207 |
+
|
1208 |
+
$.fn.modal = Plugin
|
1209 |
+
$.fn.modal.Constructor = Modal
|
1210 |
+
|
1211 |
+
|
1212 |
+
// MODAL NO CONFLICT
|
1213 |
+
// =================
|
1214 |
+
|
1215 |
+
$.fn.modal.noConflict = function () {
|
1216 |
+
$.fn.modal = old
|
1217 |
+
return this
|
1218 |
+
}
|
1219 |
+
|
1220 |
+
|
1221 |
+
// MODAL DATA-API
|
1222 |
+
// ==============
|
1223 |
+
|
1224 |
+
$(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
|
1225 |
+
var $this = $(this)
|
1226 |
+
var href = $this.attr('href')
|
1227 |
+
var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
|
1228 |
+
var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
|
1229 |
+
|
1230 |
+
if ($this.is('a')) e.preventDefault()
|
1231 |
+
|
1232 |
+
$target.one('show.bs.modal', function (showEvent) {
|
1233 |
+
if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
|
1234 |
+
$target.one('hidden.bs.modal', function () {
|
1235 |
+
$this.is(':visible') && $this.trigger('focus')
|
1236 |
+
})
|
1237 |
+
})
|
1238 |
+
Plugin.call($target, option, this)
|
1239 |
+
})
|
1240 |
+
|
1241 |
+
}(jQuery);
|
1242 |
+
|
1243 |
+
/* ========================================================================
|
1244 |
+
* Bootstrap: tooltip.js v3.3.4
|
1245 |
+
* http://getbootstrap.com/javascript/#tooltip
|
1246 |
+
* Inspired by the original jQuery.tipsy by Jason Frame
|
1247 |
+
* ========================================================================
|
1248 |
+
* Copyright 2011-2015 Twitter, Inc.
|
1249 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
1250 |
+
* ======================================================================== */
|
1251 |
+
|
1252 |
+
|
1253 |
+
+function ($) {
|
1254 |
+
'use strict';
|
1255 |
+
|
1256 |
+
// TOOLTIP PUBLIC CLASS DEFINITION
|
1257 |
+
// ===============================
|
1258 |
+
|
1259 |
+
var Tooltip = function (element, options) {
|
1260 |
+
this.type = null
|
1261 |
+
this.options = null
|
1262 |
+
this.enabled = null
|
1263 |
+
this.timeout = null
|
1264 |
+
this.hoverState = null
|
1265 |
+
this.$element = null
|
1266 |
+
|
1267 |
+
this.init('tooltip', element, options)
|
1268 |
+
}
|
1269 |
+
|
1270 |
+
Tooltip.VERSION = '3.3.4'
|
1271 |
+
|
1272 |
+
Tooltip.TRANSITION_DURATION = 150
|
1273 |
+
|
1274 |
+
Tooltip.DEFAULTS = {
|
1275 |
+
animation: true,
|
1276 |
+
placement: 'top',
|
1277 |
+
selector: false,
|
1278 |
+
template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
|
1279 |
+
trigger: 'hover focus',
|
1280 |
+
title: '',
|
1281 |
+
delay: 0,
|
1282 |
+
html: false,
|
1283 |
+
container: false,
|
1284 |
+
viewport: {
|
1285 |
+
selector: 'body',
|
1286 |
+
padding: 0
|
1287 |
+
}
|
1288 |
+
}
|
1289 |
+
|
1290 |
+
Tooltip.prototype.init = function (type, element, options) {
|
1291 |
+
this.enabled = true
|
1292 |
+
this.type = type
|
1293 |
+
this.$element = $(element)
|
1294 |
+
this.options = this.getOptions(options)
|
1295 |
+
this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
|
1296 |
+
|
1297 |
+
if (this.$element[0] instanceof document.constructor && !this.options.selector) {
|
1298 |
+
throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
|
1299 |
+
}
|
1300 |
+
|
1301 |
+
var triggers = this.options.trigger.split(' ')
|
1302 |
+
|
1303 |
+
for (var i = triggers.length; i--;) {
|
1304 |
+
var trigger = triggers[i]
|
1305 |
+
|
1306 |
+
if (trigger == 'click') {
|
1307 |
+
this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
|
1308 |
+
} else if (trigger != 'manual') {
|
1309 |
+
var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
|
1310 |
+
var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
|
1311 |
+
|
1312 |
+
this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
|
1313 |
+
this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
|
1314 |
+
}
|
1315 |
+
}
|
1316 |
+
|
1317 |
+
this.options.selector ?
|
1318 |
+
(this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
|
1319 |
+
this.fixTitle()
|
1320 |
+
}
|
1321 |
+
|
1322 |
+
Tooltip.prototype.getDefaults = function () {
|
1323 |
+
return Tooltip.DEFAULTS
|
1324 |
+
}
|
1325 |
+
|
1326 |
+
Tooltip.prototype.getOptions = function (options) {
|
1327 |
+
options = $.extend({}, this.getDefaults(), this.$element.data(), options)
|
1328 |
+
|
1329 |
+
if (options.delay && typeof options.delay == 'number') {
|
1330 |
+
options.delay = {
|
1331 |
+
show: options.delay,
|
1332 |
+
hide: options.delay
|
1333 |
+
}
|
1334 |
+
}
|
1335 |
+
|
1336 |
+
return options
|
1337 |
+
}
|
1338 |
+
|
1339 |
+
Tooltip.prototype.getDelegateOptions = function () {
|
1340 |
+
var options = {}
|
1341 |
+
var defaults = this.getDefaults()
|
1342 |
+
|
1343 |
+
this._options && $.each(this._options, function (key, value) {
|
1344 |
+
if (defaults[key] != value) options[key] = value
|
1345 |
+
})
|
1346 |
+
|
1347 |
+
return options
|
1348 |
+
}
|
1349 |
+
|
1350 |
+
Tooltip.prototype.enter = function (obj) {
|
1351 |
+
var self = obj instanceof this.constructor ?
|
1352 |
+
obj : $(obj.currentTarget).data('bs.' + this.type)
|
1353 |
+
|
1354 |
+
if (self && self.$tip && self.$tip.is(':visible')) {
|
1355 |
+
self.hoverState = 'in'
|
1356 |
+
return
|
1357 |
+
}
|
1358 |
+
|
1359 |
+
if (!self) {
|
1360 |
+
self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
|
1361 |
+
$(obj.currentTarget).data('bs.' + this.type, self)
|
1362 |
+
}
|
1363 |
+
|
1364 |
+
clearTimeout(self.timeout)
|
1365 |
+
|
1366 |
+
self.hoverState = 'in'
|
1367 |
+
|
1368 |
+
if (!self.options.delay || !self.options.delay.show) return self.show()
|
1369 |
+
|
1370 |
+
self.timeout = setTimeout(function () {
|
1371 |
+
if (self.hoverState == 'in') self.show()
|
1372 |
+
}, self.options.delay.show)
|
1373 |
+
}
|
1374 |
+
|
1375 |
+
Tooltip.prototype.leave = function (obj) {
|
1376 |
+
var self = obj instanceof this.constructor ?
|
1377 |
+
obj : $(obj.currentTarget).data('bs.' + this.type)
|
1378 |
+
|
1379 |
+
if (!self) {
|
1380 |
+
self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
|
1381 |
+
$(obj.currentTarget).data('bs.' + this.type, self)
|
1382 |
+
}
|
1383 |
+
|
1384 |
+
clearTimeout(self.timeout)
|
1385 |
+
|
1386 |
+
self.hoverState = 'out'
|
1387 |
+
|
1388 |
+
if (!self.options.delay || !self.options.delay.hide) return self.hide()
|
1389 |
+
|
1390 |
+
self.timeout = setTimeout(function () {
|
1391 |
+
if (self.hoverState == 'out') self.hide()
|
1392 |
+
}, self.options.delay.hide)
|
1393 |
+
}
|
1394 |
+
|
1395 |
+
Tooltip.prototype.show = function () {
|
1396 |
+
var e = $.Event('show.bs.' + this.type)
|
1397 |
+
|
1398 |
+
if (this.hasContent() && this.enabled) {
|
1399 |
+
this.$element.trigger(e)
|
1400 |
+
|
1401 |
+
var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
|
1402 |
+
if (e.isDefaultPrevented() || !inDom) return
|
1403 |
+
var that = this
|
1404 |
+
|
1405 |
+
var $tip = this.tip()
|
1406 |
+
|
1407 |
+
var tipId = this.getUID(this.type)
|
1408 |
+
|
1409 |
+
this.setContent()
|
1410 |
+
$tip.attr('id', tipId)
|
1411 |
+
this.$element.attr('aria-describedby', tipId)
|
1412 |
+
|
1413 |
+
if (this.options.animation) $tip.addClass('fade')
|
1414 |
+
|
1415 |
+
var placement = typeof this.options.placement == 'function' ?
|
1416 |
+
this.options.placement.call(this, $tip[0], this.$element[0]) :
|
1417 |
+
this.options.placement
|
1418 |
+
|
1419 |
+
var autoToken = /\s?auto?\s?/i
|
1420 |
+
var autoPlace = autoToken.test(placement)
|
1421 |
+
if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
|
1422 |
+
|
1423 |
+
$tip
|
1424 |
+
.detach()
|
1425 |
+
.css({ top: 0, left: 0, display: 'block' })
|
1426 |
+
.addClass(placement)
|
1427 |
+
.data('bs.' + this.type, this)
|
1428 |
+
|
1429 |
+
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
|
1430 |
+
|
1431 |
+
var pos = this.getPosition()
|
1432 |
+
var actualWidth = $tip[0].offsetWidth
|
1433 |
+
var actualHeight = $tip[0].offsetHeight
|
1434 |
+
|
1435 |
+
if (autoPlace) {
|
1436 |
+
var orgPlacement = placement
|
1437 |
+
var $container = this.options.container ? $(this.options.container) : this.$element.parent()
|
1438 |
+
var containerDim = this.getPosition($container)
|
1439 |
+
|
1440 |
+
placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top' :
|
1441 |
+
placement == 'top' && pos.top - actualHeight < containerDim.top ? 'bottom' :
|
1442 |
+
placement == 'right' && pos.right + actualWidth > containerDim.width ? 'left' :
|
1443 |
+
placement == 'left' && pos.left - actualWidth < containerDim.left ? 'right' :
|
1444 |
+
placement
|
1445 |
+
|
1446 |
+
$tip
|
1447 |
+
.removeClass(orgPlacement)
|
1448 |
+
.addClass(placement)
|
1449 |
+
}
|
1450 |
+
|
1451 |
+
var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
|
1452 |
+
|
1453 |
+
this.applyPlacement(calculatedOffset, placement)
|
1454 |
+
|
1455 |
+
var complete = function () {
|
1456 |
+
var prevHoverState = that.hoverState
|
1457 |
+
that.$element.trigger('shown.bs.' + that.type)
|
1458 |
+
that.hoverState = null
|
1459 |
+
|
1460 |
+
if (prevHoverState == 'out') that.leave(that)
|
1461 |
+
}
|
1462 |
+
|
1463 |
+
$.support.transition && this.$tip.hasClass('fade') ?
|
1464 |
+
$tip
|
1465 |
+
.one('bsTransitionEnd', complete)
|
1466 |
+
.emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
|
1467 |
+
complete()
|
1468 |
+
}
|
1469 |
+
}
|
1470 |
+
|
1471 |
+
Tooltip.prototype.applyPlacement = function (offset, placement) {
|
1472 |
+
var $tip = this.tip()
|
1473 |
+
var width = $tip[0].offsetWidth
|
1474 |
+
var height = $tip[0].offsetHeight
|
1475 |
+
|
1476 |
+
// manually read margins because getBoundingClientRect includes difference
|
1477 |
+
var marginTop = parseInt($tip.css('margin-top'), 10)
|
1478 |
+
var marginLeft = parseInt($tip.css('margin-left'), 10)
|
1479 |
+
|
1480 |
+
// we must check for NaN for ie 8/9
|
1481 |
+
if (isNaN(marginTop)) marginTop = 0
|
1482 |
+
if (isNaN(marginLeft)) marginLeft = 0
|
1483 |
+
|
1484 |
+
offset.top = offset.top + marginTop
|
1485 |
+
offset.left = offset.left + marginLeft
|
1486 |
+
|
1487 |
+
// $.fn.offset doesn't round pixel values
|
1488 |
+
// so we use setOffset directly with our own function B-0
|
1489 |
+
$.offset.setOffset($tip[0], $.extend({
|
1490 |
+
using: function (props) {
|
1491 |
+
$tip.css({
|
1492 |
+
top: Math.round(props.top),
|
1493 |
+
left: Math.round(props.left)
|
1494 |
+
})
|
1495 |
+
}
|
1496 |
+
}, offset), 0)
|
1497 |
+
|
1498 |
+
$tip.addClass('in')
|
1499 |
+
|
1500 |
+
// check to see if placing tip in new offset caused the tip to resize itself
|
1501 |
+
var actualWidth = $tip[0].offsetWidth
|
1502 |
+
var actualHeight = $tip[0].offsetHeight
|
1503 |
+
|
1504 |
+
if (placement == 'top' && actualHeight != height) {
|
1505 |
+
offset.top = offset.top + height - actualHeight
|
1506 |
+
}
|
1507 |
+
|
1508 |
+
var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
|
1509 |
+
|
1510 |
+
if (delta.left) offset.left += delta.left
|
1511 |
+
else offset.top += delta.top
|
1512 |
+
|
1513 |
+
var isVertical = /top|bottom/.test(placement)
|
1514 |
+
var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
|
1515 |
+
var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
|
1516 |
+
|
1517 |
+
$tip.offset(offset)
|
1518 |
+
this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
|
1519 |
+
}
|
1520 |
+
|
1521 |
+
Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
|
1522 |
+
this.arrow()
|
1523 |
+
.css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
|
1524 |
+
.css(isVertical ? 'top' : 'left', '')
|
1525 |
+
}
|
1526 |
+
|
1527 |
+
Tooltip.prototype.setContent = function () {
|
1528 |
+
var $tip = this.tip()
|
1529 |
+
var title = this.getTitle()
|
1530 |
+
|
1531 |
+
$tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
|
1532 |
+
$tip.removeClass('fade in top bottom left right')
|
1533 |
+
}
|
1534 |
+
|
1535 |
+
Tooltip.prototype.hide = function (callback) {
|
1536 |
+
var that = this
|
1537 |
+
var $tip = $(this.$tip)
|
1538 |
+
var e = $.Event('hide.bs.' + this.type)
|
1539 |
+
|
1540 |
+
function complete() {
|
1541 |
+
if (that.hoverState != 'in') $tip.detach()
|
1542 |
+
that.$element
|
1543 |
+
.removeAttr('aria-describedby')
|
1544 |
+
.trigger('hidden.bs.' + that.type)
|
1545 |
+
callback && callback()
|
1546 |
+
}
|
1547 |
+
|
1548 |
+
this.$element.trigger(e)
|
1549 |
+
|
1550 |
+
if (e.isDefaultPrevented()) return
|
1551 |
+
|
1552 |
+
$tip.removeClass('in')
|
1553 |
+
|
1554 |
+
$.support.transition && $tip.hasClass('fade') ?
|
1555 |
+
$tip
|
1556 |
+
.one('bsTransitionEnd', complete)
|
1557 |
+
.emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
|
1558 |
+
complete()
|
1559 |
+
|
1560 |
+
this.hoverState = null
|
1561 |
+
|
1562 |
+
return this
|
1563 |
+
}
|
1564 |
+
|
1565 |
+
Tooltip.prototype.fixTitle = function () {
|
1566 |
+
var $e = this.$element
|
1567 |
+
if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
|
1568 |
+
$e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
|
1569 |
+
}
|
1570 |
+
}
|
1571 |
+
|
1572 |
+
Tooltip.prototype.hasContent = function () {
|
1573 |
+
return this.getTitle()
|
1574 |
+
}
|
1575 |
+
|
1576 |
+
Tooltip.prototype.getPosition = function ($element) {
|
1577 |
+
$element = $element || this.$element
|
1578 |
+
|
1579 |
+
var el = $element[0]
|
1580 |
+
var isBody = el.tagName == 'BODY'
|
1581 |
+
|
1582 |
+
var elRect = el.getBoundingClientRect()
|
1583 |
+
if (elRect.width == null) {
|
1584 |
+
// width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
|
1585 |
+
elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
|
1586 |
+
}
|
1587 |
+
var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
|
1588 |
+
var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
|
1589 |
+
var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
|
1590 |
+
|
1591 |
+
return $.extend({}, elRect, scroll, outerDims, elOffset)
|
1592 |
+
}
|
1593 |
+
|
1594 |
+
Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
|
1595 |
+
return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
|
1596 |
+
placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
|
1597 |
+
placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
|
1598 |
+
/* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
|
1599 |
+
|
1600 |
+
}
|
1601 |
+
|
1602 |
+
Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
|
1603 |
+
var delta = { top: 0, left: 0 }
|
1604 |
+
if (!this.$viewport) return delta
|
1605 |
+
|
1606 |
+
var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
|
1607 |
+
var viewportDimensions = this.getPosition(this.$viewport)
|
1608 |
+
|
1609 |
+
if (/right|left/.test(placement)) {
|
1610 |
+
var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
|
1611 |
+
var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
|
1612 |
+
if (topEdgeOffset < viewportDimensions.top) { // top overflow
|
1613 |
+
delta.top = viewportDimensions.top - topEdgeOffset
|
1614 |
+
} else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
|
1615 |
+
delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
|
1616 |
+
}
|
1617 |
+
} else {
|
1618 |
+
var leftEdgeOffset = pos.left - viewportPadding
|
1619 |
+
var rightEdgeOffset = pos.left + viewportPadding + actualWidth
|
1620 |
+
if (leftEdgeOffset < viewportDimensions.left) { // left overflow
|
1621 |
+
delta.left = viewportDimensions.left - leftEdgeOffset
|
1622 |
+
} else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
|
1623 |
+
delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
|
1624 |
+
}
|
1625 |
+
}
|
1626 |
+
|
1627 |
+
return delta
|
1628 |
+
}
|
1629 |
+
|
1630 |
+
Tooltip.prototype.getTitle = function () {
|
1631 |
+
var title
|
1632 |
+
var $e = this.$element
|
1633 |
+
var o = this.options
|
1634 |
+
|
1635 |
+
title = $e.attr('data-original-title')
|
1636 |
+
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
|
1637 |
+
|
1638 |
+
return title
|
1639 |
+
}
|
1640 |
+
|
1641 |
+
Tooltip.prototype.getUID = function (prefix) {
|
1642 |
+
do prefix += ~~(Math.random() * 1000000)
|
1643 |
+
while (document.getElementById(prefix))
|
1644 |
+
return prefix
|
1645 |
+
}
|
1646 |
+
|
1647 |
+
Tooltip.prototype.tip = function () {
|
1648 |
+
return (this.$tip = this.$tip || $(this.options.template))
|
1649 |
+
}
|
1650 |
+
|
1651 |
+
Tooltip.prototype.arrow = function () {
|
1652 |
+
return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
|
1653 |
+
}
|
1654 |
+
|
1655 |
+
Tooltip.prototype.enable = function () {
|
1656 |
+
this.enabled = true
|
1657 |
+
}
|
1658 |
+
|
1659 |
+
Tooltip.prototype.disable = function () {
|
1660 |
+
this.enabled = false
|
1661 |
+
}
|
1662 |
+
|
1663 |
+
Tooltip.prototype.toggleEnabled = function () {
|
1664 |
+
this.enabled = !this.enabled
|
1665 |
+
}
|
1666 |
+
|
1667 |
+
Tooltip.prototype.toggle = function (e) {
|
1668 |
+
var self = this
|
1669 |
+
if (e) {
|
1670 |
+
self = $(e.currentTarget).data('bs.' + this.type)
|
1671 |
+
if (!self) {
|
1672 |
+
self = new this.constructor(e.currentTarget, this.getDelegateOptions())
|
1673 |
+
$(e.currentTarget).data('bs.' + this.type, self)
|
1674 |
+
}
|
1675 |
+
}
|
1676 |
+
|
1677 |
+
self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
|
1678 |
+
}
|
1679 |
+
|
1680 |
+
Tooltip.prototype.destroy = function () {
|
1681 |
+
var that = this
|
1682 |
+
clearTimeout(this.timeout)
|
1683 |
+
this.hide(function () {
|
1684 |
+
that.$element.off('.' + that.type).removeData('bs.' + that.type)
|
1685 |
+
})
|
1686 |
+
}
|
1687 |
+
|
1688 |
+
|
1689 |
+
// TOOLTIP PLUGIN DEFINITION
|
1690 |
+
// =========================
|
1691 |
+
|
1692 |
+
function Plugin(option) {
|
1693 |
+
return this.each(function () {
|
1694 |
+
var $this = $(this)
|
1695 |
+
var data = $this.data('bs.tooltip')
|
1696 |
+
var options = typeof option == 'object' && option
|
1697 |
+
|
1698 |
+
if (!data && /destroy|hide/.test(option)) return
|
1699 |
+
if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
|
1700 |
+
if (typeof option == 'string') data[option]()
|
1701 |
+
})
|
1702 |
+
}
|
1703 |
+
|
1704 |
+
var old = $.fn.tooltip
|
1705 |
+
|
1706 |
+
$.fn.tooltip = Plugin
|
1707 |
+
$.fn.tooltip.Constructor = Tooltip
|
1708 |
+
|
1709 |
+
|
1710 |
+
// TOOLTIP NO CONFLICT
|
1711 |
+
// ===================
|
1712 |
+
|
1713 |
+
$.fn.tooltip.noConflict = function () {
|
1714 |
+
$.fn.tooltip = old
|
1715 |
+
return this
|
1716 |
+
}
|
1717 |
+
|
1718 |
+
}(jQuery);
|
1719 |
+
|
1720 |
+
/* ========================================================================
|
1721 |
+
* Bootstrap: popover.js v3.3.4
|
1722 |
+
* http://getbootstrap.com/javascript/#popovers
|
1723 |
+
* ========================================================================
|
1724 |
+
* Copyright 2011-2015 Twitter, Inc.
|
1725 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
1726 |
+
* ======================================================================== */
|
1727 |
+
|
1728 |
+
|
1729 |
+
+function ($) {
|
1730 |
+
'use strict';
|
1731 |
+
|
1732 |
+
// POPOVER PUBLIC CLASS DEFINITION
|
1733 |
+
// ===============================
|
1734 |
+
|
1735 |
+
var Popover = function (element, options) {
|
1736 |
+
this.init('popover', element, options)
|
1737 |
+
}
|
1738 |
+
|
1739 |
+
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
|
1740 |
+
|
1741 |
+
Popover.VERSION = '3.3.4'
|
1742 |
+
|
1743 |
+
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
|
1744 |
+
placement: 'right',
|
1745 |
+
trigger: 'click',
|
1746 |
+
content: '',
|
1747 |
+
template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
|
1748 |
+
})
|
1749 |
+
|
1750 |
+
|
1751 |
+
// NOTE: POPOVER EXTENDS tooltip.js
|
1752 |
+
// ================================
|
1753 |
+
|
1754 |
+
Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
|
1755 |
+
|
1756 |
+
Popover.prototype.constructor = Popover
|
1757 |
+
|
1758 |
+
Popover.prototype.getDefaults = function () {
|
1759 |
+
return Popover.DEFAULTS
|
1760 |
+
}
|
1761 |
+
|
1762 |
+
Popover.prototype.setContent = function () {
|
1763 |
+
var $tip = this.tip()
|
1764 |
+
var title = this.getTitle()
|
1765 |
+
var content = this.getContent()
|
1766 |
+
|
1767 |
+
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
|
1768 |
+
$tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
|
1769 |
+
this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
|
1770 |
+
](content)
|
1771 |
+
|
1772 |
+
$tip.removeClass('fade top bottom left right in')
|
1773 |
+
|
1774 |
+
// IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
|
1775 |
+
// this manually by checking the contents.
|
1776 |
+
if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
|
1777 |
+
}
|
1778 |
+
|
1779 |
+
Popover.prototype.hasContent = function () {
|
1780 |
+
return this.getTitle() || this.getContent()
|
1781 |
+
}
|
1782 |
+
|
1783 |
+
Popover.prototype.getContent = function () {
|
1784 |
+
var $e = this.$element
|
1785 |
+
var o = this.options
|
1786 |
+
|
1787 |
+
return $e.attr('data-content')
|
1788 |
+
|| (typeof o.content == 'function' ?
|
1789 |
+
o.content.call($e[0]) :
|
1790 |
+
o.content)
|
1791 |
+
}
|
1792 |
+
|
1793 |
+
Popover.prototype.arrow = function () {
|
1794 |
+
return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
|
1795 |
+
}
|
1796 |
+
|
1797 |
+
|
1798 |
+
// POPOVER PLUGIN DEFINITION
|
1799 |
+
// =========================
|
1800 |
+
|
1801 |
+
function Plugin(option) {
|
1802 |
+
return this.each(function () {
|
1803 |
+
var $this = $(this)
|
1804 |
+
var data = $this.data('bs.popover')
|
1805 |
+
var options = typeof option == 'object' && option
|
1806 |
+
|
1807 |
+
if (!data && /destroy|hide/.test(option)) return
|
1808 |
+
if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
|
1809 |
+
if (typeof option == 'string') data[option]()
|
1810 |
+
})
|
1811 |
+
}
|
1812 |
+
|
1813 |
+
var old = $.fn.popover
|
1814 |
+
|
1815 |
+
$.fn.popover = Plugin
|
1816 |
+
$.fn.popover.Constructor = Popover
|
1817 |
+
|
1818 |
+
|
1819 |
+
// POPOVER NO CONFLICT
|
1820 |
+
// ===================
|
1821 |
+
|
1822 |
+
$.fn.popover.noConflict = function () {
|
1823 |
+
$.fn.popover = old
|
1824 |
+
return this
|
1825 |
+
}
|
1826 |
+
|
1827 |
+
}(jQuery);
|
1828 |
+
|
1829 |
+
/* ========================================================================
|
1830 |
+
* Bootstrap: scrollspy.js v3.3.4
|
1831 |
+
* http://getbootstrap.com/javascript/#scrollspy
|
1832 |
+
* ========================================================================
|
1833 |
+
* Copyright 2011-2015 Twitter, Inc.
|
1834 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
1835 |
+
* ======================================================================== */
|
1836 |
+
|
1837 |
+
|
1838 |
+
+function ($) {
|
1839 |
+
'use strict';
|
1840 |
+
|
1841 |
+
// SCROLLSPY CLASS DEFINITION
|
1842 |
+
// ==========================
|
1843 |
+
|
1844 |
+
function ScrollSpy(element, options) {
|
1845 |
+
this.$body = $(document.body)
|
1846 |
+
this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
|
1847 |
+
this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
|
1848 |
+
this.selector = (this.options.target || '') + ' .nav li > a'
|
1849 |
+
this.offsets = []
|
1850 |
+
this.targets = []
|
1851 |
+
this.activeTarget = null
|
1852 |
+
this.scrollHeight = 0
|
1853 |
+
|
1854 |
+
this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
|
1855 |
+
this.refresh()
|
1856 |
+
this.process()
|
1857 |
+
}
|
1858 |
+
|
1859 |
+
ScrollSpy.VERSION = '3.3.4'
|
1860 |
+
|
1861 |
+
ScrollSpy.DEFAULTS = {
|
1862 |
+
offset: 10
|
1863 |
+
}
|
1864 |
+
|
1865 |
+
ScrollSpy.prototype.getScrollHeight = function () {
|
1866 |
+
return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
|
1867 |
+
}
|
1868 |
+
|
1869 |
+
ScrollSpy.prototype.refresh = function () {
|
1870 |
+
var that = this
|
1871 |
+
var offsetMethod = 'offset'
|
1872 |
+
var offsetBase = 0
|
1873 |
+
|
1874 |
+
this.offsets = []
|
1875 |
+
this.targets = []
|
1876 |
+
this.scrollHeight = this.getScrollHeight()
|
1877 |
+
|
1878 |
+
if (!$.isWindow(this.$scrollElement[0])) {
|
1879 |
+
offsetMethod = 'position'
|
1880 |
+
offsetBase = this.$scrollElement.scrollTop()
|
1881 |
+
}
|
1882 |
+
|
1883 |
+
this.$body
|
1884 |
+
.find(this.selector)
|
1885 |
+
.map(function () {
|
1886 |
+
var $el = $(this)
|
1887 |
+
var href = $el.data('target') || $el.attr('href')
|
1888 |
+
var $href = /^#./.test(href) && $(href)
|
1889 |
+
|
1890 |
+
return ($href
|
1891 |
+
&& $href.length
|
1892 |
+
&& $href.is(':visible')
|
1893 |
+
&& [[$href[offsetMethod]().top + offsetBase, href]]) || null
|
1894 |
+
})
|
1895 |
+
.sort(function (a, b) { return a[0] - b[0] })
|
1896 |
+
.each(function () {
|
1897 |
+
that.offsets.push(this[0])
|
1898 |
+
that.targets.push(this[1])
|
1899 |
+
})
|
1900 |
+
}
|
1901 |
+
|
1902 |
+
ScrollSpy.prototype.process = function () {
|
1903 |
+
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
|
1904 |
+
var scrollHeight = this.getScrollHeight()
|
1905 |
+
var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
|
1906 |
+
var offsets = this.offsets
|
1907 |
+
var targets = this.targets
|
1908 |
+
var activeTarget = this.activeTarget
|
1909 |
+
var i
|
1910 |
+
|
1911 |
+
if (this.scrollHeight != scrollHeight) {
|
1912 |
+
this.refresh()
|
1913 |
+
}
|
1914 |
+
|
1915 |
+
if (scrollTop >= maxScroll) {
|
1916 |
+
return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
|
1917 |
+
}
|
1918 |
+
|
1919 |
+
if (activeTarget && scrollTop < offsets[0]) {
|
1920 |
+
this.activeTarget = null
|
1921 |
+
return this.clear()
|
1922 |
+
}
|
1923 |
+
|
1924 |
+
for (i = offsets.length; i--;) {
|
1925 |
+
activeTarget != targets[i]
|
1926 |
+
&& scrollTop >= offsets[i]
|
1927 |
+
&& (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
|
1928 |
+
&& this.activate(targets[i])
|
1929 |
+
}
|
1930 |
+
}
|
1931 |
+
|
1932 |
+
ScrollSpy.prototype.activate = function (target) {
|
1933 |
+
this.activeTarget = target
|
1934 |
+
|
1935 |
+
this.clear()
|
1936 |
+
|
1937 |
+
var selector = this.selector +
|
1938 |
+
'[data-target="' + target + '"],' +
|
1939 |
+
this.selector + '[href="' + target + '"]'
|
1940 |
+
|
1941 |
+
var active = $(selector)
|
1942 |
+
.parents('li')
|
1943 |
+
.addClass('active')
|
1944 |
+
|
1945 |
+
if (active.parent('.dropdown-menu').length) {
|
1946 |
+
active = active
|
1947 |
+
.closest('li.dropdown')
|
1948 |
+
.addClass('active')
|
1949 |
+
}
|
1950 |
+
|
1951 |
+
active.trigger('activate.bs.scrollspy')
|
1952 |
+
}
|
1953 |
+
|
1954 |
+
ScrollSpy.prototype.clear = function () {
|
1955 |
+
$(this.selector)
|
1956 |
+
.parentsUntil(this.options.target, '.active')
|
1957 |
+
.removeClass('active')
|
1958 |
+
}
|
1959 |
+
|
1960 |
+
|
1961 |
+
// SCROLLSPY PLUGIN DEFINITION
|
1962 |
+
// ===========================
|
1963 |
+
|
1964 |
+
function Plugin(option) {
|
1965 |
+
return this.each(function () {
|
1966 |
+
var $this = $(this)
|
1967 |
+
var data = $this.data('bs.scrollspy')
|
1968 |
+
var options = typeof option == 'object' && option
|
1969 |
+
|
1970 |
+
if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
|
1971 |
+
if (typeof option == 'string') data[option]()
|
1972 |
+
})
|
1973 |
+
}
|
1974 |
+
|
1975 |
+
var old = $.fn.scrollspy
|
1976 |
+
|
1977 |
+
$.fn.scrollspy = Plugin
|
1978 |
+
$.fn.scrollspy.Constructor = ScrollSpy
|
1979 |
+
|
1980 |
+
|
1981 |
+
// SCROLLSPY NO CONFLICT
|
1982 |
+
// =====================
|
1983 |
+
|
1984 |
+
$.fn.scrollspy.noConflict = function () {
|
1985 |
+
$.fn.scrollspy = old
|
1986 |
+
return this
|
1987 |
+
}
|
1988 |
+
|
1989 |
+
|
1990 |
+
// SCROLLSPY DATA-API
|
1991 |
+
// ==================
|
1992 |
+
|
1993 |
+
$(window).on('load.bs.scrollspy.data-api', function () {
|
1994 |
+
$('[data-spy="scroll"]').each(function () {
|
1995 |
+
var $spy = $(this)
|
1996 |
+
Plugin.call($spy, $spy.data())
|
1997 |
+
})
|
1998 |
+
})
|
1999 |
+
|
2000 |
+
}(jQuery);
|
2001 |
+
|
2002 |
+
/* ========================================================================
|
2003 |
+
* Bootstrap: tab.js v3.3.4
|
2004 |
+
* http://getbootstrap.com/javascript/#tabs
|
2005 |
+
* ========================================================================
|
2006 |
+
* Copyright 2011-2015 Twitter, Inc.
|
2007 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
2008 |
+
* ======================================================================== */
|
2009 |
+
|
2010 |
+
|
2011 |
+
+function ($) {
|
2012 |
+
'use strict';
|
2013 |
+
|
2014 |
+
// TAB CLASS DEFINITION
|
2015 |
+
// ====================
|
2016 |
+
|
2017 |
+
var Tab = function (element) {
|
2018 |
+
this.element = $(element)
|
2019 |
+
}
|
2020 |
+
|
2021 |
+
Tab.VERSION = '3.3.4'
|
2022 |
+
|
2023 |
+
Tab.TRANSITION_DURATION = 150
|
2024 |
+
|
2025 |
+
Tab.prototype.show = function () {
|
2026 |
+
var $this = this.element
|
2027 |
+
var $ul = $this.closest('ul:not(.dropdown-menu)')
|
2028 |
+
var selector = $this.data('target')
|
2029 |
+
|
2030 |
+
if (!selector) {
|
2031 |
+
selector = $this.attr('href')
|
2032 |
+
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
|
2033 |
+
}
|
2034 |
+
|
2035 |
+
if ($this.parent('li').hasClass('active')) return
|
2036 |
+
|
2037 |
+
var $previous = $ul.find('.active:last a')
|
2038 |
+
var hideEvent = $.Event('hide.bs.tab', {
|
2039 |
+
relatedTarget: $this[0]
|
2040 |
+
})
|
2041 |
+
var showEvent = $.Event('show.bs.tab', {
|
2042 |
+
relatedTarget: $previous[0]
|
2043 |
+
})
|
2044 |
+
|
2045 |
+
$previous.trigger(hideEvent)
|
2046 |
+
$this.trigger(showEvent)
|
2047 |
+
|
2048 |
+
if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
|
2049 |
+
|
2050 |
+
var $target = $(selector)
|
2051 |
+
|
2052 |
+
this.activate($this.closest('li'), $ul)
|
2053 |
+
this.activate($target, $target.parent(), function () {
|
2054 |
+
$previous.trigger({
|
2055 |
+
type: 'hidden.bs.tab',
|
2056 |
+
relatedTarget: $this[0]
|
2057 |
+
})
|
2058 |
+
$this.trigger({
|
2059 |
+
type: 'shown.bs.tab',
|
2060 |
+
relatedTarget: $previous[0]
|
2061 |
+
})
|
2062 |
+
})
|
2063 |
+
}
|
2064 |
+
|
2065 |
+
Tab.prototype.activate = function (element, container, callback) {
|
2066 |
+
var $active = container.find('> .active')
|
2067 |
+
var transition = callback
|
2068 |
+
&& $.support.transition
|
2069 |
+
&& (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length)
|
2070 |
+
|
2071 |
+
function next() {
|
2072 |
+
$active
|
2073 |
+
.removeClass('active')
|
2074 |
+
.find('> .dropdown-menu > .active')
|
2075 |
+
.removeClass('active')
|
2076 |
+
.end()
|
2077 |
+
.find('[data-toggle="tab"]')
|
2078 |
+
.attr('aria-expanded', false)
|
2079 |
+
|
2080 |
+
element
|
2081 |
+
.addClass('active')
|
2082 |
+
.find('[data-toggle="tab"]')
|
2083 |
+
.attr('aria-expanded', true)
|
2084 |
+
|
2085 |
+
if (transition) {
|
2086 |
+
element[0].offsetWidth // reflow for transition
|
2087 |
+
element.addClass('in')
|
2088 |
+
} else {
|
2089 |
+
element.removeClass('fade')
|
2090 |
+
}
|
2091 |
+
|
2092 |
+
if (element.parent('.dropdown-menu').length) {
|
2093 |
+
element
|
2094 |
+
.closest('li.dropdown')
|
2095 |
+
.addClass('active')
|
2096 |
+
.end()
|
2097 |
+
.find('[data-toggle="tab"]')
|
2098 |
+
.attr('aria-expanded', true)
|
2099 |
+
}
|
2100 |
+
|
2101 |
+
callback && callback()
|
2102 |
+
}
|
2103 |
+
|
2104 |
+
$active.length && transition ?
|
2105 |
+
$active
|
2106 |
+
.one('bsTransitionEnd', next)
|
2107 |
+
.emulateTransitionEnd(Tab.TRANSITION_DURATION) :
|
2108 |
+
next()
|
2109 |
+
|
2110 |
+
$active.removeClass('in')
|
2111 |
+
}
|
2112 |
+
|
2113 |
+
|
2114 |
+
// TAB PLUGIN DEFINITION
|
2115 |
+
// =====================
|
2116 |
+
|
2117 |
+
function Plugin(option) {
|
2118 |
+
return this.each(function () {
|
2119 |
+
var $this = $(this)
|
2120 |
+
var data = $this.data('bs.tab')
|
2121 |
+
|
2122 |
+
if (!data) $this.data('bs.tab', (data = new Tab(this)))
|
2123 |
+
if (typeof option == 'string') data[option]()
|
2124 |
+
})
|
2125 |
+
}
|
2126 |
+
|
2127 |
+
var old = $.fn.tab
|
2128 |
+
|
2129 |
+
$.fn.tab = Plugin
|
2130 |
+
$.fn.tab.Constructor = Tab
|
2131 |
+
|
2132 |
+
|
2133 |
+
// TAB NO CONFLICT
|
2134 |
+
// ===============
|
2135 |
+
|
2136 |
+
$.fn.tab.noConflict = function () {
|
2137 |
+
$.fn.tab = old
|
2138 |
+
return this
|
2139 |
+
}
|
2140 |
+
|
2141 |
+
|
2142 |
+
// TAB DATA-API
|
2143 |
+
// ============
|
2144 |
+
|
2145 |
+
var clickHandler = function (e) {
|
2146 |
+
e.preventDefault()
|
2147 |
+
Plugin.call($(this), 'show')
|
2148 |
+
}
|
2149 |
+
|
2150 |
+
$(document)
|
2151 |
+
.on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
|
2152 |
+
.on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
|
2153 |
+
|
2154 |
+
}(jQuery);
|
2155 |
+
|
2156 |
+
/* ========================================================================
|
2157 |
+
* Bootstrap: affix.js v3.3.4
|
2158 |
+
* http://getbootstrap.com/javascript/#affix
|
2159 |
+
* ========================================================================
|
2160 |
+
* Copyright 2011-2015 Twitter, Inc.
|
2161 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
2162 |
+
* ======================================================================== */
|
2163 |
+
|
2164 |
+
|
2165 |
+
+function ($) {
|
2166 |
+
'use strict';
|
2167 |
+
|
2168 |
+
// AFFIX CLASS DEFINITION
|
2169 |
+
// ======================
|
2170 |
+
|
2171 |
+
var Affix = function (element, options) {
|
2172 |
+
this.options = $.extend({}, Affix.DEFAULTS, options)
|
2173 |
+
|
2174 |
+
this.$target = $(this.options.target)
|
2175 |
+
.on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
|
2176 |
+
.on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
|
2177 |
+
|
2178 |
+
this.$element = $(element)
|
2179 |
+
this.affixed = null
|
2180 |
+
this.unpin = null
|
2181 |
+
this.pinnedOffset = null
|
2182 |
+
|
2183 |
+
this.checkPosition()
|
2184 |
+
}
|
2185 |
+
|
2186 |
+
Affix.VERSION = '3.3.4'
|
2187 |
+
|
2188 |
+
Affix.RESET = 'affix affix-top affix-bottom'
|
2189 |
+
|
2190 |
+
Affix.DEFAULTS = {
|
2191 |
+
offset: 0,
|
2192 |
+
target: window
|
2193 |
+
}
|
2194 |
+
|
2195 |
+
Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
|
2196 |
+
var scrollTop = this.$target.scrollTop()
|
2197 |
+
var position = this.$element.offset()
|
2198 |
+
var targetHeight = this.$target.height()
|
2199 |
+
|
2200 |
+
if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
|
2201 |
+
|
2202 |
+
if (this.affixed == 'bottom') {
|
2203 |
+
if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
|
2204 |
+
return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
|
2205 |
+
}
|
2206 |
+
|
2207 |
+
var initializing = this.affixed == null
|
2208 |
+
var colliderTop = initializing ? scrollTop : position.top
|
2209 |
+
var colliderHeight = initializing ? targetHeight : height
|
2210 |
+
|
2211 |
+
if (offsetTop != null && scrollTop <= offsetTop) return 'top'
|
2212 |
+
if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
|
2213 |
+
|
2214 |
+
return false
|
2215 |
+
}
|
2216 |
+
|
2217 |
+
Affix.prototype.getPinnedOffset = function () {
|
2218 |
+
if (this.pinnedOffset) return this.pinnedOffset
|
2219 |
+
this.$element.removeClass(Affix.RESET).addClass('affix')
|
2220 |
+
var scrollTop = this.$target.scrollTop()
|
2221 |
+
var position = this.$element.offset()
|
2222 |
+
return (this.pinnedOffset = position.top - scrollTop)
|
2223 |
+
}
|
2224 |
+
|
2225 |
+
Affix.prototype.checkPositionWithEventLoop = function () {
|
2226 |
+
setTimeout($.proxy(this.checkPosition, this), 1)
|
2227 |
+
}
|
2228 |
+
|
2229 |
+
Affix.prototype.checkPosition = function () {
|
2230 |
+
if (!this.$element.is(':visible')) return
|
2231 |
+
|
2232 |
+
var height = this.$element.height()
|
2233 |
+
var offset = this.options.offset
|
2234 |
+
var offsetTop = offset.top
|
2235 |
+
var offsetBottom = offset.bottom
|
2236 |
+
var scrollHeight = $(document.body).height()
|
2237 |
+
|
2238 |
+
if (typeof offset != 'object') offsetBottom = offsetTop = offset
|
2239 |
+
if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
|
2240 |
+
if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
|
2241 |
+
|
2242 |
+
var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
|
2243 |
+
|
2244 |
+
if (this.affixed != affix) {
|
2245 |
+
if (this.unpin != null) this.$element.css('top', '')
|
2246 |
+
|
2247 |
+
var affixType = 'affix' + (affix ? '-' + affix : '')
|
2248 |
+
var e = $.Event(affixType + '.bs.affix')
|
2249 |
+
|
2250 |
+
this.$element.trigger(e)
|
2251 |
+
|
2252 |
+
if (e.isDefaultPrevented()) return
|
2253 |
+
|
2254 |
+
this.affixed = affix
|
2255 |
+
this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
|
2256 |
+
|
2257 |
+
this.$element
|
2258 |
+
.removeClass(Affix.RESET)
|
2259 |
+
.addClass(affixType)
|
2260 |
+
.trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
|
2261 |
+
}
|
2262 |
+
|
2263 |
+
if (affix == 'bottom') {
|
2264 |
+
this.$element.offset({
|
2265 |
+
top: scrollHeight - height - offsetBottom
|
2266 |
+
})
|
2267 |
+
}
|
2268 |
+
}
|
2269 |
+
|
2270 |
+
|
2271 |
+
// AFFIX PLUGIN DEFINITION
|
2272 |
+
// =======================
|
2273 |
+
|
2274 |
+
function Plugin(option) {
|
2275 |
+
return this.each(function () {
|
2276 |
+
var $this = $(this)
|
2277 |
+
var data = $this.data('bs.affix')
|
2278 |
+
var options = typeof option == 'object' && option
|
2279 |
+
|
2280 |
+
if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
|
2281 |
+
if (typeof option == 'string') data[option]()
|
2282 |
+
})
|
2283 |
+
}
|
2284 |
+
|
2285 |
+
var old = $.fn.affix
|
2286 |
+
|
2287 |
+
$.fn.affix = Plugin
|
2288 |
+
$.fn.affix.Constructor = Affix
|
2289 |
+
|
2290 |
+
|
2291 |
+
// AFFIX NO CONFLICT
|
2292 |
+
// =================
|
2293 |
+
|
2294 |
+
$.fn.affix.noConflict = function () {
|
2295 |
+
$.fn.affix = old
|
2296 |
+
return this
|
2297 |
+
}
|
2298 |
+
|
2299 |
+
|
2300 |
+
// AFFIX DATA-API
|
2301 |
+
// ==============
|
2302 |
+
|
2303 |
+
$(window).on('load', function () {
|
2304 |
+
$('[data-spy="affix"]').each(function () {
|
2305 |
+
var $spy = $(this)
|
2306 |
+
var data = $spy.data()
|
2307 |
+
|
2308 |
+
data.offset = data.offset || {}
|
2309 |
+
|
2310 |
+
if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
|
2311 |
+
if (data.offsetTop != null) data.offset.top = data.offsetTop
|
2312 |
+
|
2313 |
+
Plugin.call($spy, data)
|
2314 |
+
})
|
2315 |
+
})
|
2316 |
+
|
2317 |
+
}(jQuery);
|
res/bootstrap/js/bootstrap.min.js
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Bootstrap v3.3.4 (http://getbootstrap.com)
|
3 |
+
* Copyright 2011-2015 Twitter, Inc.
|
4 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5 |
+
*/
|
6 |
+
if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.4",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.4",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.4",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.4",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="modal-backdrop '+e+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.4",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.4",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){
|
7 |
+
var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.4",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a(document.body).height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
|
res/colorbox/colorbox.css
ADDED
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
Colorbox Core Style:
|
3 |
+
The following CSS is consistent between example themes and should not be altered.
|
4 |
+
*/
|
5 |
+
#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
|
6 |
+
#cboxWrapper {max-width:none;}
|
7 |
+
#cboxOverlay{position:fixed; width:100%; height:100%;}
|
8 |
+
#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
|
9 |
+
#cboxContent{position:relative;}
|
10 |
+
#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
|
11 |
+
#cboxTitle{margin:0;}
|
12 |
+
#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
|
13 |
+
#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
|
14 |
+
.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
|
15 |
+
.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;}
|
16 |
+
#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
|
17 |
+
|
18 |
+
/*
|
19 |
+
User Style:
|
20 |
+
Change the following styles to modify the appearance of Colorbox. They are
|
21 |
+
ordered & tabbed in a way that represents the nesting of the generated HTML.
|
22 |
+
*/
|
23 |
+
#cboxOverlay{background:url(images/overlay.png) repeat 0 0; opacity: 0.9; filter: alpha(opacity = 90);}
|
24 |
+
#colorbox{outline:0;}
|
25 |
+
#cboxTopLeft{width:21px; height:21px; background:url(images/controls.png) no-repeat -101px 0;}
|
26 |
+
#cboxTopRight{width:21px; height:21px; background:url(images/controls.png) no-repeat -130px 0;}
|
27 |
+
#cboxBottomLeft{width:21px; height:21px; background:url(images/controls.png) no-repeat -101px -29px;}
|
28 |
+
#cboxBottomRight{width:21px; height:21px; background:url(images/controls.png) no-repeat -130px -29px;}
|
29 |
+
#cboxMiddleLeft{width:21px; background:url(images/controls.png) left top repeat-y;}
|
30 |
+
#cboxMiddleRight{width:21px; background:url(images/controls.png) right top repeat-y;}
|
31 |
+
#cboxTopCenter{height:21px; background:url(images/border.png) 0 0 repeat-x;}
|
32 |
+
#cboxBottomCenter{height:21px; background:url(images/border.png) 0 -29px repeat-x;}
|
33 |
+
#cboxContent{background:#fff; overflow:hidden;}
|
34 |
+
.cboxIframe{background:#fff;}
|
35 |
+
#cboxError{padding:50px; border:1px solid #ccc;}
|
36 |
+
#cboxLoadedContent{margin-bottom:28px;}
|
37 |
+
#cboxTitle{position:absolute; bottom:4px; left:0; text-align:center; width:100%; color:#949494;}
|
38 |
+
#cboxCurrent{position:absolute; bottom:4px; left:58px; color:#949494;}
|
39 |
+
#cboxLoadingOverlay{background:url(images/loading_background.png) no-repeat center center;}
|
40 |
+
#cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
|
41 |
+
|
42 |
+
/* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
|
43 |
+
#cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; }
|
44 |
+
|
45 |
+
/* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
|
46 |
+
#cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}
|
47 |
+
|
48 |
+
#cboxSlideshow{position:absolute; bottom:4px; right:30px; color:#0092ef;}
|
49 |
+
#cboxPrevious{position:absolute; bottom:0; left:0; background:url(images/controls.png) no-repeat -75px 0; width:25px; height:25px; text-indent:-9999px;}
|
50 |
+
#cboxPrevious:hover{background-position:-75px -25px;}
|
51 |
+
#cboxNext{position:absolute; bottom:0; left:27px; background:url(images/controls.png) no-repeat -50px 0; width:25px; height:25px; text-indent:-9999px;}
|
52 |
+
#cboxNext:hover{background-position:-50px -25px;}
|
53 |
+
#cboxClose{position:absolute; bottom:0; right:0; background:url(images/controls.png) no-repeat -25px 0; width:25px; height:25px; text-indent:-9999px;}
|
54 |
+
#cboxClose:hover{background-position:-25px -25px;}
|
55 |
+
|
56 |
+
/*
|
57 |
+
The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill
|
58 |
+
when an alpha filter (opacity change) is set on the element or ancestor element. This style is not applied to or needed in IE9.
|
59 |
+
See: http://jacklmoore.com/notes/ie-transparency-problems/
|
60 |
+
*/
|
61 |
+
.cboxIE #cboxTopLeft,
|
62 |
+
.cboxIE #cboxTopCenter,
|
63 |
+
.cboxIE #cboxTopRight,
|
64 |
+
.cboxIE #cboxBottomLeft,
|
65 |
+
.cboxIE #cboxBottomCenter,
|
66 |
+
.cboxIE #cboxBottomRight,
|
67 |
+
.cboxIE #cboxMiddleLeft,
|
68 |
+
.cboxIE #cboxMiddleRight {
|
69 |
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
|
70 |
+
}
|
res/colorbox/images/border.png
ADDED
Binary file
|
res/colorbox/images/controls.png
ADDED
Binary file
|
res/colorbox/images/loading.gif
ADDED
Binary file
|
res/colorbox/images/loading_background.png
ADDED
Binary file
|
res/colorbox/images/overlay.png
ADDED
Binary file
|
res/colorbox/jquery.colorbox-min.js
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
Colorbox 1.6.1
|
3 |
+
license: MIT
|
4 |
+
http://www.jacklmoore.com/colorbox
|
5 |
+
*/
|
6 |
+
(function(t,e,i){function n(i,n,o){var r=e.createElement(i);return n&&(r.id=Z+n),o&&(r.style.cssText=o),t(r)}function o(){return i.innerHeight?i.innerHeight:t(i).height()}function r(e,i){i!==Object(i)&&(i={}),this.cache={},this.el=e,this.value=function(e){var n;return void 0===this.cache[e]&&(n=t(this.el).attr("data-cbox-"+e),void 0!==n?this.cache[e]=n:void 0!==i[e]?this.cache[e]=i[e]:void 0!==X[e]&&(this.cache[e]=X[e])),this.cache[e]},this.get=function(e){var i=this.value(e);return t.isFunction(i)?i.call(this.el,this):i}}function h(t){var e=W.length,i=(A+t)%e;return 0>i?e+i:i}function a(t,e){return Math.round((/%/.test(t)?("x"===e?E.width():o())/100:1)*parseInt(t,10))}function s(t,e){return t.get("photo")||t.get("photoRegex").test(e)}function l(t,e){return t.get("retinaUrl")&&i.devicePixelRatio>1?e.replace(t.get("photoRegex"),t.get("retinaSuffix")):e}function d(t){"contains"in y[0]&&!y[0].contains(t.target)&&t.target!==v[0]&&(t.stopPropagation(),y.focus())}function c(t){c.str!==t&&(y.add(v).removeClass(c.str).addClass(t),c.str=t)}function g(e){A=0,e&&e!==!1&&"nofollow"!==e?(W=t("."+te).filter(function(){var i=t.data(this,Y),n=new r(this,i);return n.get("rel")===e}),A=W.index(_.el),-1===A&&(W=W.add(_.el),A=W.length-1)):W=t(_.el)}function u(i){t(e).trigger(i),ae.triggerHandler(i)}function f(i){var o;if(!G){if(o=t(i).data(Y),_=new r(i,o),g(_.get("rel")),!$){$=q=!0,c(_.get("className")),y.css({visibility:"hidden",display:"block",opacity:""}),I=n(se,"LoadedContent","width:0; height:0; overflow:hidden; visibility:hidden"),b.css({width:"",height:""}).append(I),j=T.height()+k.height()+b.outerHeight(!0)-b.height(),D=C.width()+H.width()+b.outerWidth(!0)-b.width(),N=I.outerHeight(!0),z=I.outerWidth(!0);var h=a(_.get("initialWidth"),"x"),s=a(_.get("initialHeight"),"y"),l=_.get("maxWidth"),f=_.get("maxHeight");_.w=(l!==!1?Math.min(h,a(l,"x")):h)-z-D,_.h=(f!==!1?Math.min(s,a(f,"y")):s)-N-j,I.css({width:"",height:_.h}),J.position(),u(ee),_.get("onOpen"),O.add(S).hide(),y.focus(),_.get("trapFocus")&&e.addEventListener&&(e.addEventListener("focus",d,!0),ae.one(re,function(){e.removeEventListener("focus",d,!0)})),_.get("returnFocus")&&ae.one(re,function(){t(_.el).focus()})}var p=parseFloat(_.get("opacity"));v.css({opacity:p===p?p:"",cursor:_.get("overlayClose")?"pointer":"",visibility:"visible"}).show(),_.get("closeButton")?B.html(_.get("close")).appendTo(b):B.appendTo("<div/>"),w()}}function p(){y||(V=!1,E=t(i),y=n(se).attr({id:Y,"class":t.support.opacity===!1?Z+"IE":"",role:"dialog",tabindex:"-1"}).hide(),v=n(se,"Overlay").hide(),M=t([n(se,"LoadingOverlay")[0],n(se,"LoadingGraphic")[0]]),x=n(se,"Wrapper"),b=n(se,"Content").append(S=n(se,"Title"),F=n(se,"Current"),P=t('<button type="button"/>').attr({id:Z+"Previous"}),K=t('<button type="button"/>').attr({id:Z+"Next"}),R=n("button","Slideshow"),M),B=t('<button type="button"/>').attr({id:Z+"Close"}),x.append(n(se).append(n(se,"TopLeft"),T=n(se,"TopCenter"),n(se,"TopRight")),n(se,!1,"clear:left").append(C=n(se,"MiddleLeft"),b,H=n(se,"MiddleRight")),n(se,!1,"clear:left").append(n(se,"BottomLeft"),k=n(se,"BottomCenter"),n(se,"BottomRight"))).find("div div").css({"float":"left"}),L=n(se,!1,"position:absolute; width:9999px; visibility:hidden; display:none; max-width:none;"),O=K.add(P).add(F).add(R)),e.body&&!y.parent().length&&t(e.body).append(v,y.append(x,L))}function m(){function i(t){t.which>1||t.shiftKey||t.altKey||t.metaKey||t.ctrlKey||(t.preventDefault(),f(this))}return y?(V||(V=!0,K.click(function(){J.next()}),P.click(function(){J.prev()}),B.click(function(){J.close()}),v.click(function(){_.get("overlayClose")&&J.close()}),t(e).bind("keydown."+Z,function(t){var e=t.keyCode;$&&_.get("escKey")&&27===e&&(t.preventDefault(),J.close()),$&&_.get("arrowKey")&&W[1]&&!t.altKey&&(37===e?(t.preventDefault(),P.click()):39===e&&(t.preventDefault(),K.click()))}),t.isFunction(t.fn.on)?t(e).on("click."+Z,"."+te,i):t("."+te).live("click."+Z,i)),!0):!1}function w(){var e,o,r,h=J.prep,d=++le;if(q=!0,U=!1,u(he),u(ie),_.get("onLoad"),_.h=_.get("height")?a(_.get("height"),"y")-N-j:_.get("innerHeight")&&a(_.get("innerHeight"),"y"),_.w=_.get("width")?a(_.get("width"),"x")-z-D:_.get("innerWidth")&&a(_.get("innerWidth"),"x"),_.mw=_.w,_.mh=_.h,_.get("maxWidth")&&(_.mw=a(_.get("maxWidth"),"x")-z-D,_.mw=_.w&&_.w<_.mw?_.w:_.mw),_.get("maxHeight")&&(_.mh=a(_.get("maxHeight"),"y")-N-j,_.mh=_.h&&_.h<_.mh?_.h:_.mh),e=_.get("href"),Q=setTimeout(function(){M.show()},100),_.get("inline")){var c=t(e);r=t("<div>").hide().insertBefore(c),ae.one(he,function(){r.replaceWith(c)}),h(c)}else _.get("iframe")?h(" "):_.get("html")?h(_.get("html")):s(_,e)?(e=l(_,e),U=_.get("createImg"),t(U).addClass(Z+"Photo").bind("error."+Z,function(){h(n(se,"Error").html(_.get("imgError")))}).one("load",function(){d===le&&setTimeout(function(){var e;_.get("retinaImage")&&i.devicePixelRatio>1&&(U.height=U.height/i.devicePixelRatio,U.width=U.width/i.devicePixelRatio),_.get("scalePhotos")&&(o=function(){U.height-=U.height*e,U.width-=U.width*e},_.mw&&U.width>_.mw&&(e=(U.width-_.mw)/U.width,o()),_.mh&&U.height>_.mh&&(e=(U.height-_.mh)/U.height,o())),_.h&&(U.style.marginTop=Math.max(_.mh-U.height,0)/2+"px"),W[1]&&(_.get("loop")||W[A+1])&&(U.style.cursor="pointer",t(U).bind("click."+Z,function(){J.next()})),U.style.width=U.width+"px",U.style.height=U.height+"px",h(U)},1)}),U.src=e):e&&L.load(e,_.get("data"),function(e,i){d===le&&h("error"===i?n(se,"Error").html(_.get("xhrError")):t(this).contents())})}var v,y,x,b,T,C,H,k,W,E,I,L,M,S,F,R,K,P,B,O,_,j,D,N,z,A,U,$,q,G,Q,J,V,X={html:!1,photo:!1,iframe:!1,inline:!1,transition:"elastic",speed:300,fadeOut:300,width:!1,initialWidth:"600",innerWidth:!1,maxWidth:!1,height:!1,initialHeight:"450",innerHeight:!1,maxHeight:!1,scalePhotos:!0,scrolling:!0,opacity:.9,preloading:!0,className:!1,overlayClose:!0,escKey:!0,arrowKey:!0,top:!1,bottom:!1,left:!1,right:!1,fixed:!1,data:void 0,closeButton:!0,fastIframe:!0,open:!1,reposition:!0,loop:!0,slideshow:!1,slideshowAuto:!0,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",photoRegex:/\.(gif|png|jp(e|g|eg)|bmp|ico|webp|jxr|svg)((#|\?).*)?$/i,retinaImage:!1,retinaUrl:!1,retinaSuffix:"@2x.$1",current:"image {current} of {total}",previous:"previous",next:"next",close:"close",xhrError:"This content failed to load.",imgError:"This image failed to load.",returnFocus:!0,trapFocus:!0,onOpen:!1,onLoad:!1,onComplete:!1,onCleanup:!1,onClosed:!1,rel:function(){return this.rel},href:function(){return t(this).attr("href")},title:function(){return this.title},createImg:function(){var e=new Image,i=t(this).data("cbox-img-attrs");return"object"==typeof i&&t.each(i,function(t,i){e[t]=i}),e},createIframe:function(){var i=e.createElement("iframe"),n=t(this).data("cbox-iframe-attrs");return"object"==typeof n&&t.each(n,function(t,e){i[t]=e}),"frameBorder"in i&&(i.frameBorder=0),"allowTransparency"in i&&(i.allowTransparency="true"),i.name=(new Date).getTime(),i.allowFullScreen=!0,i}},Y="colorbox",Z="cbox",te=Z+"Element",ee=Z+"_open",ie=Z+"_load",ne=Z+"_complete",oe=Z+"_cleanup",re=Z+"_closed",he=Z+"_purge",ae=t("<a/>"),se="div",le=0,de={},ce=function(){function t(){clearTimeout(h)}function e(){(_.get("loop")||W[A+1])&&(t(),h=setTimeout(J.next,_.get("slideshowSpeed")))}function i(){R.html(_.get("slideshowStop")).unbind(s).one(s,n),ae.bind(ne,e).bind(ie,t),y.removeClass(a+"off").addClass(a+"on")}function n(){t(),ae.unbind(ne,e).unbind(ie,t),R.html(_.get("slideshowStart")).unbind(s).one(s,function(){J.next(),i()}),y.removeClass(a+"on").addClass(a+"off")}function o(){r=!1,R.hide(),t(),ae.unbind(ne,e).unbind(ie,t),y.removeClass(a+"off "+a+"on")}var r,h,a=Z+"Slideshow_",s="click."+Z;return function(){r?_.get("slideshow")||(ae.unbind(oe,o),o()):_.get("slideshow")&&W[1]&&(r=!0,ae.one(oe,o),_.get("slideshowAuto")?i():n(),R.show())}}();t[Y]||(t(p),J=t.fn[Y]=t[Y]=function(e,i){var n,o=this;return e=e||{},t.isFunction(o)&&(o=t("<a/>"),e.open=!0),o[0]?(p(),m()&&(i&&(e.onComplete=i),o.each(function(){var i=t.data(this,Y)||{};t.data(this,Y,t.extend(i,e))}).addClass(te),n=new r(o[0],e),n.get("open")&&f(o[0])),o):o},J.position=function(e,i){function n(){T[0].style.width=k[0].style.width=b[0].style.width=parseInt(y[0].style.width,10)-D+"px",b[0].style.height=C[0].style.height=H[0].style.height=parseInt(y[0].style.height,10)-j+"px"}var r,h,s,l=0,d=0,c=y.offset();if(E.unbind("resize."+Z),y.css({top:-9e4,left:-9e4}),h=E.scrollTop(),s=E.scrollLeft(),_.get("fixed")?(c.top-=h,c.left-=s,y.css({position:"fixed"})):(l=h,d=s,y.css({position:"absolute"})),d+=_.get("right")!==!1?Math.max(E.width()-_.w-z-D-a(_.get("right"),"x"),0):_.get("left")!==!1?a(_.get("left"),"x"):Math.round(Math.max(E.width()-_.w-z-D,0)/2),l+=_.get("bottom")!==!1?Math.max(o()-_.h-N-j-a(_.get("bottom"),"y"),0):_.get("top")!==!1?a(_.get("top"),"y"):Math.round(Math.max(o()-_.h-N-j,0)/2),y.css({top:c.top,left:c.left,visibility:"visible"}),x[0].style.width=x[0].style.height="9999px",r={width:_.w+z+D,height:_.h+N+j,top:l,left:d},e){var g=0;t.each(r,function(t){return r[t]!==de[t]?(g=e,void 0):void 0}),e=g}de=r,e||y.css(r),y.dequeue().animate(r,{duration:e||0,complete:function(){n(),q=!1,x[0].style.width=_.w+z+D+"px",x[0].style.height=_.h+N+j+"px",_.get("reposition")&&setTimeout(function(){E.bind("resize."+Z,J.position)},1),t.isFunction(i)&&i()},step:n})},J.resize=function(t){var e;$&&(t=t||{},t.width&&(_.w=a(t.width,"x")-z-D),t.innerWidth&&(_.w=a(t.innerWidth,"x")),I.css({width:_.w}),t.height&&(_.h=a(t.height,"y")-N-j),t.innerHeight&&(_.h=a(t.innerHeight,"y")),t.innerHeight||t.height||(e=I.scrollTop(),I.css({height:"auto"}),_.h=I.height()),I.css({height:_.h}),e&&I.scrollTop(e),J.position("none"===_.get("transition")?0:_.get("speed")))},J.prep=function(i){function o(){return _.w=_.w||I.width(),_.w=_.mw&&_.mw<_.w?_.mw:_.w,_.w}function a(){return _.h=_.h||I.height(),_.h=_.mh&&_.mh<_.h?_.mh:_.h,_.h}if($){var d,g="none"===_.get("transition")?0:_.get("speed");I.remove(),I=n(se,"LoadedContent").append(i),I.hide().appendTo(L.show()).css({width:o(),overflow:_.get("scrolling")?"auto":"hidden"}).css({height:a()}).prependTo(b),L.hide(),t(U).css({"float":"none"}),c(_.get("className")),d=function(){function i(){t.support.opacity===!1&&y[0].style.removeAttribute("filter")}var n,o,a=W.length;$&&(o=function(){clearTimeout(Q),M.hide(),u(ne),_.get("onComplete")},S.html(_.get("title")).show(),I.show(),a>1?("string"==typeof _.get("current")&&F.html(_.get("current").replace("{current}",A+1).replace("{total}",a)).show(),K[_.get("loop")||a-1>A?"show":"hide"]().html(_.get("next")),P[_.get("loop")||A?"show":"hide"]().html(_.get("previous")),ce(),_.get("preloading")&&t.each([h(-1),h(1)],function(){var i,n=W[this],o=new r(n,t.data(n,Y)),h=o.get("href");h&&s(o,h)&&(h=l(o,h),i=e.createElement("img"),i.src=h)})):O.hide(),_.get("iframe")?(n=_.get("createIframe"),_.get("scrolling")||(n.scrolling="no"),t(n).attr({src:_.get("href"),"class":Z+"Iframe"}).one("load",o).appendTo(I),ae.one(he,function(){n.src="//about:blank"}),_.get("fastIframe")&&t(n).trigger("load")):o(),"fade"===_.get("transition")?y.fadeTo(g,1,i):i())},"fade"===_.get("transition")?y.fadeTo(g,0,function(){J.position(0,d)}):J.position(g,d)}},J.next=function(){!q&&W[1]&&(_.get("loop")||W[A+1])&&(A=h(1),f(W[A]))},J.prev=function(){!q&&W[1]&&(_.get("loop")||A)&&(A=h(-1),f(W[A]))},J.close=function(){$&&!G&&(G=!0,$=!1,u(oe),_.get("onCleanup"),E.unbind("."+Z),v.fadeTo(_.get("fadeOut")||0,0),y.stop().fadeTo(_.get("fadeOut")||0,0,function(){y.hide(),v.hide(),u(he),I.remove(),setTimeout(function(){G=!1,u(re),_.get("onClosed")},1)}))},J.remove=function(){y&&(y.stop(),t[Y].close(),y.stop(!1,!0).remove(),v.remove(),G=!1,y=null,t("."+te).removeData(Y).removeClass(te),t(e).unbind("click."+Z).unbind("keydown."+Z))},J.element=function(){return t(_.el)},J.settings=X)})(jQuery,document,window);
|
res/css/admin.css
ADDED
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.egg-container .deckgrid[deckgrid]::before {
|
2 |
+
content: '4 .col-md-3';
|
3 |
+
font-size: 0;
|
4 |
+
visibility: hidden;
|
5 |
+
}
|
6 |
+
|
7 |
+
.egg-container .animation-fade {
|
8 |
+
opacity:0;
|
9 |
+
}
|
10 |
+
|
11 |
+
.egg-container .animation-faded {
|
12 |
+
opacity:1;
|
13 |
+
}
|
14 |
+
|
15 |
+
.egg-container .animation-faded {
|
16 |
+
-webkit-transition: opacity 1s linear .2s;
|
17 |
+
-moz-transition: opacity 1s linear .2s;
|
18 |
+
-o-transition: opacity 1s linear .2s;
|
19 |
+
transition: opacity 1s linear .2s;
|
20 |
+
}
|
21 |
+
|
22 |
+
.egg-container .thumbnail-meta {
|
23 |
+
min-height:100px;
|
24 |
+
}
|
25 |
+
|
26 |
+
.egg-container .thumbnail:hover {
|
27 |
+
background: #f5f5f5 !important;
|
28 |
+
opacity: 1 !important;;
|
29 |
+
}
|
30 |
+
|
31 |
+
.egg-container .result_added{
|
32 |
+
opacity: 0.15 !important;
|
33 |
+
cursor: default !important;
|
34 |
+
}
|
35 |
+
|
36 |
+
.egg-container .search_panel, .egg-container .data_panel{
|
37 |
+
padding-top: 15px;
|
38 |
+
padding-bottom: 50px;
|
39 |
+
}
|
40 |
+
|
41 |
+
.egg-container .search_results, .egg-container .data_results{
|
42 |
+
max-height: 600px;
|
43 |
+
overflow-y:scroll;
|
44 |
+
padding-right: 20px;
|
45 |
+
}
|
46 |
+
|
47 |
+
.egg-container .search_results a {
|
48 |
+
cursor: pointer;
|
49 |
+
}
|
50 |
+
|
51 |
+
.egg-container a {
|
52 |
+
cursor: pointer;
|
53 |
+
}
|
54 |
+
|
55 |
+
.egg-container .added_data:hover{
|
56 |
+
background-color: #f5f5f5;
|
57 |
+
}
|
58 |
+
|
59 |
+
.egg-container .search_results_row{
|
60 |
+
cursor: pointer !important;
|
61 |
+
padding-bottom: 1px;
|
62 |
+
}
|
63 |
+
|
64 |
+
.egg-container .search_results_row:hover {
|
65 |
+
background: #f5f5f5;
|
66 |
+
}
|
67 |
+
|
68 |
+
.cegg-wrap {
|
69 |
+
position:relative;
|
70 |
+
}
|
71 |
+
|
72 |
+
.cegg-maincol {
|
73 |
+
margin-right: 260px;
|
74 |
+
}
|
75 |
+
.cegg-rightcol {
|
76 |
+
position: absolute;
|
77 |
+
width: 250px;
|
78 |
+
right: 0;
|
79 |
+
top: 0px;
|
80 |
+
}
|
81 |
+
|
82 |
+
@media (max-width:600px) {
|
83 |
+
.cegg-leftcol {margin: 0 0 20px 0}
|
84 |
+
.cegg-maincol {width: 100%; position:static}
|
85 |
+
}
|
86 |
+
|
87 |
+
.cegg-box {
|
88 |
+
border:1px solid #337ab7;
|
89 |
+
background-color:#fff;
|
90 |
+
padding:10px;
|
91 |
+
max-width:200px;
|
92 |
+
}
|
93 |
+
|
94 |
+
.cegg-box ul li {
|
95 |
+
padding-left: 15px;
|
96 |
+
}
|
97 |
+
|
98 |
+
.cegg_required{
|
99 |
+
color: #e32;
|
100 |
+
}
|
101 |
+
|
102 |
+
.cegg-pro-label
|
103 |
+
{
|
104 |
+
display: inline;
|
105 |
+
padding: .2em .6em .3em;
|
106 |
+
font-size: 45%;
|
107 |
+
font-weight: bold;
|
108 |
+
color: #fff;
|
109 |
+
text-align: center;
|
110 |
+
white-space: nowrap;
|
111 |
+
vertical-align: baseline;
|
112 |
+
border-radius: .25em;
|
113 |
+
background-color: #337ab7;
|
114 |
+
position: relative;
|
115 |
+
top: -15px;
|
116 |
+
}
|
res/css/products.css
ADDED
@@ -0,0 +1,125 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.egg-container .products .rating > span {
|
2 |
+
display: inline-block;
|
3 |
+
position: relative;
|
4 |
+
font-size: 30px;
|
5 |
+
color: #337ACE;
|
6 |
+
}
|
7 |
+
|
8 |
+
.egg-container .products .rating_small > span {
|
9 |
+
display: inline-block;
|
10 |
+
position: relative;
|
11 |
+
font-size: 16px;
|
12 |
+
color: #337ACE;
|
13 |
+
}
|
14 |
+
|
15 |
+
.egg-container .products .rating_default > span {
|
16 |
+
display: inline-block;
|
17 |
+
position: relative;
|
18 |
+
font-size: 22px;
|
19 |
+
color: #337ACE;
|
20 |
+
}
|
21 |
+
|
22 |
+
.egg-container .products .cegg-price{
|
23 |
+
font-size: 32px;
|
24 |
+
line-height: 30px;
|
25 |
+
}
|
26 |
+
.egg-container .products .cegg-price small{
|
27 |
+
font-size: 22px;
|
28 |
+
}
|
29 |
+
.egg-container .products .offer_price{
|
30 |
+
font-weight: bold;
|
31 |
+
}
|
32 |
+
.egg-container .products span{
|
33 |
+
font-size: 14px;
|
34 |
+
font-weight: normal;
|
35 |
+
}
|
36 |
+
.egg-container .products .v-align{
|
37 |
+
vertical-align: middle;
|
38 |
+
}
|
39 |
+
|
40 |
+
|
41 |
+
|
42 |
+
|
43 |
+
.egg-container .productbox {
|
44 |
+
background-color:#ffffff;
|
45 |
+
margin-bottom:10px;
|
46 |
+
padding-bottom:10px;
|
47 |
+
border: 1px solid white;
|
48 |
+
}
|
49 |
+
.egg-container .productbox:hover {
|
50 |
+
-webkit-box-shadow: 0 8px 6px -6px #999;
|
51 |
+
-moz-box-shadow: 0 8px 6px -6px #999;
|
52 |
+
box-shadow: 0 8px 6px -6px #999;
|
53 |
+
border: 1px solid #ccc;
|
54 |
+
|
55 |
+
}
|
56 |
+
.egg-container .producttitle, .egg-container .producttitle a {
|
57 |
+
color: black;
|
58 |
+
padding:5px 0 5px 0;
|
59 |
+
font-weight:bold;
|
60 |
+
line-height: 20px;
|
61 |
+
|
62 |
+
}
|
63 |
+
|
64 |
+
.egg-container .producttitle span {
|
65 |
+
font-weight:normal;
|
66 |
+
color: gray;
|
67 |
+
display: block;
|
68 |
+
line-height: 20px;
|
69 |
+
}
|
70 |
+
|
71 |
+
.egg-container .productprice {
|
72 |
+
color: black;
|
73 |
+
font-weight:bold;
|
74 |
+
line-height: 20px;
|
75 |
+
}
|
76 |
+
|
77 |
+
.egg-container .productprice strike {
|
78 |
+
color: grey;
|
79 |
+
font-weight:normal;
|
80 |
+
}
|
81 |
+
|
82 |
+
.egg-container .productprice span {
|
83 |
+
font-weight:normal;
|
84 |
+
}
|
85 |
+
|
86 |
+
.egg-container .productbox img{
|
87 |
+
border: 0 none;
|
88 |
+
box-shadow: none;
|
89 |
+
}
|
90 |
+
|
91 |
+
.egg-container .cegg-promotion {
|
92 |
+
line-height: 18px;
|
93 |
+
}
|
94 |
+
.egg-container .cegg-promotion {
|
95 |
+
border-radius: 4px;
|
96 |
+
top: 25px;
|
97 |
+
left: 0;
|
98 |
+
height: 24px;
|
99 |
+
position: absolute;
|
100 |
+
width: auto;
|
101 |
+
z-index: 10;
|
102 |
+
}
|
103 |
+
.egg-container .cegg-discount {
|
104 |
+
background: none repeat scroll 0 0 #eb5e58;
|
105 |
+
border-radius: 0 4px 4px 0;
|
106 |
+
color: #fff;
|
107 |
+
display: inline-block;
|
108 |
+
float: left;
|
109 |
+
font-size: 16px;
|
110 |
+
font-weight: lighter;
|
111 |
+
height: 100%;
|
112 |
+
padding: 3px 5px;
|
113 |
+
}
|
114 |
+
|
115 |
+
.egg-container .egg-padding-top {
|
116 |
+
padding-top: 22px;
|
117 |
+
}
|
118 |
+
|
119 |
+
.borderless tbody tr td, .borderless tbody tr th, .borderless thead tr th {
|
120 |
+
border: none;
|
121 |
+
}
|
122 |
+
|
123 |
+
.borderless td, .borderless th {
|
124 |
+
border: none;
|
125 |
+
}
|
res/img/loader.gif
ADDED
Binary file
|
res/img/loader2.gif
ADDED
Binary file
|
res/img/status-active.png
ADDED
Binary file
|
res/img/status-inactive.png
ADDED
Binary file
|
res/justified_gallery/jquery.justifiedGallery.min.js
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Justified Gallery - v3.6.0
|
3 |
+
* http://miromannino.github.io/Justified-Gallery/
|
4 |
+
* Copyright (c) 2015 Miro Mannino
|
5 |
+
* Licensed under the MIT license.
|
6 |
+
*/
|
7 |
+
!function(a){var b=function(b,c){this.settings=c,this.checkSettings(),this.imgAnalyzerTimeout=null,this.entries=null,this.buildingRow={entriesBuff:[],width:0,aspectRatio:0},this.lastAnalyzedIndex=-1,this.yield={every:2,flushed:0},this.border=c.border>=0?c.border:c.margins,this.maxRowHeight=this.retrieveMaxRowHeight(),this.suffixRanges=this.retrieveSuffixRanges(),this.offY=this.border,this.spinner={phase:0,timeSlot:150,$el:a('<div class="spinner"><span></span><span></span><span></span></div>'),intervalId:null},this.checkWidthIntervalId=null,this.galleryWidth=b.width(),this.$gallery=b};b.prototype.getSuffix=function(a,b){var c,d;for(c=a>b?a:b,d=0;d<this.suffixRanges.length;d++)if(c<=this.suffixRanges[d])return this.settings.sizeRangeSuffixes[this.suffixRanges[d]];return this.settings.sizeRangeSuffixes[this.suffixRanges[d-1]]},b.prototype.removeSuffix=function(a,b){return a.substring(0,a.length-b.length)},b.prototype.endsWith=function(a,b){return-1!==a.indexOf(b,a.length-b.length)},b.prototype.getUsedSuffix=function(a){for(var b in this.settings.sizeRangeSuffixes)if(this.settings.sizeRangeSuffixes.hasOwnProperty(b)){if(0===this.settings.sizeRangeSuffixes[b].length)continue;if(this.endsWith(a,this.settings.sizeRangeSuffixes[b]))return this.settings.sizeRangeSuffixes[b]}return""},b.prototype.newSrc=function(a,b,c){var d=a.match(this.settings.extension),e=null!=d?d[0]:"",f=a.replace(this.settings.extension,"");return f=this.removeSuffix(f,this.getUsedSuffix(f)),f+=this.getSuffix(b,c)+e},b.prototype.showImg=function(a,b){this.settings.cssAnimation?(a.addClass("entry-visible"),b&&b()):a.stop().fadeTo(this.settings.imagesAnimationDuration,1,b)},b.prototype.extractImgSrcFromImage=function(a){var b="undefined"!=typeof a.data("safe-src")?a.data("safe-src"):a.attr("src");return a.data("jg.originalSrc",b),b},b.prototype.imgFromEntry=function(a){var b=a.find("> img");return 0===b.length&&(b=a.find("> a > img")),0===b.length?null:b},b.prototype.captionFromEntry=function(a){var b=a.find("> .caption");return 0===b.length?null:b},b.prototype.displayEntry=function(b,c,d,e,f,g){b.width(e),b.height(g),b.css("top",d),b.css("left",c);var h=this.imgFromEntry(b);if(null!==h){h.css("width",e),h.css("height",f),h.css("margin-left",-e/2),h.css("margin-top",-f/2);var i=h.attr("src"),j=this.newSrc(i,e,f);h.one("error",function(){h.attr("src",h.data("jg.originalSrc"))});var k=function(){i!==j&&h.attr("src",j)};"skipped"===b.data("jg.loaded")?this.onImageEvent(i,a.proxy(function(){this.showImg(b,k),b.data("jg.loaded",!0)},this)):this.showImg(b,k)}else this.showImg(b);this.displayEntryCaption(b)},b.prototype.displayEntryCaption=function(b){var c=this.imgFromEntry(b);if(null!==c&&this.settings.captions){var d=this.captionFromEntry(b);if(null==d){var e=c.attr("alt");"undefined"==typeof e&&(e=b.attr("title")),"undefined"!=typeof e&&(d=a('<div class="caption">'+e+"</div>"),b.append(d),b.data("jg.createdCaption",!0))}null!==d&&(this.settings.cssAnimation||d.stop().fadeTo(0,this.settings.captionSettings.nonVisibleOpacity),this.addCaptionEventsHandlers(b))}else this.removeCaptionEventsHandlers(b)},b.prototype.onEntryMouseEnterForCaption=function(b){var c=this.captionFromEntry(a(b.currentTarget));this.settings.cssAnimation?c.addClass("caption-visible").removeClass("caption-hidden"):c.stop().fadeTo(this.settings.captionSettings.animationDuration,this.settings.captionSettings.visibleOpacity)},b.prototype.onEntryMouseLeaveForCaption=function(b){var c=this.captionFromEntry(a(b.currentTarget));this.settings.cssAnimation?c.removeClass("caption-visible").removeClass("caption-hidden"):c.stop().fadeTo(this.settings.captionSettings.animationDuration,this.settings.captionSettings.nonVisibleOpacity)},b.prototype.addCaptionEventsHandlers=function(b){var c=b.data("jg.captionMouseEvents");"undefined"==typeof c&&(c={mouseenter:a.proxy(this.onEntryMouseEnterForCaption,this),mouseleave:a.proxy(this.onEntryMouseLeaveForCaption,this)},b.on("mouseenter",void 0,void 0,c.mouseenter),b.on("mouseleave",void 0,void 0,c.mouseleave),b.data("jg.captionMouseEvents",c))},b.prototype.removeCaptionEventsHandlers=function(a){var b=a.data("jg.captionMouseEvents");"undefined"!=typeof b&&(a.off("mouseenter",void 0,b.mouseenter),a.off("mouseleave",void 0,b.mouseleave),a.removeData("jg.captionMouseEvents"))},b.prototype.prepareBuildingRow=function(a){var b,c,d,e,f,g=!0,h=0,i=this.galleryWidth-2*this.border-(this.buildingRow.entriesBuff.length-1)*this.settings.margins,j=i/this.buildingRow.aspectRatio,k=this.buildingRow.width/i>this.settings.justifyThreshold;if(a&&"hide"===this.settings.lastRow&&!k){for(b=0;b<this.buildingRow.entriesBuff.length;b++)c=this.buildingRow.entriesBuff[b],this.settings.cssAnimation?c.removeClass("entry-visible"):c.stop().fadeTo(0,0);return-1}for(a&&!k&&"nojustify"===this.settings.lastRow&&(g=!1),b=0;b<this.buildingRow.entriesBuff.length;b++)c=this.buildingRow.entriesBuff[b],d=c.data("jg.width")/c.data("jg.height"),g?(e=b===this.buildingRow.entriesBuff.length-1?i:j*d,f=j):(e=this.settings.rowHeight*d,f=this.settings.rowHeight),i-=Math.round(e),c.data("jg.jwidth",Math.round(e)),c.data("jg.jheight",Math.ceil(f)),(0===b||h>f)&&(h=f);return this.settings.fixedHeight&&h>this.settings.rowHeight&&(h=this.settings.rowHeight),{minHeight:h,justify:g}},b.prototype.clearBuildingRow=function(){this.buildingRow.entriesBuff=[],this.buildingRow.aspectRatio=0,this.buildingRow.width=0},b.prototype.flushRow=function(a){var b,c,d,e=this.settings,f=this.border;if(d=this.prepareBuildingRow(a),c=d.minHeight,a&&"hide"===e.lastRow&&-1===c)return void this.clearBuildingRow();this.maxRowHeight.percentage?this.maxRowHeight.value*e.rowHeight<c&&(c=this.maxRowHeight.value*e.rowHeight):this.maxRowHeight.value>0&&this.maxRowHeight.value<c&&(c=this.maxRowHeight.value);for(var g=0;g<this.buildingRow.entriesBuff.length;g++)b=this.buildingRow.entriesBuff[g],this.displayEntry(b,f,this.offY,b.data("jg.jwidth"),b.data("jg.jheight"),c),f+=b.data("jg.jwidth")+e.margins;this.$gallery.height(this.offY+c+this.border+(this.isSpinnerActive()?this.getSpinnerHeight():0)),(!a||c<=this.settings.rowHeight&&d.justify)&&(this.offY+=c+this.settings.margins,this.clearBuildingRow(),this.$gallery.trigger("jg.rowflush"))},b.prototype.checkWidth=function(){this.checkWidthIntervalId=setInterval(a.proxy(function(){var a=parseInt(this.$gallery.width(),10);this.galleryWidth!==a&&(this.galleryWidth=a,this.rewind(),this.startImgAnalyzer(!0))},this),this.settings.refreshTime)},b.prototype.isSpinnerActive=function(){return null!=this.spinner.intervalId},b.prototype.getSpinnerHeight=function(){return this.spinner.$el.innerHeight()},b.prototype.stopLoadingSpinnerAnimation=function(){clearInterval(this.spinner.intervalId),this.spinner.intervalId=null,this.$gallery.height(this.$gallery.height()-this.getSpinnerHeight()),this.spinner.$el.detach()},b.prototype.startLoadingSpinnerAnimation=function(){var a=this.spinner,b=a.$el.find("span");clearInterval(a.intervalId),this.$gallery.append(a.$el),this.$gallery.height(this.offY+this.getSpinnerHeight()),a.intervalId=setInterval(function(){a.phase<b.length?b.eq(a.phase).fadeTo(a.timeSlot,1):b.eq(a.phase-b.length).fadeTo(a.timeSlot,0),a.phase=(a.phase+1)%(2*b.length)},a.timeSlot)},b.prototype.rewind=function(){this.lastAnalyzedIndex=-1,this.offY=this.border,this.clearBuildingRow()},b.prototype.hideBuildingRowImages=function(){for(var a=0;a<this.buildingRow.entriesBuff.length;a++)this.settings.cssAnimation?this.buildingRow.entriesBuff[a].removeClass("entry-visible"):this.buildingRow.entriesBuff[a].stop().fadeTo(0,0)},b.prototype.updateEntries=function(b){return this.entries=this.$gallery.find(this.settings.selector).toArray(),0===this.entries.length?!1:(this.settings.filter?this.modifyEntries(this.filterArray,b):this.modifyEntries(this.resetFilters,b),a.isFunction(this.settings.sort)?this.modifyEntries(this.sortArray,b):this.settings.randomize&&this.modifyEntries(this.shuffleArray,b),!0)},b.prototype.insertToGallery=function(b){var c=this;a.each(b,function(){a(this).appendTo(c.$gallery)})},b.prototype.shuffleArray=function(a){var b,c,d;for(b=a.length-1;b>0;b--)c=Math.floor(Math.random()*(b+1)),d=a[b],a[b]=a[c],a[c]=d;return this.insertToGallery(a),a},b.prototype.sortArray=function(a){return a.sort(this.settings.sort),this.insertToGallery(a),a},b.prototype.resetFilters=function(b){for(var c=0;c<b.length;c++)a(b[c]).removeClass("jg-filtered");return b},b.prototype.filterArray=function(b){var c=this.settings;return"string"===a.type(c.filter)?b.filter(function(b){var d=a(b);return d.is(c.filter)?(d.removeClass("jg-filtered"),!0):(d.addClass("jg-filtered"),!1)}):a.isFunction(c.filter)?b.filter(c.filter):void 0},b.prototype.modifyEntries=function(a,b){var c=b?this.entries.splice(this.lastAnalyzedIndex+1,this.entries.length-this.lastAnalyzedIndex-1):this.entries;c=a.call(this,c),this.entries=b?this.entries.concat(c):c},b.prototype.destroy=function(){clearInterval(this.checkWidthIntervalId),a.each(this.entries,a.proxy(function(b,c){var d=a(c);d.css("width",""),d.css("height",""),d.css("top",""),d.css("left",""),d.data("jg.loaded",void 0),d.removeClass("jg-entry");var e=this.imgFromEntry(d);e.css("width",""),e.css("height",""),e.css("margin-left",""),e.css("margin-top",""),e.attr("src",e.data("jg.originalSrc")),e.data("jg.originalSrc",void 0),this.removeCaptionEventsHandlers(d);var f=this.captionFromEntry(d);d.data("jg.createdCaption")?(d.data("jg.createdCaption",void 0),null!=f&&f.remove()):null!=f&&f.fadeTo(0,1)},this)),this.$gallery.css("height",""),this.$gallery.removeClass("justified-gallery"),this.$gallery.data("jg.controller",void 0)},b.prototype.analyzeImages=function(b){for(var c=this.lastAnalyzedIndex+1;c<this.entries.length;c++){var d=a(this.entries[c]);if(d.data("jg.loaded")===!0||"skipped"===d.data("jg.loaded")){var e=this.galleryWidth-2*this.border-(this.buildingRow.entriesBuff.length-1)*this.settings.margins,f=d.data("jg.width")/d.data("jg.height");if(e/(this.buildingRow.aspectRatio+f)<this.settings.rowHeight&&(this.flushRow(!1),++this.yield.flushed>=this.yield.every))return void this.startImgAnalyzer(b);this.buildingRow.entriesBuff.push(d),this.buildingRow.aspectRatio+=f,this.buildingRow.width+=f*this.settings.rowHeight,this.lastAnalyzedIndex=c}else if("error"!==d.data("jg.loaded"))return}this.buildingRow.entriesBuff.length>0&&this.flushRow(!0),this.isSpinnerActive()&&this.stopLoadingSpinnerAnimation(),this.stopImgAnalyzerStarter(),this.$gallery.trigger(b?"jg.resize":"jg.complete")},b.prototype.stopImgAnalyzerStarter=function(){this.yield.flushed=0,null!==this.imgAnalyzerTimeout&&clearTimeout(this.imgAnalyzerTimeout)},b.prototype.startImgAnalyzer=function(a){var b=this;this.stopImgAnalyzerStarter(),this.imgAnalyzerTimeout=setTimeout(function(){b.analyzeImages(a)},.001)},b.prototype.onImageEvent=function(b,c,d){if(c||d){var e=new Image,f=a(e);c&&f.one("load",function(){f.off("load error"),c(e)}),d&&f.one("error",function(){f.off("load error"),d(e)}),e.src=b}},b.prototype.init=function(){var b=!1,c=!1,d=this;a.each(this.entries,function(e,f){var g=a(f),h=d.imgFromEntry(g);if(g.addClass("jg-entry"),g.data("jg.loaded")!==!0&&"skipped"!==g.data("jg.loaded"))if(null!==d.settings.rel&&g.attr("rel",d.settings.rel),null!==d.settings.target&&g.attr("target",d.settings.target),null!==h){var i=d.extractImgSrcFromImage(h);if(h.attr("src",i),d.settings.waitThumbnailsLoad===!1){var j=parseInt(h.attr("width"),10),k=parseInt(h.attr("height"),10);if(!isNaN(j)&&!isNaN(k))return g.data("jg.width",j),g.data("jg.height",k),g.data("jg.loaded","skipped"),c=!0,d.startImgAnalyzer(!1),!0}g.data("jg.loaded",!1),b=!0,d.isSpinnerActive()||d.startLoadingSpinnerAnimation(),d.onImageEvent(i,function(a){g.data("jg.width",a.width),g.data("jg.height",a.height),g.data("jg.loaded",!0),d.startImgAnalyzer(!1)},function(){g.data("jg.loaded","error"),d.startImgAnalyzer(!1)})}else g.data("jg.loaded",!0),g.data("jg.width",g.width()|g.css("width")|1),g.data("jg.height",g.height()|g.css("height")|1)}),b||c||this.startImgAnalyzer(!1),this.checkWidth()},b.prototype.checkOrConvertNumber=function(b,c){if("string"===a.type(b[c])&&(b[c]=parseFloat(b[c])),"number"!==a.type(b[c]))throw c+" must be a number";if(isNaN(b[c]))throw"invalid number for "+c},b.prototype.checkSizeRangesSuffixes=function(){if("object"!==a.type(this.settings.sizeRangeSuffixes))throw"sizeRangeSuffixes must be defined and must be an object";var b=[];for(var c in this.settings.sizeRangeSuffixes)this.settings.sizeRangeSuffixes.hasOwnProperty(c)&&b.push(c);for(var d={0:""},e=0;e<b.length;e++)if("string"===a.type(b[e]))try{var f=parseInt(b[e].replace(/^[a-z]+/,""),10);d[f]=this.settings.sizeRangeSuffixes[b[e]]}catch(g){throw"sizeRangeSuffixes keys must contains correct numbers ("+g+")"}else d[b[e]]=this.settings.sizeRangeSuffixes[b[e]];this.settings.sizeRangeSuffixes=d},b.prototype.retrieveMaxRowHeight=function(){var b={};if("string"===a.type(this.settings.maxRowHeight))this.settings.maxRowHeight.match(/^[0-9]+%$/)?(b.value=parseFloat(this.settings.maxRowHeight.match(/^([0-9])+%$/)[1])/100,b.percentage=!1):(b.value=parseFloat(this.settings.maxRowHeight),b.percentage=!0);else{if("number"!==a.type(this.settings.maxRowHeight))throw"maxRowHeight must be a number or a percentage";b.value=this.settings.maxRowHeight,b.percentage=!1}if(isNaN(b.value))throw"invalid number for maxRowHeight";return b.percentage?b.value<100&&(b.value=100):b.value>0&&b.value<this.settings.rowHeight&&(b.value=this.settings.rowHeight),b},b.prototype.checkSettings=function(){if(this.checkSizeRangesSuffixes(),this.checkOrConvertNumber(this.settings,"rowHeight"),this.checkOrConvertNumber(this.settings,"margins"),this.checkOrConvertNumber(this.settings,"border"),"nojustify"!==this.settings.lastRow&&"justify"!==this.settings.lastRow&&"hide"!==this.settings.lastRow)throw'lastRow must be "nojustify", "justify" or "hide"';if(this.checkOrConvertNumber(this.settings,"justifyThreshold"),this.settings.justifyThreshold<0||this.settings.justifyThreshold>1)throw"justifyThreshold must be in the interval [0,1]";if("boolean"!==a.type(this.settings.cssAnimation))throw"cssAnimation must be a boolean";if("boolean"!==a.type(this.settings.captions))throw"captions must be a boolean";if(this.checkOrConvertNumber(this.settings.captionSettings,"animationDuration"),this.checkOrConvertNumber(this.settings.captionSettings,"visibleOpacity"),this.settings.captionSettings.visibleOpacity<0||this.settings.captionSettings.visibleOpacity>1)throw"captionSettings.visibleOpacity must be in the interval [0, 1]";if(this.checkOrConvertNumber(this.settings.captionSettings,"nonVisibleOpacity"),this.settings.captionSettings.nonVisibleOpacity<0||this.settings.captionSettings.nonVisibleOpacity>1)throw"captionSettings.nonVisibleOpacity must be in the interval [0, 1]";if("boolean"!==a.type(this.settings.fixedHeight))throw"fixedHeight must be a boolean";if(this.checkOrConvertNumber(this.settings,"imagesAnimationDuration"),this.checkOrConvertNumber(this.settings,"refreshTime"),"boolean"!==a.type(this.settings.randomize))throw"randomize must be a boolean";if("string"!==a.type(this.settings.selector))throw"selector must be a string";if(this.settings.sort!==!1&&!a.isFunction(this.settings.sort))throw"sort must be false or a comparison function";if(this.settings.filter!==!1&&!a.isFunction(this.settings.sort)&&"string"!==a.type(this.settings.filter))throw"filter must be false, a string or a filter function"},b.prototype.retrieveSuffixRanges=function(){var a=[];for(var b in this.settings.sizeRangeSuffixes)this.settings.sizeRangeSuffixes.hasOwnProperty(b)&&a.push(parseInt(b,10));return a.sort(function(a,b){return a>b?1:b>a?-1:0}),a},b.prototype.updateSettings=function(b){this.settings=a.extend({},this.settings,b),this.checkSettings(),this.border=this.settings.border>=0?this.settings.border:this.settings.margins,this.maxRowHeight=this.retrieveMaxRowHeight(),this.suffixRanges=this.retrieveSuffixRanges()},a.fn.justifiedGallery=function(c){return this.each(function(d,e){var f=a(e);f.addClass("justified-gallery");var g=f.data("jg.controller");if("undefined"==typeof g){if("undefined"!=typeof c&&null!==c&&"object"!==a.type(c))throw"The argument must be an object";g=new b(f,a.extend({},a.fn.justifiedGallery.defaults,c)),f.data("jg.controller",g)}else if("norewind"===c)g.hideBuildingRowImages();else{if("destroy"===c)return void g.destroy();g.updateSettings(c),g.rewind()}g.updateEntries("norewind"===c)&&g.init()})},a.fn.justifiedGallery.defaults={sizeRangeSuffixes:{},rowHeight:120,maxRowHeight:"200%",margins:1,border:-1,lastRow:"nojustify",justifyThreshold:.75,fixedHeight:!1,waitThumbnailsLoad:!0,captions:!0,cssAnimation:!1,imagesAnimationDuration:500,captionSettings:{animationDuration:500,visibleOpacity:.7,nonVisibleOpacity:0},rel:null,target:null,extension:/\.[^.\\/]+$/,refreshTime:100,randomize:!1,sort:!1,filter:!1,selector:"> a, > div:not(.spinner)"}}(jQuery);
|
res/justified_gallery/justifiedGallery.min.css
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Justified Gallery - v3.6.0
|
3 |
+
* http://miromannino.github.io/Justified-Gallery/
|
4 |
+
* Copyright (c) 2015 Miro Mannino
|
5 |
+
* Licensed under the MIT license.
|
6 |
+
*/
|
7 |
+
@-webkit-keyframes justified-gallery-show-caption-animation{from{opacity:0}to{opacity:.7}}@-moz-keyframes justified-gallery-show-caption-animation{from{opacity:0}to{opacity:.7}}@-o-keyframes justified-gallery-show-caption-animation{from{opacity:0}to{opacity:.7}}@keyframes justified-gallery-show-caption-animation{from{opacity:0}to{opacity:.7}}@-webkit-keyframes justified-gallery-show-entry-animation{from{opacity:0}to{opacity:1}}@-moz-keyframes justified-gallery-show-entry-animation{from{opacity:0}to{opacity:1}}@-o-keyframes justified-gallery-show-entry-animation{from{opacity:0}to{opacity:1}}@keyframes justified-gallery-show-entry-animation{from{opacity:0}to{opacity:1}}.justified-gallery{width:100%;position:relative;overflow:hidden}.justified-gallery>a,.justified-gallery>div{position:absolute;display:inline-block;overflow:hidden;opacity:0;filter:alpha(opacity=0)}.justified-gallery>a>img,.justified-gallery>div>img,.justified-gallery>a>a>img,.justified-gallery>div>a>img{position:absolute;top:50%;left:50%;margin:0;padding:0;border:0}.justified-gallery>a>.caption,.justified-gallery>div>.caption{display:none;position:absolute;bottom:0;padding:5px;background-color:#000;left:0;right:0;margin:0;color:#fff;font-size:12px;font-weight:300;font-family:sans-serif}.justified-gallery>a>.caption.caption-visible,.justified-gallery>div>.caption.caption-visible{display:initial;opacity:.7;filter:"alpha(opacity=70)";-webkit-animation:justified-gallery-show-caption-animation 500ms 0 ease;-moz-animation:justified-gallery-show-caption-animation 500ms 0 ease;-ms-animation:justified-gallery-show-caption-animation 500ms 0 ease}.justified-gallery>.entry-visible{opacity:1;filter:alpha(opacity=100);-webkit-animation:justified-gallery-show-entry-animation 500ms 0 ease;-moz-animation:justified-gallery-show-entry-animation 500ms 0 ease;-ms-animation:justified-gallery-show-entry-animation 500ms 0 ease}.justified-gallery>.jg-filtered{display:none}.justified-gallery>.spinner{position:absolute;bottom:0;margin-left:-24px;padding:10px 0;left:50%;opacity:initial;filter:initial;overflow:initial}.justified-gallery>.spinner>span{display:inline-block;opacity:0;filter:alpha(opacity=0);width:8px;height:8px;margin:0 4px;background-color:#000;border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px}
|