Version Description
- Added rel="prev" and rel="next" in head
- Added SEO META Duplicates notification
- Fixed the snippet for home page when the home is a specific page
- Added more details in SEO Analytics *
Download this release
Release Info
Developer | cifi |
Plugin | SEO SQUIRRLY™ |
Version | 3.1.1 |
Comparing to | |
See all releases |
Version 3.1.1
- classes/SQ_Action.php +182 -0
- classes/SQ_BlockController.php +83 -0
- classes/SQ_DisplayController.php +108 -0
- classes/SQ_Error.php +88 -0
- classes/SQ_FrontController.php +129 -0
- classes/SQ_HookController.php +82 -0
- classes/SQ_ObjController.php +160 -0
- classes/SQ_Ranking.php +209 -0
- classes/SQ_Sitemap.php +381 -0
- classes/SQ_Tools.php +774 -0
- classes/SQ_Traffic.php +28 -0
- config/config.php +31 -0
- config/paths.php +35 -0
- controllers/SQ_Frontend.php +110 -0
- controllers/SQ_Menu.php +304 -0
- controllers/SQ_Post.php +262 -0
- controllers/SQ_PostsList.php +351 -0
- core/SQ_BlockAccount/SQ_BlockAccount.php +18 -0
- core/SQ_BlockAffiliate/SQ_BlockAffiliate.php +47 -0
- core/SQ_BlockAnalytics/SQ_BlockAnalytics.php +9 -0
- core/SQ_BlockAudit/SQ_BlockAudit.php +9 -0
- core/SQ_BlockDashboard/SQ_BlockDashboard.php +8 -0
- core/SQ_BlockHelp/SQ_BlockHelp.php +8 -0
- core/SQ_BlockPostsAnalytics/SQ_BlockPostsAnalytics.php +40 -0
- core/SQ_BlockStatus/SQ_BlockStatus.php +11 -0
- core/SQ_BlockSupport/SQ_BlockSupport.php +114 -0
- core/SQ_Blocklogin/SQ_Blocklogin.php +148 -0
- core/SQ_Blockresearch/SQ_Blockresearch.php +17 -0
- core/SQ_Blocksearch/SQ_Blocksearch.php +54 -0
- core/SQ_Blockseo/SQ_Blockseo.php +39 -0
- core/SQ_Loading/SQ_Loading.php +45 -0
- core/config.xml +133 -0
- languages/squirrly-seo-de_DE.mo +0 -0
- languages/squirrly-seo-de_DE.po +856 -0
- languages/squirrly-seo-ro_RO.mo +0 -0
- languages/squirrly-seo-ro_RO.po +1277 -0
- languages/squirrly-seo-ru_RU.mo +0 -0
- languages/squirrly-seo-ru_RU.po +1193 -0
- models/SQ_BlockPostsAnalytics.php +466 -0
- models/SQ_BlockStatus.php +158 -0
- models/SQ_Blocksearch.php +72 -0
- models/SQ_Blockseo.php +40 -0
- models/SQ_Frontend.php +1492 -0
- models/SQ_Ico.php +229 -0
- models/SQ_Menu.php +346 -0
- models/SQ_Post.php +226 -0
- models/SQ_PostsList.php +117 -0
- readme.txt +384 -0
- screenshot-1.png +0 -0
- screenshot-2.png +0 -0
- screenshot-3.png +0 -0
- screenshot-4.png +0 -0
- screenshot-5.png +0 -0
- screenshot-6.png +0 -0
- screenshot-7.png +0 -0
- squirrly.php +62 -0
- themes/default/SQ_BlocStatus.php +1 -0
- themes/default/SQ_BlockAccount.php +41 -0
- themes/default/SQ_BlockAffiliate.php +105 -0
- themes/default/SQ_BlockAnalytics.php +281 -0
- themes/default/SQ_BlockAudit.php +9 -0
- themes/default/SQ_BlockDashboard.php +50 -0
- themes/default/SQ_BlockHelp.php +15 -0
- themes/default/SQ_BlockPostsAnalytics.php +27 -0
- themes/default/SQ_BlockSupport.php +79 -0
- themes/default/SQ_Blocklogin.php +49 -0
- themes/default/SQ_Blockresearch.php +33 -0
- themes/default/SQ_Blocksearch.php +50 -0
- themes/default/SQ_Blockseo.php +6 -0
- themes/default/SQ_Menu.php +496 -0
- themes/default/SQ_notices.php +16 -0
- themes/default/css/sq_blockaudit.css +1 -0
- themes/default/css/sq_blockresearch.css +1 -0
- themes/default/css/sq_blocksearch.css +1 -0
- themes/default/css/sq_blockseo.css +1 -0
- themes/default/css/sq_frontend.css +1 -0
- themes/default/css/sq_global.css +1 -0
- themes/default/css/sq_menu.css +1 -0
- themes/default/css/sq_post.css +1 -0
- themes/default/css/sq_postslist.css +1 -0
- themes/default/img/avatar-margin.png +0 -0
- themes/default/img/banners/banner1.jpg +0 -0
- themes/default/img/banners/banner1.png +0 -0
- themes/default/img/banners/banner2.jpg +0 -0
- themes/default/img/banners/banner2.png +0 -0
- themes/default/img/banners/banner3.png +0 -0
- themes/default/img/complete.png +0 -0
- themes/default/img/dashboard_analytics.png +0 -0
- themes/default/img/dashboard_assistant.png +0 -0
- themes/default/img/dashboard_audit.png +0 -0
- themes/default/img/dashboard_research.png +0 -0
- themes/default/img/header_back.png +0 -0
- themes/default/img/header_stars.png +0 -0
- themes/default/img/heading.png +0 -0
- themes/default/img/loading.gif +0 -0
- themes/default/img/menu_icon_16.png +0 -0
- themes/default/img/minloading.gif +0 -0
- themes/default/img/settings_edit.png +0 -0
- themes/default/img/settings_howto.jpg +0 -0
- themes/default/img/settings_login.jpg +0 -0
- themes/default/img/settings_login_done.jpg +0 -0
- themes/default/img/sprite.png +0 -0
- themes/default/img/sq_searching.gif +0 -0
- themes/default/img/status/backgroundv2.jpg +0 -0
- themes/default/img/status/squirrly_cheers.png +0 -0
- themes/default/js/jcache.js +21 -0
- themes/default/js/jquery.progressbar.js +20 -0
- themes/default/js/sq_blockaudit.js +3 -0
- themes/default/js/sq_blocklogin.js +22 -0
- themes/default/js/sq_blocksupport.js +18 -0
- themes/default/js/sq_menu.js +36 -0
- themes/default/js/sq_rank.js +33 -0
- themes/default/js/tinymce.js +2 -0
- themes/default/js/xregexp.js +4 -0
- uninstall.php +15 -0
classes/SQ_Action.php
ADDED
@@ -0,0 +1,182 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Set the ajax action and call for wordpress
|
5 |
+
*/
|
6 |
+
class SQ_Action extends SQ_FrontController {
|
7 |
+
|
8 |
+
/** @var array with all form and ajax actions */
|
9 |
+
var $actions = array();
|
10 |
+
|
11 |
+
/** @var array from core config */
|
12 |
+
private static $config;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* The hookAjax is loaded as custom hook in hookController class
|
16 |
+
*
|
17 |
+
* @return void
|
18 |
+
*/
|
19 |
+
public function hookInit() {
|
20 |
+
|
21 |
+
/* Only if ajax */
|
22 |
+
if ((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') || strpos($_SERVER['PHP_SELF'], '/admin-ajax.php') !== false) {
|
23 |
+
$this->actions = array();
|
24 |
+
$this->getActions(((isset($_GET['action']) ? $_GET['action'] : (isset($_POST['action']) ? $_POST['action'] : ''))));
|
25 |
+
}
|
26 |
+
}
|
27 |
+
|
28 |
+
/**
|
29 |
+
* The hookSubmit is loaded when action si posted
|
30 |
+
*
|
31 |
+
* @return void
|
32 |
+
*/
|
33 |
+
public function hookMenu() {
|
34 |
+
/* Only if post */
|
35 |
+
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
|
36 |
+
return;
|
37 |
+
}
|
38 |
+
if (strpos($_SERVER['PHP_SELF'], '/admin-ajax.php') !== false) {
|
39 |
+
return;
|
40 |
+
}
|
41 |
+
|
42 |
+
$this->actions = array();
|
43 |
+
$this->getActions(((isset($_GET['action']) ? $_GET['action'] : (isset($_POST['action']) ? $_POST['action'] : ''))));
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* The hookHead is loaded as admin hook in hookController class for script load
|
48 |
+
* Is needed for security check as nonce
|
49 |
+
*
|
50 |
+
* @return void
|
51 |
+
*/
|
52 |
+
public function hookHead() {
|
53 |
+
|
54 |
+
echo '<script type="text/javascript" src="https://www.google.com/jsapi"></script>
|
55 |
+
<script type="text/javascript">
|
56 |
+
var sqQuery = {
|
57 |
+
"ajaxurl": "' . admin_url('admin-ajax.php') . '",
|
58 |
+
"adminposturl": "' . admin_url('post.php') . '",
|
59 |
+
"adminlisturl": "' . admin_url('edit.php') . '",
|
60 |
+
"nonce": "' . wp_create_nonce(_SQ_NONCE_ID_) . '"
|
61 |
+
}
|
62 |
+
|
63 |
+
if(parseInt(jQuery.fn.jquery.replace(/\./g,"")) < 162)
|
64 |
+
google.load("jquery", "1.6.2");
|
65 |
+
</script>';
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Get all actions from config.xml in core directory and add them in the WP
|
70 |
+
*
|
71 |
+
* @return void
|
72 |
+
*/
|
73 |
+
public function getActions($cur_action) {
|
74 |
+
|
75 |
+
/* if config allready in cache */
|
76 |
+
if (!isset(self::$config)) {
|
77 |
+
$config_file = _SQ_CORE_DIR_ . 'config.xml';
|
78 |
+
if (!file_exists($config_file)) {
|
79 |
+
return;
|
80 |
+
}
|
81 |
+
|
82 |
+
/* load configuration blocks data from core config files */
|
83 |
+
$data = file_get_contents($config_file);
|
84 |
+
self::$config = json_decode(json_encode((array) simplexml_load_string($data)), 1);
|
85 |
+
}
|
86 |
+
|
87 |
+
if (is_array(self::$config)) {
|
88 |
+
foreach (self::$config['block'] as $block) {
|
89 |
+
if ($block['active'] == 1) {
|
90 |
+
/* if there is a single action */
|
91 |
+
if (isset($block['actions']['action']))
|
92 |
+
|
93 |
+
/* if there are more actions for the current block */ {
|
94 |
+
if (!is_array($block['actions']['action'])) {
|
95 |
+
/* add the action in the actions array */
|
96 |
+
if ($block['actions']['action'] == $cur_action) {
|
97 |
+
$this->actions[] = array('class' => $block['name'], 'path' => $block['path']);
|
98 |
+
}
|
99 |
+
} else {
|
100 |
+
/* if there are more actions for the current block */
|
101 |
+
foreach ($block['actions']['action'] as $action) {
|
102 |
+
/* add the actions in the actions array */
|
103 |
+
if ($action == $cur_action) {
|
104 |
+
$this->actions[] = array('class' => $block['name'], 'path' => $block['path']);
|
105 |
+
}
|
106 |
+
}
|
107 |
+
}
|
108 |
+
}
|
109 |
+
}
|
110 |
+
}
|
111 |
+
}
|
112 |
+
|
113 |
+
/* add the actions in WP */
|
114 |
+
foreach ($this->actions as $actions) {
|
115 |
+
if ($actions['path'] == 'core') {
|
116 |
+
SQ_ObjController::getBlock($actions['class'])->action();
|
117 |
+
} elseif ($actions['path'] == 'controllers') {
|
118 |
+
SQ_ObjController::getController($actions['class'])->action();
|
119 |
+
}
|
120 |
+
}
|
121 |
+
}
|
122 |
+
|
123 |
+
/**
|
124 |
+
* Call the Squirrly Api Server
|
125 |
+
* @param string $module
|
126 |
+
* @param array $args
|
127 |
+
* @return json | string
|
128 |
+
*/
|
129 |
+
public static function apiCall($module, $args = array(), $timeout = 90) {
|
130 |
+
$parameters = "";
|
131 |
+
|
132 |
+
if (SQ_Tools::$options['sq_api'] == '' && $module <> 'sq/login' && $module <> 'sq/register') {
|
133 |
+
return false;
|
134 |
+
}
|
135 |
+
|
136 |
+
$extra = array('user_url' => urlencode(get_bloginfo('wpurl')),
|
137 |
+
'lang' => WPLANG,
|
138 |
+
'versq' => SQ_VERSION_ID,
|
139 |
+
'verwp' => WP_VERSION_ID,
|
140 |
+
'verphp' => PHP_VERSION_ID,
|
141 |
+
'token' => SQ_Tools::$options['sq_api']);
|
142 |
+
|
143 |
+
if ($module <> "") {
|
144 |
+
$module .= "/";
|
145 |
+
}
|
146 |
+
|
147 |
+
if (is_array($args)) {
|
148 |
+
$args = array_merge($args, $extra);
|
149 |
+
} else {
|
150 |
+
$args = $extra;
|
151 |
+
}
|
152 |
+
|
153 |
+
foreach ($args as $key => $value) {
|
154 |
+
if ($value <> '') {
|
155 |
+
$parameters .= ($parameters == "" ? "" : "&") . $key . "=" . $value;
|
156 |
+
}
|
157 |
+
}
|
158 |
+
|
159 |
+
|
160 |
+
/* If the call is for login on register then use base64 is exists */
|
161 |
+
if ($module == 'sq/login' || $module == 'sq/register') {
|
162 |
+
if (function_exists('base64_encode')) {
|
163 |
+
$parameters = 'q=' . base64_encode($parameters);
|
164 |
+
}
|
165 |
+
}
|
166 |
+
|
167 |
+
|
168 |
+
$url = self::cleanUrl(_SQ_API_URL_ . $module . "?" . $parameters);
|
169 |
+
//SQ_Tools::dump($url);
|
170 |
+
return SQ_Tools::sq_remote_get($url, array('timeout' => $timeout));
|
171 |
+
}
|
172 |
+
|
173 |
+
/**
|
174 |
+
* Clear the url before the call
|
175 |
+
* @param string $url
|
176 |
+
* @return string
|
177 |
+
*/
|
178 |
+
private static function cleanUrl($url) {
|
179 |
+
return str_replace(array(' '), array('+'), $url);
|
180 |
+
}
|
181 |
+
|
182 |
+
}
|
classes/SQ_BlockController.php
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* The main class for core blocks
|
5 |
+
*
|
6 |
+
*/
|
7 |
+
class SQ_BlockController {
|
8 |
+
|
9 |
+
/** @var object of the model class */
|
10 |
+
protected $model;
|
11 |
+
|
12 |
+
/** @var boolean */
|
13 |
+
public $flush = true;
|
14 |
+
|
15 |
+
/** @var object of the view class */
|
16 |
+
protected $view;
|
17 |
+
|
18 |
+
/** @var name of the class */
|
19 |
+
private $name;
|
20 |
+
|
21 |
+
public function __construct() {
|
22 |
+
/** check the admin condition */
|
23 |
+
if (!is_admin())
|
24 |
+
return;
|
25 |
+
|
26 |
+
/* get the name of the current class */
|
27 |
+
$this->name = get_class($this);
|
28 |
+
|
29 |
+
/* create the model and view instances */
|
30 |
+
$this->model = SQ_ObjController::getModel($this->name);
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* load sequence of classes
|
35 |
+
*
|
36 |
+
* @return void
|
37 |
+
*/
|
38 |
+
public function init() {
|
39 |
+
|
40 |
+
$this->view = SQ_ObjController::getController('SQ_DisplayController', false);
|
41 |
+
$this->view->setBlock($this->name);
|
42 |
+
|
43 |
+
/* check if there is a hook defined in the block class */
|
44 |
+
SQ_ObjController::getController('SQ_HookController', false)
|
45 |
+
->setBlockHooks($this);
|
46 |
+
|
47 |
+
if ($this->flush) {
|
48 |
+
echo $this->output();
|
49 |
+
} else {
|
50 |
+
return $this->output();
|
51 |
+
}
|
52 |
+
}
|
53 |
+
|
54 |
+
protected function output() {
|
55 |
+
$this->hookHead();
|
56 |
+
return $this->view->echoBlock($this);
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* This function is called from Ajax class as a wp_ajax_action
|
61 |
+
*
|
62 |
+
*/
|
63 |
+
protected function action() {
|
64 |
+
// check to see if the submitted nonce matches with the
|
65 |
+
// generated nonce we created
|
66 |
+
if (class_exists('wp_verify_nonce'))
|
67 |
+
if (!wp_verify_nonce(SQ_Tools::getValue(_SQ_NONCE_ID_), _SQ_NONCE_ID_))
|
68 |
+
die('Invalid request!');
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* This function will load the media in the header for each class
|
73 |
+
*
|
74 |
+
* @return void
|
75 |
+
*/
|
76 |
+
protected function hookHead() {
|
77 |
+
if (!is_admin())
|
78 |
+
return;
|
79 |
+
SQ_ObjController::getController('SQ_DisplayController', false)
|
80 |
+
->loadMedia($this->name);
|
81 |
+
}
|
82 |
+
|
83 |
+
}
|
classes/SQ_DisplayController.php
ADDED
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* The class handles the theme part in WP
|
5 |
+
*/
|
6 |
+
class SQ_DisplayController {
|
7 |
+
|
8 |
+
private static $name;
|
9 |
+
private static $cache;
|
10 |
+
|
11 |
+
public function init() {
|
12 |
+
/* Load the global CSS file */
|
13 |
+
self::loadMedia('sq_global');
|
14 |
+
}
|
15 |
+
|
16 |
+
/**
|
17 |
+
* echo the css link from theme css directory
|
18 |
+
*
|
19 |
+
* @param string $uri The name of the css file or the entire uri path of the css file
|
20 |
+
* @param string $media
|
21 |
+
*
|
22 |
+
* @return string
|
23 |
+
*/
|
24 |
+
public static function loadMedia($uri = '', $media = 'all', $params = null) {
|
25 |
+
if (strpos($_SERVER['PHP_SELF'], '/admin-ajax.php') !== false || (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER ['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'))
|
26 |
+
return;
|
27 |
+
|
28 |
+
$css_uri = '';
|
29 |
+
$js_uri = '';
|
30 |
+
$local = true;
|
31 |
+
|
32 |
+
if (isset(self::$cache[$uri]))
|
33 |
+
return;
|
34 |
+
self::$cache[$uri] = true;
|
35 |
+
|
36 |
+
/* if is a custom css file */
|
37 |
+
if (strpos($uri, '/') === false) {
|
38 |
+
$name = strtolower($uri);
|
39 |
+
if (file_exists(_SQ_THEME_DIR_ . 'css/' . $name . '.css')) {
|
40 |
+
$css_uri = _SQ_THEME_URL_ . 'css/' . $name . '.css?ver=' . SQ_VERSION_ID;
|
41 |
+
}
|
42 |
+
if (file_exists(_SQ_THEME_DIR_ . 'js/' . $name . '.js')) {
|
43 |
+
$js_uri = _SQ_THEME_URL_ . 'js/' . $name . '.js?ver=' . SQ_VERSION_ID;
|
44 |
+
}
|
45 |
+
} else {
|
46 |
+
$name = strtolower(basename($uri));
|
47 |
+
if (strpos($uri, '.css') !== FALSE)
|
48 |
+
$css_uri = $uri;
|
49 |
+
elseif (strpos($uri, '.js') !== FALSE) {
|
50 |
+
$js_uri = $uri;
|
51 |
+
}
|
52 |
+
$local = false;
|
53 |
+
}
|
54 |
+
|
55 |
+
|
56 |
+
if ($css_uri <> '') {
|
57 |
+
if (wp_style_is($name))
|
58 |
+
wp_deregister_style($name);
|
59 |
+
|
60 |
+
wp_register_style($name, $css_uri, null, SQ_VERSION_ID, 'all');
|
61 |
+
wp_enqueue_style($name);
|
62 |
+
}
|
63 |
+
|
64 |
+
if ($js_uri <> '') {
|
65 |
+
if (wp_script_is($name))
|
66 |
+
wp_deregister_script($name);
|
67 |
+
|
68 |
+
wp_register_script($name, $js_uri);
|
69 |
+
wp_enqueue_script($name);
|
70 |
+
}
|
71 |
+
}
|
72 |
+
|
73 |
+
public function setBlock($block) {
|
74 |
+
self::$name = $block;
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* echo the block content from theme directory
|
79 |
+
*
|
80 |
+
* @return string
|
81 |
+
*/
|
82 |
+
public static function echoBlock($view) {
|
83 |
+
global $post_ID;
|
84 |
+
if (file_exists(_SQ_THEME_DIR_ . self::$name . '.php')) {
|
85 |
+
ob_start();
|
86 |
+
|
87 |
+
/* includes the block from theme directory */
|
88 |
+
include(_SQ_THEME_DIR_ . self::$name . '.php');
|
89 |
+
$block_content = ob_get_contents();
|
90 |
+
ob_end_clean();
|
91 |
+
|
92 |
+
return $block_content;
|
93 |
+
}
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Called for any class to show the block content
|
98 |
+
*
|
99 |
+
* @param string $block the name of the block file in theme directory (class name by default)
|
100 |
+
*
|
101 |
+
* @return string of the current class view
|
102 |
+
*/
|
103 |
+
public function output($block, $obj) {
|
104 |
+
self::$name = $block;
|
105 |
+
echo $this->echoBlock($obj);
|
106 |
+
}
|
107 |
+
|
108 |
+
}
|
classes/SQ_Error.php
ADDED
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SQ_Error extends SQ_FrontController {
|
4 |
+
|
5 |
+
/** @var array */
|
6 |
+
private static $errors, $switch_off;
|
7 |
+
|
8 |
+
/**
|
9 |
+
* The error controller for Squirrly
|
10 |
+
*/
|
11 |
+
public function __construct() {
|
12 |
+
parent::__construct();
|
13 |
+
|
14 |
+
/* Verify dependences */
|
15 |
+
if (!function_exists('get_class')) {
|
16 |
+
self::setError(__('Function get_class does not exists! Is required for Squirrly to work properly.', _SQ_PLUGIN_NAME_));
|
17 |
+
}
|
18 |
+
if (!function_exists('file_exists')) {
|
19 |
+
self::setError(__('Function file_exists does not exists! Is required for Squirrly to work properly.', _SQ_PLUGIN_NAME_));
|
20 |
+
}
|
21 |
+
|
22 |
+
if (!defined('ABSPATH'))
|
23 |
+
self::setError(__('The home directory is not set!', _SQ_PLUGIN_NAME_), 'fatal');
|
24 |
+
|
25 |
+
/* Check the PHP version */
|
26 |
+
if (PHP_VERSION_ID < 5000) {
|
27 |
+
self::setError(__('The PHP version has to be greater then 4.0', _SQ_PLUGIN_NAME_), 'fatal');
|
28 |
+
}
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Show the error in wrodpress
|
33 |
+
*
|
34 |
+
* @param string $error
|
35 |
+
* @param boolean $stop
|
36 |
+
*
|
37 |
+
* @return void;
|
38 |
+
*/
|
39 |
+
public static function setError($error = '', $type = 'notice', $id = '') {
|
40 |
+
self::$errors[] = array('id' => $id,
|
41 |
+
'type' => $type,
|
42 |
+
'text' => $error);
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* This hook will show the error in WP header
|
47 |
+
*/
|
48 |
+
function hookNotices() {
|
49 |
+
if (is_array(self::$errors))
|
50 |
+
foreach (self::$errors as $error) {
|
51 |
+
|
52 |
+
switch ($error['type']) {
|
53 |
+
case 'fatal':
|
54 |
+
self::showError(ucfirst(_SQ_PLUGIN_NAME_ . " " . $error['type']) . ': ' . $error['text'], $error['id']);
|
55 |
+
die();
|
56 |
+
break;
|
57 |
+
case 'settings':
|
58 |
+
if (isset(SQ_Tools::$options['ignore_warn']) && SQ_Tools::$options['ignore_warn'] == 1)
|
59 |
+
break;
|
60 |
+
|
61 |
+
/* switch off option for notifications */
|
62 |
+
self::$switch_off = "<a href=\"javascript:void(0);\" onclick=\"jQuery.post( ajaxurl, {action: 'sq_warnings_off', nonce: '" . wp_create_nonce('sq_none') . "'}, function(data) { if (data) { jQuery('#sq_ignore_warn').attr('checked', true); jQuery('.sq_message').hide(); jQuery('#toplevel_page_squirrly .awaiting-mod').fadeOut('slow'); } });\" >" . __("Turn off warnings!", _SQ_PLUGIN_NAME_) . "</a>";
|
63 |
+
self::showError(ucfirst(_SQ_PLUGIN_NAME_) . " " . __('Notice: ', _SQ_PLUGIN_NAME_) . $error['text'] . " " . self::$switch_off, $error['id']);
|
64 |
+
break;
|
65 |
+
default:
|
66 |
+
|
67 |
+
self::showError(ucfirst(_SQ_PLUGIN_NAME_) . " " . __('Note: ', _SQ_PLUGIN_NAME_) . $error['text'], $error['id']);
|
68 |
+
}
|
69 |
+
}
|
70 |
+
self::$errors = array();
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Show the notices to WP
|
75 |
+
*
|
76 |
+
* @return void
|
77 |
+
*/
|
78 |
+
public static function showError($message, $id = '') {
|
79 |
+
$type = 'sq_error';
|
80 |
+
|
81 |
+
if (file_exists(_SQ_THEME_DIR_ . 'SQ_notices.php')) {
|
82 |
+
include (_SQ_THEME_DIR_ . 'SQ_notices.php');
|
83 |
+
} else {
|
84 |
+
echo $message;
|
85 |
+
}
|
86 |
+
}
|
87 |
+
|
88 |
+
}
|
classes/SQ_FrontController.php
ADDED
@@ -0,0 +1,129 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* The main class for controllers
|
5 |
+
*
|
6 |
+
*/
|
7 |
+
class SQ_FrontController {
|
8 |
+
|
9 |
+
/** @var object of the model class */
|
10 |
+
public $model;
|
11 |
+
|
12 |
+
/** @var boolean */
|
13 |
+
public $flush = true;
|
14 |
+
|
15 |
+
/** @var object of the view class */
|
16 |
+
public $view;
|
17 |
+
|
18 |
+
/** @var name of the class */
|
19 |
+
private $name;
|
20 |
+
|
21 |
+
public function __construct() {
|
22 |
+
|
23 |
+
/* get the name of the current class */
|
24 |
+
$this->name = get_class($this);
|
25 |
+
|
26 |
+
|
27 |
+
/* load the model and hooks here for wordpress actions to take efect */
|
28 |
+
/* create the model and view instances */
|
29 |
+
$this->model = SQ_ObjController::getModel($this->name);
|
30 |
+
|
31 |
+
//IMPORTANT TO LOAD HOOKS HERE
|
32 |
+
/* check if there is a hook defined in the controller clients class */
|
33 |
+
SQ_ObjController::getController('SQ_HookController', false)
|
34 |
+
->setAdminHooks($this);
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* load sequence of classes
|
39 |
+
* Function called usualy when the controller is loaded in WP
|
40 |
+
*
|
41 |
+
* @return void
|
42 |
+
*/
|
43 |
+
public function init() {
|
44 |
+
|
45 |
+
$this->view = SQ_ObjController::getController('SQ_DisplayController', false);
|
46 |
+
$this->view->setBlock($this->name);
|
47 |
+
|
48 |
+
|
49 |
+
/* load the blocks for this controller */
|
50 |
+
SQ_ObjController::getController('SQ_ObjController', false)->getBlocks($this->name);
|
51 |
+
|
52 |
+
if ($this->flush) {
|
53 |
+
echo $this->output();
|
54 |
+
} else {
|
55 |
+
return $this->output();
|
56 |
+
}
|
57 |
+
}
|
58 |
+
|
59 |
+
protected function output() {
|
60 |
+
$this->hookHead();
|
61 |
+
return $this->view->echoBlock($this);
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* initialize settings
|
66 |
+
* Called from index
|
67 |
+
*
|
68 |
+
* @return void
|
69 |
+
*/
|
70 |
+
public function run() {
|
71 |
+
/** check the admin condition */
|
72 |
+
if (!is_admin())
|
73 |
+
return;
|
74 |
+
|
75 |
+
/* Load error class */
|
76 |
+
SQ_ObjController::getController('SQ_Error', false);
|
77 |
+
/* Load Tools */
|
78 |
+
SQ_ObjController::getController('SQ_Tools', false);
|
79 |
+
|
80 |
+
|
81 |
+
|
82 |
+
/* Load the Submit Actions Handler */
|
83 |
+
SQ_ObjController::getController('SQ_Action', false);
|
84 |
+
|
85 |
+
SQ_ObjController::getController('SQ_DisplayController', false);
|
86 |
+
|
87 |
+
/* show the admin menu and post actions */
|
88 |
+
$this->loadMenu();
|
89 |
+
|
90 |
+
/* Load the Sitemap Generator */
|
91 |
+
SQ_ObjController::getController('SQ_Sitemap', false);
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* initialize menu
|
96 |
+
*
|
97 |
+
* @return void
|
98 |
+
*/
|
99 |
+
private function loadMenu() {
|
100 |
+
/* get the menu from controller */
|
101 |
+
SQ_ObjController::getController('SQ_Menu');
|
102 |
+
}
|
103 |
+
|
104 |
+
/**
|
105 |
+
* first function call for any class
|
106 |
+
*
|
107 |
+
*/
|
108 |
+
protected function action() {
|
109 |
+
// check to see if the submitted nonce matches with the
|
110 |
+
// generated nonce we created
|
111 |
+
if (class_exists('wp_verify_nonce'))
|
112 |
+
if (!wp_verify_nonce(SQ_Tools::getValue(_SQ_NONCE_ID_), _SQ_NONCE_ID_))
|
113 |
+
die('Invalid request!');
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* This function will load the media in the header for each class
|
118 |
+
*
|
119 |
+
* @return void
|
120 |
+
*/
|
121 |
+
public function hookHead() {
|
122 |
+
if (!is_admin())
|
123 |
+
return;
|
124 |
+
SQ_ObjController::getController('SQ_DisplayController', false)->init();
|
125 |
+
SQ_ObjController::getController('SQ_DisplayController', false)
|
126 |
+
->loadMedia($this->name);
|
127 |
+
}
|
128 |
+
|
129 |
+
}
|
classes/SQ_HookController.php
ADDED
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* The class handles the actions in WP
|
5 |
+
*/
|
6 |
+
class SQ_HookController {
|
7 |
+
|
8 |
+
/** @var array the WP actions list from admin */
|
9 |
+
private $admin_hooks = array();
|
10 |
+
private $custom_hooks = array();
|
11 |
+
private $block_hooks = array();
|
12 |
+
|
13 |
+
public function __construct() {
|
14 |
+
$this->admin_hooks = array('init' => 'admin_init',
|
15 |
+
'head' => 'admin_head',
|
16 |
+
'footer' => 'admin_footer',
|
17 |
+
'wmenu' => '_admin_menu',
|
18 |
+
'menu' => 'admin_menu',
|
19 |
+
'submenu' => 'add_submenu_page',
|
20 |
+
'loaded' => 'plugins_loaded',
|
21 |
+
'xml' => 'admin_xml_ns',
|
22 |
+
'scripts' => 'admin_enqueue_scripts',
|
23 |
+
'notices' => 'admin_notices',
|
24 |
+
'shutdown' => 'shutdown',
|
25 |
+
'fronttitletheme' => 'thematic_doctitle',
|
26 |
+
'frontinit' => 'init',
|
27 |
+
'fronthead' => 'wp_head',
|
28 |
+
'frontfooter' => 'wp_footer',
|
29 |
+
'frontcontent' => 'the_content',
|
30 |
+
);
|
31 |
+
$this->block_hooks = array('getContent' => 'getContent');
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Calls the specified action in WP
|
36 |
+
* @param oject $instance The parent class instance
|
37 |
+
*
|
38 |
+
* @return void
|
39 |
+
*/
|
40 |
+
public function setAdminHooks($instance) {
|
41 |
+
|
42 |
+
/* for each admin action check if is defined in class and call it */
|
43 |
+
foreach ($this->admin_hooks as $hook => $value) {
|
44 |
+
|
45 |
+
if (is_callable(array($instance, 'hook' . ucfirst($hook)))) {
|
46 |
+
//echo $value . '<br>';
|
47 |
+
//print_r(array($instance, 'hook'.ucfirst($hook)));
|
48 |
+
//call the WP add_action function
|
49 |
+
add_action($value, array($instance, 'hook' . ucfirst($hook)), 5);
|
50 |
+
}
|
51 |
+
}
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Calls the specified action in WP
|
56 |
+
* @param string $action
|
57 |
+
* @param array $callback Contains the class name or object and the callback function
|
58 |
+
*
|
59 |
+
* @return void
|
60 |
+
*/
|
61 |
+
public function setAction($action, $obj, $callback) {
|
62 |
+
|
63 |
+
/* calls the custom action function from WP */
|
64 |
+
add_action($action, array($obj, $callback), 10);
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Calls the specified action in WP
|
69 |
+
* @param oject $instance The parent class instance
|
70 |
+
*
|
71 |
+
* @return void
|
72 |
+
*/
|
73 |
+
public function setBlockHooks($instance) {
|
74 |
+
$param_arr = array();
|
75 |
+
|
76 |
+
/* for each admin action check if is defined in class and call it */
|
77 |
+
foreach ($this->block_hooks as $hook => $value)
|
78 |
+
if (is_callable(array($instance, 'hook' . ucfirst($hook))))
|
79 |
+
call_user_func_array(array($instance, 'hook' . ucfirst($hook)), $param_arr);
|
80 |
+
}
|
81 |
+
|
82 |
+
}
|
classes/SQ_ObjController.php
ADDED
@@ -0,0 +1,160 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* The class creates object for plugin classes
|
5 |
+
*/
|
6 |
+
class SQ_ObjController {
|
7 |
+
|
8 |
+
/** @var array of instances */
|
9 |
+
public static $instances;
|
10 |
+
|
11 |
+
/** @var array from core config */
|
12 |
+
private static $config;
|
13 |
+
|
14 |
+
private static function includeController($className, $core) {
|
15 |
+
/* check if class is already defined */
|
16 |
+
if (!class_exists($className, false))
|
17 |
+
/* if $core == true then call the class from core directory */
|
18 |
+
try {
|
19 |
+
if (file_exists(($core ? _SQ_CONTROLLER_DIR_ : _SQ_CLASSES_DIR_) . $className . '.php'))
|
20 |
+
include_once(($core ? _SQ_CONTROLLER_DIR_ : _SQ_CLASSES_DIR_) . $className . '.php');
|
21 |
+
} catch (Exception $e) {
|
22 |
+
echo 'Controller Error: ' . $e->getMessage();
|
23 |
+
}
|
24 |
+
}
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Get the instance of the specified class
|
28 |
+
*
|
29 |
+
* @param string $className
|
30 |
+
* @param bool $core TRUE is the class is a core class or FALSE if it is from classes directory
|
31 |
+
*
|
32 |
+
* @return object of the class|false
|
33 |
+
*/
|
34 |
+
public static function getController($className, $core = true) {
|
35 |
+
if (!isset(self::$instances[$className])) {
|
36 |
+
/* if $core == true then call the class from core directory */
|
37 |
+
self::includeController($className, $core);
|
38 |
+
|
39 |
+
if (class_exists($className)) {
|
40 |
+
self::$instances[$className] = new $className;
|
41 |
+
return self::$instances[$className];
|
42 |
+
}
|
43 |
+
} else
|
44 |
+
return self::$instances[$className];
|
45 |
+
|
46 |
+
return false;
|
47 |
+
}
|
48 |
+
|
49 |
+
private static function includeModel($className) {
|
50 |
+
|
51 |
+
/* check if class is already defined */
|
52 |
+
if (file_exists(_SQ_MODEL_DIR_ . $className . '.php'))
|
53 |
+
try {
|
54 |
+
include_once(_SQ_MODEL_DIR_ . $className . '.php');
|
55 |
+
} catch (Exception $e) {
|
56 |
+
echo 'Model Error: ' . $e->getMessage();
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Get the instance of the specified model class
|
62 |
+
*
|
63 |
+
* @param string $className
|
64 |
+
*
|
65 |
+
* @return object of the class
|
66 |
+
*/
|
67 |
+
public static function getModel($className) {
|
68 |
+
/* add Model prefix */
|
69 |
+
$prefix = 'Model_';
|
70 |
+
|
71 |
+
if (!isset(self::$instances[$prefix . $className])) {
|
72 |
+
/* if $core == true then call the class from core directory */
|
73 |
+
self::includeModel($className);
|
74 |
+
|
75 |
+
//echo $className . '<br />';
|
76 |
+
if (class_exists($prefix . $className)) {
|
77 |
+
$classModel = $prefix . $className;
|
78 |
+
self::$instances[$prefix . $className] = new $classModel;
|
79 |
+
return self::$instances[$prefix . $className];
|
80 |
+
}
|
81 |
+
} else
|
82 |
+
return self::$instances[$prefix . $className];
|
83 |
+
|
84 |
+
return;
|
85 |
+
}
|
86 |
+
|
87 |
+
private static function includeBlock($className) {
|
88 |
+
|
89 |
+
/* check if class is already defined */
|
90 |
+
try {
|
91 |
+
require_once(_SQ_CORE_DIR_ . $className . '/' . $className . '.php');
|
92 |
+
} catch (Exception $e) {
|
93 |
+
echo 'Model Error: ' . $e->getMessage();
|
94 |
+
}
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Get the instance of the specified block from core directory
|
99 |
+
*
|
100 |
+
* @param string $className
|
101 |
+
*
|
102 |
+
* @return object of the class
|
103 |
+
*/
|
104 |
+
public static function getBlock($className) {
|
105 |
+
|
106 |
+
if (!isset(self::$instances[$className])) {
|
107 |
+
/* if $core == true then call the class from core directory */
|
108 |
+
self::includeBlock($className);
|
109 |
+
|
110 |
+
//echo $className . '<br />';
|
111 |
+
if (class_exists($className)) {
|
112 |
+
self::$instances[$className] = new $className;
|
113 |
+
return self::$instances[$className];
|
114 |
+
} else
|
115 |
+
exit("Block error: Can't call $className class");
|
116 |
+
} else
|
117 |
+
return self::$instances[$className];
|
118 |
+
|
119 |
+
return;
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Get all core classes from config.xml in core directory
|
124 |
+
*
|
125 |
+
* @param string $for
|
126 |
+
*/
|
127 |
+
public function getBlocks($for) {
|
128 |
+
/* if config allready in cache */
|
129 |
+
if (!isset(self::$config)) {
|
130 |
+
$config_file = _SQ_CORE_DIR_ . 'config.xml';
|
131 |
+
if (!file_exists($config_file))
|
132 |
+
return;
|
133 |
+
|
134 |
+
/* load configuration blocks data from core config files */
|
135 |
+
$data = file_get_contents($config_file);
|
136 |
+
self::$config = json_decode(json_encode((array) simplexml_load_string($data)), 1);
|
137 |
+
;
|
138 |
+
}
|
139 |
+
//print_r(self::$config);
|
140 |
+
if (is_array(self::$config))
|
141 |
+
foreach (self::$config['block'] as $block) {
|
142 |
+
if ($block['active'] == 1)
|
143 |
+
if (isset($block['controllers']['controller']))
|
144 |
+
if (!is_array($block['controllers']['controller'])) {
|
145 |
+
/* if the block should load for the current controller */
|
146 |
+
if ($for == $block['controllers']['controller']) {
|
147 |
+
SQ_ObjController::getBlock($block['name'])->init();
|
148 |
+
}
|
149 |
+
} else {
|
150 |
+
foreach ($block['controllers']['controller'] as $controller) {
|
151 |
+
/* if the block should load for the current controller */
|
152 |
+
if ($for == $controller) {
|
153 |
+
SQ_ObjController::getBlock($block['name'])->init();
|
154 |
+
}
|
155 |
+
}
|
156 |
+
}
|
157 |
+
}
|
158 |
+
}
|
159 |
+
|
160 |
+
}
|
classes/SQ_Ranking.php
ADDED
@@ -0,0 +1,209 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class for Google Ranking Record
|
5 |
+
*/
|
6 |
+
class SQ_Ranking extends SQ_FrontController {
|
7 |
+
|
8 |
+
private $keyword;
|
9 |
+
private $post_id;
|
10 |
+
|
11 |
+
//--
|
12 |
+
public function getCountry() {
|
13 |
+
return SQ_Tools::$options['sq_google_country'];
|
14 |
+
}
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Get the google language from settings
|
18 |
+
* @return type
|
19 |
+
*/
|
20 |
+
public function getLanguage() {
|
21 |
+
return SQ_Tools::$options['sq_google_language'];
|
22 |
+
}
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Set the Post id
|
26 |
+
* @return type
|
27 |
+
*/
|
28 |
+
public function setPost($post_id) {
|
29 |
+
$this->post_id = $post_id;
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Get the current keyword
|
34 |
+
* @param type $keyword
|
35 |
+
*/
|
36 |
+
public function setKeyword($keyword) {
|
37 |
+
$this->keyword = str_replace(" ", "+", urlencode(strtolower($keyword)));
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Process Ranking on brief request
|
42 |
+
* @param type $return
|
43 |
+
*/
|
44 |
+
public function processRanking($post_id, $keyword) {
|
45 |
+
$this->setPost($post_id);
|
46 |
+
$this->setKeyword($keyword);
|
47 |
+
|
48 |
+
if (isset($this->keyword)) {
|
49 |
+
return $this->getGoogleRank();
|
50 |
+
}
|
51 |
+
return false;
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Call google to get the keyword position
|
56 |
+
*
|
57 |
+
* @param integer $post_id
|
58 |
+
* @param string $keyword
|
59 |
+
* @param string $country: com | country extension
|
60 |
+
* @param string $language: en | local language
|
61 |
+
* @return boolean|int
|
62 |
+
*/
|
63 |
+
public function getGoogleRank() {
|
64 |
+
global $wpdb;
|
65 |
+
$country = $this->getCountry();
|
66 |
+
|
67 |
+
if (!function_exists('preg_match_all'))
|
68 |
+
return;
|
69 |
+
|
70 |
+
$arg = array('timeout' => 10);
|
71 |
+
$arg['q'] = $this->keyword;
|
72 |
+
$arg['hl'] = $this->getLanguage();
|
73 |
+
$arg['num'] = '100';
|
74 |
+
$arg['as_qdr'] = 'all';
|
75 |
+
$arg['safe'] = 'off';
|
76 |
+
$arg['pws'] = '0';
|
77 |
+
|
78 |
+
//Grab the remote informations from google
|
79 |
+
$response = utf8_decode(SQ_Tools::sq_remote_get("https://www.google.$country/search", $arg));
|
80 |
+
|
81 |
+
//Check the values for block IP
|
82 |
+
if (strpos($response, "computer virus or spyware application") !== false ||
|
83 |
+
strpos($response, "entire network is affected") !== false ||
|
84 |
+
strpos($response, "http://www.download.com/Antivirus") !== false ||
|
85 |
+
strpos($response, "/images/yellow_warning.gif") !== false ||
|
86 |
+
strpos($response, "302 Moved") !== false) {
|
87 |
+
return -2; //return error
|
88 |
+
}
|
89 |
+
|
90 |
+
|
91 |
+
//Get the permalink of the current post
|
92 |
+
$permalink = get_permalink($this->post_id);
|
93 |
+
preg_match_all('/<h3 class="r"><a href="\/url\?q=(.*?)&sa=U&ei=/', $response, $matches);
|
94 |
+
|
95 |
+
$pos = -1;
|
96 |
+
if (!empty($matches[1])) {
|
97 |
+
foreach ($matches[1] as $index => $url) {
|
98 |
+
|
99 |
+
if (strpos($url, $permalink) !== false) {
|
100 |
+
$pos = $index + 1;
|
101 |
+
break;
|
102 |
+
}
|
103 |
+
}
|
104 |
+
}
|
105 |
+
return $pos;
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* Do google rank with cron
|
110 |
+
* @global type $wpdb
|
111 |
+
*/
|
112 |
+
public function processCron() {
|
113 |
+
global $wpdb;
|
114 |
+
set_time_limit(400);
|
115 |
+
/* Load the Submit Actions Handler */
|
116 |
+
SQ_ObjController::getController('SQ_Tools', false);
|
117 |
+
SQ_ObjController::getController('SQ_Action', false);
|
118 |
+
|
119 |
+
//check 20 keyword at one time
|
120 |
+
$sql = "SELECT `post_id`, `meta_value`
|
121 |
+
FROM `" . $wpdb->postmeta . "`
|
122 |
+
WHERE (`meta_key` = 'sq_post_keyword')
|
123 |
+
ORDER BY `post_id` DESC";
|
124 |
+
|
125 |
+
if ($rows = $wpdb->get_results($sql)) {
|
126 |
+
$count = 0;
|
127 |
+
foreach ($rows as $row) {
|
128 |
+
if ($count > 20) {
|
129 |
+
break; //check only 10 keywords at the time
|
130 |
+
}
|
131 |
+
if ($row->meta_value <> '') {
|
132 |
+
$json = json_decode($row->meta_value);
|
133 |
+
//If keyword is set and no rank or last check is 2 days ago
|
134 |
+
if (isset($json->keyword) && $json->keyword <> '' &&
|
135 |
+
(!isset($json->rank) ||
|
136 |
+
(isset($json->update) && (time() - $json->update > (60 * 60 * 24 * 2))) || //if indexed then check every 2 days
|
137 |
+
(isset($json->update) && isset($json->rank) && $json->rank == -1 && (time() - $json->update > (60 * 60 * 24))) //if not indexed than check often
|
138 |
+
)) {
|
139 |
+
|
140 |
+
$json->rank = $this->processRanking($row->post_id, $json->keyword);
|
141 |
+
if ($json->rank == -1) {
|
142 |
+
$count++;
|
143 |
+
sleep(mt_rand(10, 20));
|
144 |
+
//if not indexed with the keyword then find the url
|
145 |
+
if ($this->processRanking($row->post_id, get_permalink($row->post_id)) > 0) {
|
146 |
+
$json->rank = 0; //for permalink index set 0
|
147 |
+
}
|
148 |
+
}
|
149 |
+
|
150 |
+
|
151 |
+
if (isset($json->rank)) {
|
152 |
+
$json->country = $this->getCountry();
|
153 |
+
$json->language = $this->getLanguage();
|
154 |
+
SQ_ObjController::getModel('SQ_Post')->saveKeyword($row->post_id, $json);
|
155 |
+
set_transient('sq_rank' . $row->post_id, $json->rank, (60 * 60 * 24));
|
156 |
+
|
157 |
+
//if rank proccess has no error
|
158 |
+
if ($json->rank >= -1) {
|
159 |
+
$args = array();
|
160 |
+
$args['post_id'] = $row->post_id;
|
161 |
+
$args['rank'] = (string) $json->rank;
|
162 |
+
$args['country'] = $this->getCountry();
|
163 |
+
$args['language'] = $this->getLanguage();
|
164 |
+
|
165 |
+
SQ_Action::apiCall('sq/user-analytics/saveserp', $args);
|
166 |
+
}
|
167 |
+
$count++;
|
168 |
+
sleep(mt_rand(10, 20));
|
169 |
+
}
|
170 |
+
}
|
171 |
+
}
|
172 |
+
}
|
173 |
+
}
|
174 |
+
}
|
175 |
+
|
176 |
+
/**
|
177 |
+
* Get keyword from earlier version
|
178 |
+
*
|
179 |
+
*/
|
180 |
+
public function getKeywordHistory() {
|
181 |
+
global $wpdb;
|
182 |
+
//Check if ranks is saved in database
|
183 |
+
$sql = "SELECT a.`global_rank`, a.`keyword`, a.`post_id`
|
184 |
+
FROM `sq_analytics` as a
|
185 |
+
INNER JOIN (SELECT MAX(`id`) as id FROM `sq_analytics` WHERE `keyword` <> '' GROUP BY `post_id`) as a1 ON a1.id = a.id ";
|
186 |
+
|
187 |
+
if ($rows = $wpdb->get_results($sql)) {
|
188 |
+
foreach ($rows as $values) {
|
189 |
+
if ($json = SQ_ObjController::getModel('SQ_Post')->getKeyword($values->post_id)) {
|
190 |
+
$json->keyword = urldecode($values->keyword);
|
191 |
+
if ($values->global_rank > 0) {
|
192 |
+
$json->rank = $values->global_rank;
|
193 |
+
}
|
194 |
+
SQ_ObjController::getModel('SQ_Post')->saveKeyword($values->post_id, $json);
|
195 |
+
} else {
|
196 |
+
$args = array();
|
197 |
+
$args['keyword'] = urldecode($values->keyword);
|
198 |
+
if ($values->global_rank > 0) {
|
199 |
+
$json->rank = $values->global_rank;
|
200 |
+
}
|
201 |
+
SQ_ObjController::getModel('SQ_Post')->saveKeyword($values->post_id, json_decode(json_encode($args)));
|
202 |
+
}
|
203 |
+
}
|
204 |
+
}
|
205 |
+
}
|
206 |
+
|
207 |
+
}
|
208 |
+
|
209 |
+
?>
|
classes/SQ_Sitemap.php
ADDED
@@ -0,0 +1,381 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class for Sitemap Generator
|
5 |
+
*/
|
6 |
+
class SQ_Sitemap extends SQ_FrontController {
|
7 |
+
/* @var string file path */
|
8 |
+
|
9 |
+
var $file;
|
10 |
+
var $opt = array();
|
11 |
+
var $data = array();
|
12 |
+
var $args = array();
|
13 |
+
var $posts_limit = 0;
|
14 |
+
|
15 |
+
public function __construct() {
|
16 |
+
if (!isset(SQ_Tools::$options['sq_use']) || SQ_Tools::$options['sq_use'] == 0)
|
17 |
+
return;
|
18 |
+
if (isset(SQ_Tools::$options['sq_auto_sitemap']) && SQ_Tools::$options['sq_auto_sitemap'] == 0)
|
19 |
+
return;
|
20 |
+
|
21 |
+
$this->filename = 'sitemap.xml';
|
22 |
+
|
23 |
+
$this->file = ABSPATH . $this->filename;
|
24 |
+
//For sitemap ping
|
25 |
+
$this->args['timeout'] = 5;
|
26 |
+
$this->opt = array('home' => array(1, 'daily'),
|
27 |
+
'page' => array(0.6, 'monthly'),
|
28 |
+
'post' => array(0.8, 'weekly'),
|
29 |
+
'static' => array(0.6, 'weekly'),
|
30 |
+
'category' => array(0.4, 'monthly'),
|
31 |
+
'archive' => array(0.3, 'weekly'),
|
32 |
+
'oldarchive' => array(0.3, 'monthly'),
|
33 |
+
'tag' => array(0.3, 'weekly'),
|
34 |
+
'author' => array(0.3, 'monthly'),
|
35 |
+
);
|
36 |
+
|
37 |
+
//Existing posts was deleted
|
38 |
+
add_action('delete_post', array($this, 'generateSitemap'), 9999, 1);
|
39 |
+
//Existing post was published
|
40 |
+
add_action('publish_post', array($this, 'generateSitemap'), 9999, 1);
|
41 |
+
//Existing page was published
|
42 |
+
add_action('publish_page', array($this, 'generateSitemap'), 9999, 1);
|
43 |
+
}
|
44 |
+
|
45 |
+
public function init() {
|
46 |
+
return;
|
47 |
+
}
|
48 |
+
|
49 |
+
public function action() {
|
50 |
+
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Generate the XML sitemap for google
|
55 |
+
*/
|
56 |
+
public function generateSitemap() {
|
57 |
+
global $wpdb, $wp_query, $wp_version;
|
58 |
+
/* get the home url */
|
59 |
+
$home = get_bloginfo('url');
|
60 |
+
$homeID = 0;
|
61 |
+
$wpCompat = (floatval($wp_version) < 2.1);
|
62 |
+
|
63 |
+
/* If the site starts with a page */
|
64 |
+
if (get_option('show_on_front') == 'page' && get_option('page_on_front')) {
|
65 |
+
$page = get_page(get_option('page_on_front'));
|
66 |
+
if ($page) {
|
67 |
+
$homeID = $page->ID;
|
68 |
+
$lastmod = ($page->post_modified_gmt && $page->post_modified_gmt != '0000-00-00 00:00:00' ? $page->post_modified_gmt : $page->post_date_gmt);
|
69 |
+
$this->addLine($home, $this->getTimestamp($lastmod), $this->opt['home'][1], $this->opt['home'][0]);
|
70 |
+
}
|
71 |
+
} else
|
72 |
+
$this->addLine($home, $this->getTimestamp(get_lastpostmodified('GMT')), $this->opt['home'][1], $this->opt['home'][0]);
|
73 |
+
|
74 |
+
/* * ******************************************************************** */
|
75 |
+
//Add the pages
|
76 |
+
$query = array();
|
77 |
+
|
78 |
+
/* CREATE QUERY */
|
79 |
+
$query['what'] = "`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_status`, `post_name`, `post_modified`, `post_modified_gmt`, `post_parent`, `post_type` ";
|
80 |
+
|
81 |
+
/* from */
|
82 |
+
$query['from'] = " `" . $wpdb->posts . "` ";
|
83 |
+
/* where */
|
84 |
+
$query['where'] = '(';
|
85 |
+
|
86 |
+
|
87 |
+
if ($wpCompat)
|
88 |
+
$query['where'] .= "(post_status = 'publish' AND post_date_gmt <= '" . gmdate('Y-m-d H:i:59') . "')";
|
89 |
+
else
|
90 |
+
$query['where'] .= "(post_status = 'publish' AND (post_type = 'post' OR post_type = '')) ";
|
91 |
+
|
92 |
+
$query['where'] .= " OR ";
|
93 |
+
if ($wpCompat)
|
94 |
+
$query['where'] .= " post_status='static' ";
|
95 |
+
else
|
96 |
+
$query['where'] .= " (post_status = 'publish' AND post_type = 'page') ";
|
97 |
+
|
98 |
+
$query['where'] .= ") ";
|
99 |
+
$query['where'] .= " AND post_password=''";
|
100 |
+
/* order */
|
101 |
+
$query['order'] = " ORDER BY post_modified DESC";
|
102 |
+
/* limit */
|
103 |
+
$query['limit'] = ((int) $this->posts_limit > 0) ? " LIMIT 0," . $this->posts_limit : '';
|
104 |
+
|
105 |
+
|
106 |
+
$posts = $wpdb->get_results('SELECT ' . $query['what'] . ' FROM ' . $query['from'] . ' WHERE ' . $query['where'] . ' ' . $query['order'] . ' ' . $query['limit'] . ' ');
|
107 |
+
if (!$posts) {
|
108 |
+
trigger_error(ucfirst(_SQ_PLUGIN_NAME_) . " failed to connect to database: " . mysql_error(), E_USER_NOTICE); //E_USER_NOTICE will be displayed on our debug mode
|
109 |
+
return;
|
110 |
+
}
|
111 |
+
|
112 |
+
/* loop */
|
113 |
+
foreach ($posts as $post) {
|
114 |
+
$out = array();
|
115 |
+
$permalink = get_permalink($post->ID);
|
116 |
+
if ($permalink != $home && $post->ID != $homeID) {
|
117 |
+
|
118 |
+
$isPage = false;
|
119 |
+
if ($wpCompat)
|
120 |
+
$isPage = ($post->post_status == 'static');
|
121 |
+
else
|
122 |
+
$isPage = ($post->post_type == 'page');
|
123 |
+
|
124 |
+
if ($isPage) {
|
125 |
+
$out['priority'] = $this->opt['page'][0];
|
126 |
+
$out['changefreq'] = $this->opt['page'][1];
|
127 |
+
} else {
|
128 |
+
$out['priority'] = $this->opt['post'][0];
|
129 |
+
$out['changefreq'] = $this->opt['post'][1];
|
130 |
+
}
|
131 |
+
$out['lastmod'] = ($post->post_modified_gmt && $post->post_modified_gmt != '0000-00-00 00:00:00' ? $post->post_modified_gmt : $post->post_date_gmt);
|
132 |
+
|
133 |
+
//Add it
|
134 |
+
$this->addLine($permalink, $this->getTimestamp($out['lastmod']), $out['changefreq'], $out['priority']);
|
135 |
+
|
136 |
+
$subPage = '';
|
137 |
+
if (isset($post->postPages) > 0)
|
138 |
+
for ($i = 1; $i <= $post->postPages; $i++) {
|
139 |
+
if (get_option('permalink_structure') == '') {
|
140 |
+
$subPage = $permalink . '&page=' . ($p + 1);
|
141 |
+
} else {
|
142 |
+
$subPage = trailingslashit($permalink) . user_trailingslashit($p + 1, 'single_paged');
|
143 |
+
}
|
144 |
+
|
145 |
+
$this->addLine($subPage, $this->getTimestamp($out['lastmod']), $out['changefreq'], $out['priority']);
|
146 |
+
}
|
147 |
+
}
|
148 |
+
}
|
149 |
+
|
150 |
+
/* * ******************************************************************** */
|
151 |
+
/* Add links ftom categories */
|
152 |
+
if (!$this->IsTaxonomySupported()) {
|
153 |
+
$query = array();
|
154 |
+
|
155 |
+
/* CREATE QUERY */
|
156 |
+
$query['what'] = "c.cat_ID AS ID, MAX(p.post_modified_gmt) AS last_mod";
|
157 |
+
$query['from'] = "`" . $wpdb->categories . "` c, `" . $wpdb->post2cat . "` pc, `" . $wpdb->posts . "` p";
|
158 |
+
$query['where'] = "pc.category_id = c.cat_ID AND p.ID = pc.post_id AND p.post_status = 'publish' AND p.post_type='post'";
|
159 |
+
$query['order'] = "";
|
160 |
+
$query['limit'] = "";
|
161 |
+
$query['group'] = "GROUP BY c.cat_id";
|
162 |
+
|
163 |
+
$categories = $wpdb->get_results("SELECT " . $query['what'] . " FROM " . $query['from'] . " WHERE " . $query['where'] . " " . $query['order'] . " " . $query['group'] . " " . $query['limit'] . "");
|
164 |
+
|
165 |
+
if ($categories) {
|
166 |
+
foreach ($categories as $category) {
|
167 |
+
if ($category && $category->ID && $category->ID > 0) {
|
168 |
+
$this->addLine(get_category_link($category->ID), $this->getTimestamp($category->last_mod), $this->opt['category'][1], $this->opt['category'][0]);
|
169 |
+
}
|
170 |
+
}
|
171 |
+
}
|
172 |
+
} else {
|
173 |
+
$categories = get_terms("category", array("hide_empty" => true, "hierarchical" => false));
|
174 |
+
if ($categories && is_array($categories) && count($categories) > 0) {
|
175 |
+
foreach ($categories AS $category) {
|
176 |
+
$this->addLine(get_category_link($category->term_id), 0, $this->opt['category'][1], $this->opt['category'][0]);
|
177 |
+
}
|
178 |
+
}
|
179 |
+
}
|
180 |
+
|
181 |
+
/* * ******************************************************************** */
|
182 |
+
//Add the archives
|
183 |
+
$now = current_time('mysql');
|
184 |
+
$query = array();
|
185 |
+
|
186 |
+
/* CREATE QUERY */
|
187 |
+
$query['what'] = 'YEAR(post_date_gmt) AS `year`, MONTH(post_date_gmt) AS `month`, MAX(post_date_gmt) as last_mod, count(ID) as posts';
|
188 |
+
$query['from'] = "`" . $wpdb->posts . "`";
|
189 |
+
$query['where'] = "post_date < '$now' AND post_status = 'publish' AND post_type = 'post' " . (floatval($wp_version) < 2.1 ? "AND {$wpdb->posts}.post_date_gmt <= '" . gmdate('Y-m-d H:i:59') . "'" : "") . "";
|
190 |
+
$query['order'] = "ORDER BY post_date_gmt DESC";
|
191 |
+
$query['limit'] = "";
|
192 |
+
$query['group'] = "GROUP BY YEAR(post_date_gmt),MONTH(post_date_gmt)";
|
193 |
+
|
194 |
+
$archives = $wpdb->get_results("SELECT DISTINCT " . $query['what'] . " FROM " . $query['from'] . " WHERE " . $query['where'] . " " . $query['group'] . " " . $query['order'] . " " . $query['limit'] . "");
|
195 |
+
|
196 |
+
|
197 |
+
if ($archives) {
|
198 |
+
foreach ($archives as $archive) {
|
199 |
+
|
200 |
+
$changeFreq = "";
|
201 |
+
//Archive is the current one
|
202 |
+
if ($archive->month == date("n") && $archive->year == date("Y")) {
|
203 |
+
$changeFreq = $this->opt['archive'][1];
|
204 |
+
} else { // Archive is older
|
205 |
+
$changeFreq = $this->opt['oldarchive'][1];
|
206 |
+
}
|
207 |
+
|
208 |
+
$this->addLine(get_month_link($archive->year, $archive->month), $this->getTimestamp($archive->last_mod), $changeFreq, $this->opt['archive'][0]);
|
209 |
+
}
|
210 |
+
}
|
211 |
+
|
212 |
+
/* * ******************************************************************** */
|
213 |
+
//Add the author pages
|
214 |
+
$linkFunc = null;
|
215 |
+
|
216 |
+
//get_author_link is deprecated in WP 2.1, try to use get_author_posts_url first.
|
217 |
+
if (function_exists('get_author_posts_url'))
|
218 |
+
$linkFunc = 'get_author_posts_url';
|
219 |
+
else if (function_exists('get_author_link'))
|
220 |
+
$linkFunc = 'get_author_link';
|
221 |
+
|
222 |
+
if ($linkFunc !== null) {
|
223 |
+
$query = array();
|
224 |
+
|
225 |
+
/* CREATE QUERY */
|
226 |
+
$query['what'] = 'u.ID, u.user_nicename, MAX(p.post_modified_gmt) AS last_post';
|
227 |
+
$query['from'] = "`" . $wpdb->users . "` u, `" . $wpdb->posts . "` p";
|
228 |
+
$query['where'] = "p.post_author = u.ID AND p.post_status = 'publish' AND p.post_type = 'post' AND p.post_password = '' " . (floatval($wp_version) < 2.1 ? "AND p.post_date_gmt <= '" . gmdate('Y-m-d H:i:59') . "'" : "") . "";
|
229 |
+
$query['order'] = "";
|
230 |
+
$query['limit'] = "";
|
231 |
+
$query['group'] = "GROUP BY u.ID, u.user_nicename";
|
232 |
+
|
233 |
+
$authors = $wpdb->get_results("SELECT DISTINCT " . $query['what'] . " FROM " . $query['from'] . " WHERE " . $query['where'] . " " . $query['order'] . " " . $query['group'] . " " . $query['limit'] . "");
|
234 |
+
|
235 |
+
|
236 |
+
if ($authors && is_array($authors)) {
|
237 |
+
foreach ($authors as $author) {
|
238 |
+
|
239 |
+
$author_url = ($linkFunc == 'get_author_posts_url' ? get_author_posts_url($author->ID, $author->user_nicename) : get_author_link(false, $author->ID, $author->user_nicename));
|
240 |
+
$this->addLine($author_url, $this->getTimestamp($author->last_post), $this->opt['author'][1], $this->opt['author'][0]);
|
241 |
+
}
|
242 |
+
}
|
243 |
+
}
|
244 |
+
|
245 |
+
/* * ******************************************************************** */
|
246 |
+
if ($this->IsTaxonomySupported()) {
|
247 |
+
$count = 0;
|
248 |
+
$tags = get_terms("post_tag", array("hide_empty" => true, "hierarchical" => false));
|
249 |
+
if ($tags && is_array($tags) && count($tags) > 0) {
|
250 |
+
foreach ($tags AS $tag) {
|
251 |
+
if ($count > 3000)
|
252 |
+
break; //not to have a memory break
|
253 |
+
$this->addLine(get_tag_link($tag->term_id), strtotime(get_lastpostmodified()), $this->opt['tag'][1], $this->opt['tag'][0]);
|
254 |
+
$count++;
|
255 |
+
}
|
256 |
+
}
|
257 |
+
}
|
258 |
+
|
259 |
+
return $this->render();
|
260 |
+
}
|
261 |
+
|
262 |
+
/**
|
263 |
+
* Push new info to array
|
264 |
+
*
|
265 |
+
* @param string $link
|
266 |
+
* @param string $timestamp
|
267 |
+
* @param string $changefreq
|
268 |
+
* @param string $priority
|
269 |
+
*/
|
270 |
+
private function addLine($link, $timestamp, $changefreq, $priority) {
|
271 |
+
|
272 |
+
array_push($this->data, array(
|
273 |
+
'loc' => $link,
|
274 |
+
'lastmod' => date('Y-m-d\TH:i:s+00:00', $timestamp),
|
275 |
+
'changefreq' => $changefreq,
|
276 |
+
'priority' => $priority
|
277 |
+
));
|
278 |
+
}
|
279 |
+
|
280 |
+
/**
|
281 |
+
* Create the XML sitemap
|
282 |
+
* @return string
|
283 |
+
*/
|
284 |
+
private function render() {
|
285 |
+
$content = '';
|
286 |
+
try {
|
287 |
+
@ini_set('memory_limit', apply_filters('admin_memory_limit', WP_MAX_MEMORY_LIMIT));
|
288 |
+
|
289 |
+
$content .= '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
|
290 |
+
$content .= '<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
291 |
+
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
|
292 |
+
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
|
293 |
+
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";
|
294 |
+
|
295 |
+
|
296 |
+
if (is_array($this->data) && count($this->data) > 0)
|
297 |
+
foreach ($this->data as $data) {
|
298 |
+
$content .= "\t" . '<url>' . "\n";
|
299 |
+
$content .= "\t\t" . '<loc>' . $data['loc'] . '</loc>' . "\n";
|
300 |
+
$content .= "\t\t" . '<lastmod>' . $data['lastmod'] . '</lastmod>' . "\n";
|
301 |
+
$content .= "\t\t" . '<changefreq>' . $data['changefreq'] . '</changefreq>' . "\n";
|
302 |
+
$content .= "\t\t" . '<priority>' . $data['priority'] . '</priority>' . "\n";
|
303 |
+
$content .= "\t" . '</url>' . "\n";
|
304 |
+
} # end foreach
|
305 |
+
$content .= '</urlset>';
|
306 |
+
} catch (Exception $e) {
|
307 |
+
|
308 |
+
}
|
309 |
+
|
310 |
+
$this->saveSitemap($content);
|
311 |
+
|
312 |
+
return $content;
|
313 |
+
}
|
314 |
+
|
315 |
+
/**
|
316 |
+
* Converts into a unix timestamp
|
317 |
+
*
|
318 |
+
* @param string time
|
319 |
+
* @return string
|
320 |
+
*/
|
321 |
+
private function getTimestamp($time) {
|
322 |
+
|
323 |
+
$time = date('Y-m-d H:i:s');
|
324 |
+
list($date, $hours) = explode(' ', $time);
|
325 |
+
list($year, $month, $day) = explode('-', $date);
|
326 |
+
list($hour, $min, $sec) = explode(':', $hours);
|
327 |
+
|
328 |
+
return mktime(intval($hour), intval($min), intval($sec), intval($month), intval($day), intval($year));
|
329 |
+
}
|
330 |
+
|
331 |
+
/**
|
332 |
+
* Function to save the sitemap data to file as either XML or XML.GZ format
|
333 |
+
* @param string $data XML data
|
334 |
+
* @param string $filename file path
|
335 |
+
*
|
336 |
+
* @return boolean
|
337 |
+
*/
|
338 |
+
private function saveSitemap($data) {
|
339 |
+
if (function_exists('gzopen') && function_exists('gzwrite') && function_exists('gzclose')) {
|
340 |
+
if (function_exists('file_exists') && file_exists($this->file . '.gz'))
|
341 |
+
@unlink($this->file . '.gz');
|
342 |
+
|
343 |
+
if (function_exists('file_exists') && !file_exists($this->file . '.gz'))
|
344 |
+
if ($gz = @gzopen($this->file . '.gz', 'wb9')) {
|
345 |
+
@gzwrite($gz, $data);
|
346 |
+
@gzclose($gz);
|
347 |
+
}
|
348 |
+
}
|
349 |
+
|
350 |
+
if (function_exists('fopen'))
|
351 |
+
if ($fp = @fopen($this->file, 'w+')) {
|
352 |
+
fwrite($fp, $data);
|
353 |
+
fclose($fp);
|
354 |
+
return true;
|
355 |
+
}
|
356 |
+
|
357 |
+
return false;
|
358 |
+
}
|
359 |
+
|
360 |
+
/**
|
361 |
+
* Returns the URL for the XML sitemap file
|
362 |
+
*
|
363 |
+
* @return string
|
364 |
+
*/
|
365 |
+
public function getXmlUrl() {
|
366 |
+
return trailingslashit(get_bloginfo('url')) . $this->filename;
|
367 |
+
}
|
368 |
+
|
369 |
+
/**
|
370 |
+
* Returns if this version of WordPress supports the new taxonomy system
|
371 |
+
*
|
372 |
+
* @since 3.0b8
|
373 |
+
* @access private
|
374 |
+
* @author Arne Brachhold
|
375 |
+
* @return true if supported
|
376 |
+
*/
|
377 |
+
private function IsTaxonomySupported() {
|
378 |
+
return (function_exists("get_taxonomy") && function_exists("get_terms"));
|
379 |
+
}
|
380 |
+
|
381 |
+
}
|
classes/SQ_Tools.php
ADDED
@@ -0,0 +1,774 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Handles the parameters and url
|
5 |
+
*
|
6 |
+
* @author Squirrly
|
7 |
+
*/
|
8 |
+
class SQ_Tools extends SQ_FrontController {
|
9 |
+
|
10 |
+
/** @var array Saved options in database */
|
11 |
+
public static $options = array();
|
12 |
+
|
13 |
+
/** @var integer Count the errors in site */
|
14 |
+
static $errors_count = 0;
|
15 |
+
|
16 |
+
/** @var array */
|
17 |
+
private static $debug;
|
18 |
+
private static $source_code;
|
19 |
+
|
20 |
+
public function __construct() {
|
21 |
+
parent::__construct();
|
22 |
+
|
23 |
+
self::$options = $this->getOptions();
|
24 |
+
|
25 |
+
$this->checkDebug(); //Check for debug
|
26 |
+
}
|
27 |
+
|
28 |
+
public static function getUserID() {
|
29 |
+
global $current_user;
|
30 |
+
return $current_user->ID;
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* This hook will save the current version in database
|
35 |
+
*
|
36 |
+
* @return void
|
37 |
+
*/
|
38 |
+
function hookInit() {
|
39 |
+
$this->sq_patch3000(); //Update the older version
|
40 |
+
//TinyMCE editor required
|
41 |
+
//set_user_setting('editor', 'tinymce');
|
42 |
+
|
43 |
+
$this->loadMultilanguage();
|
44 |
+
|
45 |
+
//add setting link in plugin
|
46 |
+
add_filter('plugin_action_links', array($this, 'hookActionlink'), 5, 2);
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Add a link to settings in the plugin list
|
51 |
+
*
|
52 |
+
* @param array $links
|
53 |
+
* @param type $file
|
54 |
+
* @return array
|
55 |
+
*/
|
56 |
+
public function hookActionlink($links, $file) {
|
57 |
+
if ($file == _SQ_PLUGIN_NAME_ . '/squirrly.php') {
|
58 |
+
if (SQ_Tools::$options['sq_api'] == '') {
|
59 |
+
$link = '<a href="' . admin_url('admin.php?page=sq_howto') . '">' . __('Getting started', _SQ_PLUGIN_NAME_) . '</a>';
|
60 |
+
array_unshift($links, $link);
|
61 |
+
} elseif (SQ_Tools::$options['sq_api'] <> '') {
|
62 |
+
$link = '<a href="' . admin_url('admin.php?page=sq_dashboard') . '">' . __('Dashboard', _SQ_PLUGIN_NAME_) . '</a>';
|
63 |
+
array_unshift($links, $link);
|
64 |
+
}
|
65 |
+
}
|
66 |
+
|
67 |
+
return $links;
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Load the Options from user option table in DB
|
72 |
+
*
|
73 |
+
* @return void
|
74 |
+
*/
|
75 |
+
public static function getOptions() {
|
76 |
+
$default = array(
|
77 |
+
'sq_api' => '',
|
78 |
+
'sq_use' => 1,
|
79 |
+
'sq_hide_survey' => 0,
|
80 |
+
// --
|
81 |
+
'sq_auto_canonical' => 1,
|
82 |
+
'sq_auto_sitemap' => 1,
|
83 |
+
'sq_auto_meta' => 1,
|
84 |
+
'sq_auto_favicon' => 1,
|
85 |
+
'sq_auto_twitter' => 1,
|
86 |
+
'sq_auto_facebook' => 1,
|
87 |
+
'sq_twitter_account' => '',
|
88 |
+
// --
|
89 |
+
'sq_auto_seo' => 1,
|
90 |
+
'sq_auto_title' => 1,
|
91 |
+
'sq_auto_description' => 1,
|
92 |
+
'sq_fp_title' => '',
|
93 |
+
'sq_fp_description' => '',
|
94 |
+
'sq_fp_keywords' => '',
|
95 |
+
// --
|
96 |
+
'sq_google_plus' => '',
|
97 |
+
'sq_google_wt' => '',
|
98 |
+
'sq_google_analytics' => '',
|
99 |
+
'sq_facebook_insights' => '',
|
100 |
+
'sq_bing_wt' => '',
|
101 |
+
'sq_alexa' => '',
|
102 |
+
// --
|
103 |
+
'ignore_warn' => 0,
|
104 |
+
'sq_keyword_help' => 1,
|
105 |
+
'sq_keyword_information' => 0,
|
106 |
+
//
|
107 |
+
'sq_google_country' => 'com',
|
108 |
+
'sq_google_language' => 'en',
|
109 |
+
// --
|
110 |
+
'sq_advance_user' => 0,
|
111 |
+
'sq_affiliate_link' => '',
|
112 |
+
'sq_sla' => 1,
|
113 |
+
//--
|
114 |
+
'sq_dbtables' => 0,
|
115 |
+
'sq_analytics' => 0,
|
116 |
+
);
|
117 |
+
$options = json_decode(get_option(SQ_OPTION), true);
|
118 |
+
|
119 |
+
if (is_array($options)) {
|
120 |
+
$options = @array_merge($default, $options);
|
121 |
+
return $options;
|
122 |
+
}
|
123 |
+
|
124 |
+
return $default;
|
125 |
+
}
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Save the Options in user option table in DB
|
129 |
+
*
|
130 |
+
* @return void
|
131 |
+
*/
|
132 |
+
public static function saveOptions($key, $value) {
|
133 |
+
self::$options[$key] = $value;
|
134 |
+
update_option(SQ_OPTION, json_encode(self::$options));
|
135 |
+
}
|
136 |
+
|
137 |
+
/**
|
138 |
+
* Set the header type
|
139 |
+
* @param type $type
|
140 |
+
*/
|
141 |
+
public static function setHeader($type) {
|
142 |
+
if (SQ_Tools::getValue('sq_debug') == 'on')
|
143 |
+
return;
|
144 |
+
|
145 |
+
switch ($type) {
|
146 |
+
case 'json':
|
147 |
+
header('Content-Type: application/json');
|
148 |
+
}
|
149 |
+
}
|
150 |
+
|
151 |
+
/**
|
152 |
+
* Get a value from $_POST / $_GET
|
153 |
+
* if unavailable, take a default value
|
154 |
+
*
|
155 |
+
* @param string $key Value key
|
156 |
+
* @param mixed $defaultValue (optional)
|
157 |
+
* @return mixed Value
|
158 |
+
*/
|
159 |
+
public static function getValue($key, $defaultValue = false) {
|
160 |
+
if (!isset($key) OR empty($key) OR !is_string($key))
|
161 |
+
return false;
|
162 |
+
$ret = (isset($_POST[$key]) ? $_POST[$key] : (isset($_GET[$key]) ? $_GET[$key] : $defaultValue));
|
163 |
+
|
164 |
+
if (is_string($ret) === true)
|
165 |
+
$ret = urldecode(preg_replace('/((\%5C0+)|(\%00+))/i', '', urlencode($ret)));
|
166 |
+
return !is_string($ret) ? $ret : stripslashes($ret);
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* Check if the parameter is set
|
171 |
+
*
|
172 |
+
* @param string $key
|
173 |
+
* @return boolean
|
174 |
+
*/
|
175 |
+
public static function getIsset($key) {
|
176 |
+
if (!isset($key) OR empty($key) OR !is_string($key))
|
177 |
+
return false;
|
178 |
+
return isset($_POST[$key]) ? true : (isset($_GET[$key]) ? true : false);
|
179 |
+
}
|
180 |
+
|
181 |
+
/**
|
182 |
+
* Show the notices to WP
|
183 |
+
*
|
184 |
+
* @return void
|
185 |
+
*/
|
186 |
+
public static function showNotices($message, $type = 'sq_notices') {
|
187 |
+
if (file_exists(_SQ_THEME_DIR_ . 'SQ_notices.php')) {
|
188 |
+
ob_start();
|
189 |
+
include (_SQ_THEME_DIR_ . 'SQ_notices.php');
|
190 |
+
$message = ob_get_contents();
|
191 |
+
ob_end_clean();
|
192 |
+
}
|
193 |
+
|
194 |
+
return $message;
|
195 |
+
}
|
196 |
+
|
197 |
+
/**
|
198 |
+
* Load the multilanguage support from .mo
|
199 |
+
*/
|
200 |
+
private function loadMultilanguage() {
|
201 |
+
if (!defined('WP_PLUGIN_DIR')) {
|
202 |
+
load_plugin_textdomain(_SQ_PLUGIN_NAME_, _SQ_PLUGIN_NAME_ . '/languages/');
|
203 |
+
} else {
|
204 |
+
load_plugin_textdomain(_SQ_PLUGIN_NAME_, null, _SQ_PLUGIN_NAME_ . '/languages/');
|
205 |
+
}
|
206 |
+
}
|
207 |
+
|
208 |
+
/**
|
209 |
+
* Connect remote with CURL if exists
|
210 |
+
*/
|
211 |
+
public static function sq_remote_get($url, $param = array()) {
|
212 |
+
$parameters = '';
|
213 |
+
$cookies = array();
|
214 |
+
$cookie_string = '';
|
215 |
+
|
216 |
+
$url_domain = parse_url($url);
|
217 |
+
$url_domain = $url_domain['host'];
|
218 |
+
|
219 |
+
foreach ($param as $key => $value) {
|
220 |
+
if ($value <> '' && $key <> 'timeout')
|
221 |
+
$parameters .= ($parameters == "" ? "" : "&") . $key . "=" . $value;
|
222 |
+
}
|
223 |
+
if ($parameters <> '')
|
224 |
+
$url .= ((strpos($url, "?") === false) ? "?" : "&") . $parameters;
|
225 |
+
|
226 |
+
if ($url_domain == $_SERVER['HTTP_HOST'] && strpos($url, 'preview=true') !== false) {
|
227 |
+
foreach ($_COOKIE as $name => $value) {
|
228 |
+
if (strpos($name, 'wordpress') !== false || strpos($name, 'wpta') !== false) {
|
229 |
+
$cookies[] = new WP_Http_Cookie(array('name' => $name, 'value' => $value));
|
230 |
+
$cookie_string .= "$name=$value;";
|
231 |
+
}
|
232 |
+
}
|
233 |
+
$cookies[] = new WP_Http_Cookie(array('name' => 'sq_snippet', 'value' => 1));
|
234 |
+
$cookie_string .= "sq_snippet=1;";
|
235 |
+
}
|
236 |
+
|
237 |
+
$timeout = (isset($param['timeout'])) ? $param['timeout'] : 30;
|
238 |
+
|
239 |
+
if (function_exists('curl_init')) {
|
240 |
+
return self::sq_curl($url, array('timeout' => $timeout, 'cookies' => $cookies, 'cookie_string' => $cookie_string));
|
241 |
+
} else {
|
242 |
+
return self::sq_wpcall($url, array('timeout' => $timeout, 'cookies' => $cookies, 'sslverify' => false));
|
243 |
+
}
|
244 |
+
}
|
245 |
+
|
246 |
+
/**
|
247 |
+
* Call remote UR with CURL
|
248 |
+
* @param string $url
|
249 |
+
* @param array $param
|
250 |
+
* @return string
|
251 |
+
*/
|
252 |
+
private static function sq_curl($url, $param) {
|
253 |
+
|
254 |
+
$ch = curl_init();
|
255 |
+
curl_setopt($ch, CURLOPT_URL, $url);
|
256 |
+
curl_setopt($ch, CURLOPT_HEADER, false);
|
257 |
+
//--
|
258 |
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
259 |
+
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
260 |
+
curl_setopt($ch, CURLOPT_FAILONERROR, false);
|
261 |
+
//--
|
262 |
+
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
|
263 |
+
curl_setopt($ch, CURLOPT_TIMEOUT, $param['timeout']);
|
264 |
+
curl_setopt($ch, CURLOPT_MAXREDIRS, 1);
|
265 |
+
|
266 |
+
if ($param['cookie_string'] <> '')
|
267 |
+
curl_setopt($ch, CURLOPT_COOKIE, $param['cookie_string']);
|
268 |
+
|
269 |
+
$response = curl_exec($ch);
|
270 |
+
$response = self::cleanResponce($response);
|
271 |
+
|
272 |
+
self::dump('CURL', $url, $param, $response); //output debug
|
273 |
+
|
274 |
+
if (curl_errno($ch) == 1 || $response === false) { //if protocol not supported
|
275 |
+
if (curl_errno($ch)) {
|
276 |
+
self::dump(curl_getinfo($ch), curl_errno($ch), curl_error($ch));
|
277 |
+
}
|
278 |
+
curl_close($ch);
|
279 |
+
$response = self::sq_wpcall($url, $param); //use the wordpress call
|
280 |
+
} else {
|
281 |
+
curl_close($ch);
|
282 |
+
}
|
283 |
+
|
284 |
+
return $response;
|
285 |
+
}
|
286 |
+
|
287 |
+
/**
|
288 |
+
* Use the WP remote call
|
289 |
+
* @param string $url
|
290 |
+
* @param array $param
|
291 |
+
* @return string
|
292 |
+
*/
|
293 |
+
private static function sq_wpcall($url, $param) {
|
294 |
+
$response = wp_remote_get($url, $param);
|
295 |
+
$response = self::cleanResponce(wp_remote_retrieve_body($response)); //clear and get the body
|
296 |
+
self::dump('wp_remote_get', $url, $param, $response); //output debug
|
297 |
+
return $response;
|
298 |
+
}
|
299 |
+
|
300 |
+
/**
|
301 |
+
* Connect remote with CURL if exists
|
302 |
+
*/
|
303 |
+
public static function sq_remote_head($url) {
|
304 |
+
$response = array();
|
305 |
+
|
306 |
+
if (function_exists('curl_exec')) {
|
307 |
+
$ch = curl_init($url);
|
308 |
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
309 |
+
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
|
310 |
+
curl_exec($ch);
|
311 |
+
|
312 |
+
$response['headers']['content-type'] = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
|
313 |
+
$response['response']['code'] = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
314 |
+
curl_close($ch);
|
315 |
+
|
316 |
+
return $response;
|
317 |
+
} else {
|
318 |
+
return wp_remote_head($url, array('timeout' => 30));
|
319 |
+
}
|
320 |
+
|
321 |
+
return false;
|
322 |
+
}
|
323 |
+
|
324 |
+
/**
|
325 |
+
* Get the Json from responce if any
|
326 |
+
* @param string $response
|
327 |
+
* @return string
|
328 |
+
*/
|
329 |
+
private static function cleanResponce($response) {
|
330 |
+
|
331 |
+
if (function_exists('substr_count'))
|
332 |
+
if (substr_count($response, '(') > 1)
|
333 |
+
return $response;
|
334 |
+
|
335 |
+
if (strpos($response, '(') !== false && strpos($response, ')') !== false)
|
336 |
+
$response = substr($response, (strpos($response, '(') + 1), (strpos($response, ')') - 1));
|
337 |
+
|
338 |
+
return $response;
|
339 |
+
}
|
340 |
+
|
341 |
+
/**
|
342 |
+
* Check for SEO blog bad settings
|
343 |
+
*/
|
344 |
+
public static function checkErrorSettings($count_only = false) {
|
345 |
+
if (function_exists('is_network_admin') && is_network_admin())
|
346 |
+
return;
|
347 |
+
|
348 |
+
if (isset(self::$options['ignore_warn']) && self::$options['ignore_warn'] == 1)
|
349 |
+
return;
|
350 |
+
|
351 |
+
$fixit = "<a href=\"javascript:void(0);\" onclick=\"%s jQuery(this).closest('div').fadeOut('slow'); if(parseInt(jQuery('.sq_count').html())>0) { var notif = (parseInt(jQuery('.sq_count').html()) - 1); if (notif > 0) {jQuery('.sq_count').html(notif); }else{ jQuery('.sq_count').html(notif); jQuery('.sq_count').hide(); } } jQuery.post(ajaxurl, { action: '%s', nonce: '" . wp_create_nonce('sq_none') . "'});\" >" . __("Fix it for me!", _SQ_PLUGIN_NAME_) . "</a>";
|
352 |
+
|
353 |
+
|
354 |
+
/* IF SEO INDEX IS OFF */
|
355 |
+
if (self::getAutoSeoSquirrly()) {
|
356 |
+
if ($count_only)
|
357 |
+
self::$errors_count ++;
|
358 |
+
else
|
359 |
+
SQ_Error::setError(__('Let Squirrly optimize your SEO automatically (recommended)', _SQ_PLUGIN_NAME_) . " <br />" . sprintf($fixit, "jQuery('#sq_use_on').attr('checked', true);", "sq_fixautoseo") . " | ", 'settings', 'sq_fix_auto');
|
360 |
+
}
|
361 |
+
|
362 |
+
/* IF DESCRIPTION DUPLICATES */
|
363 |
+
if (self::getDuplicateDescription()) {
|
364 |
+
if ($count_only)
|
365 |
+
self::$errors_count ++;
|
366 |
+
else
|
367 |
+
SQ_Error::setError(__('You have META Description Duplicates. Disable the Squirrly SEO Description or disable the other SEO Plugins', _SQ_PLUGIN_NAME_) . " <br />" . sprintf($fixit, "jQuery('#sq_auto_description0').attr('checked', true); jQuery('#sq_automatically').attr('checked', true);", "sq_fix_descduplicate") . " | ", 'settings', 'sq_fix_descduplicate');
|
368 |
+
}
|
369 |
+
|
370 |
+
/* IF OG DUPLICATES */
|
371 |
+
if (self::getDuplicateOG()) {
|
372 |
+
if ($count_only)
|
373 |
+
self::$errors_count ++;
|
374 |
+
else
|
375 |
+
SQ_Error::setError(__('You have Open Graph META Duplicates. Disable the Squirrly SEO Open Graph or disable the other SEO Plugins', _SQ_PLUGIN_NAME_) . " <br />" . sprintf($fixit, "jQuery('#sq_auto_facebook0').attr('checked', true);", "sq_fix_ogduplicate") . " | ", 'settings', 'sq_fix_ogduplicate');
|
376 |
+
}
|
377 |
+
|
378 |
+
/* IF TWITTER CARD DUPLICATES */
|
379 |
+
if (self::getDuplicateTC()) {
|
380 |
+
if ($count_only)
|
381 |
+
self::$errors_count ++;
|
382 |
+
else
|
383 |
+
SQ_Error::setError(__('You have Twitter Card META Duplicates. Disable the Squirrly SEO Twitter Card or disable the other SEO Plugins', _SQ_PLUGIN_NAME_) . " <br />" . sprintf($fixit, "jQuery('#sq_auto_twitter0').attr('checked', true);", "sq_fix_tcduplicate") . " | ", 'settings', 'sq_fix_tcduplicate');
|
384 |
+
}
|
385 |
+
|
386 |
+
/* IF SEO INDEX IS OFF */
|
387 |
+
if (self::getPrivateBlog()) {
|
388 |
+
|
389 |
+
if ($count_only)
|
390 |
+
self::$errors_count++;
|
391 |
+
else
|
392 |
+
SQ_Error::setError(__('You\'re blocking google from indexing your site!', _SQ_PLUGIN_NAME_) . " <br />" . sprintf($fixit, "jQuery('#sq_google_index1').attr('checked',true);", "sq_fixprivate") . " | ", 'settings', 'sq_fix_private');
|
393 |
+
}
|
394 |
+
|
395 |
+
if (self::getBadLinkStructure()) {
|
396 |
+
if ($count_only)
|
397 |
+
self::$errors_count++;
|
398 |
+
else
|
399 |
+
SQ_Error::setError(__('It is highly recommended that you include the %postname% variable in the permalink structure. <br />Go to Settings > Permalinks and add /%postname%/ in Custom Structure', _SQ_PLUGIN_NAME_) . " <br /> ", 'settings');
|
400 |
+
}
|
401 |
+
}
|
402 |
+
|
403 |
+
/**
|
404 |
+
* Check if the automatically seo si active
|
405 |
+
* @return bool
|
406 |
+
*/
|
407 |
+
private static function getAutoSeoSquirrly() {
|
408 |
+
if (isset(self::$options['sq_use']))
|
409 |
+
return ((int) self::$options['sq_use'] == 0 );
|
410 |
+
|
411 |
+
return true;
|
412 |
+
}
|
413 |
+
|
414 |
+
/**
|
415 |
+
* Check for META duplicates
|
416 |
+
* @return boolean
|
417 |
+
*/
|
418 |
+
private static function getDuplicateOG() {
|
419 |
+
if (!function_exists('preg_match_all')) {
|
420 |
+
return false;
|
421 |
+
}
|
422 |
+
|
423 |
+
if (self::$options['sq_use'] == 1 && self::$options['sq_auto_facebook'] == 1) {
|
424 |
+
if (!isset(self::$source_code))
|
425 |
+
self::$source_code = self::sq_remote_get(get_bloginfo('url'), array('timeout' => 10));
|
426 |
+
|
427 |
+
if (self::$source_code <> '') {
|
428 |
+
preg_match_all("/<meta[\s+]property=[\"|\']og:url[\"|\'][\s+](content|value)=[\"|\']([^>]*)[\"|\'][^>]*>/i", self::$source_code, $out);
|
429 |
+
if (!empty($out) && isset($out[0]) && is_array($out[0])) {
|
430 |
+
return (sizeof($out[0]) > 1);
|
431 |
+
}
|
432 |
+
}
|
433 |
+
}
|
434 |
+
|
435 |
+
return false;
|
436 |
+
}
|
437 |
+
|
438 |
+
/**
|
439 |
+
* Check for META duplicates
|
440 |
+
* @return boolean
|
441 |
+
*/
|
442 |
+
private static function getDuplicateTC() {
|
443 |
+
if (!function_exists('preg_match_all')) {
|
444 |
+
return false;
|
445 |
+
}
|
446 |
+
|
447 |
+
if (self::$options['sq_use'] == 1 && self::$options['sq_auto_twitter'] == 1) {
|
448 |
+
if (!isset(self::$source_code))
|
449 |
+
self::$source_code = self::sq_remote_get(get_bloginfo('url'), array('timeout' => 10));
|
450 |
+
|
451 |
+
if (self::$source_code <> '') {
|
452 |
+
preg_match_all("/<meta[\s+]name=[\"|\']twitter:card[\"|\'][\s+](content|value)=[\"|\']([^>]*)[\"|\'][^>]*>/i", self::$source_code, $out);
|
453 |
+
if (!empty($out) && isset($out[0]) && is_array($out[0])) {
|
454 |
+
return (sizeof($out[0]) > 1);
|
455 |
+
}
|
456 |
+
}
|
457 |
+
}
|
458 |
+
|
459 |
+
return false;
|
460 |
+
}
|
461 |
+
|
462 |
+
/**
|
463 |
+
* Check for META duplicates
|
464 |
+
* @return boolean
|
465 |
+
*/
|
466 |
+
private static function getDuplicateDescription() {
|
467 |
+
if (!function_exists('preg_match_all')) {
|
468 |
+
return false;
|
469 |
+
}
|
470 |
+
$total = 0;
|
471 |
+
|
472 |
+
if (self::$options['sq_use'] == 1 && self::$options['sq_auto_description'] == 1) {
|
473 |
+
if (!isset(self::$source_code))
|
474 |
+
self::$source_code = self::sq_remote_get(get_bloginfo('url'), array('timeout' => 10));
|
475 |
+
|
476 |
+
if (self::$source_code <> '') {
|
477 |
+
preg_match_all("/<meta[^>]*name=[\"|\']description[\"|\'][^>]*content=[\"]([^\"]*)[\"][^>]*>/i", self::$source_code, $out);
|
478 |
+
if (!empty($out) && isset($out[0]) && is_array($out[0])) {
|
479 |
+
$total += sizeof($out[0]);
|
480 |
+
}
|
481 |
+
preg_match_all("/<meta[^>]*content=[\"]([^\"]*)[\"][^>]*name=[\"|\']description[\"|\'][^>]*>/i", self::$source_code, $out);
|
482 |
+
if (!empty($out) && isset($out[0]) && is_array($out[0])) {
|
483 |
+
$total += sizeof($out[0]);
|
484 |
+
}
|
485 |
+
}
|
486 |
+
}
|
487 |
+
|
488 |
+
return ($total > 1);
|
489 |
+
}
|
490 |
+
|
491 |
+
/**
|
492 |
+
* Check if the blog is in private mode
|
493 |
+
* @return bool
|
494 |
+
*/
|
495 |
+
public static function getPrivateBlog() {
|
496 |
+
return ((int) get_option('blog_public') == 0 );
|
497 |
+
}
|
498 |
+
|
499 |
+
/**
|
500 |
+
* Check if the blog has a bad link structure
|
501 |
+
* @return bool
|
502 |
+
*/
|
503 |
+
private static function getBadLinkStructure() {
|
504 |
+
global $wp_rewrite;
|
505 |
+
if (function_exists('apache_get_modules')) {
|
506 |
+
//Check if mod_rewrite is installed in apache
|
507 |
+
if (!in_array('mod_rewrite', apache_get_modules()))
|
508 |
+
return false;
|
509 |
+
}
|
510 |
+
|
511 |
+
$home_path = get_home_path();
|
512 |
+
$htaccess_file = $home_path . '.htaccess';
|
513 |
+
|
514 |
+
if ((!file_exists($htaccess_file) && @is_writable($home_path) && $wp_rewrite->using_mod_rewrite_permalinks()) || @is_writable($htaccess_file)) {
|
515 |
+
$link = get_option('permalink_structure');
|
516 |
+
if ($link == '')
|
517 |
+
return true;
|
518 |
+
}
|
519 |
+
}
|
520 |
+
|
521 |
+
/**
|
522 |
+
* Support for i18n with wpml, polyglot or qtrans
|
523 |
+
*
|
524 |
+
* @param string $in
|
525 |
+
* @return string $in localized
|
526 |
+
*/
|
527 |
+
public static function i18n($in) {
|
528 |
+
if (function_exists('langswitch_filter_langs_with_message')) {
|
529 |
+
$in = langswitch_filter_langs_with_message($in);
|
530 |
+
}
|
531 |
+
if (function_exists('polyglot_filter')) {
|
532 |
+
$in = polyglot_filter($in);
|
533 |
+
}
|
534 |
+
if (function_exists('qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage')) {
|
535 |
+
$in = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage($in);
|
536 |
+
}
|
537 |
+
$in = apply_filters('localization', $in);
|
538 |
+
return $in;
|
539 |
+
}
|
540 |
+
|
541 |
+
/**
|
542 |
+
* Convert integer on the locale format.
|
543 |
+
*
|
544 |
+
* @param int $number The number to convert based on locale.
|
545 |
+
* @param int $decimals Precision of the number of decimal places.
|
546 |
+
* @return string Converted number in string format.
|
547 |
+
*/
|
548 |
+
public static function i18n_number_format($number, $decimals = 0) {
|
549 |
+
global $wp_locale;
|
550 |
+
$formatted = number_format($number, absint($decimals), $wp_locale->number_format['decimal_point'], $wp_locale->number_format['thousands_sep']);
|
551 |
+
return apply_filters('number_format_i18n', $formatted);
|
552 |
+
}
|
553 |
+
|
554 |
+
public static function getBrowserInfo() {
|
555 |
+
$ub = '';
|
556 |
+
$u_agent = $_SERVER['HTTP_USER_AGENT'];
|
557 |
+
$bname = 'Unknown';
|
558 |
+
$platform = 'Unknown';
|
559 |
+
$version = "";
|
560 |
+
if (!function_exists('preg_match'))
|
561 |
+
return false;
|
562 |
+
|
563 |
+
//First get the platform?
|
564 |
+
if (preg_match('/linux/i', $u_agent)) {
|
565 |
+
$platform = 'linux';
|
566 |
+
} elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
|
567 |
+
$platform = 'mac';
|
568 |
+
} elseif (preg_match('/windows|win32/i', $u_agent)) {
|
569 |
+
$platform = 'windows';
|
570 |
+
}
|
571 |
+
|
572 |
+
// Next get the name of the useragent yes seperately and for good reason
|
573 |
+
if (preg_match('/MSIE/i', $u_agent) && !preg_match('/Opera/i', $u_agent)) {
|
574 |
+
$bname = 'IE';
|
575 |
+
$ub = "MSIE";
|
576 |
+
} elseif (preg_match('/Firefox/i', $u_agent)) {
|
577 |
+
$bname = 'Mozilla Firefox';
|
578 |
+
$ub = "Firefox";
|
579 |
+
} elseif (preg_match('/Chrome/i', $u_agent)) {
|
580 |
+
$bname = 'Google Chrome';
|
581 |
+
$ub = "Chrome";
|
582 |
+
} elseif (preg_match('/Safari/i', $u_agent)) {
|
583 |
+
$bname = 'Apple Safari';
|
584 |
+
$ub = "Safari";
|
585 |
+
} elseif (preg_match('/Opera/i', $u_agent)) {
|
586 |
+
$bname = 'Opera';
|
587 |
+
$ub = "Opera";
|
588 |
+
} elseif (preg_match('/Netscape/i', $u_agent)) {
|
589 |
+
$bname = 'Netscape';
|
590 |
+
$ub = "Netscape";
|
591 |
+
}
|
592 |
+
|
593 |
+
// finally get the correct version number
|
594 |
+
$known = array('Version', $ub, 'other');
|
595 |
+
$pattern = '#(?' . join('|', $known) . ')[/ ]+(?[0-9.|a-zA-Z.]*)#';
|
596 |
+
|
597 |
+
if (strpos($u_agent, 'MSIE 7.0;') !== false) {
|
598 |
+
$version = 7.0;
|
599 |
+
}
|
600 |
+
|
601 |
+
if ($version == null || $version == "") {
|
602 |
+
$version = "0";
|
603 |
+
}
|
604 |
+
|
605 |
+
return array(
|
606 |
+
'userAgent' => $u_agent,
|
607 |
+
'name' => $bname,
|
608 |
+
'version' => $version,
|
609 |
+
'platform' => $platform,
|
610 |
+
'pattern' => $pattern
|
611 |
+
);
|
612 |
+
}
|
613 |
+
|
614 |
+
/**
|
615 |
+
*
|
616 |
+
* @param string $url
|
617 |
+
* @return array
|
618 |
+
*/
|
619 |
+
public static function getSnippet($url) {
|
620 |
+
if ($url == '' || !function_exists('preg_match'))
|
621 |
+
return;
|
622 |
+
$snippet = array();
|
623 |
+
$length = array('title' => 66,
|
624 |
+
'description' => 240,
|
625 |
+
'url' => 45);
|
626 |
+
|
627 |
+
if ($url == get_bloginfo('url') && !isset(self::$source_code)) {
|
628 |
+
self::$source_code = self::sq_remote_get($url, array('timeout' => 10));
|
629 |
+
} else {
|
630 |
+
self::$source_code = self::sq_remote_get($url, array('timeout' => 10));
|
631 |
+
}
|
632 |
+
|
633 |
+
$title_regex = "/<title[^>]*>([^<>]*)<\/title>/si";
|
634 |
+
preg_match($title_regex, self::$source_code, $title);
|
635 |
+
|
636 |
+
if (is_array($title) && count($title) > 0) {
|
637 |
+
$snippet['title'] = $title[1];
|
638 |
+
$snippet['title'] = self::i18n(trim(strip_tags($snippet['title'])));
|
639 |
+
}
|
640 |
+
|
641 |
+
$description_regex = '/<meta[^<>]*description[^<>]*content="([^"<>]+)"[^<>]*>/si';
|
642 |
+
preg_match($description_regex, self::$source_code, $description);
|
643 |
+
if (is_array($description) && count($description) > 0) {
|
644 |
+
$snippet['description'] = trim(strip_tags(htmlspecialchars($description[1])));
|
645 |
+
|
646 |
+
if (strlen($snippet['description']) > $length['description'])
|
647 |
+
$snippet['description'] = substr($snippet['description'], 0, ($length['description'] - 1)) . '...';
|
648 |
+
}
|
649 |
+
|
650 |
+
$snippet['url'] = $url;
|
651 |
+
if (strlen($snippet['url']) > $length['url'])
|
652 |
+
$snippet['url'] = substr($snippet['url'], 0, ($length['url'] - 1)) . '...';
|
653 |
+
|
654 |
+
return $snippet;
|
655 |
+
}
|
656 |
+
|
657 |
+
/**
|
658 |
+
* Check if debug is called
|
659 |
+
*/
|
660 |
+
private function checkDebug() {
|
661 |
+
//if debug is called
|
662 |
+
if (self::getIsset('sq_debug')) {
|
663 |
+
|
664 |
+
|
665 |
+
if (self::getValue('sq_debug') == self::$options['sq_api'])
|
666 |
+
$_GET['sq_debug'] = 'on';
|
667 |
+
elseif (is_admin())
|
668 |
+
$_GET['sq_debug'] = 'on';
|
669 |
+
else
|
670 |
+
$_GET['sq_debug'] = 'off';
|
671 |
+
|
672 |
+
if (self::getValue('sq_debug') === 'on') {
|
673 |
+
if (function_exists('register_shutdown_function'))
|
674 |
+
register_shutdown_function(array($this, 'showDebug'));
|
675 |
+
}
|
676 |
+
}
|
677 |
+
}
|
678 |
+
|
679 |
+
/**
|
680 |
+
* Store the debug for a later view
|
681 |
+
*/
|
682 |
+
public static function dump() {
|
683 |
+
$output = '';
|
684 |
+
$callee = array('file' => '', 'line' => '');
|
685 |
+
if (function_exists('func_get_args')) {
|
686 |
+
$arguments = func_get_args();
|
687 |
+
$total_arguments = count($arguments);
|
688 |
+
} else
|
689 |
+
$arguments = array();
|
690 |
+
|
691 |
+
|
692 |
+
|
693 |
+
if (function_exists('debug_backtrace'))
|
694 |
+
list( $callee ) = debug_backtrace();
|
695 |
+
|
696 |
+
$output .= '<fieldset style="background: #FFFFFF; border: 1px #CCCCCC solid; padding: 5px; font-size: 9pt; margin: 0;">';
|
697 |
+
$output .= '<legend style="background: #EEEEEE; padding: 2px; font-size: 8pt;">' . $callee['file'] . ' @ line: ' . $callee['line']
|
698 |
+
. '</legend><pre style="margin: 0; font-size: 8pt; text-align: left;">';
|
699 |
+
|
700 |
+
$i = 0;
|
701 |
+
foreach ($arguments as $argument) {
|
702 |
+
if (count($arguments) > 1)
|
703 |
+
$output .= "\n" . '<strong>#' . ( ++$i ) . ' of ' . $total_arguments . '</strong>: ';
|
704 |
+
|
705 |
+
// if argument is boolean, false value does not display, so ...
|
706 |
+
if (is_bool($argument))
|
707 |
+
$argument = ( $argument ) ? 'TRUE' : 'FALSE';
|
708 |
+
else
|
709 |
+
if (is_object($argument) && function_exists('array_reverse') && function_exists('class_parents'))
|
710 |
+
$output .= implode("\n" . '|' . "\n", array_reverse(class_parents($argument))) . "\n" . '|' . "\n";
|
711 |
+
|
712 |
+
$output .= htmlspecialchars(print_r($argument, TRUE))
|
713 |
+
. ( ( is_object($argument) && function_exists('spl_object_hash') ) ? spl_object_hash($argument) : '' );
|
714 |
+
}
|
715 |
+
$output .= "</pre>";
|
716 |
+
$output .= "</fieldset>";
|
717 |
+
|
718 |
+
self::$debug[] = $output;
|
719 |
+
}
|
720 |
+
|
721 |
+
/**
|
722 |
+
* Show the debug dump
|
723 |
+
*/
|
724 |
+
public static function showDebug() {
|
725 |
+
echo "Debug result: <br />" . @implode('<br />', self::$debug);
|
726 |
+
}
|
727 |
+
|
728 |
+
public function sq_activate() {
|
729 |
+
//add variable
|
730 |
+
set_transient('sq_upgrade', true, 30);
|
731 |
+
}
|
732 |
+
|
733 |
+
public function sq_deactivate() {
|
734 |
+
//clear the cron job
|
735 |
+
wp_clear_scheduled_hook('sq_processCron');
|
736 |
+
|
737 |
+
$args = array();
|
738 |
+
$args['type'] = 'deact';
|
739 |
+
SQ_Action::apiCall('sq/user/log', $args, 5);
|
740 |
+
}
|
741 |
+
|
742 |
+
/**
|
743 |
+
* Update patch for older versions
|
744 |
+
*/
|
745 |
+
public function sq_patch3000() {
|
746 |
+
//Delete the old versions table
|
747 |
+
if (self::$options['sq_dbtables'] == 1) {
|
748 |
+
self::$options['sq_dbtables'] = 0;
|
749 |
+
global $wpdb;
|
750 |
+
|
751 |
+
$ranking = SQ_ObjController::getController('SQ_Ranking', false);
|
752 |
+
$ranking->getKeywordHistory();
|
753 |
+
|
754 |
+
$wpdb->query("DROP TABLE IF EXISTS `sq_analytics`");
|
755 |
+
$wpdb->query("DROP TABLE IF EXISTS `sq_keywords`");
|
756 |
+
self::saveOptions('sq_dbtables', self::$options['sq_dbtables']);
|
757 |
+
}
|
758 |
+
}
|
759 |
+
|
760 |
+
public static function emptyCache($post_id = null) {
|
761 |
+
if (function_exists('w3tc_pgcache_flush')) {
|
762 |
+
w3tc_pgcache_flush();
|
763 |
+
}
|
764 |
+
if (function_exists('wp_cache_clear_cache')) {
|
765 |
+
wp_cache_clear_cache();
|
766 |
+
}
|
767 |
+
if (function_exists('wp_cache_post_edit') && isset($post_id)) {
|
768 |
+
wp_cache_post_edit($post_id);
|
769 |
+
}
|
770 |
+
}
|
771 |
+
|
772 |
+
}
|
773 |
+
|
774 |
+
?>
|
classes/SQ_Traffic.php
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class for Traffic Record
|
5 |
+
*/
|
6 |
+
class SQ_Traffic extends SQ_FrontController {
|
7 |
+
|
8 |
+
public function getTrafficScript($code) {
|
9 |
+
return ' <script type="text/javascript">
|
10 |
+
var _paq = _paq || [];
|
11 |
+
_paq.push(["trackPageView"]);
|
12 |
+
_paq.push(["enableLinkTracking"]);
|
13 |
+
|
14 |
+
(function() {
|
15 |
+
var u= (("https:" == document.location.protocol) ? "https" : "http") + "://analytics.squirrly.co/";
|
16 |
+
_paq.push(["setTrackerUrl", u+"track.php"]);
|
17 |
+
_paq.push(["setSiteId", "' . $code . '"]);
|
18 |
+
var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript";
|
19 |
+
g.defer=true; g.async=true; g.src=u+"track.js"; s.parentNode.insertBefore(g,s);
|
20 |
+
})();
|
21 |
+
</script>
|
22 |
+
<noscript><img src="http://analytics.squirrly.co/track.php?idsite=' . $code . '&rec=1" style="border:0" alt="" /></noscript>
|
23 |
+
';
|
24 |
+
}
|
25 |
+
|
26 |
+
}
|
27 |
+
|
28 |
+
?>
|
config/config.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* The configuration file
|
5 |
+
*/
|
6 |
+
define('_SQ_SUPPORT_EMAIL_', 'support@squirrly.co');
|
7 |
+
define('_SQ_NONCE_ID_', 'sq_none');
|
8 |
+
|
9 |
+
if (!defined('PHP_VERSION_ID')) {
|
10 |
+
$version = explode('.', PHP_VERSION);
|
11 |
+
define('PHP_VERSION_ID', ((int) @$version[0] * 1000 + (int) @$version[1] * 100 + ((isset($version[2])) ? ((int) $version[2] * 10) : 0)));
|
12 |
+
}
|
13 |
+
if (!defined('WP_VERSION_ID') && isset($wp_version)) {
|
14 |
+
$version = explode('.', $wp_version);
|
15 |
+
define('WP_VERSION_ID', ((int) @$version[0] * 1000 + (int) @$version[1] * 100 + ((isset($version[2])) ? ((int) $version[2] * 10) : 0)));
|
16 |
+
}
|
17 |
+
if (!defined('WP_VERSION_ID'))
|
18 |
+
define('WP_VERSION_ID', '3000');
|
19 |
+
|
20 |
+
if (!defined('SQ_VERSION_ID')) {
|
21 |
+
$version = explode('.', SQ_VERSION);
|
22 |
+
define('SQ_VERSION_ID', ((int) @$version[0] * 1000 + (int) @$version[1] * 100 + ((isset($version[2])) ? ((int) $version[2] * 10) : 0)));
|
23 |
+
}
|
24 |
+
|
25 |
+
/* No path file? error ... */
|
26 |
+
require_once(dirname(__FILE__) . '/paths.php');
|
27 |
+
|
28 |
+
/* Define the record name in the Option and UserMeta tables */
|
29 |
+
define('SQ_OPTION', 'sq_options');
|
30 |
+
define('SQ_META', 'sq_plugin_flash');
|
31 |
+
?>
|
config/paths.php
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
$currentDir = dirname(__FILE__);
|
4 |
+
|
5 |
+
define('_SQ_NAME_', 'squirrly');
|
6 |
+
define('_SQ_PLUGIN_NAME_', 'squirrly-seo'); //THIS LINE WILL BE CHANGED WITH THE USER SETTINGS
|
7 |
+
define('_THEME_NAME_', 'default'); //THIS LINE WILL BE CHANGED WITH THE USER SETTINGS
|
8 |
+
|
9 |
+
define('_SQ_DASH_URL_', 'https://my.squirrly.co/');
|
10 |
+
$scheme = ((strpos(get_bloginfo('wpurl'), 'https') !== false || FORCE_SSL_ADMIN) ? 'https:' : 'http:'); //CHECK IF SCURE
|
11 |
+
|
12 |
+
defined('SQ_URI') || define('SQ_URI', (WP_VERSION_ID >= 3000) ? 'wp350' : 'wp2');
|
13 |
+
defined('_SQ_API_URL_') || define('_SQ_API_URL_', $scheme . '//api.squirrly.co/');
|
14 |
+
|
15 |
+
defined('_SQ_STATIC_API_URL_') || define('_SQ_STATIC_API_URL_', $scheme . '//api.squirrly.co/static/');
|
16 |
+
defined('_SQ_SUPPORT_URL_') || define('_SQ_SUPPORT_URL_', 'https://plus.google.com/u/0/communities/104196720668136264985');
|
17 |
+
|
18 |
+
|
19 |
+
/* Directories */
|
20 |
+
define('_SQ_ROOT_DIR_', realpath($currentDir . '/..'));
|
21 |
+
define('_SQ_CACHE_DIR_', _SQ_ROOT_DIR_ . '/cache/');
|
22 |
+
define('_SQ_CLASSES_DIR_', _SQ_ROOT_DIR_ . '/classes/');
|
23 |
+
define('_SQ_CONTROLLER_DIR_', _SQ_ROOT_DIR_ . '/controllers/');
|
24 |
+
define('_SQ_MODEL_DIR_', _SQ_ROOT_DIR_ . '/models/');
|
25 |
+
define('_SQ_TRANSLATIONS_DIR_', _SQ_ROOT_DIR_ . '/translations/');
|
26 |
+
define('_SQ_CORE_DIR_', _SQ_ROOT_DIR_ . '/core/');
|
27 |
+
define('_SQ_ALL_THEMES_DIR_', _SQ_ROOT_DIR_ . '/themes/');
|
28 |
+
define('_SQ_THEME_DIR_', _SQ_ROOT_DIR_ . '/themes/' . _THEME_NAME_ . '/');
|
29 |
+
|
30 |
+
/* URLS */
|
31 |
+
define('_SQ_URL_', plugins_url('', dirname(__FILE__)));
|
32 |
+
define('_SQ_CACHE_URL_', _SQ_URL_ . '/cache/');
|
33 |
+
define('_SQ_ALL_THEMES_URL_', _SQ_URL_ . '/themes/');
|
34 |
+
define('_SQ_THEME_URL_', _SQ_URL_ . '/themes/' . _THEME_NAME_ . '/');
|
35 |
+
?>
|
controllers/SQ_Frontend.php
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SQ_Frontend extends SQ_FrontController {
|
4 |
+
|
5 |
+
public static $options;
|
6 |
+
|
7 |
+
public function __construct() {
|
8 |
+
if ((!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') || strpos($_SERVER['PHP_SELF'], '/admin-ajax.php') !== false)
|
9 |
+
return;
|
10 |
+
|
11 |
+
parent::__construct();
|
12 |
+
|
13 |
+
SQ_ObjController::getController('SQ_Tools', false);
|
14 |
+
self::$options = SQ_Tools::getOptions();
|
15 |
+
|
16 |
+
if (SQ_Tools::getValue('sq_use') == 'on')
|
17 |
+
self::$options['sq_use'] = 1;
|
18 |
+
elseif (SQ_Tools::getValue('sq_use') == 'off')
|
19 |
+
self::$options['sq_use'] = 0;
|
20 |
+
}
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Called after plugins are loaded
|
24 |
+
*/
|
25 |
+
public function hookLoaded() {
|
26 |
+
if (self::$options['sq_use'] == 1) {
|
27 |
+
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
|
28 |
+
return;
|
29 |
+
if (strpos($_SERVER['PHP_SELF'], '/admin-ajax.php') !== false)
|
30 |
+
return;
|
31 |
+
//Use buffer only for meta Title
|
32 |
+
//if(self::$options['sq_auto_title'] == 1)
|
33 |
+
$this->model->startBuffer();
|
34 |
+
}
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Hook the Header load
|
39 |
+
*/
|
40 |
+
public function hookFronthead() {
|
41 |
+
if ((!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') || strpos($_SERVER['PHP_SELF'], '/admin-ajax.php') !== false)
|
42 |
+
return;
|
43 |
+
|
44 |
+
echo $this->model->setStart();
|
45 |
+
|
46 |
+
if (isset(self::$options['sq_use']) && (int) self::$options['sq_use'] == 1) {
|
47 |
+
echo $this->model->setHeader();
|
48 |
+
|
49 |
+
//Use buffer only for meta Title
|
50 |
+
//if(self::$options['sq_auto_title'] == 1)
|
51 |
+
$this->model->flushHeader();
|
52 |
+
}
|
53 |
+
|
54 |
+
SQ_ObjController::getController('SQ_DisplayController', false)
|
55 |
+
->loadMedia(_SQ_THEME_URL_ . 'css/sq_frontend.css');
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Change the image path to absolute when in feed
|
60 |
+
*/
|
61 |
+
public function hookFrontcontent($content) {
|
62 |
+
if (!is_feed())
|
63 |
+
return $content;
|
64 |
+
|
65 |
+
|
66 |
+
$find = $replace = $urls = array();
|
67 |
+
|
68 |
+
@preg_match_all('/<img[^>]*src="([^"]+)"[^>]*>/i', $content, $out);
|
69 |
+
if (is_array($out)) {
|
70 |
+
if (!is_array($out[1]) || empty($out[1]))
|
71 |
+
return $content;
|
72 |
+
|
73 |
+
foreach ($out[1] as $row) {
|
74 |
+
if (strpos($row, '//') === false) {
|
75 |
+
if (!in_array($row, $urls)) {
|
76 |
+
$urls[] = $row;
|
77 |
+
}
|
78 |
+
}
|
79 |
+
}
|
80 |
+
}
|
81 |
+
if (!is_array($urls) || (is_array($urls) && empty($urls)))
|
82 |
+
return $content;
|
83 |
+
|
84 |
+
foreach ($urls as $url) {
|
85 |
+
$find[] = $url;
|
86 |
+
$replace[] = get_bloginfo('url') . $url;
|
87 |
+
}
|
88 |
+
if (!empty($find) && !empty($replace)) {
|
89 |
+
$content = str_replace($find, $replace, $content);
|
90 |
+
}
|
91 |
+
|
92 |
+
return $content;
|
93 |
+
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Hook Footer load to save the visit and to close the buffer
|
97 |
+
*/
|
98 |
+
public function hookFrontfooter() {
|
99 |
+
if (isset(self::$options['sq_use']) && (int) self::$options['sq_use'] == 1) {
|
100 |
+
//Be sure the heder is flushed
|
101 |
+
//if(self::$options['sq_auto_title'] == 1)
|
102 |
+
$this->model->flushHeader();
|
103 |
+
}
|
104 |
+
|
105 |
+
if (isset(self::$options['sq_analytics_code']) && !(current_user_can('edit_posts') )) {
|
106 |
+
$this->model->setFooter(self::$options['sq_analytics_code']);
|
107 |
+
}
|
108 |
+
}
|
109 |
+
|
110 |
+
}
|
controllers/SQ_Menu.php
ADDED
@@ -0,0 +1,304 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SQ_Menu extends SQ_FrontController {
|
4 |
+
|
5 |
+
/** @var array snippet */
|
6 |
+
private $post_type;
|
7 |
+
|
8 |
+
/** @var array snippet */
|
9 |
+
var $options = array();
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Called on plugin activation
|
13 |
+
*
|
14 |
+
* @global type $wpdb
|
15 |
+
* @return type
|
16 |
+
*/
|
17 |
+
public function checkActivation() {
|
18 |
+
// Bail if no activation redirect
|
19 |
+
if (!get_transient('sq_upgrade')) {
|
20 |
+
return;
|
21 |
+
}
|
22 |
+
|
23 |
+
// Delete the redirect transient
|
24 |
+
delete_transient('sq_upgrade');
|
25 |
+
|
26 |
+
//activate the plugin
|
27 |
+
$args = array();
|
28 |
+
$args['type'] = 'act';
|
29 |
+
SQ_Action::apiCall('sq/user/log', $args, 5);
|
30 |
+
|
31 |
+
if (SQ_Tools::$options['sq_api'] == '') {
|
32 |
+
wp_safe_redirect(admin_url('admin.php?page=sq_howto'));
|
33 |
+
} else {
|
34 |
+
wp_safe_redirect(admin_url('admin.php?page=sq_dashboard'));
|
35 |
+
}
|
36 |
+
exit();
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Creates the Setting menu in Wordpress
|
41 |
+
*/
|
42 |
+
public function hookMenu() {
|
43 |
+
$first_page = preg_replace('/\s/', '_', _SQ_NAME_);
|
44 |
+
$this->post_type = array('post', 'page', 'movie', 'product', 'download', 'shopp_page_shopp-products');
|
45 |
+
|
46 |
+
//add custom post types
|
47 |
+
if (SQ_Tools::getIsset('post_type')) {
|
48 |
+
if (SQ_Tools::getValue('post_type') <> '') {
|
49 |
+
array_push($this->post_type, SQ_Tools::getValue('post_type'));
|
50 |
+
}
|
51 |
+
} elseif (SQ_Tools::getIsset('post')) {
|
52 |
+
$post = get_post(SQ_Tools::getValue('post'));
|
53 |
+
if (isset($post->post_type)) {
|
54 |
+
array_push($this->post_type, $post->post_type);
|
55 |
+
}
|
56 |
+
} elseif (SQ_Tools::getIsset('id')) {
|
57 |
+
$post = get_post(SQ_Tools::getValue('id'));
|
58 |
+
if (isset($post->post_type)) {
|
59 |
+
array_push($this->post_type, $post->post_type);
|
60 |
+
}
|
61 |
+
}
|
62 |
+
|
63 |
+
if (SQ_Tools::$options['sq_api'] == '') {
|
64 |
+
$first_page = 'sq_howto';
|
65 |
+
} else {
|
66 |
+
$first_page = 'sq_dashboard';
|
67 |
+
}
|
68 |
+
|
69 |
+
/* add the plugin menu in admin */
|
70 |
+
if (current_user_can('administrator')) {
|
71 |
+
SQ_Tools::checkErrorSettings(true);
|
72 |
+
//check if activated
|
73 |
+
$this->checkActivation();
|
74 |
+
//activate the cron job if not exists
|
75 |
+
if (!wp_get_schedule('sq_processCron')) {
|
76 |
+
wp_schedule_event(time(), 'hourly', 'sq_processCron');
|
77 |
+
}
|
78 |
+
}
|
79 |
+
|
80 |
+
//Push the Analytics Check
|
81 |
+
$analytics_alert = 0;
|
82 |
+
if (SQ_ObjController::getModel('SQ_Post')->countKeywords() > 0) {
|
83 |
+
$analytics_alert = ((SQ_Tools::$options['sq_analytics'] == 0) ? 1 : 0);
|
84 |
+
}
|
85 |
+
SQ_Tools::$errors_count += $analytics_alert;
|
86 |
+
///////////////
|
87 |
+
|
88 |
+
$this->model->addMenu(array(ucfirst(_SQ_NAME_),
|
89 |
+
'Squirrly' . SQ_Tools::showNotices(SQ_Tools::$errors_count, 'errors_count'),
|
90 |
+
'edit_posts',
|
91 |
+
$first_page,
|
92 |
+
null,
|
93 |
+
_SQ_THEME_URL_ . 'img/menu_icon_16.png'
|
94 |
+
));
|
95 |
+
if (SQ_Tools::$options['sq_api'] == '') {
|
96 |
+
$this->model->addSubmenu(array($first_page,
|
97 |
+
ucfirst(_SQ_NAME_) . __(' getting started', _SQ_PLUGIN_NAME_),
|
98 |
+
__('Getting started', _SQ_PLUGIN_NAME_),
|
99 |
+
'edit_posts',
|
100 |
+
'sq_howto',
|
101 |
+
array(SQ_ObjController::getBlock('SQ_BlockHelp'), 'init')
|
102 |
+
));
|
103 |
+
}
|
104 |
+
if (SQ_Tools::$options['sq_api'] <> '') {
|
105 |
+
$this->model->addSubmenu(array($first_page,
|
106 |
+
ucfirst(_SQ_NAME_) . __(' dashboard', _SQ_PLUGIN_NAME_),
|
107 |
+
__('Dashboard', _SQ_PLUGIN_NAME_),
|
108 |
+
'edit_posts',
|
109 |
+
'sq_dashboard',
|
110 |
+
array(SQ_ObjController::getBlock('SQ_BlockDashboard'), 'init')
|
111 |
+
));
|
112 |
+
|
113 |
+
$this->model->addSubmenu(array($first_page,
|
114 |
+
ucfirst(_SQ_NAME_) . __(' post list', _SQ_PLUGIN_NAME_),
|
115 |
+
__('Performance <br />Analytics', _SQ_PLUGIN_NAME_) . SQ_Tools::showNotices($analytics_alert, 'errors_count'),
|
116 |
+
'edit_posts',
|
117 |
+
'sq_posts',
|
118 |
+
array(SQ_ObjController::getBlock('SQ_BlockPostsAnalytics'), 'init')
|
119 |
+
));
|
120 |
+
|
121 |
+
$this->model->addSubmenu(array($first_page,
|
122 |
+
ucfirst(_SQ_NAME_) . __(' account info', _SQ_PLUGIN_NAME_),
|
123 |
+
__('Account Info', _SQ_PLUGIN_NAME_),
|
124 |
+
'administrator',
|
125 |
+
'sq_account',
|
126 |
+
array(SQ_ObjController::getBlock('SQ_BlockAccount'), 'init')
|
127 |
+
));
|
128 |
+
|
129 |
+
$this->model->addSubmenu(array($first_page,
|
130 |
+
ucfirst(_SQ_NAME_) . __(' settings', _SQ_PLUGIN_NAME_),
|
131 |
+
__('SEO Settings', _SQ_PLUGIN_NAME_) . SQ_Tools::showNotices(SQ_Tools::$errors_count, 'errors_count'),
|
132 |
+
'administrator',
|
133 |
+
preg_replace('/\s/', '_', _SQ_NAME_),
|
134 |
+
array($this, 'showMenu')
|
135 |
+
));
|
136 |
+
}
|
137 |
+
|
138 |
+
$this->model->addSubmenu(array($first_page,
|
139 |
+
__('Make money with ', _SQ_PLUGIN_NAME_) . ucfirst(_SQ_NAME_),
|
140 |
+
__('Make money', _SQ_PLUGIN_NAME_),
|
141 |
+
'administrator',
|
142 |
+
'sq_affiliate',
|
143 |
+
array(SQ_ObjController::getBlock('SQ_BlockAffiliate'), 'init')
|
144 |
+
));
|
145 |
+
|
146 |
+
foreach ($this->post_type as $type)
|
147 |
+
$this->model->addMeta(array('post' . _SQ_NAME_,
|
148 |
+
ucfirst(_SQ_NAME_),
|
149 |
+
array(SQ_ObjController::getController('SQ_Post'), 'init'),
|
150 |
+
$type,
|
151 |
+
'side',
|
152 |
+
'high'
|
153 |
+
));
|
154 |
+
|
155 |
+
//Add the Rank in the Posts list
|
156 |
+
$postlist = SQ_ObjController::getController('SQ_PostsList');
|
157 |
+
if (is_object($postlist))
|
158 |
+
$postlist->init();
|
159 |
+
}
|
160 |
+
|
161 |
+
/**
|
162 |
+
* Show the menu content after click event
|
163 |
+
*
|
164 |
+
* @return void
|
165 |
+
*/
|
166 |
+
public function showMenu() {
|
167 |
+
|
168 |
+
SQ_Tools::checkErrorSettings();
|
169 |
+
/* Force call of error display */
|
170 |
+
SQ_ObjController::getController('SQ_Error', false)->hookNotices();
|
171 |
+
|
172 |
+
|
173 |
+
/* Get the options from Database */
|
174 |
+
$this->options = SQ_Tools::$options;
|
175 |
+
SQ_ObjController::getBlock('SQ_BlockSupport')->init();
|
176 |
+
parent::init();
|
177 |
+
}
|
178 |
+
|
179 |
+
/**
|
180 |
+
* Called when Post action is triggered
|
181 |
+
*
|
182 |
+
* @return void
|
183 |
+
*/
|
184 |
+
public function action() {
|
185 |
+
parent::action();
|
186 |
+
|
187 |
+
|
188 |
+
switch (SQ_Tools::getValue('action')) {
|
189 |
+
|
190 |
+
case 'sq_settings_update':
|
191 |
+
if (SQ_Tools::getValue('sq_use') == '')
|
192 |
+
return;
|
193 |
+
|
194 |
+
SQ_Tools::saveOptions('sq_use', (int) SQ_Tools::getValue('sq_use'));
|
195 |
+
SQ_Tools::saveOptions('sq_auto_title', (int) SQ_Tools::getValue('sq_auto_title'));
|
196 |
+
SQ_Tools::saveOptions('sq_auto_description', (int) SQ_Tools::getValue('sq_auto_description'));
|
197 |
+
SQ_Tools::saveOptions('sq_auto_canonical', (int) SQ_Tools::getValue('sq_auto_canonical'));
|
198 |
+
SQ_Tools::saveOptions('sq_auto_sitemap', (int) SQ_Tools::getValue('sq_auto_sitemap'));
|
199 |
+
SQ_Tools::saveOptions('sq_auto_meta', (int) SQ_Tools::getValue('sq_auto_meta'));
|
200 |
+
SQ_Tools::saveOptions('sq_auto_favicon', (int) SQ_Tools::getValue('sq_auto_favicon'));
|
201 |
+
SQ_Tools::saveOptions('sq_auto_facebook', (int) SQ_Tools::getValue('sq_auto_facebook'));
|
202 |
+
SQ_Tools::saveOptions('sq_auto_twitter', (int) SQ_Tools::getValue('sq_auto_twitter'));
|
203 |
+
|
204 |
+
$sq_twitter_account = SQ_Tools::getValue('sq_twitter_account');
|
205 |
+
if ($sq_twitter_account <> '')
|
206 |
+
if (strpos($sq_twitter_account, '@') === false)
|
207 |
+
$sq_twitter_account = '@' . $sq_twitter_account;
|
208 |
+
SQ_Tools::saveOptions('sq_twitter_account', $sq_twitter_account);
|
209 |
+
|
210 |
+
SQ_Tools::saveOptions('sq_auto_seo', (int) SQ_Tools::getValue('sq_auto_seo'));
|
211 |
+
SQ_Tools::saveOptions('sq_fp_title', SQ_Tools::getValue('sq_fp_title'));
|
212 |
+
SQ_Tools::saveOptions('sq_fp_description', SQ_Tools::getValue('sq_fp_description'));
|
213 |
+
SQ_Tools::saveOptions('sq_fp_keywords', SQ_Tools::getValue('sq_fp_keywords'));
|
214 |
+
|
215 |
+
SQ_Tools::saveOptions('sq_google_country', SQ_Tools::getValue('sq_google_country'));
|
216 |
+
|
217 |
+
SQ_Tools::saveOptions('sq_google_plus', SQ_Tools::getValue('sq_google_plus'));
|
218 |
+
SQ_Tools::saveOptions('sq_google_wt', $this->model->checkGoogleWTCode(SQ_Tools::getValue('sq_google_wt')));
|
219 |
+
SQ_Tools::saveOptions('sq_google_analytics', $this->model->checkGoogleAnalyticsCode(SQ_Tools::getValue('sq_google_analytics')));
|
220 |
+
SQ_Tools::saveOptions('sq_facebook_insights', $this->model->checkFavebookInsightsCode(SQ_Tools::getValue('sq_facebook_insights')));
|
221 |
+
SQ_Tools::saveOptions('sq_bing_wt', $this->model->checkBingWTCode(SQ_Tools::getValue('sq_bing_wt')));
|
222 |
+
SQ_Tools::saveOptions('sq_alexa', $this->model->checkBingWTCode(SQ_Tools::getValue('sq_alexa')));
|
223 |
+
|
224 |
+
|
225 |
+
SQ_Tools::saveOptions('ignore_warn', (int) SQ_Tools::getValue('ignore_warn'));
|
226 |
+
SQ_Tools::saveOptions('sq_keyword_help', (int) SQ_Tools::getValue('sq_keyword_help'));
|
227 |
+
SQ_Tools::saveOptions('sq_keyword_information', (int) SQ_Tools::getValue('sq_keyword_information'));
|
228 |
+
SQ_Tools::saveOptions('sq_sla', (int) SQ_Tools::getValue('sq_sla'));
|
229 |
+
|
230 |
+
//update_option('blog_public', (int)SQ_Tools::getValue('sq_google_index'));
|
231 |
+
|
232 |
+
/* if there is an icon to upload */
|
233 |
+
if (!empty($_FILES['favicon'])) {
|
234 |
+
|
235 |
+
$return = $this->model->addFavicon($_FILES['favicon']);
|
236 |
+
if ($return['favicon'] <> '')
|
237 |
+
SQ_Tools::saveOptions('favicon', $return['favicon']);
|
238 |
+
if ($return['name'] <> '')
|
239 |
+
SQ_Tools::saveOptions('favicon_tmp', $return['name']);
|
240 |
+
if ($return['message'] <> '')
|
241 |
+
define('SQ_MESSAGE_FAVICON', $return['message']);
|
242 |
+
}
|
243 |
+
|
244 |
+
/* Generate the sitemap */
|
245 |
+
if (SQ_Tools::getValue('sq_use'))
|
246 |
+
add_action('admin_footer', array(SQ_ObjController::getController('SQ_Sitemap', false), 'generateSitemap'), 9999, 1);
|
247 |
+
|
248 |
+
//empty the cache on settings changed
|
249 |
+
SQ_Tools::emptyCache();
|
250 |
+
break;
|
251 |
+
case 'sq_save_analytics':
|
252 |
+
|
253 |
+
SQ_Tools::saveOptions('sq_analytics_code', SQ_Tools::getValue('sq_analytics_code'));
|
254 |
+
SQ_Tools::emptyCache();
|
255 |
+
break;
|
256 |
+
case 'sq_fixautoseo':
|
257 |
+
SQ_Tools::saveOptions('sq_use', 1);
|
258 |
+
break;
|
259 |
+
case 'sq_fixprivate':
|
260 |
+
update_option('blog_public', 1);
|
261 |
+
break;
|
262 |
+
case 'sq_fixcomments':
|
263 |
+
update_option('comments_notify', 1);
|
264 |
+
break;
|
265 |
+
case 'sq_fixpermalink':
|
266 |
+
$GLOBALS['wp_rewrite'] = new WP_Rewrite();
|
267 |
+
global $wp_rewrite;
|
268 |
+
$permalink_structure = ((get_option('permalink_structure') <> '') ? get_option('permalink_structure') : '/') . "%postname%/";
|
269 |
+
$wp_rewrite->set_permalink_structure($permalink_structure);
|
270 |
+
$permalink_structure = get_option('permalink_structure');
|
271 |
+
|
272 |
+
flush_rewrite_rules();
|
273 |
+
break;
|
274 |
+
case 'sq_fix_ogduplicate':
|
275 |
+
SQ_Tools::saveOptions('sq_auto_facebook', 0);
|
276 |
+
break;
|
277 |
+
case 'sq_fix_tcduplicate':
|
278 |
+
SQ_Tools::saveOptions('sq_auto_twitter', 0);
|
279 |
+
break;
|
280 |
+
case 'sq_fix_descduplicate':
|
281 |
+
SQ_Tools::saveOptions('sq_auto_description', 0);
|
282 |
+
SQ_Tools::saveOptions('sq_auto_seo', 1);
|
283 |
+
break;
|
284 |
+
|
285 |
+
case 'sq_warnings_off':
|
286 |
+
SQ_Tools::saveOptions('ignore_warn', 1);
|
287 |
+
break;
|
288 |
+
case 'sq_get_snippet':
|
289 |
+
if (SQ_Tools::getValue('url') <> '') {
|
290 |
+
$url = SQ_Tools::getValue('url');
|
291 |
+
} else {
|
292 |
+
$url = get_bloginfo('url');
|
293 |
+
}
|
294 |
+
$snippet = SQ_Tools::getSnippet($url);
|
295 |
+
|
296 |
+
/* if((int)SQ_Tools::getValue('post_id') > 0)
|
297 |
+
$snippet['url'] = get_permalink((int)SQ_Tools::getValue('post_id'));
|
298 |
+
*/
|
299 |
+
echo json_encode($snippet);
|
300 |
+
exit();
|
301 |
+
}
|
302 |
+
}
|
303 |
+
|
304 |
+
}
|
controllers/SQ_Post.php
ADDED
@@ -0,0 +1,262 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SQ_Post extends SQ_FrontController {
|
4 |
+
|
5 |
+
var $saved;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Initialize the TinyMCE editor for the current use
|
9 |
+
*
|
10 |
+
* @return void
|
11 |
+
*/
|
12 |
+
public function hookInit() {
|
13 |
+
add_filter('tiny_mce_before_init', array(&$this->model, 'setCallback'));
|
14 |
+
add_filter('mce_external_plugins', array(&$this->model, 'addHeadingButton'));
|
15 |
+
add_filter('mce_buttons', array(&$this->model, 'registerButton'));
|
16 |
+
|
17 |
+
if (SQ_Tools::$options['sq_api'] == '')
|
18 |
+
return;
|
19 |
+
|
20 |
+
add_action('save_post', array($this, 'hookSavePost'), 10);
|
21 |
+
|
22 |
+
//For Shopp plugin - product
|
23 |
+
add_action('shopp_product_saved', array($this, 'hookShopp'), 10);
|
24 |
+
}
|
25 |
+
|
26 |
+
/**
|
27 |
+
* hook the Head
|
28 |
+
*
|
29 |
+
* @global integer $post_ID
|
30 |
+
*/
|
31 |
+
public function hookHead() {
|
32 |
+
global $post_ID;
|
33 |
+
parent::hookHead();
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Add the post ID in variable
|
37 |
+
* If there is a custom plugin post or Shopp product
|
38 |
+
*
|
39 |
+
* Set the global variable $sq_postID for cookie and keyword record
|
40 |
+
*/
|
41 |
+
if ((int) $post_ID == 0) {
|
42 |
+
if (SQ_Tools::getIsset('id'))
|
43 |
+
$GLOBALS['sq_postID'] = (int) SQ_Tools::getValue('id');
|
44 |
+
}else {
|
45 |
+
$GLOBALS['sq_postID'] = $post_ID;
|
46 |
+
}
|
47 |
+
/* * ****************************** */
|
48 |
+
|
49 |
+
echo '<script type="text/javascript">(function() {this.sq_tinymce = { callback: function () {}, setup: function(ed){} } })(window);</script>';
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Hook the Shopp plugin save product
|
54 |
+
*/
|
55 |
+
public function hookShopp($Product) {
|
56 |
+
$this->checkSeo($Product->id);
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Hook the post save/update
|
61 |
+
* @param type $post_id
|
62 |
+
*/
|
63 |
+
public function hookSavePost($post_id) {
|
64 |
+
$file_name = false;
|
65 |
+
|
66 |
+
|
67 |
+
// unhook this function so it doesn't loop infinitely
|
68 |
+
remove_action('save_post', array($this, 'hookSavePost'), 10);
|
69 |
+
|
70 |
+
//If the post is a new or edited post
|
71 |
+
if ((SQ_Tools::getValue('action')) == 'editpost' &&
|
72 |
+
wp_is_post_revision($post_id) == '' &&
|
73 |
+
wp_is_post_autosave($post_id) == '' &&
|
74 |
+
get_post_status($post_id) != 'auto-draft' &&
|
75 |
+
get_post_status($post_id) != 'inherit' &&
|
76 |
+
SQ_Tools::getValue('autosave') == '') {
|
77 |
+
//echo 'saving';
|
78 |
+
//check for custom SEO
|
79 |
+
$this->_checkAdvMeta($post_id);
|
80 |
+
//check the SEO from Squirrly Live Assistant
|
81 |
+
$this->checkSeo($post_id, get_post_status($post_id));
|
82 |
+
}
|
83 |
+
|
84 |
+
//If the post is not auto-save post
|
85 |
+
if ((SQ_Tools::getValue('action')) == 'editpost' &&
|
86 |
+
wp_is_post_autosave($post_id) == '' &&
|
87 |
+
get_post_status($post_id) != 'auto-draft' &&
|
88 |
+
get_post_status($post_id) != 'inherit' &&
|
89 |
+
SQ_Tools::getValue('autosave') == '') {
|
90 |
+
|
91 |
+
if (!$this->saved)
|
92 |
+
//check the remote images
|
93 |
+
$this->checkImage($post_id);
|
94 |
+
$this->saved = true;
|
95 |
+
}
|
96 |
+
|
97 |
+
add_action('save_post', array($this, 'hookSavePost'), 10);
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Check if the image is a remote image and save it locally
|
102 |
+
*
|
103 |
+
* @param integer $post_id
|
104 |
+
* @return false|void
|
105 |
+
*/
|
106 |
+
public function checkImage($post_id) {
|
107 |
+
@set_time_limit(90);
|
108 |
+
$local_file = false;
|
109 |
+
|
110 |
+
$content = stripslashes(SQ_Tools::getValue('post_content'));
|
111 |
+
$tmpcontent = trim($content, "\n");
|
112 |
+
$urls = array();
|
113 |
+
|
114 |
+
if (function_exists('preg_match_all')) {
|
115 |
+
@preg_match_all('/<img[^>]*src="([^"]+)"[^>]*>/i', $tmpcontent, $out);
|
116 |
+
|
117 |
+
if (is_array($out)) {
|
118 |
+
if (!is_array($out[1]) || count($out[1]) == 0)
|
119 |
+
return;
|
120 |
+
|
121 |
+
if (get_bloginfo('wpurl') <> '') {
|
122 |
+
$domain = parse_url(get_bloginfo('wpurl'));
|
123 |
+
|
124 |
+
foreach ($out[1] as $row) {
|
125 |
+
if (strpos($row, 'http') !== false &&
|
126 |
+
strpos($row, $domain['host']) === false) {
|
127 |
+
if (!in_array($row, $urls)) {
|
128 |
+
$urls[] = $row;
|
129 |
+
}
|
130 |
+
}
|
131 |
+
}
|
132 |
+
}
|
133 |
+
}
|
134 |
+
}
|
135 |
+
|
136 |
+
if (!is_array($urls) || (is_array($urls) && count($urls) == 0))
|
137 |
+
return;
|
138 |
+
|
139 |
+
$urls = @array_unique($urls);
|
140 |
+
foreach ($urls as $url) {
|
141 |
+
if ($file = $this->model->upload_image($url)) {
|
142 |
+
if (!file_is_valid_image($file['file']))
|
143 |
+
continue;
|
144 |
+
|
145 |
+
//encode special characters
|
146 |
+
$local_file = str_replace($file['filename'], urlencode($file['filename']), $file['url']);
|
147 |
+
if ($local_file !== false) {
|
148 |
+
$content = str_replace($url, $local_file, $content);
|
149 |
+
|
150 |
+
$attach_id = wp_insert_attachment(array(
|
151 |
+
'post_mime_type' => $file['type'],
|
152 |
+
'post_title' => preg_replace('/\.[^.]+$/', '', $file['filename']),
|
153 |
+
'post_content' => '',
|
154 |
+
'post_status' => 'inherit',
|
155 |
+
'guid' => $local_file
|
156 |
+
), $file['file'], $post_id);
|
157 |
+
|
158 |
+
$attach_data = wp_generate_attachment_metadata($attach_id, $file['file']);
|
159 |
+
wp_update_attachment_metadata($attach_id, $attach_data);
|
160 |
+
}
|
161 |
+
}
|
162 |
+
}
|
163 |
+
|
164 |
+
|
165 |
+
if ($local_file !== false) {
|
166 |
+
wp_update_post(array(
|
167 |
+
'ID' => $post_id,
|
168 |
+
'post_content' => $content)
|
169 |
+
);
|
170 |
+
}
|
171 |
+
}
|
172 |
+
|
173 |
+
/**
|
174 |
+
* Check the SEO from Squirrly Live Assistant
|
175 |
+
*
|
176 |
+
* @param integer $post_id
|
177 |
+
* @param void
|
178 |
+
*/
|
179 |
+
public function checkSeo($post_id, $status = '') {
|
180 |
+
$args = array();
|
181 |
+
|
182 |
+
$seo = SQ_Tools::getValue('sq_seo');
|
183 |
+
|
184 |
+
if (is_array($seo) && count($seo) > 0)
|
185 |
+
$args['seo'] = implode(',', $seo);
|
186 |
+
|
187 |
+
$args['keyword'] = SQ_Tools::getValue('sq_keyword');
|
188 |
+
|
189 |
+
$args['status'] = $status;
|
190 |
+
$args['permalink'] = get_permalink($post_id);
|
191 |
+
$args['permalink'] = $this->getPaged($args['permalink']);
|
192 |
+
$args['permalink'] = urlencode($args['permalink']);
|
193 |
+
$args['author'] = (int) SQ_Tools::getUserID();
|
194 |
+
$args['post_id'] = $post_id;
|
195 |
+
|
196 |
+
SQ_Action::apiCall('sq/seo/post', $args, 10);
|
197 |
+
|
198 |
+
//Save the keyword for this post
|
199 |
+
if ($json = $this->model->getKeyword($post_id)) {
|
200 |
+
$json->keyword = SQ_Tools::getValue('sq_keyword');
|
201 |
+
$this->model->saveKeyword($post_id, $json);
|
202 |
+
} else {
|
203 |
+
$args = array();
|
204 |
+
$args['keyword'] = SQ_Tools::getValue('sq_keyword');
|
205 |
+
$this->model->saveKeyword($post_id, json_decode(json_encode($args)));
|
206 |
+
}
|
207 |
+
}
|
208 |
+
|
209 |
+
public function getPaged($link) {
|
210 |
+
$page = get_query_var('paged');
|
211 |
+
if ($page && $page > 1) {
|
212 |
+
$link = trailingslashit($link) . "page/" . "$page" . '/';
|
213 |
+
}
|
214 |
+
return $link;
|
215 |
+
}
|
216 |
+
|
217 |
+
/**
|
218 |
+
* Called when Post action is triggered
|
219 |
+
*
|
220 |
+
* @return void
|
221 |
+
*/
|
222 |
+
public function action() {
|
223 |
+
parent::action();
|
224 |
+
|
225 |
+
switch (SQ_Tools::getValue('action')) {
|
226 |
+
case 'sq_save_meta':
|
227 |
+
$return = $this->_checkAdvMeta(SQ_Tools::getValue('post_id'));
|
228 |
+
echo json_encode($return);
|
229 |
+
break;
|
230 |
+
}
|
231 |
+
exit();
|
232 |
+
}
|
233 |
+
|
234 |
+
/**
|
235 |
+
* Check if there are advanced settings for meta title, description and keywords
|
236 |
+
* @param integer $post_id
|
237 |
+
* @return array | false
|
238 |
+
*
|
239 |
+
*/
|
240 |
+
private function _checkAdvMeta($post_id) {
|
241 |
+
|
242 |
+
$meta = array();
|
243 |
+
if (SQ_Tools::getIsset('sq_fp_title') || SQ_Tools::getIsset('sq_fp_description') || SQ_Tools::getIsset('sq_fp_keywords')) {
|
244 |
+
if (SQ_Tools::getIsset('sq_fp_title'))
|
245 |
+
$meta[] = array('key' => 'sq_fp_title',
|
246 |
+
'value' => urldecode(SQ_Tools::getValue('sq_fp_title')));
|
247 |
+
|
248 |
+
if (SQ_Tools::getIsset('sq_fp_description'))
|
249 |
+
$meta[] = array('key' => 'sq_fp_description',
|
250 |
+
'value' => urldecode(SQ_Tools::getValue('sq_fp_description')));
|
251 |
+
|
252 |
+
if (SQ_Tools::getIsset('sq_fp_keywords'))
|
253 |
+
$meta[] = array('key' => 'sq_fp_keywords',
|
254 |
+
'value' => SQ_Tools::getValue('sq_fp_keywords'));
|
255 |
+
|
256 |
+
$this->model->saveAdvMeta($post_id, $meta);
|
257 |
+
return $meta;
|
258 |
+
}
|
259 |
+
return false;
|
260 |
+
}
|
261 |
+
|
262 |
+
}
|
controllers/SQ_PostsList.php
ADDED
@@ -0,0 +1,351 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SQ_PostsList extends SQ_FrontController {
|
4 |
+
|
5 |
+
/** @var array Posts types in */
|
6 |
+
private $types = array();
|
7 |
+
|
8 |
+
/** @var integer Set the column index for Squirrly */
|
9 |
+
private $pos = 5;
|
10 |
+
|
11 |
+
/** @var string Set the column name for Squirrly */
|
12 |
+
private $column_id = 'sq_rank_column';
|
13 |
+
|
14 |
+
/** @var boolean Is post list colled */
|
15 |
+
private $is_list = false;
|
16 |
+
private $posts = array();
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Called in SQ_Menu > hookMenu
|
20 |
+
*/
|
21 |
+
public function init() {
|
22 |
+
$this->types = array('post_posts',
|
23 |
+
'page_posts',
|
24 |
+
'edit-product',
|
25 |
+
'product_posts');
|
26 |
+
// do_action('sq_processCron');
|
27 |
+
}
|
28 |
+
|
29 |
+
public function setPosts($posts) {
|
30 |
+
if (!empty($posts)) {
|
31 |
+
$this->posts = $posts;
|
32 |
+
$this->is_list = true;
|
33 |
+
}
|
34 |
+
return $this;
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Create the column and filter for the Posts List
|
39 |
+
*
|
40 |
+
*/
|
41 |
+
public function hookInit() {
|
42 |
+
$browser = SQ_Tools::getBrowserInfo();
|
43 |
+
|
44 |
+
if ($browser['name'] == 'IE' && (int) $browser['version'] < 9 && (int) $browser['version'] > 0)
|
45 |
+
return;
|
46 |
+
|
47 |
+
if (isset(SQ_Tools::$options['sq_api']) && SQ_Tools::$options['sq_api'] <> '') {
|
48 |
+
foreach ($this->types as $type) {
|
49 |
+
|
50 |
+
if (isset($options['hideeditbox-post']) && $options['hideeditbox-post'])
|
51 |
+
continue;
|
52 |
+
add_filter('manage_' . $type . '_columns', array($this, 'add_column'), 10, 1);
|
53 |
+
add_action('manage_' . $type . '_custom_column', array($this, 'add_row'), 10, 2);
|
54 |
+
}
|
55 |
+
add_filter('posts_where', array($this, 'filterPosts'));
|
56 |
+
}
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Filter the Posts when sq_post_id is set
|
61 |
+
*
|
62 |
+
* @param string $where
|
63 |
+
* @return string
|
64 |
+
*/
|
65 |
+
public function filterPosts($where) {
|
66 |
+
if (!is_admin())
|
67 |
+
return;
|
68 |
+
|
69 |
+
if (SQ_Tools::getIsset('sq_post_id')) {
|
70 |
+
$where .= " AND ID = " . (int) SQ_Tools::getValue('sq_post_id');
|
71 |
+
}
|
72 |
+
|
73 |
+
return $where;
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Hook the Wordpress header
|
78 |
+
*/
|
79 |
+
public function loadHead() {
|
80 |
+
parent::hookHead();
|
81 |
+
SQ_ObjController::getController('SQ_DisplayController', false)
|
82 |
+
->loadMedia(_SQ_THEME_URL_ . '/css/sq_postslist.css');
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Add the Squirrly column in the Post List
|
87 |
+
*
|
88 |
+
* @param array $columns
|
89 |
+
* @return array
|
90 |
+
*/
|
91 |
+
public function add_column($columns) {
|
92 |
+
$this->loadHead(); //load the js only for post list
|
93 |
+
$this->is_list = true;
|
94 |
+
|
95 |
+
return $this->insert($columns, array($this->column_id => __('Squirrly') . $this->getScripts()), $this->pos);
|
96 |
+
}
|
97 |
+
|
98 |
+
/**
|
99 |
+
* Add row in Post list
|
100 |
+
*
|
101 |
+
* @param object $column
|
102 |
+
* @param integer $post_id
|
103 |
+
*/
|
104 |
+
public function add_row($column, $post_id) {
|
105 |
+
$title = '';
|
106 |
+
$description = '';
|
107 |
+
$frontend = null;
|
108 |
+
$cached = false;
|
109 |
+
|
110 |
+
if ($column == $this->column_id) {
|
111 |
+
if (isset($_COOKIE[$this->column_id . $post_id]) && $_COOKIE[$this->column_id . $post_id] <> '') {
|
112 |
+
$cached = true;
|
113 |
+
} else {
|
114 |
+
if (get_post_status($post_id) == 'publish')
|
115 |
+
array_push($this->posts, $post_id);
|
116 |
+
}
|
117 |
+
|
118 |
+
echo '<div class="' . $this->column_id . '_row ' . ((!$cached) ? 'sq_minloading' : '') . '" ref="' . $post_id . '">' . (($cached) ? $_COOKIE[$this->column_id . $post_id] : '') . '</div>';
|
119 |
+
|
120 |
+
if ($frontend = SQ_ObjController::getModel('SQ_Frontend')) {
|
121 |
+
$title = $frontend->getAdvancedMeta($post_id, 'title');
|
122 |
+
$description = $frontend->getAdvancedMeta($post_id, 'description');
|
123 |
+
if ($post_id == get_option('page_on_front')) {
|
124 |
+
if (SQ_Tools::$options['sq_fp_title'] <> '' && !$title)
|
125 |
+
$title = SQ_Tools::$options['sq_fp_title'];
|
126 |
+
if (SQ_Tools::$options['sq_fp_description'] <> '' && !$description)
|
127 |
+
$description = SQ_Tools::$options['sq_fp_description'];
|
128 |
+
}
|
129 |
+
echo '<script type="text/javascript">
|
130 |
+
jQuery(\'#post-' . $post_id . '\').find(\'.row-title\').before(\'' . (($description <> '') ? '<span class="sq_rank_custom_meta sq_rank_customdescription sq_rank_sprite" title="' . __('Custom description: ', _SQ_PLUGIN_NAME_) . ' ' . addslashes($description) . '"></span>' : '') . ' ' . (($title <> '') ? '<span class="sq_rank_custom_meta sq_rank_customtitle sq_rank_sprite" title="' . __('Custom title: ', _SQ_PLUGIN_NAME_) . ' ' . $title . '"></span>' : '') . '\');
|
131 |
+
</script>';
|
132 |
+
}
|
133 |
+
}
|
134 |
+
}
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Hook the Footer
|
138 |
+
*
|
139 |
+
*/
|
140 |
+
public function hookFooter() {
|
141 |
+
if (!$this->is_list)
|
142 |
+
return;
|
143 |
+
|
144 |
+
$posts = '';
|
145 |
+
foreach ($this->posts as $post) {
|
146 |
+
$posts .= '"' . $post . '",';
|
147 |
+
}
|
148 |
+
if (strlen($posts) > 0)
|
149 |
+
$posts = substr($posts, 0, strlen($posts) - 1);
|
150 |
+
|
151 |
+
echo '<script type="text/javascript">
|
152 |
+
var sq_posts = new Array(' . $posts . ');
|
153 |
+
</script>';
|
154 |
+
|
155 |
+
$this->setVars();
|
156 |
+
}
|
157 |
+
|
158 |
+
/**
|
159 |
+
* Set the javascript variables
|
160 |
+
*/
|
161 |
+
public function setVars() {
|
162 |
+
echo '<script type="text/javascript">
|
163 |
+
var __sq_article_rank = "' . __('SEO Analytics, by Squirrly', _SQ_PLUGIN_NAME_) . '";
|
164 |
+
var __sq_refresh = "' . __('Update', _SQ_PLUGIN_NAME_) . '"
|
165 |
+
|
166 |
+
var sq_analytics_code = "' . SQ_Tools::$options['sq_analytics_code'] . '";
|
167 |
+
var __sq_dashurl = "' . _SQ_STATIC_API_URL_ . '";
|
168 |
+
var __token = "' . SQ_Tools::$options['sq_api'] . '";
|
169 |
+
var __sq_ranknotpublic_text = "' . __('Not Public', _SQ_PLUGIN_NAME_) . '";
|
170 |
+
var __sq_couldnotprocess_text = "' . __('Could not process', _SQ_PLUGIN_NAME_) . '";
|
171 |
+
</script>';
|
172 |
+
}
|
173 |
+
|
174 |
+
public function getScripts() {
|
175 |
+
return '<script type="text/javascript">
|
176 |
+
//load the rank from squirrly
|
177 |
+
if (typeof sq_script === "undefined"){
|
178 |
+
var sq_script = document.createElement(\'script\');
|
179 |
+
sq_script.src = "' . _SQ_STATIC_API_URL_ . SQ_URI . '/js/sq_rank.js?ver=' . SQ_VERSION_ID . '";
|
180 |
+
var site_head = document.getElementsByTagName ("head")[0] || document.documentElement;
|
181 |
+
site_head.insertBefore(sq_script, site_head.firstChild);
|
182 |
+
}
|
183 |
+
google.load("visualization", "1", {packages: ["corechart"]});
|
184 |
+
function drawChart(id, values, reverse) {
|
185 |
+
var data = google.visualization.arrayToDataTable(values);
|
186 |
+
|
187 |
+
var options = {
|
188 |
+
|
189 |
+
curveType: "function",
|
190 |
+
title: "",
|
191 |
+
chartArea:{width:"100%",height:"100%"},
|
192 |
+
enableInteractivity: "true",
|
193 |
+
tooltip: {trigger: "auto"},
|
194 |
+
pointSize: "0",
|
195 |
+
legend: "none",
|
196 |
+
backgroundColor: "transparent",
|
197 |
+
colors: ["#55b2ca"],
|
198 |
+
hAxis: {
|
199 |
+
baselineColor: "transparent",
|
200 |
+
gridlineColor: "transparent",
|
201 |
+
textPosition: "none"
|
202 |
+
} ,
|
203 |
+
vAxis:{
|
204 |
+
direction: ((reverse) ? -1 : 1),
|
205 |
+
baselineColor: "transparent",
|
206 |
+
gridlineColor: "transparent",
|
207 |
+
textPosition: "none"
|
208 |
+
}
|
209 |
+
};
|
210 |
+
|
211 |
+
var chart = new google.visualization.LineChart(document.getElementById(id));
|
212 |
+
chart.draw(data, options);
|
213 |
+
return chart;
|
214 |
+
}
|
215 |
+
</script>';
|
216 |
+
}
|
217 |
+
|
218 |
+
/**
|
219 |
+
* Push the array to a specific index
|
220 |
+
* @param array $src
|
221 |
+
* @param array $in
|
222 |
+
* @param integer $pos
|
223 |
+
* @return array
|
224 |
+
*/
|
225 |
+
public function insert($src, $in, $pos) {
|
226 |
+
if (is_int($pos))
|
227 |
+
$array = array_merge(array_slice($src, 0, $pos), $in, array_slice($src, $pos));
|
228 |
+
else {
|
229 |
+
foreach ($src as $k => $v) {
|
230 |
+
if ($k == $pos)
|
231 |
+
$array = array_merge($array, $in);
|
232 |
+
$array[$k] = $v;
|
233 |
+
}
|
234 |
+
}
|
235 |
+
return $array;
|
236 |
+
}
|
237 |
+
|
238 |
+
/**
|
239 |
+
* Hook Get/Post action
|
240 |
+
* @return string
|
241 |
+
*/
|
242 |
+
public function action() {
|
243 |
+
parent::action();
|
244 |
+
|
245 |
+
switch (SQ_Tools::getValue('action')) {
|
246 |
+
case 'sq_posts_rank':
|
247 |
+
$args = array();
|
248 |
+
$posts = SQ_Tools::getValue('posts');
|
249 |
+
if (is_array($posts) && !empty($posts)) {
|
250 |
+
$posts = SQ_Tools::getValue('posts');
|
251 |
+
$args['posts'] = join(',', $posts);
|
252 |
+
|
253 |
+
$response = json_decode(SQ_Action::apiCall('sq/user-analytics/total', $args));
|
254 |
+
}
|
255 |
+
if (isset($response) && is_object($response)) {
|
256 |
+
$response = $this->model->getTotal($response);
|
257 |
+
SQ_Tools::setHeader('json');
|
258 |
+
exit(json_encode($response));
|
259 |
+
}
|
260 |
+
exit(json_encode(array('posts' => array())));
|
261 |
+
case 'sq_post_rank':
|
262 |
+
$args = array();
|
263 |
+
$this->model->post_id = (int) SQ_Tools::getValue('post');
|
264 |
+
$args['post_id'] = $this->model->post_id;
|
265 |
+
|
266 |
+
if ($json = SQ_ObjController::getModel('SQ_Post')->getKeyword($this->model->post_id)) {
|
267 |
+
if (isset($json->rank)) {
|
268 |
+
$ranking = SQ_ObjController::getController('SQ_Ranking', false);
|
269 |
+
$args['rank'] = (string) $json->rank;
|
270 |
+
$args['country'] = $ranking->getCountry();
|
271 |
+
$args['language'] = $ranking->getLanguage();
|
272 |
+
}
|
273 |
+
}
|
274 |
+
|
275 |
+
$response = json_decode(SQ_Action::apiCall('sq/user-analytics/detail', $args));
|
276 |
+
|
277 |
+
if (!is_object($response)) {
|
278 |
+
exit(json_encode(array('error' => $response)));
|
279 |
+
} else {
|
280 |
+
|
281 |
+
//check and save the keyword serp
|
282 |
+
$this->checkKeyword($response->keyword);
|
283 |
+
|
284 |
+
$analytics = SQ_ObjController::getBlock('SQ_BlockAnalytics');
|
285 |
+
$analytics->flush = false;
|
286 |
+
$analytics->post_id = $this->model->post_id;
|
287 |
+
$analytics->audit = $this->model->getAnalytics($response, $this->model->post_id);
|
288 |
+
$response = $analytics->init();
|
289 |
+
|
290 |
+
SQ_Tools::setHeader('json');
|
291 |
+
exit(json_encode($response));
|
292 |
+
}
|
293 |
+
}
|
294 |
+
}
|
295 |
+
|
296 |
+
/**
|
297 |
+
* Check and save the Keyword SERP
|
298 |
+
*
|
299 |
+
* @param type $keyword
|
300 |
+
* @return type
|
301 |
+
*/
|
302 |
+
private function checkKeyword($keyword) {
|
303 |
+
if ($keyword == '')
|
304 |
+
return;
|
305 |
+
|
306 |
+
$ranking = SQ_ObjController::getController('SQ_Ranking', false);
|
307 |
+
if (is_object($ranking)) {
|
308 |
+
|
309 |
+
$rank = get_transient('sq_rank' . $this->model->post_id);
|
310 |
+
//if the rank is not in transient
|
311 |
+
if ($rank === false) {
|
312 |
+
//get the keyword from database
|
313 |
+
$json = SQ_ObjController::getModel('SQ_Post')->getKeyword($this->model->post_id);
|
314 |
+
if (isset($json->rank)) {
|
315 |
+
$rank = $json->rank;
|
316 |
+
//add it to transient
|
317 |
+
set_transient('sq_rank' . $this->model->post_id, $rank, (60 * 60 * 24 * 1));
|
318 |
+
} else {
|
319 |
+
$rank = $ranking->processRanking($this->model->post_id, $keyword);
|
320 |
+
|
321 |
+
if ($rank == -1) {
|
322 |
+
sleep(3);
|
323 |
+
//if not indexed with the keyword then find the url
|
324 |
+
if ($ranking->processRanking($this->model->post_id, get_permalink($this->model->post_id)) > 0) { //for permalink index set 0
|
325 |
+
$rank = 0;
|
326 |
+
}
|
327 |
+
}
|
328 |
+
$args = array();
|
329 |
+
$args['keyword'] = $keyword;
|
330 |
+
$args['rank'] = $rank;
|
331 |
+
$args['country'] = $ranking->getCountry();
|
332 |
+
$args['language'] = $ranking->getLanguage();
|
333 |
+
SQ_ObjController::getModel('SQ_Post')->saveKeyword($this->model->post_id, json_decode(json_encode($args)));
|
334 |
+
//add it to transient
|
335 |
+
set_transient('sq_rank' . $this->model->post_id, $rank, (60 * 60 * 24 * 1));
|
336 |
+
}
|
337 |
+
}
|
338 |
+
|
339 |
+
//save the rank if there is no error
|
340 |
+
if ($rank !== false && $rank >= -1) {
|
341 |
+
$args = array();
|
342 |
+
$args['post_id'] = $this->model->post_id;
|
343 |
+
$args['rank'] = (string) $rank;
|
344 |
+
$args['country'] = $ranking->getCountry();
|
345 |
+
$args['language'] = $ranking->getLanguage();
|
346 |
+
SQ_Action::apiCall('sq/user-analytics/saveserp', $args);
|
347 |
+
}
|
348 |
+
}
|
349 |
+
}
|
350 |
+
|
351 |
+
}
|
core/SQ_BlockAccount/SQ_BlockAccount.php
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Account settings
|
5 |
+
*/
|
6 |
+
class SQ_BlockAccount extends SQ_BlockController {
|
7 |
+
|
8 |
+
public function action() {
|
9 |
+
parent::action();
|
10 |
+
switch (SQ_Tools::getValue('action')) {
|
11 |
+
case 'sq_hide_survey':
|
12 |
+
SQ_Tools::saveOptions('sq_hide_survey', (int) SQ_Tools::getValue('sq_hide_survey'));
|
13 |
+
exit();
|
14 |
+
break;
|
15 |
+
}
|
16 |
+
}
|
17 |
+
|
18 |
+
}
|
core/SQ_BlockAffiliate/SQ_BlockAffiliate.php
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Affiliate settings
|
5 |
+
*/
|
6 |
+
class SQ_BlockAffiliate extends SQ_BlockController {
|
7 |
+
|
8 |
+
public function action() {
|
9 |
+
parent::action();
|
10 |
+
switch (SQ_Tools::getValue('action')) {
|
11 |
+
//login action
|
12 |
+
case 'sq_settings_affiliate':
|
13 |
+
//post arguments
|
14 |
+
$args = array();
|
15 |
+
//set return to null object as default
|
16 |
+
$return = (object) NULL;
|
17 |
+
//api responce variable
|
18 |
+
$responce = '';
|
19 |
+
|
20 |
+
$responce = SQ_Action::apiCall('sq/user/affiliate', $args);
|
21 |
+
|
22 |
+
//create an object from json responce
|
23 |
+
if (is_object(json_decode($responce)))
|
24 |
+
$return = json_decode($responce);
|
25 |
+
|
26 |
+
//add the responce in msg for debugging in case of error
|
27 |
+
$return->msg = $responce;
|
28 |
+
|
29 |
+
//if the affiliate link is received
|
30 |
+
if (isset($return->affiliate_link)) {
|
31 |
+
SQ_Tools::saveOptions('sq_affiliate_link', $return->affiliate_link);
|
32 |
+
} elseif (!empty($return->error)) {
|
33 |
+
//if an error is throw then ...
|
34 |
+
$return->info = sprintf(__('Error: %s', _SQ_PLUGIN_NAME_), $return->error);
|
35 |
+
} else {
|
36 |
+
//if unknown error
|
37 |
+
$return->error = __('An error occured. Mabe a network error :(', _SQ_PLUGIN_NAME_);
|
38 |
+
}
|
39 |
+
break;
|
40 |
+
}
|
41 |
+
}
|
42 |
+
|
43 |
+
public function hookGetContent() {
|
44 |
+
$this->options = SQ_Tools::$options;
|
45 |
+
}
|
46 |
+
|
47 |
+
}
|
core/SQ_BlockAnalytics/SQ_BlockAnalytics.php
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SQ_BlockAnalytics extends SQ_BlockController {
|
4 |
+
|
5 |
+
public function hookGetContent() {
|
6 |
+
|
7 |
+
}
|
8 |
+
|
9 |
+
}
|
core/SQ_BlockAudit/SQ_BlockAudit.php
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SQ_BlockAudit extends SQ_BlockController {
|
4 |
+
|
5 |
+
public function hookGetContent() {
|
6 |
+
|
7 |
+
}
|
8 |
+
|
9 |
+
}
|
core/SQ_BlockDashboard/SQ_BlockDashboard.php
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Dashboard settings
|
5 |
+
*/
|
6 |
+
class SQ_BlockDashboard extends SQ_BlockController {
|
7 |
+
|
8 |
+
}
|
core/SQ_BlockHelp/SQ_BlockHelp.php
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Affiliate settings
|
5 |
+
*/
|
6 |
+
class SQ_BlockHelp extends SQ_BlockController {
|
7 |
+
|
8 |
+
}
|
core/SQ_BlockPostsAnalytics/SQ_BlockPostsAnalytics.php
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SQ_BlockPostsAnalytics extends SQ_BlockController {
|
4 |
+
|
5 |
+
public function hookGetContent() {
|
6 |
+
SQ_ObjController::getController('SQ_DisplayController', false)
|
7 |
+
->loadMedia(_SQ_THEME_URL_ . '/css/sq_postslist.css');
|
8 |
+
|
9 |
+
SQ_Tools::saveOptions('sq_analytics', 1); //Save analytics viewed
|
10 |
+
$this->postlist = SQ_ObjController::getController('SQ_PostsList');
|
11 |
+
|
12 |
+
$this->model->prepare_items();
|
13 |
+
}
|
14 |
+
|
15 |
+
public function getNavigationTop() {
|
16 |
+
return $this->model->display_tablenav('top');
|
17 |
+
}
|
18 |
+
|
19 |
+
public function getNavigationBottom() {
|
20 |
+
return $this->model->display_tablenav('bottom');
|
21 |
+
}
|
22 |
+
|
23 |
+
public function getHeaderColumns() {
|
24 |
+
return $this->model->print_column_headers();
|
25 |
+
}
|
26 |
+
|
27 |
+
public function getRows() {
|
28 |
+
return $this->model->display_rows();
|
29 |
+
}
|
30 |
+
|
31 |
+
public function hookFooter() {
|
32 |
+
$this->postlist->setPosts($this->model->posts);
|
33 |
+
$this->postlist->hookFooter();
|
34 |
+
}
|
35 |
+
|
36 |
+
public function getScripts() {
|
37 |
+
return $this->postlist->getScripts();
|
38 |
+
}
|
39 |
+
|
40 |
+
}
|
core/SQ_BlockStatus/SQ_BlockStatus.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SQ_BlockStatus extends SQ_BlockController {
|
4 |
+
|
5 |
+
public $progress = array();
|
6 |
+
|
7 |
+
public function hookGetContent() {
|
8 |
+
global $wpdb;
|
9 |
+
}
|
10 |
+
|
11 |
+
}
|
core/SQ_BlockSupport/SQ_BlockSupport.php
ADDED
@@ -0,0 +1,114 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SQ_BlockSupport extends SQ_BlockController {
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Called when Post action is triggered
|
7 |
+
*
|
8 |
+
* @return void
|
9 |
+
*/
|
10 |
+
public function action() {
|
11 |
+
parent::action();
|
12 |
+
|
13 |
+
switch (SQ_Tools::getValue('action')) {
|
14 |
+
case 'sq_feedback':
|
15 |
+
global $current_user;
|
16 |
+
$return = array();
|
17 |
+
|
18 |
+
SQ_Tools::saveOptions('sq_feedback', 1);
|
19 |
+
|
20 |
+
$line = "\n" . "________________________________________" . "\n";
|
21 |
+
$from = $current_user->user_email;
|
22 |
+
$subject = __('Plugin Feedback', _SQ_PLUGIN_NAME_);
|
23 |
+
$face = SQ_Tools::getValue('feedback');
|
24 |
+
$message = SQ_Tools::getValue('message');
|
25 |
+
|
26 |
+
if ($message <> '' || (int) $face > 0) {
|
27 |
+
switch ($face) {
|
28 |
+
case 1:
|
29 |
+
$face = 'Angry';
|
30 |
+
break;
|
31 |
+
case 2:
|
32 |
+
$face = 'Sad';
|
33 |
+
break;
|
34 |
+
case 3:
|
35 |
+
$face = 'Happy';
|
36 |
+
break;
|
37 |
+
case 4:
|
38 |
+
$face = 'Excited';
|
39 |
+
break;
|
40 |
+
case 5:
|
41 |
+
$face = 'Love it';
|
42 |
+
break;
|
43 |
+
}
|
44 |
+
if ($message <> '')
|
45 |
+
$message = $message . $line;
|
46 |
+
|
47 |
+
if ($face <> '') {
|
48 |
+
$message .= 'Url:' . get_bloginfo('wpurl') . "\n";
|
49 |
+
$message .= 'Face:' . $face;
|
50 |
+
}
|
51 |
+
|
52 |
+
|
53 |
+
|
54 |
+
$headers[] = 'From: ' . $current_user->display_name . ' <' . $from . '>';
|
55 |
+
|
56 |
+
//$this->error='buuum';
|
57 |
+
if (wp_mail(_SQ_SUPPORT_EMAIL_, $subject, $message, $headers)) {
|
58 |
+
$return['message'] = __('Thank you for your feedback', _SQ_PLUGIN_NAME_);
|
59 |
+
$return['success'] = true;
|
60 |
+
} else {
|
61 |
+
$return['message'] = __('Could not send the email...', _SQ_PLUGIN_NAME_);
|
62 |
+
$return['error'] = true;
|
63 |
+
}
|
64 |
+
} else {
|
65 |
+
$return['message'] = __('No message.', _SQ_PLUGIN_NAME_);
|
66 |
+
$return['error'] = true;
|
67 |
+
}
|
68 |
+
|
69 |
+
SQ_Tools::setHeader('json');
|
70 |
+
echo json_encode($return);
|
71 |
+
break;
|
72 |
+
|
73 |
+
case 'sq_support':
|
74 |
+
global $current_user;
|
75 |
+
$return = array();
|
76 |
+
$versions = '';
|
77 |
+
|
78 |
+
$versions .= 'Url:' . get_bloginfo('wpurl') . "\n";
|
79 |
+
$versions .= 'Squirrly version: ' . SQ_VERSION_ID . "\n";
|
80 |
+
$versions .= 'Wordpress version: ' . WP_VERSION_ID . "\n";
|
81 |
+
$versions .= 'PHP version: ' . PHP_VERSION_ID . "\n";
|
82 |
+
|
83 |
+
$line = "\n" . "________________________________________" . "\n";
|
84 |
+
$from = $current_user->user_email;
|
85 |
+
$subject = SQ_Tools::getValue('subject', __('Plugin Support', _SQ_PLUGIN_NAME_));
|
86 |
+
$message = SQ_Tools::getValue('message');
|
87 |
+
|
88 |
+
if ($message <> '') {
|
89 |
+
$message .= $line;
|
90 |
+
$message .= $versions;
|
91 |
+
|
92 |
+
$headers[] = 'From: ' . $current_user->display_name . ' <' . $from . '>';
|
93 |
+
|
94 |
+
//$this->error='buuum';
|
95 |
+
if (wp_mail(_SQ_SUPPORT_EMAIL_, $subject, $message, $headers)) {
|
96 |
+
$return['message'] = __('Message sent. Thank you!', _SQ_PLUGIN_NAME_);
|
97 |
+
$return['success'] = true;
|
98 |
+
} else {
|
99 |
+
$return['message'] = __('Could not send the email...', _SQ_PLUGIN_NAME_);
|
100 |
+
$return['error'] = true;
|
101 |
+
}
|
102 |
+
} else {
|
103 |
+
$return['message'] = __('No message.', _SQ_PLUGIN_NAME_);
|
104 |
+
$return['error'] = true;
|
105 |
+
}
|
106 |
+
|
107 |
+
header('Content-Type: application/json');
|
108 |
+
echo json_encode($return);
|
109 |
+
break;
|
110 |
+
}
|
111 |
+
exit();
|
112 |
+
}
|
113 |
+
|
114 |
+
}
|
core/SQ_Blocklogin/SQ_Blocklogin.php
ADDED
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SQ_Blocklogin extends SQ_BlockController {
|
4 |
+
|
5 |
+
public function init() {
|
6 |
+
/* If logged in, then return */
|
7 |
+
if (SQ_Tools::$options['sq_api'] <> '')
|
8 |
+
return;
|
9 |
+
parent::init();
|
10 |
+
}
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Called for sq_login on Post action
|
14 |
+
* Login or register a user
|
15 |
+
*/
|
16 |
+
public function action() {
|
17 |
+
parent::action();
|
18 |
+
switch (SQ_Tools::getValue('action')) {
|
19 |
+
//login action
|
20 |
+
case 'sq_login':
|
21 |
+
$this->squirrlyLogin();
|
22 |
+
break;
|
23 |
+
|
24 |
+
//sign-up action
|
25 |
+
case 'sq_register':
|
26 |
+
$this->squirrlyRegister();
|
27 |
+
break;
|
28 |
+
|
29 |
+
//reset the token action
|
30 |
+
case 'sq_reset':
|
31 |
+
SQ_Tools::saveOptions('sq_api', '');
|
32 |
+
$return = array();
|
33 |
+
$return['reset'] = 'success';
|
34 |
+
|
35 |
+
//Set the header for json reply
|
36 |
+
SQ_Tools::setHeader('json');
|
37 |
+
echo json_encode($return);
|
38 |
+
//force exit
|
39 |
+
exit();
|
40 |
+
}
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Register a new user to Squirrly and get the token
|
45 |
+
* @global string $current_user
|
46 |
+
*/
|
47 |
+
public function squirrlyRegister() {
|
48 |
+
global $current_user;
|
49 |
+
//set return to null object as default
|
50 |
+
$return = (object) NULL;
|
51 |
+
//api responce variable
|
52 |
+
$responce = '';
|
53 |
+
//post arguments
|
54 |
+
$args = array();
|
55 |
+
|
56 |
+
//Check if email is set
|
57 |
+
if (SQ_Tools::getValue('email') <> '') {
|
58 |
+
$args['name'] = '';
|
59 |
+
$args['user'] = SQ_Tools::getValue('email');
|
60 |
+
$args['email'] = SQ_Tools::getValue('email');
|
61 |
+
}
|
62 |
+
|
63 |
+
//if email is set
|
64 |
+
if ($args['email'] <> '') {
|
65 |
+
$responce = SQ_Action::apiCall('sq/register', $args);
|
66 |
+
|
67 |
+
//create an object from json responce
|
68 |
+
if (is_object(json_decode($responce)))
|
69 |
+
$return = json_decode($responce);
|
70 |
+
|
71 |
+
//add the responce in msg for debugging in case of error
|
72 |
+
$return->msg = $responce;
|
73 |
+
|
74 |
+
//check if token is set and save it
|
75 |
+
if (isset($return->token)) {
|
76 |
+
SQ_Tools::saveOptions('sq_api', $return->token);
|
77 |
+
} elseif (!empty($return->error)) {
|
78 |
+
//if an error is throw then ...
|
79 |
+
switch ($return->error) {
|
80 |
+
case 'alreadyregistered':
|
81 |
+
$return->info = sprintf(__('We found your email, so it means you already have a Squirrly.co account. Please login with your Squirrly Email. If you forgot your password click %shere%s', _SQ_PLUGIN_NAME_), '<a href="' . _SQ_DASH_URL_ . 'login/?action=lostpassword" target="_blank">', '</a>');
|
82 |
+
break;
|
83 |
+
}
|
84 |
+
} else {
|
85 |
+
//if unknown error
|
86 |
+
$return->error = __('An error occured. Mabe a network error :(', _SQ_PLUGIN_NAME_);
|
87 |
+
}
|
88 |
+
} else
|
89 |
+
$return->error = sprintf(__('Could not send your informations to squirrly. Please register %smanually%s.', _SQ_PLUGIN_NAME_), '<a href="' . _SQ_DASH_URL_ . 'login/?action=register" target="_blank">', '</a>');
|
90 |
+
|
91 |
+
//Set the header to json
|
92 |
+
SQ_Tools::setHeader('json');
|
93 |
+
echo json_encode($return); //transform object in json and show it
|
94 |
+
|
95 |
+
exit();
|
96 |
+
}
|
97 |
+
|
98 |
+
/**
|
99 |
+
* Login a user to Squirrly and get the token
|
100 |
+
*/
|
101 |
+
public function squirrlyLogin() {
|
102 |
+
//set return to null object as default
|
103 |
+
$return = (object) NULL;
|
104 |
+
//api responce variable
|
105 |
+
$responce = '';
|
106 |
+
|
107 |
+
//get the user and password
|
108 |
+
$args['user'] = SQ_Tools::getValue('user');
|
109 |
+
$args['password'] = SQ_Tools::getValue('password');
|
110 |
+
if ($args['user'] <> '' && $args['password'] <> '') {
|
111 |
+
$args['encrypted'] = '0';
|
112 |
+
//get the responce from server on login call
|
113 |
+
$responce = SQ_Action::apiCall('sq/login', $args);
|
114 |
+
|
115 |
+
//create an object from json responce
|
116 |
+
if (is_object(json_decode($responce)))
|
117 |
+
$return = json_decode($responce);
|
118 |
+
|
119 |
+
//add the responce in msg for debugging in case of error
|
120 |
+
$return->msg = $responce;
|
121 |
+
|
122 |
+
//check if token is set and save it
|
123 |
+
if (isset($return->token)) {
|
124 |
+
SQ_Tools::saveOptions('sq_api', $return->token);
|
125 |
+
} elseif (!empty($return->error)) {
|
126 |
+
//if an error is throw then ...
|
127 |
+
switch ($return->error) {
|
128 |
+
case 'badlogin':
|
129 |
+
$return->error = __('Wrong email or password!', _SQ_PLUGIN_NAME_);
|
130 |
+
break;
|
131 |
+
case 'multisite':
|
132 |
+
$return->error = __('You can use this account only for the URL you registered first!', _SQ_PLUGIN_NAME_);
|
133 |
+
break;
|
134 |
+
}
|
135 |
+
} else
|
136 |
+
//if unknown error
|
137 |
+
$return->error = __('An error occured.', _SQ_PLUGIN_NAME_);
|
138 |
+
} else
|
139 |
+
$return->error = __('Both fields are required.', _SQ_PLUGIN_NAME_);
|
140 |
+
|
141 |
+
//Set the header to json
|
142 |
+
SQ_Tools::setHeader('json');
|
143 |
+
echo json_encode($return);
|
144 |
+
|
145 |
+
exit();
|
146 |
+
}
|
147 |
+
|
148 |
+
}
|
core/SQ_Blockresearch/SQ_Blockresearch.php
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Core class for SQ_Blocksearch
|
5 |
+
*/
|
6 |
+
class SQ_Blockresearch extends SQ_BlockController {
|
7 |
+
|
8 |
+
public function hookHead() {
|
9 |
+
parent::hookHead();
|
10 |
+
|
11 |
+
|
12 |
+
echo '<script type="text/javascript">
|
13 |
+
var __infotext = ["' . __('Recent discussions:', _SQ_PLUGIN_NAME_) . '", "' . __('Exact search:', _SQ_PLUGIN_NAME_) . '", "' . __('Competition:', _SQ_PLUGIN_NAME_) . '", "' . __('Trend:', _SQ_PLUGIN_NAME_) . '"];
|
14 |
+
</script>';
|
15 |
+
}
|
16 |
+
|
17 |
+
}
|
core/SQ_Blocksearch/SQ_Blocksearch.php
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Core class for SQ_Blocksearch
|
5 |
+
*/
|
6 |
+
class SQ_Blocksearch extends SQ_BlockController {
|
7 |
+
|
8 |
+
public function action() {
|
9 |
+
$start = 0;
|
10 |
+
$nbr = 8;
|
11 |
+
$exclude = array();
|
12 |
+
|
13 |
+
parent::action();
|
14 |
+
switch (SQ_Tools::getValue('action')) {
|
15 |
+
case 'sq_type_click':
|
16 |
+
SQ_Tools::saveOptions('sq_img_licence', SQ_Tools::getValue('licence'));
|
17 |
+
exit();
|
18 |
+
break;
|
19 |
+
case 'sq_search_img':
|
20 |
+
|
21 |
+
$get = array('q' => SQ_Tools::getValue('q'),
|
22 |
+
'lang' => SQ_Tools::getValue('lang'),
|
23 |
+
'start' => SQ_Tools::getValue('start'),
|
24 |
+
'page' => SQ_Tools::getValue('page'),
|
25 |
+
'nrb' => SQ_Tools::getValue('nrb')
|
26 |
+
);
|
27 |
+
echo $this->model->searchImage($get);
|
28 |
+
break;
|
29 |
+
case 'sq_search_blog':
|
30 |
+
if (SQ_Tools::getValue('exclude') && SQ_Tools::getValue('exclude') <> 'undefined')
|
31 |
+
$exclude = array((int) SQ_Tools::getValue('exclude'));
|
32 |
+
|
33 |
+
if (SQ_Tools::getValue('start'))
|
34 |
+
$start = array((int) SQ_Tools::getValue('start'));
|
35 |
+
|
36 |
+
if (SQ_Tools::getValue('nrb'))
|
37 |
+
$nrb = (int) SQ_Tools::getValue('nrb');
|
38 |
+
|
39 |
+
if (SQ_Tools::getValue('q') <> '')
|
40 |
+
echo SQ_ObjController::getController('SQ_Post')->model->searchPost(SQ_Tools::getValue('q'), $exclude, (int) $start, (int) $nrb);
|
41 |
+
break;
|
42 |
+
}
|
43 |
+
|
44 |
+
exit();
|
45 |
+
}
|
46 |
+
|
47 |
+
public function hookHead() {
|
48 |
+
parent::hookHead();
|
49 |
+
echo '<script type="text/javascript">
|
50 |
+
var __date = "' . __('date', _SQ_PLUGIN_NAME_) . '"; var __readit = "' . __('Read it!', _SQ_PLUGIN_NAME_) . '"; var __insertit = "' . __('Insert it!', _SQ_PLUGIN_NAME_) . '"; var __reference = "' . __('Reference', _SQ_PLUGIN_NAME_) . '"; var __insertasbox = "' . __('Insert as box', _SQ_PLUGIN_NAME_) . '"; var __notrelevant = "' . __('Not relevant?', _SQ_PLUGIN_NAME_) . '"; var __insertparagraph = "' . __('Insert in your article', _SQ_PLUGIN_NAME_) . '"; var __tinymceerror = "' . __('For Squirrly to work, you have to have tinymce editor installed!', _SQ_PLUGIN_NAME_) . '"; var __ajaxerror = "' . __(':( I lost my squirrel. Please reload the page.', _SQ_PLUGIN_NAME_) . '"; var __nofound = "' . __('No results found!', _SQ_PLUGIN_NAME_) . '"; var __tinymceinactive = "' . __('Switch to Visual editor!', _SQ_PLUGIN_NAME_) . '"; var __morewords = "' . __('Use more words in one keyword', _SQ_PLUGIN_NAME_) . '"; var __toolong = "' . __('Takes too long to check this keyword ...', _SQ_PLUGIN_NAME_) . '"; var __doresearch = "' . __('Do a research!', _SQ_PLUGIN_NAME_) . '"; var __morekeywords = "' . __('Do more research!', _SQ_PLUGIN_NAME_) . '"; var __sq_photo_copyright = "' . __('[ ATTRIBUTE: Please check: %s to find out how to attribute this image ]', _SQ_PLUGIN_NAME_) . '"; var __has_attributes = "' . __('Has creative commons attributes', _SQ_PLUGIN_NAME_) . '"; var __no_attributes = "' . __('No known copyright restrictions', _SQ_PLUGIN_NAME_) . '";
|
51 |
+
</script>';
|
52 |
+
}
|
53 |
+
|
54 |
+
}
|
core/SQ_Blockseo/SQ_Blockseo.php
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SQ_Blockseo extends SQ_BlockController {
|
4 |
+
|
5 |
+
public function action() {
|
6 |
+
|
7 |
+
}
|
8 |
+
|
9 |
+
public function hookHead() {
|
10 |
+
parent::hookHead();
|
11 |
+
$metas = array();
|
12 |
+
$metas = $this->model->getAdvSeo();
|
13 |
+
|
14 |
+
echo '<script type="text/javascript">
|
15 |
+
var __snippetsavechanges = "' . __('Save changes', _SQ_PLUGIN_NAME_) . '";
|
16 |
+
var __snippetsavecancel = "' . __('Cancel', _SQ_PLUGIN_NAME_) . '";
|
17 |
+
var __snippetreset = "' . __('Reset', _SQ_PLUGIN_NAME_) . '";
|
18 |
+
|
19 |
+
var __snippetcustomize = "' . __('Customize Meta', _SQ_PLUGIN_NAME_) . '";
|
20 |
+
var __snippetkeyword = "' . __('manage keywords', _SQ_PLUGIN_NAME_) . '";
|
21 |
+
var __snippetshort = "' . __('Too short', _SQ_PLUGIN_NAME_) . '";
|
22 |
+
var __snippetlong = "' . __('Too long', _SQ_PLUGIN_NAME_) . '";
|
23 |
+
|
24 |
+
var __snippetname = "' . __('Squirrly Snippet', _SQ_PLUGIN_NAME_) . '";
|
25 |
+
var __snippetrefresh = "' . __('Update', _SQ_PLUGIN_NAME_) . '";
|
26 |
+
var __sq_snippet = "' . __('snippet', _SQ_PLUGIN_NAME_) . '";
|
27 |
+
|
28 |
+
var __snippetclickrefresh = "' . __('Click the Update button (to the right) to see the snippet from your website.', _SQ_PLUGIN_NAME_) . '";
|
29 |
+
var __snippetentertitle = "' . __('Enter a title above for the snippet to get data.', _SQ_PLUGIN_NAME_) . '";' . "\n";
|
30 |
+
|
31 |
+
if (is_array($metas))
|
32 |
+
foreach ($metas as $key => $meta) {
|
33 |
+
echo 'var __' . $key . ' = "' . str_replace('"', '\"', $meta) . '";' . "\n";
|
34 |
+
}
|
35 |
+
|
36 |
+
echo '</script>';
|
37 |
+
}
|
38 |
+
|
39 |
+
}
|
core/SQ_Loading/SQ_Loading.php
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SQ_Loading extends SQ_BlockController {
|
4 |
+
|
5 |
+
public function hookHead() {
|
6 |
+
global $sq_postID;
|
7 |
+
|
8 |
+
parent::hookHead();
|
9 |
+
$exists = false;
|
10 |
+
$browser = false;
|
11 |
+
|
12 |
+
|
13 |
+
|
14 |
+
/* Check the squirrly.js file if exists */
|
15 |
+
$browser = SQ_Tools::getBrowserInfo();
|
16 |
+
|
17 |
+
if ((isset($browser) && $browser != false && is_array($browser) && $browser['name'] == 'IE' && (int) $browser['version'] < 9 && (int) $browser['version'] > 0)) {
|
18 |
+
echo '<script type="text/javascript">
|
19 |
+
jQuery("#sq_preloading").removeClass("sq_loading");
|
20 |
+
jQuery("#sq_preloading").addClass("sq_error")
|
21 |
+
jQuery("#sq_preloading").html("' . __('For Squirrly to work properly you have to use a higher version of Internet Explorer. <br /> We recommend you to use Chrome or Mozilla.', _SQ_PLUGIN_NAME_) . '");
|
22 |
+
jQuery("#sq_options").hide();
|
23 |
+
jQuery("#sq_blocklogin").hide();
|
24 |
+
</script>';
|
25 |
+
} else {
|
26 |
+
echo '<script type="text/javascript">
|
27 |
+
var sq_use = "' . SQ_Tools::$options['sq_use'] . '"; var sq_beginner_user = "0"; var sq_baseurl = "' . _SQ_STATIC_API_URL_ . '"; var sq_uri = "' . SQ_URI . '"; var sq_language = "' . get_bloginfo('language') . '"; var sq_version = "' . SQ_VERSION_ID . '"; var sq_wpversion = "' . WP_VERSION_ID . '"; var sq_phpversion = "' . PHP_VERSION_ID . '"; var sq_seoversion = "' . (SQ_Tools::$options['sq_sla'] + 1) . '"; var __postID = "' . $sq_postID . '"; var __token = "' . SQ_Tools::$options['sq_api'] . '";
|
28 |
+
var sq_keyword_information = "' . ((isset(SQ_Tools::$options['sq_keyword_information'])) ? SQ_Tools::$options['sq_keyword_information'] : '0') . '"; var __noopt = "' . __('You haven`t used Squirrly SEO to optimize your article. Do you want to optimize for a keyword before publishing?', _SQ_PLUGIN_NAME_) . '";
|
29 |
+
var sq_frontend_css = "' . _SQ_THEME_URL_ . 'css/sq_frontend.css";
|
30 |
+
var sq_analytics_code = "' . SQ_Tools::$options['sq_analytics_code'] . '";
|
31 |
+
|
32 |
+
if (typeof sq_script === "undefined"){
|
33 |
+
var sq_script = document.createElement(\'script\');
|
34 |
+
sq_script.src = "' . _SQ_STATIC_API_URL_ . SQ_URI . '/js/squirrly.js?ver=' . SQ_VERSION_ID . '";
|
35 |
+
var site_head = document.getElementsByTagName ("head")[0] || document.documentElement;
|
36 |
+
site_head.insertBefore(sq_script, site_head.firstChild);
|
37 |
+
}
|
38 |
+
jQuery(document).ready(function() {
|
39 |
+
jQuery("#sq_preloading").addClass("sq_loading").html("");
|
40 |
+
});
|
41 |
+
</script>';
|
42 |
+
}
|
43 |
+
}
|
44 |
+
|
45 |
+
}
|
core/config.xml
ADDED
@@ -0,0 +1,133 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<blocks>
|
3 |
+
<block>
|
4 |
+
<name>SQ_Post</name>
|
5 |
+
<description>Post Page</description>
|
6 |
+
<actions>
|
7 |
+
<action>sq_save_meta</action>
|
8 |
+
</actions>
|
9 |
+
<active>1</active>
|
10 |
+
<path>controllers</path>
|
11 |
+
</block>
|
12 |
+
<block>
|
13 |
+
<name>SQ_PostsList</name>
|
14 |
+
<description>Posts List Page</description>
|
15 |
+
<actions>
|
16 |
+
<action>sq_posts_rank</action>
|
17 |
+
<action>sq_post_rank</action>
|
18 |
+
</actions>
|
19 |
+
<active>1</active>
|
20 |
+
<path>controllers</path>
|
21 |
+
</block>
|
22 |
+
<block>
|
23 |
+
<name>SQ_Menu</name>
|
24 |
+
<description>Setting page</description>
|
25 |
+
<actions>
|
26 |
+
<action>sq_settings_update</action>
|
27 |
+
<action>sq_save_analytics</action>
|
28 |
+
<action>sq_get_snippet</action>
|
29 |
+
|
30 |
+
<action>sq_fixautoseo</action>
|
31 |
+
<action>sq_fixpermalink</action>
|
32 |
+
<action>sq_fixprivate</action>
|
33 |
+
<action>sq_fixcomments</action>
|
34 |
+
<action>sq_fix_ogduplicate</action>
|
35 |
+
<action>sq_fix_tcduplicate</action>
|
36 |
+
<action>sq_fix_descduplicate</action>
|
37 |
+
|
38 |
+
<action>sq_upgrade</action>
|
39 |
+
<action>sq_warnings_off</action>
|
40 |
+
</actions>
|
41 |
+
<active>1</active>
|
42 |
+
<path>controllers</path>
|
43 |
+
</block>
|
44 |
+
<block>
|
45 |
+
<name>SQ_BlockAccount</name>
|
46 |
+
<description>Account information</description>
|
47 |
+
<actions>
|
48 |
+
<action>sq_hide_survey</action>
|
49 |
+
</actions>
|
50 |
+
<active>1</active>
|
51 |
+
<path>core</path>
|
52 |
+
</block>
|
53 |
+
<block>
|
54 |
+
<name>SQ_BlockSupport</name>
|
55 |
+
<description>The support</description>
|
56 |
+
<controllers>
|
57 |
+
<controller>SQ_Post</controller>
|
58 |
+
</controllers>
|
59 |
+
<actions>
|
60 |
+
<action>sq_feedback</action>
|
61 |
+
<action>sq_support</action>
|
62 |
+
</actions>
|
63 |
+
<active>1</active>
|
64 |
+
<path>core</path>
|
65 |
+
</block>
|
66 |
+
<block>
|
67 |
+
<name>SQ_Blocklogin</name>
|
68 |
+
<description>Connect to Squirrly</description>
|
69 |
+
<controllers>
|
70 |
+
<controller>SQ_Post</controller>
|
71 |
+
</controllers>
|
72 |
+
<actions>
|
73 |
+
<action>sq_login</action>
|
74 |
+
<action>sq_register</action>
|
75 |
+
<action>sq_reset</action>
|
76 |
+
</actions>
|
77 |
+
<active>1</active>
|
78 |
+
<path>core</path>
|
79 |
+
</block>
|
80 |
+
<block>
|
81 |
+
<name>SQ_Blocksearch</name>
|
82 |
+
<description>Inspiration box</description>
|
83 |
+
<controllers>
|
84 |
+
<controller>SQ_Post</controller>
|
85 |
+
</controllers>
|
86 |
+
<actions>
|
87 |
+
<action>sq_search_img</action>
|
88 |
+
<action>sq_search_blog</action>
|
89 |
+
<action>sq_type_click</action>
|
90 |
+
</actions>
|
91 |
+
<active>1</active>
|
92 |
+
<path>core</path>
|
93 |
+
</block>
|
94 |
+
|
95 |
+
<block>
|
96 |
+
<name>SQ_Blockseo</name>
|
97 |
+
<description>SEO Live assistant</description>
|
98 |
+
<controllers>
|
99 |
+
<controller>SQ_Post</controller>
|
100 |
+
</controllers>
|
101 |
+
<active>1</active>
|
102 |
+
<path>core</path>
|
103 |
+
</block>
|
104 |
+
|
105 |
+
<block>
|
106 |
+
<name>SQ_Blockresearch</name>
|
107 |
+
<description>Research block</description>
|
108 |
+
<controllers>
|
109 |
+
<controller>SQ_Post</controller>
|
110 |
+
</controllers>
|
111 |
+
<active>1</active>
|
112 |
+
<path>core</path>
|
113 |
+
</block>
|
114 |
+
|
115 |
+
<block>
|
116 |
+
<name>SQ_BlockAffiliate</name>
|
117 |
+
<description>Affiliate Page</description>
|
118 |
+
<actions>
|
119 |
+
<action>sq_settings_affiliate</action>
|
120 |
+
</actions>
|
121 |
+
<active>1</active>
|
122 |
+
<path>core</path>
|
123 |
+
</block>
|
124 |
+
<block>
|
125 |
+
<name>SQ_Loading</name>
|
126 |
+
<description>Loading JS</description>
|
127 |
+
<controllers>
|
128 |
+
<controller>SQ_Post</controller>
|
129 |
+
</controllers>
|
130 |
+
<active>1</active>
|
131 |
+
<path>core</path>
|
132 |
+
</block>
|
133 |
+
</blocks>
|
languages/squirrly-seo-de_DE.mo
ADDED
Binary file
|
languages/squirrly-seo-de_DE.po
ADDED
@@ -0,0 +1,856 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: Squirrly SEO Plugin v1.0.8\n"
|
4 |
+
"Report-Msgid-Bugs-To: \n"
|
5 |
+
"POT-Creation-Date: 2013-02-26 10:30+0200\n"
|
6 |
+
"PO-Revision-Date: 2013-03-06 14:54+0200\n"
|
7 |
+
"Last-Translator: Squirrly <contact@squirrly.co>\n"
|
8 |
+
"Language-Team: \n"
|
9 |
+
"Language: de_DE\n"
|
10 |
+
"MIME-Version: 1.0\n"
|
11 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
+
"Content-Transfer-Encoding: 8bit\n"
|
13 |
+
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
14 |
+
"X-Poedit-SourceCharset: utf-8\n"
|
15 |
+
"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;"
|
16 |
+
"_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
|
17 |
+
"X-Poedit-Basepath: ../\n"
|
18 |
+
"X-Textdomain-Support: yes\n"
|
19 |
+
"X-Generator: Poedit 1.5.4\n"
|
20 |
+
"X-Poedit-SearchPath-0: .\n"
|
21 |
+
|
22 |
+
# @ squirrly-seo
|
23 |
+
#: squirrly.php:44
|
24 |
+
msgid ""
|
25 |
+
"For Squirrly to work, the PHP version has to be equal or greater then 5.1"
|
26 |
+
msgstr ""
|
27 |
+
"Damit Squirrly funktioniert, muss die PHP-Version gleich oder größer als 5.1 "
|
28 |
+
"sein"
|
29 |
+
|
30 |
+
# @ squirrly-seo
|
31 |
+
#: classes/SQ_Error.php:17
|
32 |
+
msgid ""
|
33 |
+
"Function get_class does not exists! Is required for Squirrly to work "
|
34 |
+
"properly."
|
35 |
+
msgstr ""
|
36 |
+
"Funktion Get_class ist nicht vorhanden! Ist erforderlich für Squirrly um "
|
37 |
+
"richtig zu arbeiten."
|
38 |
+
|
39 |
+
# @ squirrly-seo
|
40 |
+
#: classes/SQ_Error.php:20
|
41 |
+
msgid ""
|
42 |
+
"Function file_exists does not exists! Is required for Squirrly to work "
|
43 |
+
"properly."
|
44 |
+
msgstr ""
|
45 |
+
"Funktion File_exists ist nicht vorhanden! Ist erforderlich für Squirrly um "
|
46 |
+
"richtig zu arbeiten."
|
47 |
+
|
48 |
+
# @ squirrly-seo
|
49 |
+
#: classes/SQ_Error.php:24
|
50 |
+
msgid "The home directory is not set!"
|
51 |
+
msgstr "Das Home-Verzeichnis wurde nicht gesetzt!"
|
52 |
+
|
53 |
+
# @ squirrly-seo
|
54 |
+
#: classes/SQ_Error.php:28
|
55 |
+
msgid "The PHP version has to be greater then 4.0"
|
56 |
+
msgstr "Die PHP-Version muß größer als 4.0 sein"
|
57 |
+
|
58 |
+
# @ squirrly-seo
|
59 |
+
#: classes/SQ_Error.php:65
|
60 |
+
msgid "Turn off warnings!"
|
61 |
+
msgstr "Warnungen ausschalten!"
|
62 |
+
|
63 |
+
# @ squirrly-seo
|
64 |
+
#: classes/SQ_Error.php:66
|
65 |
+
msgid "Notice: "
|
66 |
+
msgstr "Hinweis: "
|
67 |
+
|
68 |
+
# @ squirrly-seo
|
69 |
+
#: classes/SQ_Error.php:70
|
70 |
+
msgid "Note: "
|
71 |
+
msgstr "Notiz: "
|
72 |
+
|
73 |
+
# @ squirrly-seo
|
74 |
+
#: classes/SQ_Tools.php:198
|
75 |
+
msgid "Fix it for me!"
|
76 |
+
msgstr "Beheben Sie es für mich!"
|
77 |
+
|
78 |
+
# @ squirrly-seo
|
79 |
+
#: classes/SQ_Tools.php:204
|
80 |
+
msgid "Let Squirrly optimize your SEO automatically (recommended)"
|
81 |
+
msgstr "Lassen Sie Squirrly Ihr SEO automatisch optimieren (empfohlen)"
|
82 |
+
|
83 |
+
# @ squirrly-seo
|
84 |
+
#: classes/SQ_Tools.php:211
|
85 |
+
msgid "You're blocking google from indexing your site!"
|
86 |
+
msgstr "Sie blockieren Google zum Indizieren Ihrer Website!"
|
87 |
+
|
88 |
+
# @ squirrly-seo
|
89 |
+
#: classes/SQ_Tools.php:217
|
90 |
+
msgid ""
|
91 |
+
"It is highly recommended that you include the %postname% variable in the "
|
92 |
+
"permalink structure."
|
93 |
+
msgstr ""
|
94 |
+
"Es wird stark empfohlen, dass Sie die %postname% Variable in der Permalink-"
|
95 |
+
"Struktur einschließen."
|
96 |
+
|
97 |
+
# @ squirrly-seo
|
98 |
+
#: controllers/SQ_Post.php:15
|
99 |
+
msgid "For Squirrly to work, you have to have tinymce installed!"
|
100 |
+
msgstr "Damit Squirrly arbeiten kann, müssen Sie tinymce installiert haben!"
|
101 |
+
|
102 |
+
# @ squirrly-seo
|
103 |
+
#: controllers/SQ_Post.php:178
|
104 |
+
msgid "Plugin Feedback"
|
105 |
+
msgstr "Plugin Feedback"
|
106 |
+
|
107 |
+
# @ squirrly-seo
|
108 |
+
#: controllers/SQ_Post.php:214
|
109 |
+
msgid "Thank you for your feedback"
|
110 |
+
msgstr "Vielen Dank für Ihre Feedback"
|
111 |
+
|
112 |
+
# @ squirrly-seo
|
113 |
+
#: controllers/SQ_Post.php:216 controllers/SQ_Post.php:250
|
114 |
+
msgid "Could not send the email..."
|
115 |
+
msgstr "Konnte E-Mail nicht senden ..."
|
116 |
+
|
117 |
+
# @ squirrly-seo
|
118 |
+
#: controllers/SQ_Post.php:219 controllers/SQ_Post.php:253
|
119 |
+
msgid "No message."
|
120 |
+
msgstr "Keine Nachricht."
|
121 |
+
|
122 |
+
# @ squirrly-seo
|
123 |
+
#: controllers/SQ_Post.php:237
|
124 |
+
msgid "Plugin Support"
|
125 |
+
msgstr "Plugin Support"
|
126 |
+
|
127 |
+
# @ squirrly-seo
|
128 |
+
#: controllers/SQ_Post.php:248
|
129 |
+
msgid "Message sent..."
|
130 |
+
msgstr "Nachricht gesendet ..."
|
131 |
+
|
132 |
+
# @ squirrly-seo
|
133 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:59
|
134 |
+
#, php-format
|
135 |
+
msgid ""
|
136 |
+
"We found your email, so it means you already have a Squirrly.co account. "
|
137 |
+
"Please login with your Squirrly Email. If you forgot your password click "
|
138 |
+
"%shere%s"
|
139 |
+
msgstr ""
|
140 |
+
"Ihre E-Mail Adresse ist bereits bei Squirrly.co registriert. Bitte loggen "
|
141 |
+
"Sie sich mit Ihrer Squirrly-ID ein. Falls Sie Ihr Passwort vergessen haben, "
|
142 |
+
"klicken Sie %shier%s"
|
143 |
+
|
144 |
+
# @ squirrly-seo
|
145 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:63
|
146 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:104
|
147 |
+
msgid "An error occured."
|
148 |
+
msgstr "Ein Fehler ist aufgetreten."
|
149 |
+
|
150 |
+
# @ squirrly-seo
|
151 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:67
|
152 |
+
#, php-format
|
153 |
+
msgid ""
|
154 |
+
"Could not send your informations to squirrly. Please register %smanually%s."
|
155 |
+
msgstr ""
|
156 |
+
"Konnte Ihre Informationen nicht zu Squirrly senden. Bitte registrieren "
|
157 |
+
"%smanually%s."
|
158 |
+
|
159 |
+
# @ squirrly-seo
|
160 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:97
|
161 |
+
msgid "Wrong email or password!"
|
162 |
+
msgstr "Benutzername oder Passwort falsch!"
|
163 |
+
|
164 |
+
# @ squirrly-seo
|
165 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:100
|
166 |
+
msgid "You can use this account only for the URL you registered first!"
|
167 |
+
msgstr ""
|
168 |
+
"Dieses Konto können Sie nur für die URL benutzen, die Sie zuerst registriert "
|
169 |
+
"haben!"
|
170 |
+
|
171 |
+
# @ squirrly-seo
|
172 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:106
|
173 |
+
msgid "Both fields are required."
|
174 |
+
msgstr "Beide Felder sind Pflichtfelder."
|
175 |
+
|
176 |
+
#: core/SQ_Blockresearch/SQ_Blockresearch.php:12
|
177 |
+
msgid "Recent discussions:"
|
178 |
+
msgstr "Bisherige Diskussionen:"
|
179 |
+
|
180 |
+
# @ squirrly-seo
|
181 |
+
#: core/SQ_Blockresearch/SQ_Blockresearch.php:12
|
182 |
+
msgid "Exact search:"
|
183 |
+
msgstr "Exakte Suche:"
|
184 |
+
|
185 |
+
# @ squirrly-seo
|
186 |
+
#: core/SQ_Blockresearch/SQ_Blockresearch.php:12
|
187 |
+
msgid "Competition:"
|
188 |
+
msgstr "Wettbewerb:"
|
189 |
+
|
190 |
+
# @ squirrly-seo
|
191 |
+
#: core/SQ_Blockresearch/SQ_Blockresearch.php:12
|
192 |
+
msgid "Trend:"
|
193 |
+
msgstr "Trend:"
|
194 |
+
|
195 |
+
# @ squirrly-seo
|
196 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:50
|
197 |
+
msgid "date"
|
198 |
+
msgstr "Datum"
|
199 |
+
|
200 |
+
# @ squirrly-seo
|
201 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:50
|
202 |
+
msgid "Read it!"
|
203 |
+
msgstr "Lesen!"
|
204 |
+
|
205 |
+
# @ squirrly-seo
|
206 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:50
|
207 |
+
msgid "Insert it!"
|
208 |
+
msgstr "Einfügen!"
|
209 |
+
|
210 |
+
# @ squirrly-seo
|
211 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:50
|
212 |
+
msgid "Reference"
|
213 |
+
msgstr "Referenz"
|
214 |
+
|
215 |
+
# @ squirrly-seo
|
216 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:50
|
217 |
+
msgid "Insert as box"
|
218 |
+
msgstr "Als Box einfügen"
|
219 |
+
|
220 |
+
# @ squirrly-seo
|
221 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:50
|
222 |
+
msgid "Not relevant?"
|
223 |
+
msgstr "Nicht relevant?"
|
224 |
+
|
225 |
+
# @ squirrly-seo
|
226 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:50
|
227 |
+
msgid "Insert in your article"
|
228 |
+
msgstr "In Artikel einfügen"
|
229 |
+
|
230 |
+
# @ squirrly-seo
|
231 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:50
|
232 |
+
msgid "For Squirrly to work, you have to have tinymce editor installed!"
|
233 |
+
msgstr "Damit Squirrly arbeitet, muss tinymce installiert sein!"
|
234 |
+
|
235 |
+
# @ squirrly-seo
|
236 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:50
|
237 |
+
msgid ":( I lost my squirrel. Please reload the page."
|
238 |
+
msgstr ":( Ich verlor meine Eichhörnchen. Laden Sie die Seite erneut."
|
239 |
+
|
240 |
+
# @ squirrly-seo
|
241 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:50
|
242 |
+
msgid "No results found!"
|
243 |
+
msgstr "Keine Ergebnisse gefunden!"
|
244 |
+
|
245 |
+
# @ squirrly-seo
|
246 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:50
|
247 |
+
msgid "Switch to Visual editor!"
|
248 |
+
msgstr "Zum Visual Editor wechseln !"
|
249 |
+
|
250 |
+
# @ squirrly-seo
|
251 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:50
|
252 |
+
msgid "Use more words in one keyword"
|
253 |
+
msgstr "Verwenden Sie mehrere Wörter in einem Schlüsselwort"
|
254 |
+
|
255 |
+
# @ squirrly-seo
|
256 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:50
|
257 |
+
msgid "Takes too long to check this keyword ..."
|
258 |
+
msgstr "Dauert zu lange, um dieses Schlüsselwort zu überprüfen ..."
|
259 |
+
|
260 |
+
# @ squirrly-seo
|
261 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:50
|
262 |
+
msgid "Do a research!"
|
263 |
+
msgstr "Erweiterte Suche!"
|
264 |
+
|
265 |
+
# @ squirrly-seo
|
266 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:50
|
267 |
+
msgid "Do more research!"
|
268 |
+
msgstr "Erweiterte Suche!"
|
269 |
+
|
270 |
+
# @ squirrly-seo
|
271 |
+
#: core/SQ_Loading/SQ_Loading.php:25
|
272 |
+
msgid ""
|
273 |
+
"For Squirrly to work properly you have to use a higher version of Internet "
|
274 |
+
"Explorer. <br /> We recommend you to use Chrome or Mozilla."
|
275 |
+
msgstr ""
|
276 |
+
"Damit Squirrly ordnungsgemäß funktioniert, müssen Sie eine höhere Version "
|
277 |
+
"von Internet Explorer verwenden. <br /> Wir empfehlen, Chrome oder Mozilla."
|
278 |
+
|
279 |
+
# @ squirrly-seo
|
280 |
+
#: core/SQ_Loading/SQ_Loading.php:27
|
281 |
+
msgid "The system is acting Squirrly. I can not find the link to the server."
|
282 |
+
msgstr "Kann den Link auf den Server nicht finden."
|
283 |
+
|
284 |
+
#: core/SQ_Loading/SQ_Loading.php:35
|
285 |
+
msgid ""
|
286 |
+
"You haven`t used Squirrly SEO to optimize your article. Do you want to "
|
287 |
+
"optimize for a keyword before publishing?"
|
288 |
+
msgstr ""
|
289 |
+
"You haven`t used Squirrly SEO to optimize your article. Do you want to "
|
290 |
+
"optimize for a keyword before publishing?"
|
291 |
+
|
292 |
+
# @ squirrly-seo
|
293 |
+
#: models/SQ_Menu.php:108
|
294 |
+
msgid "The code for Google Webmaster Tool is incorrect."
|
295 |
+
msgstr "Der Code für Google Webmaster Tool ist falsch."
|
296 |
+
|
297 |
+
# @ squirrly-seo
|
298 |
+
#: models/SQ_Menu.php:135
|
299 |
+
msgid "The code for Google Analytics is incorrect."
|
300 |
+
msgstr "Der Code für Google Analytics ist falsch."
|
301 |
+
|
302 |
+
# @ squirrly-seo
|
303 |
+
#: models/SQ_Menu.php:163
|
304 |
+
msgid "The code for Facebook is incorrect."
|
305 |
+
msgstr "Der Code für Facebook ist falsch."
|
306 |
+
|
307 |
+
# @ squirrly-seo
|
308 |
+
#: models/SQ_Menu.php:188
|
309 |
+
msgid "The code for Bing is incorrect."
|
310 |
+
msgstr "Der Code für Bing ist falsch."
|
311 |
+
|
312 |
+
# @ squirrly-seo
|
313 |
+
#: models/SQ_Menu.php:221
|
314 |
+
msgid "File type error: Only JPEG, JPG, GIF or PNG files are allowed."
|
315 |
+
msgstr "Dateityp Fehler: Nur JPEG, JPG, GIF oder PNG-Dateien sind erlaubt."
|
316 |
+
|
317 |
+
# @ squirrly-seo
|
318 |
+
#: models/SQ_Menu.php:234
|
319 |
+
msgid "GD error: The GD library must be installed on your server."
|
320 |
+
msgstr "GD Fehler: Die GD-Bibliothek muss auf dem Server installiert werden."
|
321 |
+
|
322 |
+
# @ squirrly-seo
|
323 |
+
#: models/SQ_Menu.php:241
|
324 |
+
msgid "Delete error: Could not delete the old favicon."
|
325 |
+
msgstr "Lösch Fehler: Konnte das alte Favicon nicht löschen."
|
326 |
+
|
327 |
+
# @ squirrly-seo
|
328 |
+
#: models/SQ_Menu.php:248
|
329 |
+
msgid "Upload error: Could not upload the favicon."
|
330 |
+
msgstr "Upload Fehler: Konnte das Favicon nicht hochladen."
|
331 |
+
|
332 |
+
# @ squirrly-seo
|
333 |
+
#: models/SQ_Menu.php:254
|
334 |
+
msgid "Permission error: Could not change the favicon permissions."
|
335 |
+
msgstr "Permission Fehler: Konnte Favicon-Berechtigungen nicht ändern."
|
336 |
+
|
337 |
+
# @ squirrly-seo
|
338 |
+
#: models/SQ_Menu.php:280
|
339 |
+
msgid ""
|
340 |
+
"ICO Error: Could not create the ICO from file. Try with another file type."
|
341 |
+
msgstr ""
|
342 |
+
"ICO Fehler: konnte ICO aus der Datei nicht erstellen. Versuchen Sie es mit "
|
343 |
+
"einem anderen Dateityp."
|
344 |
+
|
345 |
+
# @ squirrly-seo
|
346 |
+
#: models/SQ_Menu.php:283
|
347 |
+
msgid "The favicon has been updated."
|
348 |
+
msgstr "Das Favicon wurde aktualisiert."
|
349 |
+
|
350 |
+
# @ default
|
351 |
+
#: models/SQ_Post.php:71
|
352 |
+
msgid "Squirrly could not find any results for: "
|
353 |
+
msgstr "Squirly hat keine Suchergebnisse gefunden für:"
|
354 |
+
|
355 |
+
# @ squirrly-seo
|
356 |
+
#: themes/default/SQ_Blocklogin.php:2
|
357 |
+
msgid "Squirrly.co Login"
|
358 |
+
msgstr "Squirrly.co Login"
|
359 |
+
|
360 |
+
# @ squirrly-seo
|
361 |
+
#: themes/default/SQ_Blocklogin.php:9
|
362 |
+
msgid "Email:"
|
363 |
+
msgstr "Ihre E-Mail Adresse:"
|
364 |
+
|
365 |
+
# @ squirrly-seo
|
366 |
+
#: themes/default/SQ_Blocklogin.php:10
|
367 |
+
msgid "Password:"
|
368 |
+
msgstr "Passwort:"
|
369 |
+
|
370 |
+
# @ squirrly-seo
|
371 |
+
#: themes/default/SQ_Blocklogin.php:11
|
372 |
+
msgid "Login"
|
373 |
+
msgstr "Login"
|
374 |
+
|
375 |
+
# @ squirrly-seo
|
376 |
+
#: themes/default/SQ_Blocklogin.php:12
|
377 |
+
msgid "Register"
|
378 |
+
msgstr "Registrieren"
|
379 |
+
|
380 |
+
# @ squirrly-seo
|
381 |
+
#: themes/default/SQ_Blocklogin.php:12
|
382 |
+
msgid "Register to Squirrly.co"
|
383 |
+
msgstr "Bei Squirrly.co registrieren"
|
384 |
+
|
385 |
+
# @ squirrly-seo
|
386 |
+
#: themes/default/SQ_Blocklogin.php:13
|
387 |
+
msgid "Lost password?"
|
388 |
+
msgstr "Passwort vergessen?"
|
389 |
+
|
390 |
+
# @ squirrly-seo
|
391 |
+
#: themes/default/SQ_Blocklogin.php:13
|
392 |
+
msgid "Lost password"
|
393 |
+
msgstr "Passwort vergessen"
|
394 |
+
|
395 |
+
# @ squirrly-seo
|
396 |
+
#: themes/default/SQ_Blocklogin.php:17
|
397 |
+
msgid "Enter your email"
|
398 |
+
msgstr "In Artikel einfügen"
|
399 |
+
|
400 |
+
# @ squirrly-seo
|
401 |
+
#: themes/default/SQ_Blocklogin.php:18
|
402 |
+
msgid "Your E-mail:"
|
403 |
+
msgstr "Ihre E-Mail Adresse:"
|
404 |
+
|
405 |
+
#: themes/default/SQ_Blocklogin.php:19
|
406 |
+
msgid "Sign Up"
|
407 |
+
msgstr "Anmelden"
|
408 |
+
|
409 |
+
#: themes/default/SQ_Blocklogin.php:20
|
410 |
+
msgid "This email connects you to Squirrly.co"
|
411 |
+
msgstr "This email connects you to Squirrly.co"
|
412 |
+
|
413 |
+
# @ squirrly-seo
|
414 |
+
#: themes/default/SQ_Blocklogin.php:29
|
415 |
+
msgid "The email address is invalid!"
|
416 |
+
msgstr "Die E-Mail-Adresse ist ungültig!"
|
417 |
+
|
418 |
+
# @ squirrly-seo
|
419 |
+
#: themes/default/SQ_Blocklogin.php:30
|
420 |
+
msgid "Click on Sign Up button and try again ..."
|
421 |
+
msgstr "Klicken Sie auf das Bild und versuchen Sie es erneut ..."
|
422 |
+
|
423 |
+
# @ squirrly-seo
|
424 |
+
#: themes/default/SQ_Blocklogin.php:31
|
425 |
+
msgid "An error occured while logging in!"
|
426 |
+
msgstr "Bei der Anmeldung ist ein Fehler aufgetreten!"
|
427 |
+
|
428 |
+
# @ squirrly-seo
|
429 |
+
#: themes/default/SQ_Blocklogin.php:32
|
430 |
+
msgid "Connecting ..."
|
431 |
+
msgstr "Verbinden ..."
|
432 |
+
|
433 |
+
# @ squirrly-seo
|
434 |
+
#: themes/default/SQ_Blockresearch.php:2
|
435 |
+
msgid "Squirrly Keyword Research"
|
436 |
+
msgstr "Squirrly Erweiterte Suche!"
|
437 |
+
|
438 |
+
# @ squirrly-seo
|
439 |
+
#: themes/default/SQ_Blockresearch.php:3
|
440 |
+
msgid "Clear"
|
441 |
+
msgstr "Löschen"
|
442 |
+
|
443 |
+
# @ squirrly-seo
|
444 |
+
#: themes/default/SQ_Blockresearch.php:9
|
445 |
+
msgid "Keyword:"
|
446 |
+
msgstr "Schlüsselwort:"
|
447 |
+
|
448 |
+
# @ squirrly-seo
|
449 |
+
#: themes/default/SQ_Blockresearch.php:11 themes/default/SQ_Blocksearch.php:23
|
450 |
+
msgid "Use this keyword"
|
451 |
+
msgstr "Dieses Schlüsselwort verwenden"
|
452 |
+
|
453 |
+
# @ squirrly-seo
|
454 |
+
#: themes/default/SQ_Blockresearch.php:20
|
455 |
+
msgid "+ Add keyword"
|
456 |
+
msgstr "Fügen Sie ein anderes Schlüsselwort ein"
|
457 |
+
|
458 |
+
# @ squirrly-seo
|
459 |
+
#: themes/default/SQ_Blockresearch.php:21
|
460 |
+
msgid "Do the research"
|
461 |
+
msgstr "Recherchieren"
|
462 |
+
|
463 |
+
# @ squirrly-seo
|
464 |
+
#: themes/default/SQ_Blockresearch.php:24
|
465 |
+
msgid "Enter even more keywords."
|
466 |
+
msgstr "Geben Sie noch mehrere Schlüsselwörter ein."
|
467 |
+
|
468 |
+
# @ squirrly-seo
|
469 |
+
#: themes/default/SQ_Blockresearch.php:25
|
470 |
+
msgid "Let some keywords for the next time as well!"
|
471 |
+
msgstr "Lassen Sie ein paar Schlüsselwörter auch für das nächste Mal!"
|
472 |
+
|
473 |
+
#: themes/default/SQ_Blocksearch.php:3
|
474 |
+
msgid "Optimize for Keyword"
|
475 |
+
msgstr "Schlüsselwort optimieren"
|
476 |
+
|
477 |
+
# @ squirrly-seo
|
478 |
+
#: themes/default/SQ_Blocksearch.php:10
|
479 |
+
msgid "Enter a keyword"
|
480 |
+
msgstr "Ein Schlüsselwort eingeben"
|
481 |
+
|
482 |
+
# @ squirrly-seo
|
483 |
+
#: themes/default/SQ_Blocksearch.php:10
|
484 |
+
msgid "for Squirrly Live SEO optimization"
|
485 |
+
msgstr "Live-SEO-Optimierung für Squirrly"
|
486 |
+
|
487 |
+
# @ squirrly-seo
|
488 |
+
#: themes/default/SQ_Blocksearch.php:22
|
489 |
+
msgid "Do a research"
|
490 |
+
msgstr "Recherchieren"
|
491 |
+
|
492 |
+
# @ squirrly-seo
|
493 |
+
#: themes/default/SQ_Blocksearch.php:27
|
494 |
+
msgid "Enter a keyword above!"
|
495 |
+
msgstr "Geben Sie oben ein Schlüsselwort ein!"
|
496 |
+
|
497 |
+
# @ squirrly-seo
|
498 |
+
#: themes/default/SQ_Blocksearch.php:28
|
499 |
+
msgid "I have more then one keyword!"
|
500 |
+
msgstr "Ich habe mehr als ein Schlüsselwort!"
|
501 |
+
|
502 |
+
# @ squirrly-seo
|
503 |
+
#: themes/default/SQ_Blocksearch.php:34
|
504 |
+
msgid "Images"
|
505 |
+
msgstr "Bilder"
|
506 |
+
|
507 |
+
# @ squirrly-seo
|
508 |
+
#: themes/default/SQ_Blocksearch.php:35
|
509 |
+
msgid "Twitter"
|
510 |
+
msgstr "Twitter"
|
511 |
+
|
512 |
+
# @ squirrly-seo
|
513 |
+
#: themes/default/SQ_Blocksearch.php:36
|
514 |
+
msgid "Wiki"
|
515 |
+
msgstr "Wiki"
|
516 |
+
|
517 |
+
# @ squirrly-seo
|
518 |
+
#: themes/default/SQ_Blocksearch.php:37
|
519 |
+
msgid "News"
|
520 |
+
msgstr "News"
|
521 |
+
|
522 |
+
# @ squirrly-seo
|
523 |
+
#: themes/default/SQ_Blocksearch.php:38
|
524 |
+
msgid "Blogs"
|
525 |
+
msgstr "Blogs"
|
526 |
+
|
527 |
+
# @ squirrly-seo
|
528 |
+
#: themes/default/SQ_Blocksearch.php:39
|
529 |
+
msgid "My articles"
|
530 |
+
msgstr "Meine Artikel"
|
531 |
+
|
532 |
+
# @ squirrly-seo
|
533 |
+
#: themes/default/SQ_Blocksearch.php:44
|
534 |
+
msgid "Show only Copyright Free images"
|
535 |
+
msgstr "Nur urheberrechtfreie Bilder zeigen"
|
536 |
+
|
537 |
+
# @ squirrly-seo
|
538 |
+
#: themes/default/SQ_Blockseo.php:3
|
539 |
+
msgid "Squirrly LIVE SEO assistant"
|
540 |
+
msgstr "Squirrly LIVE SEO-Assistent"
|
541 |
+
|
542 |
+
# @ squirrly-seo
|
543 |
+
#: themes/default/SQ_Menu.php:5
|
544 |
+
msgid ""
|
545 |
+
"With Squirrly SEO, your Wordpress will get Perfect SEO on each article you "
|
546 |
+
"write."
|
547 |
+
msgstr ""
|
548 |
+
"Mit Squirrly SEO wird jeder Ihrer Wordpress Artikel eine perfekte "
|
549 |
+
"Suchmaschinenoptimierung erhalten. "
|
550 |
+
|
551 |
+
# @ squirrly-seo
|
552 |
+
#: themes/default/SQ_Menu.php:7
|
553 |
+
msgid "SEO Software"
|
554 |
+
msgstr "SEO Software"
|
555 |
+
|
556 |
+
# @ squirrly-seo
|
557 |
+
#: themes/default/SQ_Menu.php:7
|
558 |
+
msgid ""
|
559 |
+
"delivered as a plugin for Wordpress. <br /><br />We connect your wordpress "
|
560 |
+
"with Squirrly, so that we can find the best SEO opportunities, give you "
|
561 |
+
"reports and analyse your competitors."
|
562 |
+
msgstr ""
|
563 |
+
"geliefert als Plugin für Wordpress. <br /> <br /> Wir verbinden Ihr "
|
564 |
+
"Wordpress mit Squirrly, so dass wir die besten SEO-Möglichkeiten finden, "
|
565 |
+
"erstatten Ihnen Bericht und analysieren Ihre Konkurrenz."
|
566 |
+
|
567 |
+
# @ squirrly-seo
|
568 |
+
#: themes/default/SQ_Menu.php:9
|
569 |
+
msgid "Write a new post with Squirrly"
|
570 |
+
msgstr "Schreiben Sie einen neuen Beitrag mit Squirrly"
|
571 |
+
|
572 |
+
# @ squirrly-seo
|
573 |
+
#: themes/default/SQ_Menu.php:23
|
574 |
+
msgid "Squirrly settings"
|
575 |
+
msgstr "Squirrly Einstellungen"
|
576 |
+
|
577 |
+
# @ squirrly-seo
|
578 |
+
#: themes/default/SQ_Menu.php:23 themes/default/SQ_Menu.php:170
|
579 |
+
msgid "Save settings"
|
580 |
+
msgstr "Einstellungen speichern"
|
581 |
+
|
582 |
+
#: themes/default/SQ_Menu.php:29
|
583 |
+
msgid " API"
|
584 |
+
msgstr " API"
|
585 |
+
|
586 |
+
# @ squirrly-seo
|
587 |
+
#: themes/default/SQ_Menu.php:32
|
588 |
+
msgid "API Key:"
|
589 |
+
msgstr "API Key:"
|
590 |
+
|
591 |
+
# @ squirrly-seo
|
592 |
+
#: themes/default/SQ_Menu.php:38
|
593 |
+
msgid "Let Squirrly automatically optimize my blog"
|
594 |
+
msgstr "Lassen Sie Squirrly automatisch Ihren Blog optimieren"
|
595 |
+
|
596 |
+
# @ squirrly-seo
|
597 |
+
#: themes/default/SQ_Menu.php:41 themes/default/SQ_Menu.php:63
|
598 |
+
#: themes/default/SQ_Menu.php:76 themes/default/SQ_Menu.php:85
|
599 |
+
msgid "Yes"
|
600 |
+
msgstr "Ja"
|
601 |
+
|
602 |
+
# @ squirrly-seo
|
603 |
+
#: themes/default/SQ_Menu.php:42 themes/default/SQ_Menu.php:64
|
604 |
+
#: themes/default/SQ_Menu.php:77 themes/default/SQ_Menu.php:86
|
605 |
+
msgid "No"
|
606 |
+
msgstr "Nein"
|
607 |
+
|
608 |
+
# @ squirrly-seo
|
609 |
+
#: themes/default/SQ_Menu.php:46
|
610 |
+
msgid "What does Squirrly automatically do for SEO?"
|
611 |
+
msgstr "Was tut Squirrly automatisch für SEO?"
|
612 |
+
|
613 |
+
# @ squirrly-seo
|
614 |
+
#: themes/default/SQ_Menu.php:47
|
615 |
+
msgid "adds the correct <strong>title</strong> in the home page"
|
616 |
+
msgstr "fügt den richtigen <strong>Titel</strong> in die Startseite ein"
|
617 |
+
|
618 |
+
# @ squirrly-seo
|
619 |
+
#: themes/default/SQ_Menu.php:48
|
620 |
+
msgid ""
|
621 |
+
"adds the correct <strong>description</strong> and <strong>keywords</strong> "
|
622 |
+
"in all pages"
|
623 |
+
msgstr ""
|
624 |
+
"fügt die richtige <strong>Beschreibung</strong> und <strong>Schlüsselwörter</"
|
625 |
+
"strong> auf allen Seiten ein"
|
626 |
+
|
627 |
+
# @ squirrly-seo
|
628 |
+
#: themes/default/SQ_Menu.php:49
|
629 |
+
msgid "adds <strong>canonical</strong> link in home page"
|
630 |
+
msgstr "fügt den richtigen <strong>canonical</strong> in die Startseite ein"
|
631 |
+
|
632 |
+
# @ squirrly-seo
|
633 |
+
#: themes/default/SQ_Menu.php:50
|
634 |
+
msgid "adds the <strong>XML Sitemap</strong> for search engines"
|
635 |
+
msgstr "fügt die <strong>XML Sitemap</strong> für Suchmaschinen ein"
|
636 |
+
|
637 |
+
# @ squirrly-seo
|
638 |
+
#: themes/default/SQ_Menu.php:51
|
639 |
+
msgid ""
|
640 |
+
"adds the required METAs for home page (<strong>icon, author, language, dc "
|
641 |
+
"publisher</strong>, etc.)"
|
642 |
+
msgstr ""
|
643 |
+
"fügt die erforderlichen METAs für die Startseite (<strong> icon, Autor, "
|
644 |
+
"Sprache, dc Verlag </strong>, etc.) ein"
|
645 |
+
|
646 |
+
# @ squirrly-seo
|
647 |
+
#: themes/default/SQ_Menu.php:52
|
648 |
+
msgid ""
|
649 |
+
"adds the <strong>favicon</strong> and the <strong>icon for Apple devices</"
|
650 |
+
"strong>."
|
651 |
+
msgstr ""
|
652 |
+
"fügt das <strong>favicon</strong> und die <strong>icon für Apple-Geräte</"
|
653 |
+
"strong> ein."
|
654 |
+
|
655 |
+
# @ squirrly-seo
|
656 |
+
#: themes/default/SQ_Menu.php:60
|
657 |
+
msgid "Let Squirrly warn me if there are errors related to SEO settings"
|
658 |
+
msgstr ""
|
659 |
+
"Squirrly warnen lassen, wenn es Fehler im Zusammenhang mit den SEO-"
|
660 |
+
"Einstellungen gibt"
|
661 |
+
|
662 |
+
# @ squirrly-seo
|
663 |
+
#: themes/default/SQ_Menu.php:70
|
664 |
+
msgid "Squirrly Options"
|
665 |
+
msgstr "Squirrly Optionen"
|
666 |
+
|
667 |
+
# @ squirrly-seo
|
668 |
+
#: themes/default/SQ_Menu.php:73
|
669 |
+
msgid ""
|
670 |
+
"Show <strong>\"Enter a keyword\"</strong> bubble when posting a new article."
|
671 |
+
msgstr ""
|
672 |
+
"Zeige <strong>\"Enter a keyword\"</ strong> Bubble, bei einem neuen Artikel."
|
673 |
+
|
674 |
+
#: themes/default/SQ_Menu.php:82
|
675 |
+
msgid ""
|
676 |
+
"Always show <strong>Keyword Informations</strong> about the selected keyword."
|
677 |
+
msgstr ""
|
678 |
+
"Always show <strong>Keyword Informations</strong> about the selected keyword."
|
679 |
+
|
680 |
+
# @ squirrly-seo
|
681 |
+
#: themes/default/SQ_Menu.php:92
|
682 |
+
msgid "First page optimization (Title, Description, Keywords)"
|
683 |
+
msgstr " Optimierung der ersten Seite (Titel, Beschreibung, Schlüsselwörter)"
|
684 |
+
|
685 |
+
# @ squirrly-seo
|
686 |
+
#: themes/default/SQ_Menu.php:93
|
687 |
+
msgid "Status:"
|
688 |
+
msgstr "Status:"
|
689 |
+
|
690 |
+
# @ squirrly-seo
|
691 |
+
#: themes/default/SQ_Menu.php:93
|
692 |
+
msgid "automatically"
|
693 |
+
msgstr "automatisch"
|
694 |
+
|
695 |
+
# @ squirrly-seo
|
696 |
+
#: themes/default/SQ_Menu.php:94
|
697 |
+
msgid "Change it >>"
|
698 |
+
msgstr "Ändern >>"
|
699 |
+
|
700 |
+
# @ squirrly-seo
|
701 |
+
#: themes/default/SQ_Menu.php:97
|
702 |
+
msgid "Title:"
|
703 |
+
msgstr "Titel:"
|
704 |
+
|
705 |
+
# @ squirrly-seo
|
706 |
+
#: themes/default/SQ_Menu.php:98
|
707 |
+
msgid "Tips: Length 10-70 chars"
|
708 |
+
msgstr "Tipp: Länge 10-70 Charaktere"
|
709 |
+
|
710 |
+
# @ squirrly-seo
|
711 |
+
#: themes/default/SQ_Menu.php:101
|
712 |
+
msgid "Description:"
|
713 |
+
msgstr "Beschreibung:"
|
714 |
+
|
715 |
+
# @ squirrly-seo
|
716 |
+
#: themes/default/SQ_Menu.php:102
|
717 |
+
msgid "Tips: Length 70-255 chars"
|
718 |
+
msgstr "Tipp: Länge 70-255 Charaktere"
|
719 |
+
|
720 |
+
# @ squirrly-seo
|
721 |
+
#: themes/default/SQ_Menu.php:105
|
722 |
+
msgid "Keywords:"
|
723 |
+
msgstr "Schlüsselwörter:"
|
724 |
+
|
725 |
+
# @ squirrly-seo
|
726 |
+
#: themes/default/SQ_Menu.php:106
|
727 |
+
msgid "Tips: 2-4 keywords"
|
728 |
+
msgstr "Tipp: Länge 2-4 Schlüsselwörter"
|
729 |
+
|
730 |
+
# @ squirrly-seo
|
731 |
+
#: themes/default/SQ_Menu.php:110
|
732 |
+
msgid "<< Leave it automatically"
|
733 |
+
msgstr "<< Lass es automatisch"
|
734 |
+
|
735 |
+
# @ squirrly-seo
|
736 |
+
#: themes/default/SQ_Menu.php:122
|
737 |
+
msgid "Change the Website Icon"
|
738 |
+
msgstr "Ändern Sie das Website-Symbol"
|
739 |
+
|
740 |
+
# @ squirrly-seo
|
741 |
+
#: themes/default/SQ_Menu.php:125
|
742 |
+
msgid "File types: JPG, JPEG, GIF and PNG."
|
743 |
+
msgstr "Dateitypen: JPG, JPEG, GIF und PNG."
|
744 |
+
|
745 |
+
# @ squirrly-seo
|
746 |
+
#: themes/default/SQ_Menu.php:128
|
747 |
+
msgid "Upload file:"
|
748 |
+
msgstr "Datei hochladen:"
|
749 |
+
|
750 |
+
# @ squirrly-seo
|
751 |
+
#: themes/default/SQ_Menu.php:133
|
752 |
+
msgid "Upload"
|
753 |
+
msgstr "Hochladen"
|
754 |
+
|
755 |
+
# @ squirrly-seo
|
756 |
+
#: themes/default/SQ_Menu.php:137
|
757 |
+
msgid ""
|
758 |
+
"If you don't see the new icon in your browser, empty the browser cache and "
|
759 |
+
"refresh the page."
|
760 |
+
msgstr ""
|
761 |
+
"Wenn Sie das neue Icon nicht in Ihrem Browser sehen, leeren Sie den Browser-"
|
762 |
+
"Cache und aktualisieren Sie die Seite."
|
763 |
+
|
764 |
+
# @ squirrly-seo
|
765 |
+
#: themes/default/SQ_Menu.php:141
|
766 |
+
msgid "Tool for Search Engines"
|
767 |
+
msgstr "Tool für Suchmaschinen"
|
768 |
+
|
769 |
+
# @ squirrly-seo
|
770 |
+
#: themes/default/SQ_Menu.php:145
|
771 |
+
msgid "Google Plus URL:"
|
772 |
+
msgstr "Google Plus URL:"
|
773 |
+
|
774 |
+
# @ squirrly-seo
|
775 |
+
#: themes/default/SQ_Menu.php:149
|
776 |
+
#, php-format
|
777 |
+
msgid "Google META verification code for %sWebmaster Tool%s`:"
|
778 |
+
msgstr "Google META Bestätigungs-Code für %sWebmaster Tool%s`:"
|
779 |
+
|
780 |
+
# @ squirrly-seo
|
781 |
+
#: themes/default/SQ_Menu.php:153
|
782 |
+
#, php-format
|
783 |
+
msgid "Google %sAnalytics ID%s`:"
|
784 |
+
msgstr "Google %sAnalytics ID%s`:"
|
785 |
+
|
786 |
+
# @ squirrly-seo
|
787 |
+
#: themes/default/SQ_Menu.php:157
|
788 |
+
#, php-format
|
789 |
+
msgid "Facebook META code (for %sInsights%s )`:"
|
790 |
+
msgstr "Facebook META Code (für %sInsights%s )`:"
|
791 |
+
|
792 |
+
# @ squirrly-seo
|
793 |
+
#: themes/default/SQ_Menu.php:161
|
794 |
+
#, php-format
|
795 |
+
msgid "Bing META code (for %sWebmaster Tool%s )`:"
|
796 |
+
msgstr "Bing META Code (für %sWebmaster Tool%s )`:"
|
797 |
+
|
798 |
+
# @ squirrly-seo
|
799 |
+
#: themes/default/SQ_Post.php:5
|
800 |
+
msgid "How was your Squirrly experience today?"
|
801 |
+
msgstr "Wie war Ihre Squirrly Erfahrung heute?"
|
802 |
+
|
803 |
+
# @ squirrly-seo
|
804 |
+
#: themes/default/SQ_Post.php:12
|
805 |
+
msgid "How was Squirrly today?"
|
806 |
+
msgstr "Wie war Squirrly heute?"
|
807 |
+
|
808 |
+
# @ squirrly-seo
|
809 |
+
#: themes/default/SQ_Post.php:25
|
810 |
+
msgid "Please tell us why?"
|
811 |
+
msgstr "Bitte sagen Sie uns, warum?"
|
812 |
+
|
813 |
+
# @ squirrly-seo
|
814 |
+
#: themes/default/SQ_Post.php:28
|
815 |
+
msgid "Send feedback"
|
816 |
+
msgstr "Feedback senden"
|
817 |
+
|
818 |
+
# @ squirrly-seo
|
819 |
+
#: themes/default/SQ_Post.php:32 themes/default/SQ_Post.php:53
|
820 |
+
msgid "Go to:"
|
821 |
+
msgstr "Gehe zu:"
|
822 |
+
|
823 |
+
# @ squirrly-seo
|
824 |
+
#: themes/default/SQ_Post.php:32 themes/default/SQ_Post.php:53
|
825 |
+
msgid "support page"
|
826 |
+
msgstr "Support Page"
|
827 |
+
|
828 |
+
# @ squirrly-seo
|
829 |
+
#: themes/default/SQ_Post.php:37
|
830 |
+
msgid "Thank you! You can send us a happy face tomorow too."
|
831 |
+
msgstr "Danke! Sie können uns auch morgen ein fröhliches Gesicht senden."
|
832 |
+
|
833 |
+
# @ squirrly-seo
|
834 |
+
#: themes/default/SQ_Post.php:43
|
835 |
+
msgid "Support"
|
836 |
+
msgstr "Support"
|
837 |
+
|
838 |
+
# @ squirrly-seo
|
839 |
+
#: themes/default/SQ_Post.php:46
|
840 |
+
msgid "Need Help with Squirrly SEO?"
|
841 |
+
msgstr "Brauchen Sie Hilfe mit Squirrly SEO?"
|
842 |
+
|
843 |
+
# @ squirrly-seo
|
844 |
+
#: themes/default/SQ_Post.php:50
|
845 |
+
msgid "Send Question"
|
846 |
+
msgstr "Senden Sie Ihre Frage"
|
847 |
+
|
848 |
+
# @ squirrly-seo
|
849 |
+
#: themes/default/SQ_Post.php:58
|
850 |
+
msgid "Go to Profile"
|
851 |
+
msgstr "Zum Profil"
|
852 |
+
|
853 |
+
# @ squirrly-seo
|
854 |
+
#: themes/default/SQ_Post.php:58
|
855 |
+
msgid "Profile"
|
856 |
+
msgstr "Profil"
|
languages/squirrly-seo-ro_RO.mo
ADDED
Binary file
|
languages/squirrly-seo-ro_RO.po
ADDED
@@ -0,0 +1,1277 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: squirrly_seo\n"
|
4 |
+
"POT-Creation-Date: 2013-06-27 13:43+0200\n"
|
5 |
+
"PO-Revision-Date: 2013-06-27 13:58+0200\n"
|
6 |
+
"Last-Translator: Squirrly <contact@squirrly.co>\n"
|
7 |
+
"Language-Team: Squirrly UK <contact@squirrly.co>\n"
|
8 |
+
"MIME-Version: 1.0\n"
|
9 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
+
"Content-Transfer-Encoding: 8bit\n"
|
11 |
+
"X-Generator: Poedit 1.5.5\n"
|
12 |
+
"X-Poedit-KeywordsList: __;_e\n"
|
13 |
+
"X-Poedit-Basepath: d:\\pagini_net\\se_lucreaza\\squirrly\\wordpress\\wp-"
|
14 |
+
"content\\plugins\\squirrly-seo\n"
|
15 |
+
"X-Poedit-SearchPath-0: .\n"
|
16 |
+
|
17 |
+
#: squirrly.php:45
|
18 |
+
msgid ""
|
19 |
+
"For Squirrly to work, the PHP version has to be equal or greater then 5.1"
|
20 |
+
msgstr "Versiunea PHP trebuie sa fie mai mare de 5.1"
|
21 |
+
|
22 |
+
#: classes/SQ_Error.php:20
|
23 |
+
msgid ""
|
24 |
+
"Function get_class does not exists! Is required for Squirrly to work "
|
25 |
+
"properly."
|
26 |
+
msgstr ""
|
27 |
+
"Functia get_class nu exista! E necesara pentru a functiona corect pluginul "
|
28 |
+
"Squirrly"
|
29 |
+
|
30 |
+
#: classes/SQ_Error.php:23
|
31 |
+
msgid ""
|
32 |
+
"Function file_exists does not exists! Is required for Squirrly to work "
|
33 |
+
"properly."
|
34 |
+
msgstr ""
|
35 |
+
"Functia file_exists nu exista! E necesara pentru a functiona corect pluginul "
|
36 |
+
"Squirrly"
|
37 |
+
|
38 |
+
#: classes/SQ_Error.php:27
|
39 |
+
msgid "The home directory is not set!"
|
40 |
+
msgstr "Directorul home nu este setat!"
|
41 |
+
|
42 |
+
#: classes/SQ_Error.php:31
|
43 |
+
msgid "The PHP version has to be greater then 4.0"
|
44 |
+
msgstr "Versiunea PHP trebuie sa fie mai mare de 4.0"
|
45 |
+
|
46 |
+
#: classes/SQ_Error.php:69
|
47 |
+
msgid "Turn off warnings!"
|
48 |
+
msgstr "Opreste avertizarile"
|
49 |
+
|
50 |
+
#: classes/SQ_Error.php:70
|
51 |
+
msgid "Notice: "
|
52 |
+
msgstr "Atentie:"
|
53 |
+
|
54 |
+
#: classes/SQ_Error.php:74
|
55 |
+
msgid "Note: "
|
56 |
+
msgstr "Atentie:"
|
57 |
+
|
58 |
+
#: classes/SQ_Tools.php:82 controllers/SQ_Menu.php:52
|
59 |
+
msgid "Settings"
|
60 |
+
msgstr "Setari"
|
61 |
+
|
62 |
+
#: classes/SQ_Tools.php:85 controllers/SQ_Menu.php:35
|
63 |
+
msgid "Getting started"
|
64 |
+
msgstr "Ajutor"
|
65 |
+
|
66 |
+
#: classes/SQ_Tools.php:394
|
67 |
+
msgid "Fix it for me!"
|
68 |
+
msgstr "Repara-l"
|
69 |
+
|
70 |
+
#: classes/SQ_Tools.php:400
|
71 |
+
msgid "Let Squirrly optimize your SEO automatically (recommended)"
|
72 |
+
msgstr "Lasa Squirrly sa optimizeze SEO automat (recomandat)"
|
73 |
+
|
74 |
+
#: classes/SQ_Tools.php:408
|
75 |
+
msgid "You're blocking google from indexing your site!"
|
76 |
+
msgstr "Blochezi accesul la google spre indexarea site-ului"
|
77 |
+
|
78 |
+
#: classes/SQ_Tools.php:414
|
79 |
+
msgid ""
|
80 |
+
"It is highly recommended that you include the %postname% variable in the "
|
81 |
+
"permalink structure. <br />Go to Settings > Permalinks and add /%postname%/ "
|
82 |
+
"in Custom Structure"
|
83 |
+
msgstr ""
|
84 |
+
"E recomandat sa incluzi %postaname% in structura link-ului permanent. <br /"
|
85 |
+
">Mergi la Setari > Legaturi permanente si adauga /%postname%/ in campul "
|
86 |
+
"Structură personalizată"
|
87 |
+
|
88 |
+
#: controllers/SQ_Menu.php:34
|
89 |
+
msgid " getting started"
|
90 |
+
msgstr "ajutor"
|
91 |
+
|
92 |
+
#: controllers/SQ_Menu.php:43
|
93 |
+
msgid " dashboard"
|
94 |
+
msgstr "dashboard"
|
95 |
+
|
96 |
+
#: controllers/SQ_Menu.php:44
|
97 |
+
msgid "Dashboard"
|
98 |
+
msgstr "Dashboard"
|
99 |
+
|
100 |
+
#: controllers/SQ_Menu.php:51
|
101 |
+
msgid " settings"
|
102 |
+
msgstr "setari"
|
103 |
+
|
104 |
+
#: controllers/SQ_Menu.php:58
|
105 |
+
msgid "Make money with "
|
106 |
+
msgstr "Castiga bani cu"
|
107 |
+
|
108 |
+
#: controllers/SQ_Menu.php:59
|
109 |
+
msgid "Make money"
|
110 |
+
msgstr "Castiga Bani"
|
111 |
+
|
112 |
+
#: controllers/SQ_Menu.php:78
|
113 |
+
msgid "Squirrly Article Rank"
|
114 |
+
msgstr "Squirrly article rank"
|
115 |
+
|
116 |
+
#: controllers/SQ_PostsList.php:97
|
117 |
+
msgid "Squirrly"
|
118 |
+
msgstr "Squirrly"
|
119 |
+
|
120 |
+
#: controllers/SQ_PostsList.php:134
|
121 |
+
msgid "Custom description: "
|
122 |
+
msgstr "Descrierea:"
|
123 |
+
|
124 |
+
#: controllers/SQ_PostsList.php:134
|
125 |
+
msgid "Custom title: "
|
126 |
+
msgstr "Titlul"
|
127 |
+
|
128 |
+
#: controllers/SQ_PostsList.php:157
|
129 |
+
msgid "Squirrly article rank"
|
130 |
+
msgstr "Squirrly article rank"
|
131 |
+
|
132 |
+
#: controllers/SQ_PostsList.php:158 core/SQ_Blockseo/SQ_Blockseo.php:21
|
133 |
+
msgid "Update"
|
134 |
+
msgstr "Update"
|
135 |
+
|
136 |
+
#: controllers/SQ_PostsList.php:159
|
137 |
+
msgid "More details"
|
138 |
+
msgstr "Mai mult"
|
139 |
+
|
140 |
+
#: controllers/SQ_PostsList.php:160
|
141 |
+
msgid "Less details"
|
142 |
+
msgstr "Mai putin"
|
143 |
+
|
144 |
+
#: controllers/SQ_PostsList.php:161
|
145 |
+
msgid "Interval: "
|
146 |
+
msgstr "Interval:"
|
147 |
+
|
148 |
+
#: controllers/SQ_PostsList.php:162 models/SQ_PostsList.php:30
|
149 |
+
msgid "Latest"
|
150 |
+
msgstr "Ultima"
|
151 |
+
|
152 |
+
#: controllers/SQ_PostsList.php:163 models/SQ_PostsList.php:31
|
153 |
+
msgid "Last 7 days"
|
154 |
+
msgstr "Ultimele 7 zile"
|
155 |
+
|
156 |
+
#: controllers/SQ_PostsList.php:164 models/SQ_PostsList.php:32
|
157 |
+
msgid "Last 30 days"
|
158 |
+
msgstr "Ultimele 30 zile"
|
159 |
+
|
160 |
+
#: controllers/SQ_PostsList.php:166 core/SQ_Blockrank/SQ_Blockrank.php:19
|
161 |
+
msgid "See it in 'All Posts'"
|
162 |
+
msgstr "Arata-l in 'Lista Articole'"
|
163 |
+
|
164 |
+
#: controllers/SQ_PostsList.php:167
|
165 |
+
msgid "progress"
|
166 |
+
msgstr "progres"
|
167 |
+
|
168 |
+
#: controllers/SQ_PostsList.php:168
|
169 |
+
msgid "optimized"
|
170 |
+
msgstr "optimizat"
|
171 |
+
|
172 |
+
#: controllers/SQ_PostsList.php:169
|
173 |
+
msgid "See rank"
|
174 |
+
msgstr "Vezi rang"
|
175 |
+
|
176 |
+
#: controllers/SQ_PostsList.php:170
|
177 |
+
msgid "Hide rank"
|
178 |
+
msgstr "Ascunde Rang"
|
179 |
+
|
180 |
+
#: controllers/SQ_PostsList.php:171
|
181 |
+
msgid "Optimize"
|
182 |
+
msgstr "Optimizare"
|
183 |
+
|
184 |
+
#: controllers/SQ_PostsList.php:173
|
185 |
+
msgid "Not Public"
|
186 |
+
msgstr "Ciorna"
|
187 |
+
|
188 |
+
#: controllers/SQ_PostsList.php:259 core/SQ_Blockrank/SQ_Blockrank.php:31
|
189 |
+
msgid "Publish the article to start Squirrly Article Rank"
|
190 |
+
msgstr "Publica articolul pentru a pornit Squirrly Rank"
|
191 |
+
|
192 |
+
#: core/SQ_BlockAffiliate/SQ_BlockAffiliate.php:33
|
193 |
+
#, php-format
|
194 |
+
msgid "Error: %s"
|
195 |
+
msgstr "Eroare: %s"
|
196 |
+
|
197 |
+
#: core/SQ_BlockAffiliate/SQ_BlockAffiliate.php:36
|
198 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:85
|
199 |
+
msgid "An error occured. Mabe a network error :("
|
200 |
+
msgstr "A aparut o eroare. Probabil o eroare de retea :("
|
201 |
+
|
202 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:80
|
203 |
+
#, php-format
|
204 |
+
msgid ""
|
205 |
+
"We found your email, so it means you already have a Squirrly.co account. "
|
206 |
+
"Please login with your Squirrly Email. If you forgot your password click "
|
207 |
+
"%shere%s"
|
208 |
+
msgstr ""
|
209 |
+
"Am gasit emailul tau, inseamna ca te-ai inregistrat deja la Squirrly. "
|
210 |
+
"Conecteaza-te cu contul tau de Squirrly. Daca ai uitat parola atunci apasa "
|
211 |
+
"%saici%s"
|
212 |
+
|
213 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:88
|
214 |
+
#, php-format
|
215 |
+
msgid ""
|
216 |
+
"Could not send your informations to squirrly. Please register %smanually%s."
|
217 |
+
msgstr ""
|
218 |
+
"Nu s-a putut trimite informatia la Squirrly. Inregistreaza-te %smanual%s."
|
219 |
+
|
220 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:129
|
221 |
+
msgid "Wrong email or password!"
|
222 |
+
msgstr "Email sau Parola gresita!"
|
223 |
+
|
224 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:132
|
225 |
+
msgid "You can use this account only for the URL you registered first!"
|
226 |
+
msgstr "Poti folosi acest cont doar pentru URL-ul inregistrat la inceput!"
|
227 |
+
|
228 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:137
|
229 |
+
msgid "An error occured."
|
230 |
+
msgstr "A aparut o eroare."
|
231 |
+
|
232 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:139
|
233 |
+
msgid "Both fields are required."
|
234 |
+
msgstr "Ambele campuri sunt obligatorii!"
|
235 |
+
|
236 |
+
#: core/SQ_Blockresearch/SQ_Blockresearch.php:12
|
237 |
+
msgid "Recent discussions:"
|
238 |
+
msgstr "Discutii recente:"
|
239 |
+
|
240 |
+
#: core/SQ_Blockresearch/SQ_Blockresearch.php:12
|
241 |
+
msgid "Exact search:"
|
242 |
+
msgstr "Cautari exacte:"
|
243 |
+
|
244 |
+
#: core/SQ_Blockresearch/SQ_Blockresearch.php:12
|
245 |
+
msgid "Competition:"
|
246 |
+
msgstr "Competitia:"
|
247 |
+
|
248 |
+
#: core/SQ_Blockresearch/SQ_Blockresearch.php:12
|
249 |
+
msgid "Trend:"
|
250 |
+
msgstr "Trend:"
|
251 |
+
|
252 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
253 |
+
msgid "date"
|
254 |
+
msgstr "data"
|
255 |
+
|
256 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
257 |
+
msgid "Read it!"
|
258 |
+
msgstr "Citeste!"
|
259 |
+
|
260 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
261 |
+
msgid "Insert it!"
|
262 |
+
msgstr "Adauga!"
|
263 |
+
|
264 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
265 |
+
msgid "Reference"
|
266 |
+
msgstr "Referinta"
|
267 |
+
|
268 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
269 |
+
msgid "Insert as box"
|
270 |
+
msgstr "Adauga"
|
271 |
+
|
272 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
273 |
+
msgid "Not relevant?"
|
274 |
+
msgstr "Nu e ce doresti?"
|
275 |
+
|
276 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
277 |
+
msgid "Insert in your article"
|
278 |
+
msgstr "Adauga paragraf in articol"
|
279 |
+
|
280 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
281 |
+
msgid "For Squirrly to work, you have to have tinymce editor installed!"
|
282 |
+
msgstr ""
|
283 |
+
"Pentru ca Squirrly sa functioneze, trebuie sa ai editorul TinyMCE instalat"
|
284 |
+
|
285 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
286 |
+
msgid ":( I lost my squirrel. Please reload the page."
|
287 |
+
msgstr ":( Am pierdut veverita. Te rog sa dai refresh la pagina."
|
288 |
+
|
289 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
290 |
+
msgid "No results found!"
|
291 |
+
msgstr "Nu s-a gasit nimic ..."
|
292 |
+
|
293 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
294 |
+
msgid "Switch to Visual editor!"
|
295 |
+
msgstr "Schimba in Editor Vizual!"
|
296 |
+
|
297 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
298 |
+
msgid "Use more words in one keyword"
|
299 |
+
msgstr "Am mai multe cuvinte"
|
300 |
+
|
301 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
302 |
+
msgid "Takes too long to check this keyword ..."
|
303 |
+
msgstr "Ia prea mult timp sa verifice cuvantul ..."
|
304 |
+
|
305 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
306 |
+
msgid "Do a research!"
|
307 |
+
msgstr "Mai multe detalii!"
|
308 |
+
|
309 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
310 |
+
msgid "Do more research!"
|
311 |
+
msgstr "Mai multe detalii!"
|
312 |
+
|
313 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
314 |
+
#, php-format
|
315 |
+
msgid "[ ATTRIBUTE: Please check: %s to find out how to attribute this image ]"
|
316 |
+
msgstr ""
|
317 |
+
"[ ATTRIBUTE: Verificati: %s pentru a vedea conditile de atribuire a "
|
318 |
+
"imaginii ]"
|
319 |
+
|
320 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
321 |
+
msgid "Has creative commons attributes"
|
322 |
+
msgstr "Are conditii de atribuire"
|
323 |
+
|
324 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
325 |
+
msgid "No known copyright restrictions"
|
326 |
+
msgstr "Nu sunt restrictii de copyright cunoscute"
|
327 |
+
|
328 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:11
|
329 |
+
msgid "Save changes"
|
330 |
+
msgstr "Salveaza"
|
331 |
+
|
332 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:12
|
333 |
+
msgid "Cancel"
|
334 |
+
msgstr "Renunta"
|
335 |
+
|
336 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:13
|
337 |
+
msgid "Reset"
|
338 |
+
msgstr "Resetare"
|
339 |
+
|
340 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:15
|
341 |
+
msgid "Customize Title"
|
342 |
+
msgstr "Modificare META"
|
343 |
+
|
344 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:16
|
345 |
+
msgid "manage keywords"
|
346 |
+
msgstr "administrare cuvinte cheie"
|
347 |
+
|
348 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:17 themes/default/SQ_Menu.php:327
|
349 |
+
msgid "Too short"
|
350 |
+
msgstr "Prea scurt"
|
351 |
+
|
352 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:18 themes/default/SQ_Menu.php:328
|
353 |
+
msgid "Too long"
|
354 |
+
msgstr "Prea lung"
|
355 |
+
|
356 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:20 themes/default/SQ_Menu.php:214
|
357 |
+
msgid "Squirrly Snippet"
|
358 |
+
msgstr "Snipet Squirrly"
|
359 |
+
|
360 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:22
|
361 |
+
msgid ""
|
362 |
+
"Click the Update button (to the right) to see the snippet from your website."
|
363 |
+
msgstr "Click pe butonul Update pentru a vedea snipetul site-ului"
|
364 |
+
|
365 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:23
|
366 |
+
msgid "Enter a title above for the snippet to get data."
|
367 |
+
msgstr "Adauga un titlu pentru a putea vedea datele in snipet"
|
368 |
+
|
369 |
+
#: core/SQ_BlockSupport/SQ_BlockSupport.php:21
|
370 |
+
msgid "Plugin Feedback"
|
371 |
+
msgstr "Feedback Squirrly"
|
372 |
+
|
373 |
+
#: core/SQ_BlockSupport/SQ_BlockSupport.php:57
|
374 |
+
msgid "Thank you for your feedback"
|
375 |
+
msgstr "Multumesc pentru feedback"
|
376 |
+
|
377 |
+
#: core/SQ_BlockSupport/SQ_BlockSupport.php:59
|
378 |
+
#: core/SQ_BlockSupport/SQ_BlockSupport.php:94
|
379 |
+
msgid "Could not send the email..."
|
380 |
+
msgstr "Nu s-a putut trimite email ..."
|
381 |
+
|
382 |
+
#: core/SQ_BlockSupport/SQ_BlockSupport.php:62
|
383 |
+
#: core/SQ_BlockSupport/SQ_BlockSupport.php:97
|
384 |
+
msgid "No message."
|
385 |
+
msgstr "Nici un mesaj."
|
386 |
+
|
387 |
+
#: core/SQ_BlockSupport/SQ_BlockSupport.php:81
|
388 |
+
msgid "Plugin Support"
|
389 |
+
msgstr "Suport la plugin"
|
390 |
+
|
391 |
+
#: core/SQ_BlockSupport/SQ_BlockSupport.php:92
|
392 |
+
msgid "Message sent..."
|
393 |
+
msgstr "Mesajul a fost trimis..."
|
394 |
+
|
395 |
+
#: core/SQ_Loading/SQ_Loading.php:23
|
396 |
+
msgid ""
|
397 |
+
"For Squirrly to work properly you have to use a higher version of Internet "
|
398 |
+
"Explorer. <br /> We recommend you to use Chrome or Mozilla."
|
399 |
+
msgstr ""
|
400 |
+
"Pentru a functiona Squirrly, trebui sa folosesti o versiune mai noua de "
|
401 |
+
"Internet explorer. <br /> Recomandam sa folosesti Chrome sau Mozilla."
|
402 |
+
|
403 |
+
#: core/SQ_Loading/SQ_Loading.php:30
|
404 |
+
msgid ""
|
405 |
+
"You haven`t used Squirrly SEO to optimize your article. Do you want to "
|
406 |
+
"optimize for a keyword before publishing?"
|
407 |
+
msgstr ""
|
408 |
+
"Nu ai folosit Squirrly SEO pentru a optimiza articolul. Vrei sa il "
|
409 |
+
"optimizezi inainte de publicare?"
|
410 |
+
|
411 |
+
#: models/SQ_Menu.php:139
|
412 |
+
msgid "The code for Google Webmaster Tool is incorrect."
|
413 |
+
msgstr "Codul google pentru Webmaster Tool este gresit."
|
414 |
+
|
415 |
+
#: models/SQ_Menu.php:166
|
416 |
+
msgid "The code for Google Analytics is incorrect."
|
417 |
+
msgstr "Codul Google Analytics este incorect."
|
418 |
+
|
419 |
+
#: models/SQ_Menu.php:194
|
420 |
+
msgid "The code for Facebook is incorrect."
|
421 |
+
msgstr "Codul Facbook este gresit."
|
422 |
+
|
423 |
+
#: models/SQ_Menu.php:219
|
424 |
+
msgid "The code for Bing is incorrect."
|
425 |
+
msgstr "Codul Bing este gresit."
|
426 |
+
|
427 |
+
#: models/SQ_Menu.php:252
|
428 |
+
msgid "File type error: Only JPEG, JPG, GIF or PNG files are allowed."
|
429 |
+
msgstr "Eroare fisier: Doar fisierele JPEG,JPG,GIF sau PNG sunt permise"
|
430 |
+
|
431 |
+
#: models/SQ_Menu.php:265
|
432 |
+
msgid "GD error: The GD library must be installed on your server."
|
433 |
+
msgstr ""
|
434 |
+
"Eroare librarie GD: Trebuie sa instalezi libraria GD pe server pentru a "
|
435 |
+
"putea adauga imaginea"
|
436 |
+
|
437 |
+
#: models/SQ_Menu.php:272
|
438 |
+
msgid "Delete error: Could not delete the old favicon."
|
439 |
+
msgstr "Eroare Stergere: Nu se poate sterge icoana veche"
|
440 |
+
|
441 |
+
#: models/SQ_Menu.php:279
|
442 |
+
msgid "Upload error: Could not upload the favicon."
|
443 |
+
msgstr "Eroare Upload: Nu se poate urca pe server imaginea"
|
444 |
+
|
445 |
+
#: models/SQ_Menu.php:285
|
446 |
+
msgid "Permission error: Could not change the favicon permissions."
|
447 |
+
msgstr "Eroare Fisier: Nu se poate schimba permisiunea fisierului"
|
448 |
+
|
449 |
+
#: models/SQ_Menu.php:311
|
450 |
+
msgid ""
|
451 |
+
"ICO Error: Could not create the ICO from file. Try with another file type."
|
452 |
+
msgstr "Eroare ICO: Nu se poate transforma imaginea in fisier ICO"
|
453 |
+
|
454 |
+
#: models/SQ_Menu.php:314
|
455 |
+
msgid "The favicon has been updated."
|
456 |
+
msgstr "Icoana a fost adaugata pe server"
|
457 |
+
|
458 |
+
#: models/SQ_Post.php:71
|
459 |
+
msgid "Squirrly could not find any results for: "
|
460 |
+
msgstr "Squirrly nu a putut gasi rezultate pentru: "
|
461 |
+
|
462 |
+
#: models/SQ_PostsList.php:29
|
463 |
+
msgid "This article"
|
464 |
+
msgstr "Acest articol"
|
465 |
+
|
466 |
+
#: models/SQ_PostsList.php:29
|
467 |
+
msgid "All your articles"
|
468 |
+
msgstr "Articolele mele"
|
469 |
+
|
470 |
+
#: models/SQ_PostsList.php:69
|
471 |
+
msgid "Optimize this article to start Squirrly Article Rank"
|
472 |
+
msgstr "Optimizeaza articolul pentru a pornit Squirrly Rank"
|
473 |
+
|
474 |
+
#: models/SQ_PostsList.php:111
|
475 |
+
msgid "There are no information for this post yet."
|
476 |
+
msgstr "Nu sunt suficiente informatii pentru acest post"
|
477 |
+
|
478 |
+
#: models/SQ_PostsList.php:129 models/SQ_PostsList.php:247
|
479 |
+
msgid "Traffic to article"
|
480 |
+
msgstr "Trafic la articol"
|
481 |
+
|
482 |
+
#: models/SQ_PostsList.php:130
|
483 |
+
msgid "Social impact"
|
484 |
+
msgstr "Impact Social Media"
|
485 |
+
|
486 |
+
#: models/SQ_PostsList.php:131
|
487 |
+
msgid "Links to article"
|
488 |
+
msgstr "Link-uri spre articol"
|
489 |
+
|
490 |
+
#: models/SQ_PostsList.php:193
|
491 |
+
msgid "Google Indexed"
|
492 |
+
msgstr "Indexare Google"
|
493 |
+
|
494 |
+
#: models/SQ_PostsList.php:198
|
495 |
+
msgid "pos"
|
496 |
+
msgstr "pos"
|
497 |
+
|
498 |
+
#: models/SQ_PostsList.php:198 themes/default/SQ_Menu.php:21
|
499 |
+
#: themes/default/SQ_Menu.php:40 themes/default/SQ_Menu.php:57
|
500 |
+
#: themes/default/SQ_Menu.php:74 themes/default/SQ_Menu.php:91
|
501 |
+
#: themes/default/SQ_Menu.php:108 themes/default/SQ_Menu.php:125
|
502 |
+
#: themes/default/SQ_Menu.php:152 themes/default/SQ_Menu.php:169
|
503 |
+
#: themes/default/SQ_Menu.php:237 themes/default/SQ_Menu.php:248
|
504 |
+
#: themes/default/SQ_Menu.php:259
|
505 |
+
msgid "Yes"
|
506 |
+
msgstr "Da"
|
507 |
+
|
508 |
+
#: models/SQ_PostsList.php:198 themes/default/SQ_Menu.php:23
|
509 |
+
#: themes/default/SQ_Menu.php:42 themes/default/SQ_Menu.php:59
|
510 |
+
#: themes/default/SQ_Menu.php:76 themes/default/SQ_Menu.php:93
|
511 |
+
#: themes/default/SQ_Menu.php:110 themes/default/SQ_Menu.php:127
|
512 |
+
#: themes/default/SQ_Menu.php:154 themes/default/SQ_Menu.php:171
|
513 |
+
#: themes/default/SQ_Menu.php:239 themes/default/SQ_Menu.php:250
|
514 |
+
#: themes/default/SQ_Menu.php:261
|
515 |
+
msgid "No"
|
516 |
+
msgstr "Nu"
|
517 |
+
|
518 |
+
#: models/SQ_PostsList.php:198
|
519 |
+
msgid "for:"
|
520 |
+
msgstr "pentru:"
|
521 |
+
|
522 |
+
#: models/SQ_PostsList.php:198
|
523 |
+
msgid "(searched with the url)"
|
524 |
+
msgstr "(cautat cu url)"
|
525 |
+
|
526 |
+
#: models/SQ_PostsList.php:218
|
527 |
+
msgid "This article|Average"
|
528 |
+
msgstr "Acest articole|Media"
|
529 |
+
|
530 |
+
#: models/SQ_PostsList.php:254
|
531 |
+
msgid "Visits"
|
532 |
+
msgstr "Vizite"
|
533 |
+
|
534 |
+
#: models/SQ_PostsList.php:257
|
535 |
+
msgid "Unique"
|
536 |
+
msgstr "Unici"
|
537 |
+
|
538 |
+
#: models/SQ_PostsList.php:369
|
539 |
+
msgid "Google result for: "
|
540 |
+
msgstr "Rezultate Google pentru:"
|
541 |
+
|
542 |
+
#: models/SQ_PostsList.php:402
|
543 |
+
msgid "Change"
|
544 |
+
msgstr "Modifica"
|
545 |
+
|
546 |
+
#: models/SQ_PostsList.php:402
|
547 |
+
msgid "since"
|
548 |
+
msgstr "de"
|
549 |
+
|
550 |
+
#: models/SQ_PostsList.php:403 models/SQ_PostsList.php:478
|
551 |
+
msgid "Current position"
|
552 |
+
msgstr "Pozitia curenta"
|
553 |
+
|
554 |
+
#: models/SQ_PostsList.php:437
|
555 |
+
msgid "Recommended by Squirrly"
|
556 |
+
msgstr "Recomandat de Squirrly"
|
557 |
+
|
558 |
+
#: models/SQ_PostsList.php:477
|
559 |
+
msgid "Keyword"
|
560 |
+
msgstr "Cuvant cheie:"
|
561 |
+
|
562 |
+
#: themes/default/SQ_BlockAffiliate.php:4
|
563 |
+
#: themes/default/SQ_BlockAffiliate.php:14
|
564 |
+
msgid "Join Squirrly today!"
|
565 |
+
msgstr "Alatura-te lui Squirrly!"
|
566 |
+
|
567 |
+
#: themes/default/SQ_BlockAffiliate.php:21
|
568 |
+
msgid ""
|
569 |
+
"To redirect users to your site, just change \"squirrly.co\" with your domain."
|
570 |
+
msgstr ""
|
571 |
+
"Pentru a redirecta userii spre site-ul tau, schimba doar \"squirrly.co\" cu "
|
572 |
+
"domeniul tau"
|
573 |
+
|
574 |
+
#: themes/default/SQ_BlockAffiliate.php:23
|
575 |
+
msgid "Generate affiliate link"
|
576 |
+
msgstr "Generare link de afiliat"
|
577 |
+
|
578 |
+
#: themes/default/SQ_BlockAffiliate.php:28
|
579 |
+
msgid "Affiliate Benefits"
|
580 |
+
msgstr "Beneficii afiliere"
|
581 |
+
|
582 |
+
#: themes/default/SQ_BlockAffiliate.php:33
|
583 |
+
#, php-format
|
584 |
+
msgid "- Recurring 45%s commission"
|
585 |
+
msgstr "- Comision 45%s din abonament"
|
586 |
+
|
587 |
+
#: themes/default/SQ_BlockAffiliate.php:38
|
588 |
+
msgid "- No cost"
|
589 |
+
msgstr "- Fara costuri"
|
590 |
+
|
591 |
+
#: themes/default/SQ_BlockAffiliate.php:43
|
592 |
+
msgid "- Monthly payments in your Paypal account"
|
593 |
+
msgstr "- Platy lunare in contul tau de Paypal"
|
594 |
+
|
595 |
+
#: themes/default/SQ_BlockAffiliate.php:50
|
596 |
+
msgid ""
|
597 |
+
"Your affiliate account is set and ready to go. Above you have the affiliate "
|
598 |
+
"link. "
|
599 |
+
msgstr ""
|
600 |
+
"Linkul tau de afiliere e gata. Mai sus aveti link-ul care il puteti folosi"
|
601 |
+
|
602 |
+
#: themes/default/SQ_BlockAffiliate.php:52
|
603 |
+
#, php-format
|
604 |
+
msgid "Check your affiliate page: %sAffiliate page%s"
|
605 |
+
msgstr "Verifica pagina ta de afiliat: %sAffiliate page%s"
|
606 |
+
|
607 |
+
#: themes/default/SQ_BlockAffiliate.php:54
|
608 |
+
#, php-format
|
609 |
+
msgid "%sTerms of Use for our Affiliate Program%s"
|
610 |
+
msgstr "%sTermeni si conditii de afiliere%s"
|
611 |
+
|
612 |
+
#: themes/default/SQ_BlockAffiliate.php:58
|
613 |
+
msgid ""
|
614 |
+
"After you connect to Squirrly you can begin to use your free Squirrly "
|
615 |
+
"affiliate link immediately!"
|
616 |
+
msgstr ""
|
617 |
+
"Dupa ce te conectezi la Squirrly vei putea incepe sa folosesti link-ul tau "
|
618 |
+
"de afiliat"
|
619 |
+
|
620 |
+
#: themes/default/SQ_BlockAffiliate.php:66
|
621 |
+
msgid "Squirrly banners you can use"
|
622 |
+
msgstr "Bannere Squirrly"
|
623 |
+
|
624 |
+
#: themes/default/SQ_BlockAffiliate.php:87 themes/default/SQ_BlockHelp.php:20
|
625 |
+
#: themes/default/SQ_Menu.php:4
|
626 |
+
msgid "See Squirrly in action"
|
627 |
+
msgstr "Vezi Squirrly in actiune"
|
628 |
+
|
629 |
+
#: themes/default/SQ_BlockAffiliate.php:88 themes/default/SQ_BlockHelp.php:21
|
630 |
+
msgid "See dashboard"
|
631 |
+
msgstr "Vezi Dashboard"
|
632 |
+
|
633 |
+
#: themes/default/SQ_BlockAffiliate.php:89
|
634 |
+
#: themes/default/SQ_BlockDashboard.php:54 themes/default/SQ_BlockHelp.php:22
|
635 |
+
msgid "Go to settings"
|
636 |
+
msgstr "Mergi la setari"
|
637 |
+
|
638 |
+
#: themes/default/SQ_BlockDashboard.php:5
|
639 |
+
msgid "Squirrly dashboard"
|
640 |
+
msgstr "Dashboard Squirrly"
|
641 |
+
|
642 |
+
#: themes/default/SQ_BlockDashboard.php:8
|
643 |
+
msgid "User level"
|
644 |
+
msgstr "Nivel Utilizator"
|
645 |
+
|
646 |
+
#: themes/default/SQ_BlockDashboard.php:12
|
647 |
+
msgid "Beginner"
|
648 |
+
msgstr "Incepator"
|
649 |
+
|
650 |
+
#: themes/default/SQ_BlockDashboard.php:14
|
651 |
+
msgid "Advanced"
|
652 |
+
msgstr "Avansat"
|
653 |
+
|
654 |
+
#: themes/default/SQ_BlockDashboard.php:18
|
655 |
+
msgid "Select Advanced only if you have SEO knowledge."
|
656 |
+
msgstr "Alege Avansat doar daca ai cunostinte SEO"
|
657 |
+
|
658 |
+
#: themes/default/SQ_BlockDashboard.php:21
|
659 |
+
msgid "What does the Beginner option bring you:"
|
660 |
+
msgstr "Ce iti aduce modul Incepator:"
|
661 |
+
|
662 |
+
#: themes/default/SQ_BlockDashboard.php:23
|
663 |
+
msgid ""
|
664 |
+
"Squirrly <strong>finds the optimum Title and Description</strong> for each "
|
665 |
+
"page of your blog but you can still customize the home page Title and "
|
666 |
+
"Description if you want."
|
667 |
+
msgstr ""
|
668 |
+
"Squirrly <strong>gaseste Titlul si Meta Descrierea optima</strong> pentru "
|
669 |
+
"fiecare pagina din blog dar poti sa modifici Titlul si Descrierea pentru "
|
670 |
+
"prima pagina daca doresti."
|
671 |
+
|
672 |
+
#: themes/default/SQ_BlockDashboard.php:24
|
673 |
+
msgid ""
|
674 |
+
"Squirrly <strong>manages the sitemap</strong> for your blog and pings it to "
|
675 |
+
"Google and Bing every time you add a new article. This ensures that your "
|
676 |
+
"articles get indexed much faster."
|
677 |
+
msgstr ""
|
678 |
+
"Squirrly <strong>intretine sitemap-ul</strong> din blog si il trimite spre "
|
679 |
+
"Google si Bing de fiecare data cand adaugi un nou articol. Asta asigura ca "
|
680 |
+
"articolele sunt indexate mai rapid."
|
681 |
+
|
682 |
+
#: themes/default/SQ_BlockDashboard.php:25
|
683 |
+
msgid ""
|
684 |
+
"Squirrly <strong>adds the Facebook required meta</strong>, so that when your "
|
685 |
+
"readers share your page or article, it looks really good."
|
686 |
+
msgstr ""
|
687 |
+
"Squirrly <strong>adauga meta pentru Facebook</strong> ca atunci cand "
|
688 |
+
"cititorii dau Share la articol sa apara informatii relevante in Facebook."
|
689 |
+
|
690 |
+
#: themes/default/SQ_BlockDashboard.php:26
|
691 |
+
msgid ""
|
692 |
+
"You can connect your site with your <strong>Google Plus</strong> and "
|
693 |
+
"<strong>Google Analytics</strong> accounts."
|
694 |
+
msgstr ""
|
695 |
+
"Iti poti conecta contul cu <strong>Google Plus</strong> si <strong>Google "
|
696 |
+
"Analytics</strong>."
|
697 |
+
|
698 |
+
#: themes/default/SQ_BlockDashboard.php:27
|
699 |
+
msgid ""
|
700 |
+
"You can add the site icon (also known as favicon) and Squirrly will set it "
|
701 |
+
"up to look good for <strong>Apple devices</strong>."
|
702 |
+
msgstr ""
|
703 |
+
"Poti adauga icoana in site (favicon) si Squirrly va seta meta pentru a se "
|
704 |
+
"vedea pe dispozitivele Apple mobile."
|
705 |
+
|
706 |
+
#: themes/default/SQ_BlockDashboard.php:32
|
707 |
+
msgid "What does the Advanced option bring you:"
|
708 |
+
msgstr "Ce iti aduce modul Avansat:"
|
709 |
+
|
710 |
+
#: themes/default/SQ_BlockDashboard.php:34
|
711 |
+
msgid "More <strong>SEO options</strong> are available on the Settings page."
|
712 |
+
msgstr "Mai multe <strong>optiuni SEO</strong> disponibile in pagina Settings."
|
713 |
+
|
714 |
+
#: themes/default/SQ_BlockDashboard.php:35
|
715 |
+
msgid ""
|
716 |
+
"You can connect your site with <strong>Google Webmaster Tools</strong>, "
|
717 |
+
"<strong>Bing Webmaster Tools</strong> and <strong>Facebook Insights</strong>."
|
718 |
+
msgstr ""
|
719 |
+
"Poti conecta site-ul cu <strong>Google Webmaster Tools</strong>, "
|
720 |
+
"<strong>Bing Webmaster Tools</strong> si <strong>Facebook Insights</strong>"
|
721 |
+
|
722 |
+
#: themes/default/SQ_BlockDashboard.php:36
|
723 |
+
msgid ""
|
724 |
+
"You can see the <strong>Snippet</strong> when you edit your Post or Page."
|
725 |
+
msgstr ""
|
726 |
+
"Poti vedea <strong>Snippet-ul</strong> cand editezi o pagina sau un articol."
|
727 |
+
|
728 |
+
#: themes/default/SQ_BlockDashboard.php:37
|
729 |
+
msgid ""
|
730 |
+
"You can <strong>customize the Title and Description</strong> of each Post/"
|
731 |
+
"Page from within the snippet."
|
732 |
+
msgstr ""
|
733 |
+
"Poti <strong>modifica Titlul si Meta Descrierea</strong> in fiecare Pagina/"
|
734 |
+
"Post din interiorul snippet-ului."
|
735 |
+
|
736 |
+
#: themes/default/SQ_BlockHelp.php:4
|
737 |
+
msgid ""
|
738 |
+
"With Squirrly SEO, your Wordpress will get Excellent SEO on each article you "
|
739 |
+
"write."
|
740 |
+
msgstr ""
|
741 |
+
"Cu Squirrly SEO, articolele tale vor avea un SEO excelent la fiecare articol "
|
742 |
+
"scris."
|
743 |
+
|
744 |
+
#: themes/default/SQ_BlockHelp.php:6
|
745 |
+
msgid "SEO Software"
|
746 |
+
msgstr "Software SEO"
|
747 |
+
|
748 |
+
#: themes/default/SQ_BlockHelp.php:6
|
749 |
+
msgid ""
|
750 |
+
"delivered as a plugin for Wordpress. <br /><br />We connect your wordpress "
|
751 |
+
"with Squirrly, so that we can find the best SEO opportunities, give you "
|
752 |
+
"reports and analyse your competitors."
|
753 |
+
msgstr ""
|
754 |
+
"livrat ca un plugin de Wordpress. <br /><br />Conectam wordpress cu "
|
755 |
+
"Squirrly pentru a gasi solutiile SEO cele mai bune, pentru a va oferi "
|
756 |
+
"rapoarte si pentru a analiza competitia."
|
757 |
+
|
758 |
+
#: themes/default/SQ_BlockHelp.php:19
|
759 |
+
msgid "Don't show this page"
|
760 |
+
msgstr "u afisa aceasta pagina"
|
761 |
+
|
762 |
+
#: themes/default/SQ_Blocklogin.php:2
|
763 |
+
msgid "Squirrly.co Login"
|
764 |
+
msgstr "Conectare la Squirrly"
|
765 |
+
|
766 |
+
#: themes/default/SQ_Blocklogin.php:9
|
767 |
+
msgid "Email:"
|
768 |
+
msgstr "Email:"
|
769 |
+
|
770 |
+
#: themes/default/SQ_Blocklogin.php:10
|
771 |
+
msgid "Password:"
|
772 |
+
msgstr "Parola:"
|
773 |
+
|
774 |
+
#: themes/default/SQ_Blocklogin.php:11
|
775 |
+
msgid "Login"
|
776 |
+
msgstr "Logare"
|
777 |
+
|
778 |
+
#: themes/default/SQ_Blocklogin.php:12
|
779 |
+
msgid "Register"
|
780 |
+
msgstr "Cont nou"
|
781 |
+
|
782 |
+
#: themes/default/SQ_Blocklogin.php:12
|
783 |
+
msgid "Register to Squirrly.co"
|
784 |
+
msgstr "Inregistreaza-te la Squirrly.co"
|
785 |
+
|
786 |
+
#: themes/default/SQ_Blocklogin.php:13
|
787 |
+
msgid "Lost password?"
|
788 |
+
msgstr "Ai uitat parola?"
|
789 |
+
|
790 |
+
#: themes/default/SQ_Blocklogin.php:13
|
791 |
+
msgid "Lost password"
|
792 |
+
msgstr "Am uitat parola"
|
793 |
+
|
794 |
+
#: themes/default/SQ_Blocklogin.php:17
|
795 |
+
msgid "Enter your email"
|
796 |
+
msgstr "Adauga adresa email"
|
797 |
+
|
798 |
+
#: themes/default/SQ_Blocklogin.php:18
|
799 |
+
msgid "Your E-mail:"
|
800 |
+
msgstr "Emailul tau:"
|
801 |
+
|
802 |
+
#: themes/default/SQ_Blocklogin.php:19
|
803 |
+
msgid "Sign Up"
|
804 |
+
msgstr "Sign Up"
|
805 |
+
|
806 |
+
#: themes/default/SQ_Blocklogin.php:20
|
807 |
+
msgid "I already have an account"
|
808 |
+
msgstr "Am deja un cont"
|
809 |
+
|
810 |
+
#: themes/default/SQ_Blocklogin.php:21
|
811 |
+
msgid "This email connects you to Squirrly.co"
|
812 |
+
msgstr "Acest email te conecteaza la Squirrly"
|
813 |
+
|
814 |
+
#: themes/default/SQ_Blocklogin.php:30
|
815 |
+
msgid "The email address is invalid!"
|
816 |
+
msgstr "Adresa de email este invalida!"
|
817 |
+
|
818 |
+
#: themes/default/SQ_Blocklogin.php:31
|
819 |
+
msgid "Click on Sign Up button and try again ..."
|
820 |
+
msgstr "Apasa butonul Sign Up pentru a incerca din nou ..."
|
821 |
+
|
822 |
+
#: themes/default/SQ_Blocklogin.php:32
|
823 |
+
msgid "An error occured while logging in!"
|
824 |
+
msgstr "A aparut o eroare la logare."
|
825 |
+
|
826 |
+
#: themes/default/SQ_Blocklogin.php:33
|
827 |
+
msgid "Connecting ..."
|
828 |
+
msgstr "Conectare ..."
|
829 |
+
|
830 |
+
#: themes/default/SQ_Blocklogin.php:40
|
831 |
+
msgid "Congratulations! Now write a new article with:"
|
832 |
+
msgstr "Felicitari! Acum scrie un nou articol cu:"
|
833 |
+
|
834 |
+
#: themes/default/SQ_Blocklogin.php:43
|
835 |
+
msgid ""
|
836 |
+
"<strong>Keyword Research and Analysis</strong>: find the keywords that are "
|
837 |
+
"easier to rank for."
|
838 |
+
msgstr ""
|
839 |
+
"<strong>Keyword Research and Analysis</strong>: iti gaseste cuvintele cheie "
|
840 |
+
"pe care sa mergi."
|
841 |
+
|
842 |
+
#: themes/default/SQ_Blocklogin.php:44
|
843 |
+
msgid ""
|
844 |
+
"<strong>SEO Live Assistant</strong>: Your Wordpress gives you SEO adivce as "
|
845 |
+
"you type your article."
|
846 |
+
msgstr ""
|
847 |
+
"<strong>SEO Live Assistant</strong>: Wordpress iti va da instructiuni SEO in "
|
848 |
+
"timp ce scrii articolul."
|
849 |
+
|
850 |
+
#: themes/default/SQ_Blocklogin.php:45
|
851 |
+
msgid ""
|
852 |
+
"<strong>Inspiration box</strong>: get images you can use for free, tweets "
|
853 |
+
"you can quote and get up to date with latest news about your subject."
|
854 |
+
msgstr ""
|
855 |
+
"<strong>Inspiration box</strong>: iti preia imagini gratuite, tweet-uri pe "
|
856 |
+
"care le poti adauga rapid in articol si ultimele noutati de pe internet "
|
857 |
+
"legate de cuvantul cheie."
|
858 |
+
|
859 |
+
#: themes/default/SQ_Blocklogin.php:46
|
860 |
+
msgid ""
|
861 |
+
"<strong>Article Rank</strong>: Measure and Monitor the impact of SEO and "
|
862 |
+
"Social Signals for each of your articles."
|
863 |
+
msgstr ""
|
864 |
+
"<strong>Article Rank</strong>: Masoara si Monitorizeaza impactul SEO si "
|
865 |
+
"Social pe fiecare articol/pagina."
|
866 |
+
|
867 |
+
#: themes/default/SQ_Blockresearch.php:2
|
868 |
+
msgid "Squirrly Keyword Research"
|
869 |
+
msgstr " Cercetare cuvinte cheie"
|
870 |
+
|
871 |
+
#: themes/default/SQ_Blockresearch.php:3
|
872 |
+
msgid "Clear"
|
873 |
+
msgstr "Alta cautare"
|
874 |
+
|
875 |
+
#: themes/default/SQ_Blockresearch.php:9
|
876 |
+
msgid "Keyword:"
|
877 |
+
msgstr "Cuvant cheie:"
|
878 |
+
|
879 |
+
#: themes/default/SQ_Blockresearch.php:11 themes/default/SQ_Blocksearch.php:23
|
880 |
+
msgid "Use this keyword"
|
881 |
+
msgstr "Foloseste acest cuvant"
|
882 |
+
|
883 |
+
#: themes/default/SQ_Blockresearch.php:20
|
884 |
+
msgid "+ Add keyword"
|
885 |
+
msgstr "Adauga cuvant cheie"
|
886 |
+
|
887 |
+
#: themes/default/SQ_Blockresearch.php:21
|
888 |
+
msgid "Do the research"
|
889 |
+
msgstr "Trimite >>"
|
890 |
+
|
891 |
+
#: themes/default/SQ_Blockresearch.php:24
|
892 |
+
msgid "Enter even more keywords."
|
893 |
+
msgstr "Adauga mai multe cuvinte"
|
894 |
+
|
895 |
+
#: themes/default/SQ_Blockresearch.php:25
|
896 |
+
msgid "Let some keywords for the next time as well!"
|
897 |
+
msgstr "Mai lasa cuvinte si pentru viitor!"
|
898 |
+
|
899 |
+
#: themes/default/SQ_Blocksearch.php:3
|
900 |
+
msgid "Optimize for Keyword"
|
901 |
+
msgstr "Optimizare dupa cuvant cheie"
|
902 |
+
|
903 |
+
#: themes/default/SQ_Blocksearch.php:10
|
904 |
+
msgid "Enter a keyword"
|
905 |
+
msgstr "Adauga cuvant"
|
906 |
+
|
907 |
+
#: themes/default/SQ_Blocksearch.php:10
|
908 |
+
msgid "for Squirrly Live SEO optimization"
|
909 |
+
msgstr "Pentru optimizare cu Squirrly SEO"
|
910 |
+
|
911 |
+
#: themes/default/SQ_Blocksearch.php:22
|
912 |
+
msgid "Do a research"
|
913 |
+
msgstr "Mai multe detalii"
|
914 |
+
|
915 |
+
#: themes/default/SQ_Blocksearch.php:27
|
916 |
+
msgid "Enter a keyword above!"
|
917 |
+
msgstr "Adauga cuvinte cheie mai sus!"
|
918 |
+
|
919 |
+
#: themes/default/SQ_Blocksearch.php:28
|
920 |
+
msgid "I have more then one keyword!"
|
921 |
+
msgstr "Am mai multe cuvinte!"
|
922 |
+
|
923 |
+
#: themes/default/SQ_Blocksearch.php:34
|
924 |
+
msgid "Images"
|
925 |
+
msgstr "Imagini"
|
926 |
+
|
927 |
+
#: themes/default/SQ_Blocksearch.php:35
|
928 |
+
msgid "Twitter"
|
929 |
+
msgstr "Twitter"
|
930 |
+
|
931 |
+
#: themes/default/SQ_Blocksearch.php:36
|
932 |
+
msgid "Wiki"
|
933 |
+
msgstr "Wiki"
|
934 |
+
|
935 |
+
#: themes/default/SQ_Blocksearch.php:37
|
936 |
+
msgid "News"
|
937 |
+
msgstr "News"
|
938 |
+
|
939 |
+
#: themes/default/SQ_Blocksearch.php:38
|
940 |
+
msgid "Blogs"
|
941 |
+
msgstr "Bloguri"
|
942 |
+
|
943 |
+
#: themes/default/SQ_Blocksearch.php:39
|
944 |
+
msgid "My articles"
|
945 |
+
msgstr "Articolele mele"
|
946 |
+
|
947 |
+
#: themes/default/SQ_Blocksearch.php:44
|
948 |
+
msgid "Show only Copyright Free images"
|
949 |
+
msgstr "Arata doar imagini fara copyright"
|
950 |
+
|
951 |
+
#: themes/default/SQ_Blockseo.php:3
|
952 |
+
msgid "Squirrly LIVE SEO assistant"
|
953 |
+
msgstr "Asistent SEO Live"
|
954 |
+
|
955 |
+
#: themes/default/SQ_BlockSupport.php:6
|
956 |
+
msgid "Go to Profile"
|
957 |
+
msgstr "Profilul tau din Squirrly"
|
958 |
+
|
959 |
+
#: themes/default/SQ_BlockSupport.php:6
|
960 |
+
msgid "Profile"
|
961 |
+
msgstr "Profil"
|
962 |
+
|
963 |
+
#: themes/default/SQ_BlockSupport.php:10
|
964 |
+
msgid "Support"
|
965 |
+
msgstr "Suport"
|
966 |
+
|
967 |
+
#: themes/default/SQ_BlockSupport.php:13
|
968 |
+
msgid "Need Help with Squirrly SEO?"
|
969 |
+
msgstr "Ai nevoie de ajutor cu Squirrly SEO?"
|
970 |
+
|
971 |
+
#: themes/default/SQ_BlockSupport.php:17
|
972 |
+
msgid "Send Question"
|
973 |
+
msgstr "Trimite"
|
974 |
+
|
975 |
+
#: themes/default/SQ_BlockSupport.php:20 themes/default/SQ_BlockSupport.php:52
|
976 |
+
msgid "Go to:"
|
977 |
+
msgstr "Mergi la:"
|
978 |
+
|
979 |
+
#: themes/default/SQ_BlockSupport.php:20 themes/default/SQ_BlockSupport.php:52
|
980 |
+
msgid "support page"
|
981 |
+
msgstr "pagina suport"
|
982 |
+
|
983 |
+
#: themes/default/SQ_BlockSupport.php:25
|
984 |
+
msgid "How was your Squirrly experience today?"
|
985 |
+
msgstr "Cum a fost experienta de azi cu Squirrly?"
|
986 |
+
|
987 |
+
#: themes/default/SQ_BlockSupport.php:32
|
988 |
+
msgid "How was Squirrly today?"
|
989 |
+
msgstr "Cum a fost Squirrly azi?"
|
990 |
+
|
991 |
+
#: themes/default/SQ_BlockSupport.php:45
|
992 |
+
msgid "Please tell us why?"
|
993 |
+
msgstr "De ce?"
|
994 |
+
|
995 |
+
#: themes/default/SQ_BlockSupport.php:48
|
996 |
+
msgid "Send feedback"
|
997 |
+
msgstr "Trimite"
|
998 |
+
|
999 |
+
#: themes/default/SQ_BlockSupport.php:57
|
1000 |
+
msgid "Thank you! You can send us a happy face tomorow too."
|
1001 |
+
msgstr "Multumim! Ne poti trimite o fata vesela si maine."
|
1002 |
+
|
1003 |
+
#: themes/default/SQ_Menu.php:4
|
1004 |
+
msgid "Squirrly settings"
|
1005 |
+
msgstr "Setari Squirrly"
|
1006 |
+
|
1007 |
+
#: themes/default/SQ_Menu.php:4 themes/default/SQ_Menu.php:321
|
1008 |
+
msgid "Save settings"
|
1009 |
+
msgstr "Salveaza setari"
|
1010 |
+
|
1011 |
+
#: themes/default/SQ_Menu.php:15
|
1012 |
+
msgid "Let Squirrly automatically optimize my blog"
|
1013 |
+
msgstr "Lasa Squirrly sa imi optimizeze blogul automat"
|
1014 |
+
|
1015 |
+
#: themes/default/SQ_Menu.php:29
|
1016 |
+
msgid "What does Squirrly automatically do for SEO?"
|
1017 |
+
msgstr "Ce face Squirrly in mod automat pentru SEO?"
|
1018 |
+
|
1019 |
+
#: themes/default/SQ_Menu.php:45
|
1020 |
+
msgid "Add <strong>canonical</strong> link in home page"
|
1021 |
+
msgstr "Adauga <strong>link canonic</strong> in pagina acasa"
|
1022 |
+
|
1023 |
+
#: themes/default/SQ_Menu.php:62
|
1024 |
+
msgid "Add the <strong>XML Sitemap</strong> for search engines"
|
1025 |
+
msgstr "Adauga <strong>Harta XML</strong> pentru motoarele de cautare"
|
1026 |
+
|
1027 |
+
#: themes/default/SQ_Menu.php:79
|
1028 |
+
msgid ""
|
1029 |
+
"Add the required METAs for home page (<strong>icon, author, language, dc "
|
1030 |
+
"publisher</strong>, etc.)"
|
1031 |
+
msgstr ""
|
1032 |
+
"Adauga cerintele META in pagina acasa (<strong>icon, author, language, dc "
|
1033 |
+
"publisher</strong>, etc.)"
|
1034 |
+
|
1035 |
+
#: themes/default/SQ_Menu.php:96
|
1036 |
+
msgid ""
|
1037 |
+
"Add the <strong>favicon</strong> and the <strong>icon for Apple devices</"
|
1038 |
+
"strong>."
|
1039 |
+
msgstr ""
|
1040 |
+
"Adauga <strong>favicon</strong> si <strong>icoana pentru dispozitivele "
|
1041 |
+
"Apple</strong>."
|
1042 |
+
|
1043 |
+
#: themes/default/SQ_Menu.php:113
|
1044 |
+
msgid ""
|
1045 |
+
"Add the <strong>Facebook meta objects</strong> for a good looking share. "
|
1046 |
+
msgstr ""
|
1047 |
+
"Adauga <strong>Facebook meta objects</strong> pentru o afisare mai frumoasa "
|
1048 |
+
"in Facebook"
|
1049 |
+
|
1050 |
+
#: themes/default/SQ_Menu.php:130
|
1051 |
+
msgid "Add the <strong>Twitter card</strong> in your tweets. "
|
1052 |
+
msgstr "Adauga <strong>titlul</strong> corect in pagina acasa"
|
1053 |
+
|
1054 |
+
#: themes/default/SQ_Menu.php:131
|
1055 |
+
msgid "Your twitter account: "
|
1056 |
+
msgstr "Contul tau de twitter:"
|
1057 |
+
|
1058 |
+
#: themes/default/SQ_Menu.php:141
|
1059 |
+
msgid "First page optimization (Title, Description, Keywords)"
|
1060 |
+
msgstr "Optimizare prima pagina (Titlu, Descriere, Cuvinte cheie)"
|
1061 |
+
|
1062 |
+
#: themes/default/SQ_Menu.php:157
|
1063 |
+
msgid "Add the correct <strong>title</strong> in the home page"
|
1064 |
+
msgstr "Adauga <strong>titlul</strong> corect in pagina acasa"
|
1065 |
+
|
1066 |
+
#: themes/default/SQ_Menu.php:174
|
1067 |
+
msgid ""
|
1068 |
+
"Add the correct <strong>description</strong> and <strong>keywords</strong> "
|
1069 |
+
"in home page"
|
1070 |
+
msgstr ""
|
1071 |
+
"Aadauga <strong>descrierea</strong> si <strong>cuvintele cheie</strong> "
|
1072 |
+
"corecte in prima pagina"
|
1073 |
+
|
1074 |
+
#: themes/default/SQ_Menu.php:190
|
1075 |
+
msgid "Auto"
|
1076 |
+
msgstr "Auto"
|
1077 |
+
|
1078 |
+
#: themes/default/SQ_Menu.php:192
|
1079 |
+
msgid "Custom"
|
1080 |
+
msgstr "Manual"
|
1081 |
+
|
1082 |
+
#: themes/default/SQ_Menu.php:195
|
1083 |
+
msgid "Home page SEO optimization"
|
1084 |
+
msgstr "Optimizare cu Squirrly SEO"
|
1085 |
+
|
1086 |
+
#: themes/default/SQ_Menu.php:200
|
1087 |
+
msgid "Title:"
|
1088 |
+
msgstr "Titlu:"
|
1089 |
+
|
1090 |
+
#: themes/default/SQ_Menu.php:201
|
1091 |
+
msgid "Tips: Length 10-75 chars"
|
1092 |
+
msgstr "Atentie: Lungimea 10-75 caractere"
|
1093 |
+
|
1094 |
+
#: themes/default/SQ_Menu.php:204
|
1095 |
+
msgid "Description:"
|
1096 |
+
msgstr "Descrierea:"
|
1097 |
+
|
1098 |
+
#: themes/default/SQ_Menu.php:205
|
1099 |
+
msgid "Tips: Length 70-165 chars"
|
1100 |
+
msgstr "Atentie: Lungimea 70-165 caractere"
|
1101 |
+
|
1102 |
+
#: themes/default/SQ_Menu.php:208
|
1103 |
+
msgid "Keywords:"
|
1104 |
+
msgstr "Cuvinte cheie:"
|
1105 |
+
|
1106 |
+
#: themes/default/SQ_Menu.php:209
|
1107 |
+
msgid "Tips: 2-4 keywords"
|
1108 |
+
msgstr "Atentie: 2-4 cuvinte cheie"
|
1109 |
+
|
1110 |
+
#: themes/default/SQ_Menu.php:220
|
1111 |
+
msgid "Check with google ..."
|
1112 |
+
msgstr "Verificat cu google ..."
|
1113 |
+
|
1114 |
+
#: themes/default/SQ_Menu.php:223
|
1115 |
+
msgid ""
|
1116 |
+
"If you don't see any changes in custom optimization, check if another SEO "
|
1117 |
+
"plugin affects Squirrly SEO"
|
1118 |
+
msgstr ""
|
1119 |
+
"Daca nu sunt modificari in titlu prin aceasta optimizate, verifica daca nu e "
|
1120 |
+
"afectat de alte pluginuri instalate."
|
1121 |
+
|
1122 |
+
#: themes/default/SQ_Menu.php:233
|
1123 |
+
msgid "Squirrly Options"
|
1124 |
+
msgstr "Optiuni Squirrly"
|
1125 |
+
|
1126 |
+
#: themes/default/SQ_Menu.php:242
|
1127 |
+
msgid "Let Squirrly warn me if there are errors related to SEO settings"
|
1128 |
+
msgstr "Lasa Squirrly sa ma anunte daca sunt erori SEO in setari"
|
1129 |
+
|
1130 |
+
#: themes/default/SQ_Menu.php:253
|
1131 |
+
msgid ""
|
1132 |
+
"Show <strong>\"Enter a keyword\"</strong> bubble when posting a new article."
|
1133 |
+
msgstr ""
|
1134 |
+
"Afiseaza balonul <strong>\"Adauga un keyword\"</strong>cand se posteaza un "
|
1135 |
+
"nou articol."
|
1136 |
+
|
1137 |
+
#: themes/default/SQ_Menu.php:264
|
1138 |
+
msgid ""
|
1139 |
+
"Always show <strong>Keyword Informations</strong> about the selected keyword."
|
1140 |
+
msgstr ""
|
1141 |
+
"Afiseaza <strong>Informatii de cuvint cheie</strong> dupa alegerea "
|
1142 |
+
"cuvantului la postare."
|
1143 |
+
|
1144 |
+
#: themes/default/SQ_Menu.php:272
|
1145 |
+
msgid "Change the Website Icon"
|
1146 |
+
msgstr "Schimba icoana site-ului"
|
1147 |
+
|
1148 |
+
#: themes/default/SQ_Menu.php:275
|
1149 |
+
msgid "File types: JPG, JPEG, GIF and PNG."
|
1150 |
+
msgstr "Tip fisiere JPEG,JPG,GIF sau PNG "
|
1151 |
+
|
1152 |
+
#: themes/default/SQ_Menu.php:278
|
1153 |
+
msgid "Upload file:"
|
1154 |
+
msgstr "Urca fisier:"
|
1155 |
+
|
1156 |
+
#: themes/default/SQ_Menu.php:283
|
1157 |
+
msgid "Upload"
|
1158 |
+
msgstr "Upload"
|
1159 |
+
|
1160 |
+
#: themes/default/SQ_Menu.php:287
|
1161 |
+
#, php-format
|
1162 |
+
msgid ""
|
1163 |
+
"You can use %shttp://convertico.com/%s to convert your photo to icon and "
|
1164 |
+
"upload it here after that."
|
1165 |
+
msgstr ""
|
1166 |
+
"Poti folosi %shttp://convertico.com/%s pentru a converti imaginea in icoana "
|
1167 |
+
"si poti incarca icoana aici"
|
1168 |
+
|
1169 |
+
#: themes/default/SQ_Menu.php:288
|
1170 |
+
msgid ""
|
1171 |
+
"If you don't see the new icon in your browser, empty the browser cache and "
|
1172 |
+
"refresh the page."
|
1173 |
+
msgstr ""
|
1174 |
+
"Daca nu vezi noua icoana in browser, goleste cache-ul din browser si da "
|
1175 |
+
"refresh la pagina."
|
1176 |
+
|
1177 |
+
#: themes/default/SQ_Menu.php:292
|
1178 |
+
msgid "Tool for Search Engines"
|
1179 |
+
msgstr "Pentru motoare de cautare"
|
1180 |
+
|
1181 |
+
#: themes/default/SQ_Menu.php:296
|
1182 |
+
msgid "Google Plus URL:"
|
1183 |
+
msgstr "URL Google Plus:"
|
1184 |
+
|
1185 |
+
#: themes/default/SQ_Menu.php:300
|
1186 |
+
#, php-format
|
1187 |
+
msgid "Google META verification code for %sWebmaster Tool%s`:"
|
1188 |
+
msgstr "Cod META pentru %sGoogle Webmaster Tool%s"
|
1189 |
+
|
1190 |
+
#: themes/default/SQ_Menu.php:304
|
1191 |
+
#, php-format
|
1192 |
+
msgid "Google %sAnalytics ID%s`:"
|
1193 |
+
msgstr "Google %sAnalytics ID%s:"
|
1194 |
+
|
1195 |
+
#: themes/default/SQ_Menu.php:308
|
1196 |
+
#, php-format
|
1197 |
+
msgid "Facebook META code (for %sInsights%s )`:"
|
1198 |
+
msgstr "Facebook META code (pentru %sInsights%s):"
|
1199 |
+
|
1200 |
+
#: themes/default/SQ_Menu.php:312
|
1201 |
+
#, php-format
|
1202 |
+
msgid "Bing META code (for %sWebmaster Tool%s )`:"
|
1203 |
+
msgstr "Bing META code (pentru %sWebmaster Tool%s):"
|
1204 |
+
|
1205 |
+
#~ msgid "Can not connect to Squirrly. Error: "
|
1206 |
+
#~ msgstr "Nu se poate conecta la Squirrly. Eroare: "
|
1207 |
+
|
1208 |
+
#~ msgid "Write a new post with Squirrly"
|
1209 |
+
#~ msgstr "Scrie un nou articol cu Squirrly"
|
1210 |
+
|
1211 |
+
#~ msgid "Today"
|
1212 |
+
#~ msgstr "Azi"
|
1213 |
+
|
1214 |
+
#~ msgid " API"
|
1215 |
+
#~ msgstr " API"
|
1216 |
+
|
1217 |
+
#~ msgid "API Key:"
|
1218 |
+
#~ msgstr "Cheie API"
|
1219 |
+
|
1220 |
+
#~ msgid "See it in post list"
|
1221 |
+
#~ msgstr "Vezi in "
|
1222 |
+
|
1223 |
+
#~ msgid "For Squirrly to work, you have to have tinymce installed!"
|
1224 |
+
#~ msgstr ""
|
1225 |
+
#~ "Pentru ca Squirrly sa functioneze, trebuie sa ai editorul TinyMCE instalat"
|
1226 |
+
|
1227 |
+
#~ msgid "Talk about it:"
|
1228 |
+
#~ msgstr "Vorbesc despre:"
|
1229 |
+
|
1230 |
+
#~ msgid ""
|
1231 |
+
#~ "The system is acting Squirrly. I can not find the link to the server."
|
1232 |
+
#~ msgstr "Sistemul functioneaza ciudat. Nu gasesc calea spre server."
|
1233 |
+
|
1234 |
+
#~ msgid "Status:"
|
1235 |
+
#~ msgstr "Stare:"
|
1236 |
+
|
1237 |
+
#~ msgid "automatically"
|
1238 |
+
#~ msgstr "Automat"
|
1239 |
+
|
1240 |
+
#~ msgid "<< Leave it automatically"
|
1241 |
+
#~ msgstr "<< Sa se adauge automat"
|
1242 |
+
|
1243 |
+
#~ msgid "Having trouble logging in? Please click the Support button above."
|
1244 |
+
#~ msgstr "Ai probleme cu logarea? Apasa pe butonul de Suport de mai sus."
|
1245 |
+
|
1246 |
+
#~ msgid ""
|
1247 |
+
#~ "Your Squirrly account has expired. Please Upgrade your plan and use "
|
1248 |
+
#~ "Squirrly to optimize your articles."
|
1249 |
+
#~ msgstr ""
|
1250 |
+
#~ "Contul tau de Squirrly a expirat. Te rog sa faci un Upgrade de plan "
|
1251 |
+
#~ "pentru a putea folosi Squirrly in continuare."
|
1252 |
+
|
1253 |
+
#~ msgid "Search it:"
|
1254 |
+
#~ msgstr "Se cauta:"
|
1255 |
+
|
1256 |
+
#~ msgid "User:"
|
1257 |
+
#~ msgstr "User:"
|
1258 |
+
|
1259 |
+
#~ msgid "See"
|
1260 |
+
#~ msgstr "Vezi"
|
1261 |
+
|
1262 |
+
#~ msgid "in action"
|
1263 |
+
#~ msgstr "in actiune!"
|
1264 |
+
|
1265 |
+
#~ msgid "Turn on automatic optimization from Squirrly!"
|
1266 |
+
#~ msgstr "Lasa Squirrly sa optimizeze SEO in mod automat!"
|
1267 |
+
|
1268 |
+
#~ msgid ""
|
1269 |
+
#~ "It is highly recommended that you set to receive notifications for new "
|
1270 |
+
#~ "comments."
|
1271 |
+
#~ msgstr "Este recomandat sa primesti notificari cand vin comenzi noi"
|
1272 |
+
|
1273 |
+
#~ msgid "XML sitemap: "
|
1274 |
+
#~ msgstr "XML sitemap: "
|
1275 |
+
|
1276 |
+
#~ msgid "Let "
|
1277 |
+
#~ msgstr "Lasa"
|
languages/squirrly-seo-ru_RU.mo
ADDED
Binary file
|
languages/squirrly-seo-ru_RU.po
ADDED
@@ -0,0 +1,1193 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: squirrly-seo\n"
|
4 |
+
"POT-Creation-Date: 2013-06-27 13:42+0200\n"
|
5 |
+
"PO-Revision-Date: 2013-10-03 14:45+0200\n"
|
6 |
+
"Last-Translator: \n"
|
7 |
+
"Language-Team: Squirrly UK <support@squirrly.co>\n"
|
8 |
+
"Language: en\n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 1.5.7\n"
|
13 |
+
"X-Poedit-KeywordsList: __;_e\n"
|
14 |
+
"X-Poedit-Basepath: d:\\pagini_net\\se_lucreaza\\squirrly\\wordpress\\wp-"
|
15 |
+
"content\\plugins\\squirrly-seo\n"
|
16 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
17 |
+
"X-Poedit-SearchPath-0: .\n"
|
18 |
+
|
19 |
+
#: squirrly.php:45
|
20 |
+
msgid ""
|
21 |
+
"For Squirrly to work, the PHP version has to be equal or greater then 5.1"
|
22 |
+
msgstr ""
|
23 |
+
"Для исправной работы Squirrly, версия PHP должна быть равна или выше 5.1 "
|
24 |
+
|
25 |
+
#: classes/SQ_Error.php:20
|
26 |
+
msgid ""
|
27 |
+
"Function get_class does not exists! Is required for Squirrly to work "
|
28 |
+
"properly."
|
29 |
+
msgstr ""
|
30 |
+
"Функция get_class не существует! Она требуется для исправной работы Squirrly."
|
31 |
+
|
32 |
+
#: classes/SQ_Error.php:23
|
33 |
+
msgid ""
|
34 |
+
"Function file_exists does not exists! Is required for Squirrly to work "
|
35 |
+
"properly."
|
36 |
+
msgstr ""
|
37 |
+
"Функция file_exists не существует! Она требуется для исправной работы "
|
38 |
+
"Squirrly."
|
39 |
+
|
40 |
+
#: classes/SQ_Error.php:27
|
41 |
+
msgid "The home directory is not set!"
|
42 |
+
msgstr "Домашняя директория не установлена!"
|
43 |
+
|
44 |
+
#: classes/SQ_Error.php:31
|
45 |
+
msgid "The PHP version has to be greater then 4.0"
|
46 |
+
msgstr "Версия PHP должна быть выше, чем 4,0"
|
47 |
+
|
48 |
+
#: classes/SQ_Error.php:69
|
49 |
+
msgid "Turn off warnings!"
|
50 |
+
msgstr "Отключить предупреждения!"
|
51 |
+
|
52 |
+
#: classes/SQ_Error.php:70
|
53 |
+
msgid "Notice: "
|
54 |
+
msgstr "Примечание:"
|
55 |
+
|
56 |
+
#: classes/SQ_Error.php:74
|
57 |
+
msgid "Note: "
|
58 |
+
msgstr "Обратите внимание:"
|
59 |
+
|
60 |
+
#: classes/SQ_Tools.php:82 controllers/SQ_Menu.php:52
|
61 |
+
msgid "Settings"
|
62 |
+
msgstr "Настройки"
|
63 |
+
|
64 |
+
#: classes/SQ_Tools.php:85 controllers/SQ_Menu.php:35
|
65 |
+
msgid "Getting started"
|
66 |
+
msgstr "Введение"
|
67 |
+
|
68 |
+
#: classes/SQ_Tools.php:394
|
69 |
+
msgid "Fix it for me!"
|
70 |
+
msgstr "Починить это!"
|
71 |
+
|
72 |
+
#: classes/SQ_Tools.php:400
|
73 |
+
msgid "Let Squirrly optimize your SEO automatically (recommended)"
|
74 |
+
msgstr ""
|
75 |
+
"Разрешить Squirrly автоматически оптимизировать ваш SEO (Поиско́вая "
|
76 |
+
"оптимиза́ция) (рекомендуется)\t"
|
77 |
+
|
78 |
+
#: classes/SQ_Tools.php:408
|
79 |
+
msgid "You're blocking google from indexing your site!"
|
80 |
+
msgstr "Вы блокируете индексирования вашего сайта в Google!"
|
81 |
+
|
82 |
+
#: classes/SQ_Tools.php:414
|
83 |
+
msgid ""
|
84 |
+
"It is highly recommended that you include the %postname% variable in the "
|
85 |
+
"permalink structure. <br />Go to Settings > Permalinks and add /%postname%/ "
|
86 |
+
"in Custom Structure"
|
87 |
+
msgstr ""
|
88 |
+
"Настоятельно рекомендуется включить переменную %postname% в структуру "
|
89 |
+
"постоянной ссылки. <br />Перейти в раздел Настройки> Постоянные ссылки и "
|
90 |
+
"добавить /%postname%/ в пользовательскую структуру"
|
91 |
+
|
92 |
+
#: controllers/SQ_Menu.php:34
|
93 |
+
msgid " getting started"
|
94 |
+
msgstr "введение"
|
95 |
+
|
96 |
+
#: controllers/SQ_Menu.php:43
|
97 |
+
msgid " dashboard"
|
98 |
+
msgstr "панель управления"
|
99 |
+
|
100 |
+
#: controllers/SQ_Menu.php:44
|
101 |
+
msgid "Dashboard"
|
102 |
+
msgstr "Панель управления"
|
103 |
+
|
104 |
+
#: controllers/SQ_Menu.php:51
|
105 |
+
msgid " settings"
|
106 |
+
msgstr "настройки"
|
107 |
+
|
108 |
+
#: controllers/SQ_Menu.php:58
|
109 |
+
msgid "Make money with "
|
110 |
+
msgstr "Заработать деньги с"
|
111 |
+
|
112 |
+
#: controllers/SQ_Menu.php:59
|
113 |
+
msgid "Make money"
|
114 |
+
msgstr "Заработать деньги"
|
115 |
+
|
116 |
+
#: controllers/SQ_Menu.php:78
|
117 |
+
msgid "Squirrly Article Rank"
|
118 |
+
msgstr "Рейтинг статеи Squirrly"
|
119 |
+
|
120 |
+
#: controllers/SQ_PostsList.php:97
|
121 |
+
msgid "Squirrly"
|
122 |
+
msgstr "Squirrly"
|
123 |
+
|
124 |
+
#: controllers/SQ_PostsList.php:134
|
125 |
+
msgid "Custom description: "
|
126 |
+
msgstr "Индивидуальное описание:"
|
127 |
+
|
128 |
+
#: controllers/SQ_PostsList.php:134
|
129 |
+
msgid "Custom title: "
|
130 |
+
msgstr "Индивидуальное название: "
|
131 |
+
|
132 |
+
#: controllers/SQ_PostsList.php:157
|
133 |
+
msgid "Squirrly article rank"
|
134 |
+
msgstr "Рейтинг статеи Squirrly"
|
135 |
+
|
136 |
+
#: controllers/SQ_PostsList.php:158 core/SQ_Blockseo/SQ_Blockseo.php:21
|
137 |
+
msgid "Update"
|
138 |
+
msgstr "Обновление"
|
139 |
+
|
140 |
+
#: controllers/SQ_PostsList.php:159
|
141 |
+
msgid "More details"
|
142 |
+
msgstr "Подробнее"
|
143 |
+
|
144 |
+
#: controllers/SQ_PostsList.php:160
|
145 |
+
msgid "Less details"
|
146 |
+
msgstr "Менее подробно"
|
147 |
+
|
148 |
+
#: controllers/SQ_PostsList.php:161
|
149 |
+
msgid "Interval: "
|
150 |
+
msgstr "Интервал:"
|
151 |
+
|
152 |
+
#: controllers/SQ_PostsList.php:162 models/SQ_PostsList.php:30
|
153 |
+
msgid "Latest"
|
154 |
+
msgstr "Последние"
|
155 |
+
|
156 |
+
#: controllers/SQ_PostsList.php:163 models/SQ_PostsList.php:31
|
157 |
+
msgid "Last 7 days"
|
158 |
+
msgstr "За последние 7 дней"
|
159 |
+
|
160 |
+
#: controllers/SQ_PostsList.php:164 models/SQ_PostsList.php:32
|
161 |
+
msgid "Last 30 days"
|
162 |
+
msgstr "За последние 30 дней"
|
163 |
+
|
164 |
+
#: controllers/SQ_PostsList.php:166 core/SQ_Blockrank/SQ_Blockrank.php:19
|
165 |
+
msgid "See it in 'All Posts'"
|
166 |
+
msgstr "Посмотреть в папке 'Все посты'"
|
167 |
+
|
168 |
+
#: controllers/SQ_PostsList.php:167
|
169 |
+
msgid "progress"
|
170 |
+
msgstr "прогресс"
|
171 |
+
|
172 |
+
#: controllers/SQ_PostsList.php:168
|
173 |
+
msgid "optimized"
|
174 |
+
msgstr "оптимизированный"
|
175 |
+
|
176 |
+
#: controllers/SQ_PostsList.php:169
|
177 |
+
msgid "See rank"
|
178 |
+
msgstr "Показать рейтинг"
|
179 |
+
|
180 |
+
#: controllers/SQ_PostsList.php:170
|
181 |
+
msgid "Hide rank"
|
182 |
+
msgstr "Скрыть рейтинг"
|
183 |
+
|
184 |
+
#: controllers/SQ_PostsList.php:171
|
185 |
+
msgid "Optimize"
|
186 |
+
msgstr "Оптимизировать"
|
187 |
+
|
188 |
+
#: controllers/SQ_PostsList.php:173
|
189 |
+
msgid "Not Public"
|
190 |
+
msgstr "Не публичный"
|
191 |
+
|
192 |
+
#: controllers/SQ_PostsList.php:259 core/SQ_Blockrank/SQ_Blockrank.php:31
|
193 |
+
msgid "Publish the article to start Squirrly Article Rank"
|
194 |
+
msgstr "Опубликуйте статью, чтобы начать Squirrly Article Rank"
|
195 |
+
|
196 |
+
#: core/SQ_BlockAffiliate/SQ_BlockAffiliate.php:33
|
197 |
+
#, php-format
|
198 |
+
msgid "Error: %s"
|
199 |
+
msgstr "Ошибка: %s"
|
200 |
+
|
201 |
+
#: core/SQ_BlockAffiliate/SQ_BlockAffiliate.php:36
|
202 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:85
|
203 |
+
msgid "An error occured. Mabe a network error :("
|
204 |
+
msgstr "Произошла ошибка. Может быть, сетевая ошибка:("
|
205 |
+
|
206 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:80
|
207 |
+
#, php-format
|
208 |
+
msgid ""
|
209 |
+
"We found your email, so it means you already have a Squirrly.co account. "
|
210 |
+
"Please login with your Squirrly Email. If you forgot your password click "
|
211 |
+
"%shere%s"
|
212 |
+
msgstr ""
|
213 |
+
"Мы нашли вашу электронную почту, так означает, что вы уже имеете аккаунт на "
|
214 |
+
"Squirrly.co. Пожалуйста, войдите в систему с вашим адресом электронной почты "
|
215 |
+
"Squirrly. Если вы забыли свой пароль нажмите на %sсюда%s"
|
216 |
+
|
217 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:88
|
218 |
+
#, php-format
|
219 |
+
msgid ""
|
220 |
+
"Could not send your informations to squirrly. Please register %smanually%s."
|
221 |
+
msgstr ""
|
222 |
+
"Невозможно послать вашу информацию в squirrly. Пожалуйста, зарегистрируйтесь "
|
223 |
+
"%sвручную%s."
|
224 |
+
|
225 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:129
|
226 |
+
msgid "Wrong email or password!"
|
227 |
+
msgstr "Неправильное имя пользователя или пароль!"
|
228 |
+
|
229 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:132
|
230 |
+
msgid "You can use this account only for the URL you registered first!"
|
231 |
+
msgstr ""
|
232 |
+
"Вы можете использовать этот аккаунт только для URL который вы "
|
233 |
+
"зарегистрировали изначально!"
|
234 |
+
|
235 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:137
|
236 |
+
msgid "An error occured."
|
237 |
+
msgstr "Произошла ошибка."
|
238 |
+
|
239 |
+
#: core/SQ_Blocklogin/SQ_Blocklogin.php:139
|
240 |
+
msgid "Both fields are required."
|
241 |
+
msgstr "Оба поля обязательны для заполнения."
|
242 |
+
|
243 |
+
#: core/SQ_Blockresearch/SQ_Blockresearch.php:12
|
244 |
+
msgid "Recent discussions:"
|
245 |
+
msgstr "Недавние дискуссии:"
|
246 |
+
|
247 |
+
#: core/SQ_Blockresearch/SQ_Blockresearch.php:12
|
248 |
+
msgid "Exact search:"
|
249 |
+
msgstr "Точный поиск:"
|
250 |
+
|
251 |
+
#: core/SQ_Blockresearch/SQ_Blockresearch.php:12
|
252 |
+
msgid "Competition:"
|
253 |
+
msgstr "Конкуренция:"
|
254 |
+
|
255 |
+
#: core/SQ_Blockresearch/SQ_Blockresearch.php:12
|
256 |
+
msgid "Trend:"
|
257 |
+
msgstr "Тенденция:"
|
258 |
+
|
259 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
260 |
+
msgid "date"
|
261 |
+
msgstr "дата"
|
262 |
+
|
263 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
264 |
+
msgid "Read it!"
|
265 |
+
msgstr "Прочитайте!"
|
266 |
+
|
267 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
268 |
+
msgid "Insert it!"
|
269 |
+
msgstr "Вставьте!"
|
270 |
+
|
271 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
272 |
+
msgid "Reference"
|
273 |
+
msgstr "Ссылка"
|
274 |
+
|
275 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
276 |
+
msgid "Insert as box"
|
277 |
+
msgstr "Вставить в качестве окна"
|
278 |
+
|
279 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
280 |
+
msgid "Not relevant?"
|
281 |
+
msgstr "Не применимо?"
|
282 |
+
|
283 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
284 |
+
msgid "Insert in your article"
|
285 |
+
msgstr "Вставить в вашу статью"
|
286 |
+
|
287 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
288 |
+
msgid "For Squirrly to work, you have to have tinymce editor installed!"
|
289 |
+
msgstr "Для исправной работы Squirrly, вы должны установить редактор tinymce!"
|
290 |
+
|
291 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
292 |
+
msgid ":( I lost my squirrel. Please reload the page."
|
293 |
+
msgstr ":( Я потерял свой свою белку. Пожалуйста, перезагрузите страницу"
|
294 |
+
|
295 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
296 |
+
msgid "No results found!"
|
297 |
+
msgstr "Ничего не найдено!"
|
298 |
+
|
299 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
300 |
+
msgid "Switch to Visual editor!"
|
301 |
+
msgstr "Переключиться на визуальный редактор!"
|
302 |
+
|
303 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
304 |
+
msgid "Use more words in one keyword"
|
305 |
+
msgstr "Используйте больше слов в ключевом слове"
|
306 |
+
|
307 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
308 |
+
msgid "Takes too long to check this keyword ..."
|
309 |
+
msgstr "Проверка ключевого слова занимает слишком много времени..."
|
310 |
+
|
311 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
312 |
+
msgid "Do a research!"
|
313 |
+
msgstr "Делайте поиск!"
|
314 |
+
|
315 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
316 |
+
msgid "Do more research!"
|
317 |
+
msgstr "Делайте больше поисков!"
|
318 |
+
|
319 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
320 |
+
#, php-format
|
321 |
+
msgid "[ ATTRIBUTE: Please check: %s to find out how to attribute this image ]"
|
322 |
+
msgstr ""
|
323 |
+
"[АТРИБУТ: Пожалуйста, проверьте: %s чтобы узнать, какие атрибуты дать этому "
|
324 |
+
"изображению]"
|
325 |
+
|
326 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
327 |
+
msgid "Has creative commons attributes"
|
328 |
+
msgstr "Имеет атрибуты «криэ́йтив ка́мэнс»"
|
329 |
+
|
330 |
+
#: core/SQ_Blocksearch/SQ_Blocksearch.php:51
|
331 |
+
msgid "No known copyright restrictions"
|
332 |
+
msgstr "Нет известных ограничений в связи с авторскими правами"
|
333 |
+
|
334 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:11
|
335 |
+
msgid "Save changes"
|
336 |
+
msgstr "Сохранить изменения"
|
337 |
+
|
338 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:12
|
339 |
+
msgid "Cancel"
|
340 |
+
msgstr "Отменить"
|
341 |
+
|
342 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:13
|
343 |
+
msgid "Reset"
|
344 |
+
msgstr "Переустановка"
|
345 |
+
|
346 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:15
|
347 |
+
msgid "Customize Title"
|
348 |
+
msgstr "Персонализация Название"
|
349 |
+
|
350 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:16
|
351 |
+
msgid "manage keywords"
|
352 |
+
msgstr "управления ключевыми словами"
|
353 |
+
|
354 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:17 themes/default/SQ_Menu.php:327
|
355 |
+
msgid "Too short"
|
356 |
+
msgstr "Слишком короткий"
|
357 |
+
|
358 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:18 themes/default/SQ_Menu.php:328
|
359 |
+
msgid "Too long"
|
360 |
+
msgstr "Слишком длинный"
|
361 |
+
|
362 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:20 themes/default/SQ_Menu.php:214
|
363 |
+
msgid "Squirrly Snippet"
|
364 |
+
msgstr "Squirrly образец"
|
365 |
+
|
366 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:22
|
367 |
+
msgid ""
|
368 |
+
"Click the Update button (to the right) to see the snippet from your website."
|
369 |
+
msgstr ""
|
370 |
+
"Нажмите на кнопку обновить (вправо), чтобы увидеть образец с вашего сайта."
|
371 |
+
|
372 |
+
#: core/SQ_Blockseo/SQ_Blockseo.php:23
|
373 |
+
msgid "Enter a title above for the snippet to get data."
|
374 |
+
msgstr "Введите название выше чтобы подать данные образцу."
|
375 |
+
|
376 |
+
#: core/SQ_BlockSupport/SQ_BlockSupport.php:21
|
377 |
+
msgid "Plugin Feedback"
|
378 |
+
msgstr "Плагин обратной связи"
|
379 |
+
|
380 |
+
#: core/SQ_BlockSupport/SQ_BlockSupport.php:57
|
381 |
+
msgid "Thank you for your feedback"
|
382 |
+
msgstr "Спасибо за ваш отзыв"
|
383 |
+
|
384 |
+
#: core/SQ_BlockSupport/SQ_BlockSupport.php:59
|
385 |
+
#: core/SQ_BlockSupport/SQ_BlockSupport.php:94
|
386 |
+
msgid "Could not send the email..."
|
387 |
+
msgstr "Не удалось отправить электронную почту…"
|
388 |
+
|
389 |
+
#: core/SQ_BlockSupport/SQ_BlockSupport.php:62
|
390 |
+
#: core/SQ_BlockSupport/SQ_BlockSupport.php:97
|
391 |
+
msgid "No message."
|
392 |
+
msgstr "Нет сообщений"
|
393 |
+
|
394 |
+
#: core/SQ_BlockSupport/SQ_BlockSupport.php:81
|
395 |
+
msgid "Plugin Support"
|
396 |
+
msgstr "Поддержка плагинов"
|
397 |
+
|
398 |
+
#: core/SQ_BlockSupport/SQ_BlockSupport.php:92
|
399 |
+
msgid "Message sent..."
|
400 |
+
msgstr "Сообщение послано..."
|
401 |
+
|
402 |
+
#: core/SQ_Loading/SQ_Loading.php:23
|
403 |
+
msgid ""
|
404 |
+
"For Squirrly to work properly you have to use a higher version of Internet "
|
405 |
+
"Explorer. <br /> We recommend you to use Chrome or Mozilla."
|
406 |
+
msgstr ""
|
407 |
+
"Чтобы Squirrly работал исправно, вы должны использовать более высокую версию "
|
408 |
+
"Internet Explorer. <br /> Мы рекомендуем использовать Chrome или Mozilla."
|
409 |
+
|
410 |
+
#: core/SQ_Loading/SQ_Loading.php:30
|
411 |
+
msgid ""
|
412 |
+
"You haven`t used Squirrly SEO to optimize your article. Do you want to "
|
413 |
+
"optimize for a keyword before publishing?"
|
414 |
+
msgstr ""
|
415 |
+
"Вы не использовали (поисковую оптимизацию) Squirrly SEO чтобы оптимизировать "
|
416 |
+
"вашу статью. Хотите перед публикацией оптимизировать ключевые слова?"
|
417 |
+
|
418 |
+
#: models/SQ_Menu.php:139
|
419 |
+
msgid "The code for Google Webmaster Tool is incorrect."
|
420 |
+
msgstr "Неверный код Google Webmaster."
|
421 |
+
|
422 |
+
#: models/SQ_Menu.php:166
|
423 |
+
msgid "The code for Google Analytics is incorrect."
|
424 |
+
msgstr "Неверный код для Google Analytics."
|
425 |
+
|
426 |
+
#: models/SQ_Menu.php:194
|
427 |
+
msgid "The code for Facebook is incorrect."
|
428 |
+
msgstr "Неверный код для Facebook."
|
429 |
+
|
430 |
+
#: models/SQ_Menu.php:219
|
431 |
+
msgid "The code for Bing is incorrect."
|
432 |
+
msgstr "Неверный код Bing."
|
433 |
+
|
434 |
+
#: models/SQ_Menu.php:252
|
435 |
+
msgid "File type error: Only JPEG, JPG, GIF or PNG files are allowed."
|
436 |
+
msgstr "Ошибка в типе файла: поддерживаются только JPEG, JPG, GIF или PNG."
|
437 |
+
|
438 |
+
#: models/SQ_Menu.php:265
|
439 |
+
msgid "GD error: The GD library must be installed on your server."
|
440 |
+
msgstr "Ошибка GD: библиотека GD должна быть установлена на вашем сервере."
|
441 |
+
|
442 |
+
#: models/SQ_Menu.php:272
|
443 |
+
msgid "Delete error: Could not delete the old favicon."
|
444 |
+
msgstr "Ошибка при удалении : Не удалось удалить старый значок."
|
445 |
+
|
446 |
+
#: models/SQ_Menu.php:279
|
447 |
+
msgid "Upload error: Could not upload the favicon."
|
448 |
+
msgstr "Ошибка при загрузке: Не удалось загрузить значок."
|
449 |
+
|
450 |
+
#: models/SQ_Menu.php:285
|
451 |
+
msgid "Permission error: Could not change the favicon permissions."
|
452 |
+
msgstr "Ошибка доступа: Не удалось изменить значок доступа."
|
453 |
+
|
454 |
+
#: models/SQ_Menu.php:311
|
455 |
+
msgid ""
|
456 |
+
"ICO Error: Could not create the ICO from file. Try with another file type."
|
457 |
+
msgstr ""
|
458 |
+
"Ошибка ICO : Из данного файла не удалось создать ICO . Попробуйте с файлом "
|
459 |
+
"другого типа."
|
460 |
+
|
461 |
+
#: models/SQ_Menu.php:314
|
462 |
+
msgid "The favicon has been updated."
|
463 |
+
msgstr "Значок был обновлен."
|
464 |
+
|
465 |
+
#: models/SQ_Post.php:71
|
466 |
+
msgid "Squirrly could not find any results for: "
|
467 |
+
msgstr "Squirrly не смог найти никаких результатов на:"
|
468 |
+
|
469 |
+
#: models/SQ_PostsList.php:29
|
470 |
+
msgid "This article"
|
471 |
+
msgstr "Эта статья"
|
472 |
+
|
473 |
+
#: models/SQ_PostsList.php:29
|
474 |
+
msgid "All your articles"
|
475 |
+
msgstr "Все ваши статьи"
|
476 |
+
|
477 |
+
#: models/SQ_PostsList.php:69
|
478 |
+
msgid "Optimize this article to start Squirrly Article Rank"
|
479 |
+
msgstr "Оптимизировать эту статью, чтобы начать Squirrly Article Rank "
|
480 |
+
|
481 |
+
#: models/SQ_PostsList.php:111
|
482 |
+
msgid "There are no information for this post yet."
|
483 |
+
msgstr "Для этого поста еще нет информации."
|
484 |
+
|
485 |
+
#: models/SQ_PostsList.php:129 models/SQ_PostsList.php:247
|
486 |
+
msgid "Traffic to article"
|
487 |
+
msgstr "Трафик на статью"
|
488 |
+
|
489 |
+
#: models/SQ_PostsList.php:130
|
490 |
+
msgid "Social impact"
|
491 |
+
msgstr "Социальный эффект"
|
492 |
+
|
493 |
+
#: models/SQ_PostsList.php:131
|
494 |
+
msgid "Links to article"
|
495 |
+
msgstr "Ссылки на статью"
|
496 |
+
|
497 |
+
#: models/SQ_PostsList.php:193
|
498 |
+
msgid "Google Indexed"
|
499 |
+
msgstr "проиндексирован на Google"
|
500 |
+
|
501 |
+
#: models/SQ_PostsList.php:198
|
502 |
+
msgid "pos"
|
503 |
+
msgstr "pos"
|
504 |
+
|
505 |
+
#: models/SQ_PostsList.php:198 themes/default/SQ_Menu.php:21
|
506 |
+
#: themes/default/SQ_Menu.php:40 themes/default/SQ_Menu.php:57
|
507 |
+
#: themes/default/SQ_Menu.php:74 themes/default/SQ_Menu.php:91
|
508 |
+
#: themes/default/SQ_Menu.php:108 themes/default/SQ_Menu.php:125
|
509 |
+
#: themes/default/SQ_Menu.php:152 themes/default/SQ_Menu.php:169
|
510 |
+
#: themes/default/SQ_Menu.php:237 themes/default/SQ_Menu.php:248
|
511 |
+
#: themes/default/SQ_Menu.php:259
|
512 |
+
msgid "Yes"
|
513 |
+
msgstr "Да"
|
514 |
+
|
515 |
+
#: models/SQ_PostsList.php:198 themes/default/SQ_Menu.php:23
|
516 |
+
#: themes/default/SQ_Menu.php:42 themes/default/SQ_Menu.php:59
|
517 |
+
#: themes/default/SQ_Menu.php:76 themes/default/SQ_Menu.php:93
|
518 |
+
#: themes/default/SQ_Menu.php:110 themes/default/SQ_Menu.php:127
|
519 |
+
#: themes/default/SQ_Menu.php:154 themes/default/SQ_Menu.php:171
|
520 |
+
#: themes/default/SQ_Menu.php:239 themes/default/SQ_Menu.php:250
|
521 |
+
#: themes/default/SQ_Menu.php:261
|
522 |
+
msgid "No"
|
523 |
+
msgstr "Нет"
|
524 |
+
|
525 |
+
#: models/SQ_PostsList.php:198
|
526 |
+
msgid "for:"
|
527 |
+
msgstr "для:"
|
528 |
+
|
529 |
+
#: models/SQ_PostsList.php:198
|
530 |
+
msgid "(searched with the url)"
|
531 |
+
msgstr "(искать с URL)"
|
532 |
+
|
533 |
+
#: models/SQ_PostsList.php:218
|
534 |
+
msgid "This article|Average"
|
535 |
+
msgstr "Эта статья | Средняя"
|
536 |
+
|
537 |
+
#: models/SQ_PostsList.php:254
|
538 |
+
msgid "Visits"
|
539 |
+
msgstr "Просмотры"
|
540 |
+
|
541 |
+
#: models/SQ_PostsList.php:257
|
542 |
+
msgid "Unique"
|
543 |
+
msgstr "Уникальные"
|
544 |
+
|
545 |
+
#: models/SQ_PostsList.php:369
|
546 |
+
msgid "Google result for: "
|
547 |
+
msgstr "Результаты Google для:"
|
548 |
+
|
549 |
+
#: models/SQ_PostsList.php:402
|
550 |
+
msgid "Change"
|
551 |
+
msgstr "Изменить"
|
552 |
+
|
553 |
+
#: models/SQ_PostsList.php:402
|
554 |
+
msgid "since"
|
555 |
+
msgstr "с"
|
556 |
+
|
557 |
+
#: models/SQ_PostsList.php:403 models/SQ_PostsList.php:478
|
558 |
+
msgid "Current position"
|
559 |
+
msgstr "Текущая позиция"
|
560 |
+
|
561 |
+
#: models/SQ_PostsList.php:437
|
562 |
+
msgid "Recommended by Squirrly"
|
563 |
+
msgstr "Рекомендовано Squirrly"
|
564 |
+
|
565 |
+
#: models/SQ_PostsList.php:477
|
566 |
+
msgid "Keyword"
|
567 |
+
msgstr "Ключевое слово"
|
568 |
+
|
569 |
+
#: themes/default/SQ_BlockAffiliate.php:4
|
570 |
+
#: themes/default/SQ_BlockAffiliate.php:14
|
571 |
+
msgid "Join Squirrly today!"
|
572 |
+
msgstr "Зарегистрироваться на Squirrly сегодня!"
|
573 |
+
|
574 |
+
#: themes/default/SQ_BlockAffiliate.php:21
|
575 |
+
msgid ""
|
576 |
+
"To redirect users to your site, just change \"squirrly.co\" with your domain."
|
577 |
+
msgstr ""
|
578 |
+
"Для перенаправления пользователей на ваш сайт, просто замените \"squirrly.co"
|
579 |
+
"\" на ваш домен."
|
580 |
+
|
581 |
+
#: themes/default/SQ_BlockAffiliate.php:23
|
582 |
+
msgid "Generate affiliate link"
|
583 |
+
msgstr "Создайте партнерскую ссылку"
|
584 |
+
|
585 |
+
#: themes/default/SQ_BlockAffiliate.php:28
|
586 |
+
msgid "Affiliate Benefits"
|
587 |
+
msgstr "Партнерские преимущества"
|
588 |
+
|
589 |
+
#: themes/default/SQ_BlockAffiliate.php:33
|
590 |
+
#, php-format
|
591 |
+
msgid "- Recurring 45%s commission"
|
592 |
+
msgstr "- Текущая комиссия 45%s"
|
593 |
+
|
594 |
+
#: themes/default/SQ_BlockAffiliate.php:38
|
595 |
+
msgid "- No cost"
|
596 |
+
msgstr "- Бесплатно"
|
597 |
+
|
598 |
+
#: themes/default/SQ_BlockAffiliate.php:43
|
599 |
+
msgid "- Monthly payments in your Paypal account"
|
600 |
+
msgstr "- Ежемесячные платежи на Ваш счет Paypal"
|
601 |
+
|
602 |
+
#: themes/default/SQ_BlockAffiliate.php:50
|
603 |
+
msgid ""
|
604 |
+
"Your affiliate account is set and ready to go. Above you have the affiliate "
|
605 |
+
"link. "
|
606 |
+
msgstr ""
|
607 |
+
"Ваш партнерский счет установлен и готов к работе. Выше партнерская ссылка."
|
608 |
+
|
609 |
+
#: themes/default/SQ_BlockAffiliate.php:52
|
610 |
+
#, php-format
|
611 |
+
msgid "Check your affiliate page: %sAffiliate page%s"
|
612 |
+
msgstr "Проверьте вашу партнерскую страницу: %sпартнерская страница%s"
|
613 |
+
|
614 |
+
#: themes/default/SQ_BlockAffiliate.php:54
|
615 |
+
#, php-format
|
616 |
+
msgid "%sTerms of Use for our Affiliate Program%s"
|
617 |
+
msgstr "%sУсловия использования нашей партнерской программы%s"
|
618 |
+
|
619 |
+
#: themes/default/SQ_BlockAffiliate.php:58
|
620 |
+
msgid ""
|
621 |
+
"After you connect to Squirrly you can begin to use your free Squirrly "
|
622 |
+
"affiliate link immediately!"
|
623 |
+
msgstr ""
|
624 |
+
"После подключения к Squirrly вы сразуже можете начать использовать "
|
625 |
+
"бесплатную партнерскую ссылку Squirrly!"
|
626 |
+
|
627 |
+
#: themes/default/SQ_BlockAffiliate.php:66
|
628 |
+
msgid "Squirrly banners you can use"
|
629 |
+
msgstr "Баннеры Squirrly которые вы можете использовать"
|
630 |
+
|
631 |
+
#: themes/default/SQ_BlockAffiliate.php:87 themes/default/SQ_BlockHelp.php:20
|
632 |
+
#: themes/default/SQ_Menu.php:4
|
633 |
+
#, fuzzy
|
634 |
+
msgid "See Squirrly in action"
|
635 |
+
msgstr "Опции Squirrly"
|
636 |
+
|
637 |
+
#: themes/default/SQ_BlockAffiliate.php:88 themes/default/SQ_BlockHelp.php:21
|
638 |
+
msgid "See dashboard"
|
639 |
+
msgstr "Перейти на панель управления"
|
640 |
+
|
641 |
+
#: themes/default/SQ_BlockAffiliate.php:89
|
642 |
+
#: themes/default/SQ_BlockDashboard.php:54 themes/default/SQ_BlockHelp.php:22
|
643 |
+
msgid "Go to settings"
|
644 |
+
msgstr "Перейдите в раздел Настройки"
|
645 |
+
|
646 |
+
#: themes/default/SQ_BlockDashboard.php:5
|
647 |
+
msgid "Squirrly dashboard"
|
648 |
+
msgstr "Панель управления Squirrly "
|
649 |
+
|
650 |
+
#: themes/default/SQ_BlockDashboard.php:8
|
651 |
+
msgid "User level"
|
652 |
+
msgstr "Уровень пользователя"
|
653 |
+
|
654 |
+
#: themes/default/SQ_BlockDashboard.php:12
|
655 |
+
msgid "Beginner"
|
656 |
+
msgstr "Начинающий"
|
657 |
+
|
658 |
+
#: themes/default/SQ_BlockDashboard.php:14
|
659 |
+
msgid "Advanced"
|
660 |
+
msgstr "Продвинутый"
|
661 |
+
|
662 |
+
#: themes/default/SQ_BlockDashboard.php:18
|
663 |
+
msgid "Select Advanced only if you have SEO knowledge."
|
664 |
+
msgstr ""
|
665 |
+
"Выберите « Продвинутый » только если у вас есть знания в сфере SEO "
|
666 |
+
"(поисковой оптимизации)."
|
667 |
+
|
668 |
+
#: themes/default/SQ_BlockDashboard.php:21
|
669 |
+
msgid "What does the Beginner option bring you:"
|
670 |
+
msgstr ""
|
671 |
+
|
672 |
+
#: themes/default/SQ_BlockDashboard.php:23
|
673 |
+
msgid ""
|
674 |
+
"Squirrly <strong>finds the optimum Title and Description</strong> for each "
|
675 |
+
"page of your blog but you can still customize the home page Title and "
|
676 |
+
"Description if you want."
|
677 |
+
msgstr ""
|
678 |
+
|
679 |
+
#: themes/default/SQ_BlockDashboard.php:24
|
680 |
+
msgid ""
|
681 |
+
"Squirrly <strong>manages the sitemap</strong> for your blog and pings it to "
|
682 |
+
"Google and Bing every time you add a new article. This ensures that your "
|
683 |
+
"articles get indexed much faster."
|
684 |
+
msgstr ""
|
685 |
+
|
686 |
+
#: themes/default/SQ_BlockDashboard.php:25
|
687 |
+
msgid ""
|
688 |
+
"Squirrly <strong>adds the Facebook required meta</strong>, so that when your "
|
689 |
+
"readers share your page or article, it looks really good."
|
690 |
+
msgstr ""
|
691 |
+
|
692 |
+
#: themes/default/SQ_BlockDashboard.php:26
|
693 |
+
msgid ""
|
694 |
+
"You can connect your site with your <strong>Google Plus</strong> and "
|
695 |
+
"<strong>Google Analytics</strong> accounts."
|
696 |
+
msgstr ""
|
697 |
+
|
698 |
+
#: themes/default/SQ_BlockDashboard.php:27
|
699 |
+
msgid ""
|
700 |
+
"You can add the site icon (also known as favicon) and Squirrly will set it "
|
701 |
+
"up to look good for <strong>Apple devices</strong>."
|
702 |
+
msgstr ""
|
703 |
+
|
704 |
+
#: themes/default/SQ_BlockDashboard.php:32
|
705 |
+
msgid "What does the Advanced option bring you:"
|
706 |
+
msgstr ""
|
707 |
+
|
708 |
+
#: themes/default/SQ_BlockDashboard.php:34
|
709 |
+
msgid "More <strong>SEO options</strong> are available on the Settings page."
|
710 |
+
msgstr ""
|
711 |
+
|
712 |
+
#: themes/default/SQ_BlockDashboard.php:35
|
713 |
+
msgid ""
|
714 |
+
"You can connect your site with <strong>Google Webmaster Tools</strong>, "
|
715 |
+
"<strong>Bing Webmaster Tools</strong> and <strong>Facebook Insights</strong>."
|
716 |
+
msgstr ""
|
717 |
+
|
718 |
+
#: themes/default/SQ_BlockDashboard.php:36
|
719 |
+
msgid ""
|
720 |
+
"You can see the <strong>Snippet</strong> when you edit your Post or Page."
|
721 |
+
msgstr ""
|
722 |
+
|
723 |
+
#: themes/default/SQ_BlockDashboard.php:37
|
724 |
+
msgid ""
|
725 |
+
"You can <strong>customize the Title and Description</strong> of each Post/"
|
726 |
+
"Page from within the snippet."
|
727 |
+
msgstr ""
|
728 |
+
|
729 |
+
#: themes/default/SQ_BlockHelp.php:4
|
730 |
+
msgid ""
|
731 |
+
"With Squirrly SEO, your Wordpress will get Excellent SEO on each article you "
|
732 |
+
"write."
|
733 |
+
msgstr ""
|
734 |
+
"С Squirrly SEO, ваш Wordpress получит отличное SEO для каждой вами написаной "
|
735 |
+
"статьи."
|
736 |
+
|
737 |
+
#: themes/default/SQ_BlockHelp.php:6
|
738 |
+
msgid "SEO Software"
|
739 |
+
msgstr "Программное обеспечение для SEO"
|
740 |
+
|
741 |
+
#: themes/default/SQ_BlockHelp.php:6
|
742 |
+
msgid ""
|
743 |
+
"delivered as a plugin for Wordpress. <br /><br />We connect your wordpress "
|
744 |
+
"with Squirrly, so that we can find the best SEO opportunities, give you "
|
745 |
+
"reports and analyse your competitors."
|
746 |
+
msgstr ""
|
747 |
+
"поставляется в виде плагина для WordPress. <br /> <br /> Мы подключаем "
|
748 |
+
"WordPress к Squirrly, чтобы найти лучшие возможности SEO, предоставить вам "
|
749 |
+
"отчеты и анализировать ваших конкурентов."
|
750 |
+
|
751 |
+
#: themes/default/SQ_BlockHelp.php:19
|
752 |
+
msgid "Don't show this page"
|
753 |
+
msgstr "Больше не показывать эту страницу"
|
754 |
+
|
755 |
+
#: themes/default/SQ_Blocklogin.php:2
|
756 |
+
msgid "Squirrly.co Login"
|
757 |
+
msgstr "Войти на Squirrly.co"
|
758 |
+
|
759 |
+
#: themes/default/SQ_Blocklogin.php:9
|
760 |
+
msgid "Email:"
|
761 |
+
msgstr "Электронная почта:"
|
762 |
+
|
763 |
+
#: themes/default/SQ_Blocklogin.php:10
|
764 |
+
msgid "Password:"
|
765 |
+
msgstr "Пароль:"
|
766 |
+
|
767 |
+
#: themes/default/SQ_Blocklogin.php:11
|
768 |
+
msgid "Login"
|
769 |
+
msgstr "Войти"
|
770 |
+
|
771 |
+
#: themes/default/SQ_Blocklogin.php:12
|
772 |
+
msgid "Register"
|
773 |
+
msgstr "Регистрация"
|
774 |
+
|
775 |
+
#: themes/default/SQ_Blocklogin.php:12
|
776 |
+
msgid "Register to Squirrly.co"
|
777 |
+
msgstr "Зарегистрируйтесь на Squirrly.co"
|
778 |
+
|
779 |
+
#: themes/default/SQ_Blocklogin.php:13
|
780 |
+
msgid "Lost password?"
|
781 |
+
msgstr "Забыли пароль?"
|
782 |
+
|
783 |
+
#: themes/default/SQ_Blocklogin.php:13
|
784 |
+
msgid "Lost password"
|
785 |
+
msgstr "Восстановить пароль"
|
786 |
+
|
787 |
+
#: themes/default/SQ_Blocklogin.php:17
|
788 |
+
msgid "Enter your email"
|
789 |
+
msgstr "Введите адрес электронной почты"
|
790 |
+
|
791 |
+
#: themes/default/SQ_Blocklogin.php:18
|
792 |
+
msgid "Your E-mail:"
|
793 |
+
msgstr "Ваш адрес электронной почты:"
|
794 |
+
|
795 |
+
#: themes/default/SQ_Blocklogin.php:19
|
796 |
+
msgid "Sign Up"
|
797 |
+
msgstr "Зарегистрироваться"
|
798 |
+
|
799 |
+
#: themes/default/SQ_Blocklogin.php:20
|
800 |
+
msgid "I already have an account"
|
801 |
+
msgstr "У меня уже есть аккаунт"
|
802 |
+
|
803 |
+
#: themes/default/SQ_Blocklogin.php:21
|
804 |
+
msgid "This email connects you to Squirrly.co"
|
805 |
+
msgstr "Эта электронная почта связывает вас с Squirrly.co"
|
806 |
+
|
807 |
+
#: themes/default/SQ_Blocklogin.php:30
|
808 |
+
msgid "The email address is invalid!"
|
809 |
+
msgstr "Адрес электронной почты недействителен!"
|
810 |
+
|
811 |
+
#: themes/default/SQ_Blocklogin.php:31
|
812 |
+
msgid "Click on Sign Up button and try again ..."
|
813 |
+
msgstr "Нажмите на кнопку Зарегистрироваться и попробуйте еще раз ..."
|
814 |
+
|
815 |
+
#: themes/default/SQ_Blocklogin.php:32
|
816 |
+
msgid "An error occured while logging in!"
|
817 |
+
msgstr "Произошла ошибка при входе в систему!"
|
818 |
+
|
819 |
+
#: themes/default/SQ_Blocklogin.php:33
|
820 |
+
msgid "Connecting ..."
|
821 |
+
msgstr "Подключение ..."
|
822 |
+
|
823 |
+
#: themes/default/SQ_Blocklogin.php:40
|
824 |
+
msgid "Congratulations! Now write a new article with:"
|
825 |
+
msgstr ""
|
826 |
+
|
827 |
+
#: themes/default/SQ_Blocklogin.php:43
|
828 |
+
msgid ""
|
829 |
+
"<strong>Keyword Research and Analysis</strong>: find the keywords that are "
|
830 |
+
"easier to rank for."
|
831 |
+
msgstr ""
|
832 |
+
|
833 |
+
#: themes/default/SQ_Blocklogin.php:44
|
834 |
+
msgid ""
|
835 |
+
"<strong>SEO Live Assistant</strong>: Your Wordpress gives you SEO adivce as "
|
836 |
+
"you type your article."
|
837 |
+
msgstr ""
|
838 |
+
|
839 |
+
#: themes/default/SQ_Blocklogin.php:45
|
840 |
+
msgid ""
|
841 |
+
"<strong>Inspiration box</strong>: get images you can use for free, tweets "
|
842 |
+
"you can quote and get up to date with latest news about your subject."
|
843 |
+
msgstr ""
|
844 |
+
|
845 |
+
#: themes/default/SQ_Blocklogin.php:46
|
846 |
+
msgid ""
|
847 |
+
"<strong>Article Rank</strong>: Measure and Monitor the impact of SEO and "
|
848 |
+
"Social Signals for each of your articles."
|
849 |
+
msgstr ""
|
850 |
+
|
851 |
+
#: themes/default/SQ_Blockresearch.php:2
|
852 |
+
msgid "Squirrly Keyword Research"
|
853 |
+
msgstr "Поиск ключевых слов Squirrly"
|
854 |
+
|
855 |
+
#: themes/default/SQ_Blockresearch.php:3
|
856 |
+
msgid "Clear"
|
857 |
+
msgstr "Очистить"
|
858 |
+
|
859 |
+
#: themes/default/SQ_Blockresearch.php:9
|
860 |
+
msgid "Keyword:"
|
861 |
+
msgstr "Ключевое слово:"
|
862 |
+
|
863 |
+
#: themes/default/SQ_Blockresearch.php:11 themes/default/SQ_Blocksearch.php:23
|
864 |
+
msgid "Use this keyword"
|
865 |
+
msgstr "Используйте это ключевое слово"
|
866 |
+
|
867 |
+
#: themes/default/SQ_Blockresearch.php:20
|
868 |
+
msgid "+ Add keyword"
|
869 |
+
msgstr "+ Добавить ключевое слово"
|
870 |
+
|
871 |
+
#: themes/default/SQ_Blockresearch.php:21
|
872 |
+
msgid "Do the research"
|
873 |
+
msgstr "Сделать поиск"
|
874 |
+
|
875 |
+
#: themes/default/SQ_Blockresearch.php:24
|
876 |
+
msgid "Enter even more keywords."
|
877 |
+
msgstr "Введите даже больше ключевых слов."
|
878 |
+
|
879 |
+
#: themes/default/SQ_Blockresearch.php:25
|
880 |
+
msgid "Let some keywords for the next time as well!"
|
881 |
+
msgstr "Оставить некоторые ключевые слова на следующий раз!"
|
882 |
+
|
883 |
+
#: themes/default/SQ_Blocksearch.php:3
|
884 |
+
msgid "Optimize for Keyword"
|
885 |
+
msgstr "Оптимизация ключевых слов"
|
886 |
+
|
887 |
+
#: themes/default/SQ_Blocksearch.php:10
|
888 |
+
msgid "Enter a keyword"
|
889 |
+
msgstr "Введите ключевое слово"
|
890 |
+
|
891 |
+
#: themes/default/SQ_Blocksearch.php:10
|
892 |
+
msgid "for Squirrly Live SEO optimization"
|
893 |
+
msgstr "для оптимизации Squirrly Live SEO"
|
894 |
+
|
895 |
+
#: themes/default/SQ_Blocksearch.php:22
|
896 |
+
msgid "Do a research"
|
897 |
+
msgstr "Сделать поиск"
|
898 |
+
|
899 |
+
#: themes/default/SQ_Blocksearch.php:27
|
900 |
+
msgid "Enter a keyword above!"
|
901 |
+
msgstr "Введите выше ключевое слово!"
|
902 |
+
|
903 |
+
#: themes/default/SQ_Blocksearch.php:28
|
904 |
+
msgid "I have more then one keyword!"
|
905 |
+
msgstr "У меня более одного ключевого слова!"
|
906 |
+
|
907 |
+
#: themes/default/SQ_Blocksearch.php:34
|
908 |
+
msgid "Images"
|
909 |
+
msgstr "Изображения"
|
910 |
+
|
911 |
+
#: themes/default/SQ_Blocksearch.php:35
|
912 |
+
msgid "Twitter"
|
913 |
+
msgstr "Twitter"
|
914 |
+
|
915 |
+
#: themes/default/SQ_Blocksearch.php:36
|
916 |
+
msgid "Wiki"
|
917 |
+
msgstr "Wiki"
|
918 |
+
|
919 |
+
#: themes/default/SQ_Blocksearch.php:37
|
920 |
+
msgid "News"
|
921 |
+
msgstr "Новости"
|
922 |
+
|
923 |
+
#: themes/default/SQ_Blocksearch.php:38
|
924 |
+
msgid "Blogs"
|
925 |
+
msgstr "Блоги"
|
926 |
+
|
927 |
+
#: themes/default/SQ_Blocksearch.php:39
|
928 |
+
msgid "My articles"
|
929 |
+
msgstr "Мои статьи"
|
930 |
+
|
931 |
+
#: themes/default/SQ_Blocksearch.php:44
|
932 |
+
msgid "Show only Copyright Free images"
|
933 |
+
msgstr "Показать только изображения свободные от авторских прав "
|
934 |
+
|
935 |
+
#: themes/default/SQ_Blockseo.php:3
|
936 |
+
msgid "Squirrly LIVE SEO assistant"
|
937 |
+
msgstr "Ассистент Squirrly LIVE SEO"
|
938 |
+
|
939 |
+
#: themes/default/SQ_BlockSupport.php:6
|
940 |
+
msgid "Go to Profile"
|
941 |
+
msgstr "Перейти к профилю"
|
942 |
+
|
943 |
+
#: themes/default/SQ_BlockSupport.php:6
|
944 |
+
msgid "Profile"
|
945 |
+
msgstr "Профиль"
|
946 |
+
|
947 |
+
#: themes/default/SQ_BlockSupport.php:10
|
948 |
+
msgid "Support"
|
949 |
+
msgstr "Поддерживать"
|
950 |
+
|
951 |
+
#: themes/default/SQ_BlockSupport.php:13
|
952 |
+
msgid "Need Help with Squirrly SEO?"
|
953 |
+
msgstr "Нужна помощь в Squirrly SEO?"
|
954 |
+
|
955 |
+
#: themes/default/SQ_BlockSupport.php:17
|
956 |
+
msgid "Send Question"
|
957 |
+
msgstr "Послать вопрос"
|
958 |
+
|
959 |
+
#: themes/default/SQ_BlockSupport.php:20 themes/default/SQ_BlockSupport.php:52
|
960 |
+
msgid "Go to:"
|
961 |
+
msgstr "Перейти к:"
|
962 |
+
|
963 |
+
#: themes/default/SQ_BlockSupport.php:20 themes/default/SQ_BlockSupport.php:52
|
964 |
+
msgid "support page"
|
965 |
+
msgstr "страница поддержки"
|
966 |
+
|
967 |
+
#: themes/default/SQ_BlockSupport.php:25
|
968 |
+
msgid "How was your Squirrly experience today?"
|
969 |
+
msgstr "Каково вам было сегодня работать с Squirrly ?"
|
970 |
+
|
971 |
+
#: themes/default/SQ_BlockSupport.php:32
|
972 |
+
msgid "How was Squirrly today?"
|
973 |
+
msgstr "Каким был Squirrly сегодня?"
|
974 |
+
|
975 |
+
#: themes/default/SQ_BlockSupport.php:45
|
976 |
+
msgid "Please tell us why?"
|
977 |
+
msgstr "Расскажите, пожалуйста, почему?"
|
978 |
+
|
979 |
+
#: themes/default/SQ_BlockSupport.php:48
|
980 |
+
msgid "Send feedback"
|
981 |
+
msgstr "Отправить отзыв"
|
982 |
+
|
983 |
+
#: themes/default/SQ_BlockSupport.php:57
|
984 |
+
msgid "Thank you! You can send us a happy face tomorow too."
|
985 |
+
msgstr "Спасибо! завтра тоже Вы можете отправить нам Смайлик."
|
986 |
+
|
987 |
+
#: themes/default/SQ_Menu.php:4
|
988 |
+
msgid "Squirrly settings"
|
989 |
+
msgstr "Настройки Squirrly "
|
990 |
+
|
991 |
+
#: themes/default/SQ_Menu.php:4 themes/default/SQ_Menu.php:321
|
992 |
+
msgid "Save settings"
|
993 |
+
msgstr "Сохранить настройки"
|
994 |
+
|
995 |
+
#: themes/default/SQ_Menu.php:15
|
996 |
+
msgid "Let Squirrly automatically optimize my blog"
|
997 |
+
msgstr "Позволить Squirrly автоматически оптимизировать мой блог"
|
998 |
+
|
999 |
+
#: themes/default/SQ_Menu.php:29
|
1000 |
+
msgid "What does Squirrly automatically do for SEO?"
|
1001 |
+
msgstr "Что Squirrly делает автоматически для SEO (поисковой оптимизации) ?"
|
1002 |
+
|
1003 |
+
#: themes/default/SQ_Menu.php:45
|
1004 |
+
msgid "Add <strong>canonical</strong> link in home page"
|
1005 |
+
msgstr "Добавить <strong>canonical</strong> на главную страницу"
|
1006 |
+
|
1007 |
+
#: themes/default/SQ_Menu.php:62
|
1008 |
+
msgid "Add the <strong>XML Sitemap</strong> for search engines"
|
1009 |
+
msgstr "Добавить <strong>XML Карту сайта </strong> для поисковых систем"
|
1010 |
+
|
1011 |
+
#: themes/default/SQ_Menu.php:79
|
1012 |
+
msgid ""
|
1013 |
+
"Add the required METAs for home page (<strong>icon, author, language, dc "
|
1014 |
+
"publisher</strong>, etc.)"
|
1015 |
+
msgstr ""
|
1016 |
+
"Добавить необходимое для главной мета страницы (<strong> икона, автор, язык, "
|
1017 |
+
"издатель dc </strong>, и т.д.)"
|
1018 |
+
|
1019 |
+
#: themes/default/SQ_Menu.php:96
|
1020 |
+
msgid ""
|
1021 |
+
"Add the <strong>favicon</strong> and the <strong>icon for Apple devices</"
|
1022 |
+
"strong>."
|
1023 |
+
msgstr ""
|
1024 |
+
"Добавить <strong>значок</strong> и <strong> иконки для устройств компании "
|
1025 |
+
"Apple</strong>."
|
1026 |
+
|
1027 |
+
#: themes/default/SQ_Menu.php:113
|
1028 |
+
msgid ""
|
1029 |
+
"Add the <strong>Facebook meta objects</strong> for a good looking share. "
|
1030 |
+
msgstr "Добавить<strong> мета-объекты Facebook</strong> для красивого вида."
|
1031 |
+
|
1032 |
+
#: themes/default/SQ_Menu.php:130
|
1033 |
+
msgid "Add the <strong>Twitter card</strong> in your tweets. "
|
1034 |
+
msgstr "Добавить<strong>карту Twitter</strong> в ваши твиты."
|
1035 |
+
|
1036 |
+
#: themes/default/SQ_Menu.php:131
|
1037 |
+
msgid "Your twitter account: "
|
1038 |
+
msgstr "Ваш счет twitter:"
|
1039 |
+
|
1040 |
+
#: themes/default/SQ_Menu.php:141
|
1041 |
+
msgid "First page optimization (Title, Description, Keywords)"
|
1042 |
+
msgstr "Первая оптимизации страницы (Название, описание, ключевые слова)"
|
1043 |
+
|
1044 |
+
#: themes/default/SQ_Menu.php:157
|
1045 |
+
msgid "Add the correct <strong>title</strong> in the home page"
|
1046 |
+
msgstr "Добавить правильное <strong>название</strong> на главной странице"
|
1047 |
+
|
1048 |
+
#: themes/default/SQ_Menu.php:174
|
1049 |
+
msgid ""
|
1050 |
+
"Add the correct <strong>description</strong> and <strong>keywords</strong> "
|
1051 |
+
"in home page"
|
1052 |
+
msgstr ""
|
1053 |
+
"Добавить правильное <strong>описание</strong> и <strong>ключевые слова</"
|
1054 |
+
"strong> на всех страницах"
|
1055 |
+
|
1056 |
+
#: themes/default/SQ_Menu.php:190
|
1057 |
+
msgid "Auto"
|
1058 |
+
msgstr "Автоматически "
|
1059 |
+
|
1060 |
+
#: themes/default/SQ_Menu.php:192
|
1061 |
+
msgid "Custom"
|
1062 |
+
msgstr "Индивидуальное"
|
1063 |
+
|
1064 |
+
#: themes/default/SQ_Menu.php:195
|
1065 |
+
msgid "Home page SEO optimization"
|
1066 |
+
msgstr "для оптимизации Squirrly Live SEO"
|
1067 |
+
|
1068 |
+
#: themes/default/SQ_Menu.php:200
|
1069 |
+
msgid "Title:"
|
1070 |
+
msgstr "Название:"
|
1071 |
+
|
1072 |
+
#: themes/default/SQ_Menu.php:201
|
1073 |
+
msgid "Tips: Length 10-75 chars"
|
1074 |
+
msgstr "Советы: длина 10-75 символов"
|
1075 |
+
|
1076 |
+
#: themes/default/SQ_Menu.php:204
|
1077 |
+
msgid "Description:"
|
1078 |
+
msgstr "Описание:"
|
1079 |
+
|
1080 |
+
#: themes/default/SQ_Menu.php:205
|
1081 |
+
msgid "Tips: Length 70-165 chars"
|
1082 |
+
msgstr "Советы: длина 70-165 символов"
|
1083 |
+
|
1084 |
+
#: themes/default/SQ_Menu.php:208
|
1085 |
+
msgid "Keywords:"
|
1086 |
+
msgstr "Ключевые слова:"
|
1087 |
+
|
1088 |
+
#: themes/default/SQ_Menu.php:209
|
1089 |
+
msgid "Tips: 2-4 keywords"
|
1090 |
+
msgstr "Советы: 2-4 ключевых слов"
|
1091 |
+
|
1092 |
+
#: themes/default/SQ_Menu.php:220
|
1093 |
+
msgid "Check with google ..."
|
1094 |
+
msgstr "Проверьте с Google..."
|
1095 |
+
|
1096 |
+
#: themes/default/SQ_Menu.php:223
|
1097 |
+
msgid ""
|
1098 |
+
"If you don't see any changes in custom optimization, check if another SEO "
|
1099 |
+
"plugin affects Squirrly SEO"
|
1100 |
+
msgstr ""
|
1101 |
+
"Если вы не видите изменений в пользовательской оптимизации, убедитесь, что "
|
1102 |
+
"другие плагины не влияют на SEO Squirrly"
|
1103 |
+
|
1104 |
+
#: themes/default/SQ_Menu.php:233
|
1105 |
+
msgid "Squirrly Options"
|
1106 |
+
msgstr "Опции Squirrly"
|
1107 |
+
|
1108 |
+
#: themes/default/SQ_Menu.php:242
|
1109 |
+
msgid "Let Squirrly warn me if there are errors related to SEO settings"
|
1110 |
+
msgstr ""
|
1111 |
+
"Позвольте Squirrly вас предупреждать в случае, ошибок, связанных с "
|
1112 |
+
"настройками SEO"
|
1113 |
+
|
1114 |
+
#: themes/default/SQ_Menu.php:253
|
1115 |
+
msgid ""
|
1116 |
+
"Show <strong>\"Enter a keyword\"</strong> bubble when posting a new article."
|
1117 |
+
msgstr ""
|
1118 |
+
"Показать пузырь <strong>\"Введите ключевое слово \"</strong> при написании "
|
1119 |
+
"новой статьи"
|
1120 |
+
|
1121 |
+
#: themes/default/SQ_Menu.php:264
|
1122 |
+
msgid ""
|
1123 |
+
"Always show <strong>Keyword Informations</strong> about the selected keyword."
|
1124 |
+
msgstr ""
|
1125 |
+
"Всегда показывать <strong>Информацию (о Ключевых словах) </strong> о "
|
1126 |
+
"выбранных ключевых словах."
|
1127 |
+
|
1128 |
+
#: themes/default/SQ_Menu.php:272
|
1129 |
+
msgid "Change the Website Icon"
|
1130 |
+
msgstr "Изменить Икону Сайта"
|
1131 |
+
|
1132 |
+
#: themes/default/SQ_Menu.php:275
|
1133 |
+
msgid "File types: JPG, JPEG, GIF and PNG."
|
1134 |
+
msgstr "Типы файлов: JPG, JPEG, GIF и PNG"
|
1135 |
+
|
1136 |
+
#: themes/default/SQ_Menu.php:278
|
1137 |
+
msgid "Upload file:"
|
1138 |
+
msgstr "Загрузить файл:"
|
1139 |
+
|
1140 |
+
#: themes/default/SQ_Menu.php:283
|
1141 |
+
msgid "Upload"
|
1142 |
+
msgstr "Загружать "
|
1143 |
+
|
1144 |
+
#: themes/default/SQ_Menu.php:287
|
1145 |
+
#, php-format
|
1146 |
+
msgid ""
|
1147 |
+
"You can use %shttp://convertico.com/%s to convert your photo to icon and "
|
1148 |
+
"upload it here after that."
|
1149 |
+
msgstr ""
|
1150 |
+
"Вы можете использовать %shttp://convertico.com/%s чтобы конвертировать ваши "
|
1151 |
+
"фотографии в иконки и загрузить их сюда."
|
1152 |
+
|
1153 |
+
#: themes/default/SQ_Menu.php:288
|
1154 |
+
msgid ""
|
1155 |
+
"If you don't see the new icon in your browser, empty the browser cache and "
|
1156 |
+
"refresh the page."
|
1157 |
+
msgstr ""
|
1158 |
+
"Если вы не видите новый значок в вашем браузере, очистьте кэш браузера и "
|
1159 |
+
"обновите страницу."
|
1160 |
+
|
1161 |
+
#: themes/default/SQ_Menu.php:292
|
1162 |
+
msgid "Tool for Search Engines"
|
1163 |
+
msgstr "Инструмент для поисковых систем"
|
1164 |
+
|
1165 |
+
#: themes/default/SQ_Menu.php:296
|
1166 |
+
msgid "Google Plus URL:"
|
1167 |
+
msgstr "Google Plus URL:"
|
1168 |
+
|
1169 |
+
#: themes/default/SQ_Menu.php:300
|
1170 |
+
#, php-format
|
1171 |
+
msgid "Google META verification code for %sWebmaster Tool%s`:"
|
1172 |
+
msgstr "Google META код проверки для %sWebmaster Tool%s`:"
|
1173 |
+
|
1174 |
+
#: themes/default/SQ_Menu.php:304
|
1175 |
+
#, php-format
|
1176 |
+
msgid "Google %sAnalytics ID%s`:"
|
1177 |
+
msgstr "Google %sAnalytics ID%s`:"
|
1178 |
+
|
1179 |
+
#: themes/default/SQ_Menu.php:308
|
1180 |
+
#, php-format
|
1181 |
+
msgid "Facebook META code (for %sInsights%s )`:"
|
1182 |
+
msgstr "Код Facebook META (для %sInsights%s )`:"
|
1183 |
+
|
1184 |
+
#: themes/default/SQ_Menu.php:312
|
1185 |
+
#, php-format
|
1186 |
+
msgid "Bing META code (for %sWebmaster Tool%s )`:"
|
1187 |
+
msgstr "Код Bing META (для %sWebmaster Tool%s )`: "
|
1188 |
+
|
1189 |
+
#~ msgid "Can not connect to Squirrly. Error: "
|
1190 |
+
#~ msgstr "Не удается подключиться к Squirrly. Ошибка:"
|
1191 |
+
|
1192 |
+
#~ msgid "Write a new post with Squirrly"
|
1193 |
+
#~ msgstr "Написать новый пост с Squirrly"
|
models/SQ_BlockPostsAnalytics.php
ADDED
@@ -0,0 +1,466 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Model_SQ_BlockPostsAnalytics extends WP_List_Table {
|
4 |
+
|
5 |
+
public $_column_headers;
|
6 |
+
public $posts; //save post list for Squirrly call
|
7 |
+
private $order_posts;
|
8 |
+
|
9 |
+
function __construct() {
|
10 |
+
$this->posts = array();
|
11 |
+
$this->order_posts = array();
|
12 |
+
}
|
13 |
+
|
14 |
+
function wp_edit_posts_query($q = false) {
|
15 |
+
global $current_user;
|
16 |
+
$post__in = array(0);
|
17 |
+
if (false === $q)
|
18 |
+
$q = $_GET;
|
19 |
+
|
20 |
+
$q['m'] = isset($q['m']) ? (int) $q['m'] : 0;
|
21 |
+
$q['cat'] = isset($q['cat']) ? (int) $q['cat'] : 0;
|
22 |
+
$post_stati = get_post_stati();
|
23 |
+
|
24 |
+
if (isset($q['author'])) {
|
25 |
+
$author = $q['author'];
|
26 |
+
} else {
|
27 |
+
if (isset($current_user->caps['contributor']) || isset($current_user->caps['author'])) {
|
28 |
+
$author = $current_user->ID;
|
29 |
+
} else {
|
30 |
+
$author = '';
|
31 |
+
}
|
32 |
+
}
|
33 |
+
|
34 |
+
if (isset($q['type']) && in_array($q['type'], get_post_types())) {
|
35 |
+
$post_type = $q['type'];
|
36 |
+
$avail_post_stati = get_available_post_statuses($post_type);
|
37 |
+
} else {
|
38 |
+
$post_type = array('post', 'page');
|
39 |
+
$avail_post_stati = get_available_post_statuses('post');
|
40 |
+
|
41 |
+
$args = array(
|
42 |
+
'_builtin' => false,
|
43 |
+
);
|
44 |
+
$output = 'objects'; // names or objects
|
45 |
+
$post_types = get_post_types($args, $output);
|
46 |
+
|
47 |
+
foreach ($post_types as $other_post_type) {
|
48 |
+
if ($other_post_type->public) {
|
49 |
+
array_push($post_type, $other_post_type->query_var);
|
50 |
+
}
|
51 |
+
}
|
52 |
+
}
|
53 |
+
if (isset($q['post_status']) && in_array($q['post_status'], $post_stati)) {
|
54 |
+
$post_status = $q['post_status'];
|
55 |
+
$perm = 'readable';
|
56 |
+
} else {
|
57 |
+
$post_status = 'publish';
|
58 |
+
$perm = 'readable';
|
59 |
+
}
|
60 |
+
|
61 |
+
if (isset($q['orderby']))
|
62 |
+
$orderby = $q['orderby'];
|
63 |
+
elseif (isset($q['post_status']) && in_array($q['post_status'], array('pending', 'draft')))
|
64 |
+
$orderby = 'modified';
|
65 |
+
|
66 |
+
if (isset($q['order']))
|
67 |
+
$order = $q['order'];
|
68 |
+
elseif (isset($q['post_status']) && 'pending' == $q['post_status'])
|
69 |
+
$order = 'ASC';
|
70 |
+
|
71 |
+
///////////Squirrly Filters
|
72 |
+
if (isset($q['orderby']) && $q['orderby'] === 'type') {
|
73 |
+
add_filter('posts_request', array($this, 'order_by_type'));
|
74 |
+
}
|
75 |
+
|
76 |
+
$meta_key = '';
|
77 |
+
$posts = SQ_ObjController::getModel('SQ_Post')->getPostWithKeywords();
|
78 |
+
if ($posts !== false && !empty($posts)) {
|
79 |
+
//sort descending
|
80 |
+
foreach ($posts as $post) {
|
81 |
+
if (!isset($post->meta_value->keyword) || $post->meta_value->keyword == '') {
|
82 |
+
continue;
|
83 |
+
}
|
84 |
+
|
85 |
+
//if rank filter
|
86 |
+
if (isset($q['rank'])) {
|
87 |
+
if (!isset($post->meta_value->rank) || $q['rank'] <> $post->meta_value->rank) {
|
88 |
+
continue;
|
89 |
+
}
|
90 |
+
}
|
91 |
+
//if keyword filter
|
92 |
+
if (isset($q['keyword'])) {
|
93 |
+
if (!isset($post->meta_value->keyword) || $q['keyword'] <> $post->meta_value->keyword) {
|
94 |
+
continue;
|
95 |
+
}
|
96 |
+
}
|
97 |
+
|
98 |
+
//if rank order
|
99 |
+
if (isset($q['orderby']) && $q['orderby'] == 'rank') {
|
100 |
+
$count_p = 999;
|
101 |
+
if (isset($post->meta_value->rank)) {
|
102 |
+
if ($post->meta_value->rank > 0) {
|
103 |
+
$this->order_posts[$post->meta_value->rank . '_' . $post->post_id] = $post->post_id;
|
104 |
+
} else {
|
105 |
+
$this->order_posts[$count_p . '_' . $post->post_id] = $post->post_id;
|
106 |
+
$count_p++;
|
107 |
+
}
|
108 |
+
}
|
109 |
+
}
|
110 |
+
|
111 |
+
$post__in[] = $post->post_id;
|
112 |
+
}
|
113 |
+
|
114 |
+
if (isset($q['orderby']) && $q['orderby'] === 'rank') {
|
115 |
+
ksort($this->order_posts, SORT_NUMERIC);
|
116 |
+
// $meta_key = 'sq_post_keyword_rank';
|
117 |
+
// $orderby = 'meta_value_num';
|
118 |
+
add_filter('posts_request', array($this, 'order_by_rank'));
|
119 |
+
}
|
120 |
+
}
|
121 |
+
//////////////
|
122 |
+
|
123 |
+
$per_page = 'edit_post_per_page';
|
124 |
+
$posts_per_page = (int) get_user_option($per_page);
|
125 |
+
if (empty($posts_per_page) || $posts_per_page < 1)
|
126 |
+
$posts_per_page = 20;
|
127 |
+
|
128 |
+
$posts_per_page = apply_filters($per_page, $posts_per_page);
|
129 |
+
$posts_per_page = apply_filters('edit_posts_per_page', $posts_per_page, 'post');
|
130 |
+
$query = compact('post_type', 'author', 'post_status', 'perm', 'order', 'orderby', 'meta_key', 'posts_per_page');
|
131 |
+
|
132 |
+
$query['post__in'] = (array) $post__in;
|
133 |
+
|
134 |
+
wp($query);
|
135 |
+
//echo '<pre>' . print_r($wp_query, true) . '</pre>';
|
136 |
+
return $avail_post_stati;
|
137 |
+
}
|
138 |
+
|
139 |
+
function order_by_type($query) {
|
140 |
+
global $wpdb;
|
141 |
+
$query = str_replace("ORDER BY {$wpdb->posts}.post_date", "ORDER BY {$wpdb->posts}.post_type", $query);
|
142 |
+
return $query;
|
143 |
+
}
|
144 |
+
|
145 |
+
function order_by_rank($query) {
|
146 |
+
global $wpdb;
|
147 |
+
if (!empty($this->order_posts)) {
|
148 |
+
$query = str_replace("ORDER BY {$wpdb->posts}.post_date", "ORDER BY FIELD({$wpdb->posts}.ID, " . join(',', $this->order_posts) . ")", $query);
|
149 |
+
}
|
150 |
+
return $query;
|
151 |
+
}
|
152 |
+
|
153 |
+
function prepare_items() {
|
154 |
+
global $avail_post_stati, $wp_query, $per_page, $mode;
|
155 |
+
|
156 |
+
$avail_post_stati = $this->wp_edit_posts_query();
|
157 |
+
|
158 |
+
$total_items = $wp_query->found_posts;
|
159 |
+
|
160 |
+
$per_page = $this->get_items_per_page('edit_post_per_page');
|
161 |
+
$per_page = apply_filters('edit_posts_per_page', $per_page, 'post');
|
162 |
+
|
163 |
+
$total_pages = $wp_query->max_num_pages;
|
164 |
+
|
165 |
+
$mode = empty($_REQUEST['mode']) ? 'list' : $_REQUEST['mode'];
|
166 |
+
|
167 |
+
$this->set_pagination_args(array(
|
168 |
+
'total_items' => $total_items,
|
169 |
+
'total_pages' => $total_pages,
|
170 |
+
'per_page' => $per_page
|
171 |
+
));
|
172 |
+
}
|
173 |
+
|
174 |
+
function get_column_info() {
|
175 |
+
if (isset($this->_column_headers))
|
176 |
+
return $this->_column_headers;
|
177 |
+
|
178 |
+
$columns = $this->get_columns();
|
179 |
+
$_sortable = apply_filters("manage_edit-post_sortable_columns", $this->get_sortable_columns());
|
180 |
+
|
181 |
+
$sortable = array();
|
182 |
+
foreach ($_sortable as $id => $data) {
|
183 |
+
if (empty($data))
|
184 |
+
continue;
|
185 |
+
|
186 |
+
$data = (array) $data;
|
187 |
+
if (!isset($data[1]))
|
188 |
+
$data[1] = false;
|
189 |
+
|
190 |
+
$sortable[$id] = $data;
|
191 |
+
}
|
192 |
+
|
193 |
+
$this->_column_headers = array($columns, $sortable);
|
194 |
+
|
195 |
+
return $this->_column_headers;
|
196 |
+
}
|
197 |
+
|
198 |
+
function get_sortable_columns() {
|
199 |
+
return array(
|
200 |
+
'title' => 'title',
|
201 |
+
'type' => 'type',
|
202 |
+
'author' => 'author',
|
203 |
+
'rank' => 'rank',
|
204 |
+
'date' => array('date', true)
|
205 |
+
);
|
206 |
+
}
|
207 |
+
|
208 |
+
function print_column_headers($with_id = true) {
|
209 |
+
$strcolumn = '';
|
210 |
+
|
211 |
+
list( $columns, $sortable ) = $this->get_column_info();
|
212 |
+
|
213 |
+
$current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
|
214 |
+
$current_url = remove_query_arg('paged', $current_url);
|
215 |
+
|
216 |
+
if (isset($_GET['orderby']))
|
217 |
+
$current_orderby = $_GET['orderby'];
|
218 |
+
else
|
219 |
+
$current_orderby = '';
|
220 |
+
|
221 |
+
if (isset($_GET['order']) && 'desc' == $_GET['order'])
|
222 |
+
$current_order = 'desc';
|
223 |
+
else
|
224 |
+
$current_order = 'asc';
|
225 |
+
|
226 |
+
foreach ($columns as $column_key => $column_display_name) {
|
227 |
+
$class = array('manage-column', "column-$column_key");
|
228 |
+
|
229 |
+
$style = '';
|
230 |
+
$style = ' style="' . $style . '"';
|
231 |
+
|
232 |
+
if ('cb' == $column_key) {
|
233 |
+
$class[] = 'check-column';
|
234 |
+
$style = ' style="margin:0;padding:0;width:0px;"';
|
235 |
+
}
|
236 |
+
if (isset($sortable[$column_key])) {
|
237 |
+
list( $orderby, $desc_first ) = $sortable[$column_key];
|
238 |
+
|
239 |
+
if ($current_orderby == $orderby) {
|
240 |
+
$order = 'asc' == $current_order ? 'desc' : 'asc';
|
241 |
+
$class[] = 'sorted';
|
242 |
+
$class[] = $current_order;
|
243 |
+
} else {
|
244 |
+
$order = $desc_first ? 'desc' : 'asc';
|
245 |
+
$class[] = 'sortable';
|
246 |
+
$class[] = $desc_first ? 'asc' : 'desc';
|
247 |
+
}
|
248 |
+
|
249 |
+
$column_display_name = '<a href="' . esc_url(add_query_arg(compact('orderby', 'order'), $current_url)) . '"><span>' . $column_display_name . '</span><span class="sorting-indicator"></span></a>';
|
250 |
+
}
|
251 |
+
|
252 |
+
$id = $with_id ? "id='$column_key'" : '';
|
253 |
+
|
254 |
+
if (!empty($class))
|
255 |
+
$class = "class='" . join(' ', $class) . "'";
|
256 |
+
|
257 |
+
$strcolumn .= "<th scope='col' $id $class $style>$column_display_name</th>";
|
258 |
+
}
|
259 |
+
return $strcolumn;
|
260 |
+
}
|
261 |
+
|
262 |
+
function get_columns() {
|
263 |
+
$post_type = 'post';
|
264 |
+
|
265 |
+
$posts_columns = array();
|
266 |
+
/* translators: manage posts column name */
|
267 |
+
$posts_columns['cb'] = '';
|
268 |
+
$posts_columns['title'] = _x('Title', 'column name');
|
269 |
+
|
270 |
+
$posts_columns['type'] = __('Type');
|
271 |
+
|
272 |
+
if (post_type_supports($post_type, 'author'))
|
273 |
+
$posts_columns['author'] = __('Author');
|
274 |
+
|
275 |
+
if (empty($post_type) || is_object_in_taxonomy($post_type, 'post_tag'))
|
276 |
+
$posts_columns['keywords'] = __('Keywords');
|
277 |
+
|
278 |
+
$posts_columns['rank'] = sprintf(__('Google.%s Position'), SQ_Tools::$options['sq_google_country']);
|
279 |
+
$posts_columns['traffic'] = __('Monthly Traffic');
|
280 |
+
$posts_columns['date'] = __('Date');
|
281 |
+
return $posts_columns;
|
282 |
+
}
|
283 |
+
|
284 |
+
function display_tablenav($which) {
|
285 |
+
if ('top' == $which)
|
286 |
+
wp_nonce_field('bulk-' . $this->_args['plural']);
|
287 |
+
|
288 |
+
$strnav = '';
|
289 |
+
ob_start();
|
290 |
+
/* includes the block from theme directory */
|
291 |
+
?>
|
292 |
+
<div class="tablenav <?php echo esc_attr($which); ?>">
|
293 |
+
<div class="alignleft actions"><input type="submit" name="" id="post-query-submit" class="button" value="<?php echo __('Reset Filters') ?>" onclick="location.href = '?page=sq_posts';"></div>
|
294 |
+
<?php
|
295 |
+
$this->extra_tablenav($which);
|
296 |
+
$this->pagination($which);
|
297 |
+
?>
|
298 |
+
|
299 |
+
<br class="clear" />
|
300 |
+
</div>
|
301 |
+
<?php
|
302 |
+
$strnav = ob_get_contents();
|
303 |
+
ob_end_clean();
|
304 |
+
return $strnav;
|
305 |
+
}
|
306 |
+
|
307 |
+
function display_rows() {
|
308 |
+
global $wp_query, $post;
|
309 |
+
static $alternate;
|
310 |
+
$strrow = '';
|
311 |
+
$posts = $wp_query->posts;
|
312 |
+
//print_R($posts);
|
313 |
+
add_filter('the_title', 'esc_html');
|
314 |
+
|
315 |
+
foreach ($posts as $post) {
|
316 |
+
if (get_post_status($post->ID) == 'publish') {
|
317 |
+
array_push($this->posts, $post->ID);
|
318 |
+
}
|
319 |
+
$alternate = 'alternate' == $alternate ? '' : 'alternate';
|
320 |
+
|
321 |
+
$strrow .= '<tr id="post-' . $post->ID . '" class="post-' . $post->ID . ' type-post format-standard ' . $alternate . ' hentry">';
|
322 |
+
$strrow .= $this->single_row($post);
|
323 |
+
$strrow .= '</tr>';
|
324 |
+
}
|
325 |
+
return $strrow;
|
326 |
+
}
|
327 |
+
|
328 |
+
public function single_row($a_post) {
|
329 |
+
global $post;
|
330 |
+
|
331 |
+
$strcolumn = '';
|
332 |
+
$value = '';
|
333 |
+
$class = '';
|
334 |
+
|
335 |
+
$global_post = $post;
|
336 |
+
$post = $a_post;
|
337 |
+
list($columns) = $this->get_column_info();
|
338 |
+
setup_postdata($post);
|
339 |
+
|
340 |
+
if ($post) {
|
341 |
+
$edit_link = get_edit_post_link($post->ID);
|
342 |
+
$title = _draft_or_post_title();
|
343 |
+
$post_type_object = get_post_type_object($post->post_type);
|
344 |
+
$can_edit_post = current_user_can($post_type_object->cap->edit_post, $post->ID);
|
345 |
+
$json = SQ_ObjController::getModel('SQ_Post')->getKeyword($post->ID);
|
346 |
+
|
347 |
+
foreach ($columns as $key => $column) {
|
348 |
+
switch ($key) {
|
349 |
+
case 'title':
|
350 |
+
$value = '';
|
351 |
+
if ($can_edit_post) {
|
352 |
+
$value = '<a class="row-title" href="' . $edit_link . '" title="' . esc_attr(sprintf(__('Edit “%s”'), $title)) . '">' . $title . '</a>';
|
353 |
+
$actions = array();
|
354 |
+
if ($can_edit_post && 'trash' != $post->post_status) {
|
355 |
+
$actions['edit'] = '<a href="' . get_edit_post_link($post->ID, true) . '" title="' . esc_attr(__('Edit this item')) . '">' . __('Edit') . '</a>';
|
356 |
+
}
|
357 |
+
if ($post_type_object->public) {
|
358 |
+
if (in_array($post->post_status, array('pending', 'draft', 'future'))) {
|
359 |
+
if ($can_edit_post)
|
360 |
+
$actions['view'] = '<a href="' . esc_url(add_query_arg('preview', 'true', get_permalink($post->ID))) . '" title="' . esc_attr(sprintf(__('Preview “%s”'), $title)) . '" rel="permalink" target="_blank">' . __('Preview') . '</a>';
|
361 |
+
} elseif ('trash' != $post->post_status) {
|
362 |
+
$actions['view'] = '<a href="' . get_permalink($post->ID) . '" title="' . esc_attr(sprintf(__('View “%s”'), $title)) . '" rel="permalink" target="_blank">' . __('View') . '</a>';
|
363 |
+
}
|
364 |
+
}
|
365 |
+
|
366 |
+
$value .= $this->row_actions($actions);
|
367 |
+
} else {
|
368 |
+
$value = $title;
|
369 |
+
}
|
370 |
+
break;
|
371 |
+
case 'author':
|
372 |
+
//$author = get_userdata($post->post_author);
|
373 |
+
$value = sprintf('<a href="%s">%s</a>', esc_url(add_query_arg(array('page' => 'sq_posts', 'author' => get_the_author_meta('ID')), 'admin.php')), get_the_author());
|
374 |
+
break;
|
375 |
+
case 'type':
|
376 |
+
$value = sprintf('<a href="%s">%s</a>', esc_url(add_query_arg(array('page' => 'sq_posts', 'type' => $post->post_type), 'admin.php')), ucfirst($post->post_type));
|
377 |
+
break;
|
378 |
+
case 'keywords':
|
379 |
+
$value = '';
|
380 |
+
if (isset($json->keyword)) {
|
381 |
+
$value = sprintf('<a href="%s">%s</a>', esc_attr(add_query_arg(array('page' => 'sq_posts', 'keyword' => $json->keyword), 'admin.php')), $json->keyword);
|
382 |
+
} else {
|
383 |
+
$value = __('No Tags');
|
384 |
+
}
|
385 |
+
break;
|
386 |
+
|
387 |
+
case 'rank':
|
388 |
+
$value = '';
|
389 |
+
if (isset($json->rank)) {
|
390 |
+
if ($json->rank == -2) {
|
391 |
+
$value = __('Not yet verified');
|
392 |
+
} elseif ($json->rank == -1) {
|
393 |
+
$value = __('Not indexed');
|
394 |
+
} elseif ($json->rank == 0) {
|
395 |
+
$value = __('Indexed with the URL');
|
396 |
+
} elseif ($json->rank > 0) {
|
397 |
+
$value = '<strong style="display:block; font-size: 120%; width: 100px; margin: 0 auto; text-align:right;">' . sprintf(__('%s'), $json->rank) . '</strong>' . ((isset($json->country)) ? ' (' . $json->country . ')' : '');
|
398 |
+
}
|
399 |
+
$value = sprintf('<a href="%s" style="display:block; width: 120px; margin: 0 auto; text-align:right;">%s</a>', esc_url(add_query_arg(array('page' => 'sq_posts', 'rank' => $json->rank), 'admin.php')), $value);
|
400 |
+
} else {
|
401 |
+
$value = __('Not yet verified');
|
402 |
+
}
|
403 |
+
|
404 |
+
break;
|
405 |
+
case 'traffic':
|
406 |
+
$value = '<div class="sq_rank_column_row sq_minloading" ref="' . $post->ID . '"></div>';
|
407 |
+
$class = 'sq_rank_column';
|
408 |
+
break;
|
409 |
+
case 'date':
|
410 |
+
$value = '';
|
411 |
+
|
412 |
+
if (isset($post->post_date)) {
|
413 |
+
if ('0000-00-00 00:00:00' == $post->post_date) {
|
414 |
+
$h_time = __('Unpublished');
|
415 |
+
$time_diff = 0;
|
416 |
+
} else {
|
417 |
+
$m_time = $post->post_date;
|
418 |
+
$time = get_post_time('G', true, $post);
|
419 |
+
|
420 |
+
$time_diff = time() - $time;
|
421 |
+
|
422 |
+
if ($time_diff > 0 && $time_diff < 24 * 60 * 60)
|
423 |
+
$h_time = sprintf(__('%s ago'), human_time_diff($time));
|
424 |
+
else
|
425 |
+
$h_time = mysql2date(__('Y/m/d'), $m_time);
|
426 |
+
}
|
427 |
+
$value = $h_time . '<br />';
|
428 |
+
|
429 |
+
if ('publish' == $post->post_status) {
|
430 |
+
$value .= __('Published');
|
431 |
+
} elseif ('future' == $post->post_status) {
|
432 |
+
if ($time_diff > 0)
|
433 |
+
$value .= '<strong class="attention">' . __('Missed schedule') . '</strong>';
|
434 |
+
else
|
435 |
+
$value .=__('Scheduled');
|
436 |
+
} else {
|
437 |
+
$value .=__('Last Modified');
|
438 |
+
}
|
439 |
+
}
|
440 |
+
$class = '';
|
441 |
+
break;
|
442 |
+
default:
|
443 |
+
$value = '';
|
444 |
+
break;
|
445 |
+
}
|
446 |
+
if ($key == 'cb') {
|
447 |
+
$strcolumn .= '<th scope="row" class="check-column"></th>';
|
448 |
+
} else {
|
449 |
+
$strcolumn .= '<td class = "manage-column ' . ($class <> '' ? $class : 'column-' . $key) . '">' . $value . '</td>';
|
450 |
+
}
|
451 |
+
}
|
452 |
+
}
|
453 |
+
$post = $global_post;
|
454 |
+
return $strcolumn;
|
455 |
+
}
|
456 |
+
|
457 |
+
public function hookFooter() {
|
458 |
+
$this->postlist->setPosts($this->posts);
|
459 |
+
$this->postlist->hookFooter();
|
460 |
+
}
|
461 |
+
|
462 |
+
public function getScripts() {
|
463 |
+
return $this->postlist->getScripts();
|
464 |
+
}
|
465 |
+
|
466 |
+
}
|
models/SQ_BlockStatus.php
ADDED
@@ -0,0 +1,158 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* The model class for SQ_BlockStatus
|
5 |
+
*
|
6 |
+
*/
|
7 |
+
class Model_SQ_BlockStatus {
|
8 |
+
|
9 |
+
/** @var string */
|
10 |
+
private $analytics_table;
|
11 |
+
|
12 |
+
/** @var integer Days to the latest traffic check */
|
13 |
+
private $prev_check;
|
14 |
+
|
15 |
+
public function __construct() {
|
16 |
+
$traffic = SQ_ObjController::getController('SQ_Traffic', false);
|
17 |
+
|
18 |
+
//get the analytic table name
|
19 |
+
$this->analytics_table = $traffic->getAnalyticsTable();
|
20 |
+
|
21 |
+
$this->prev_check = 7;
|
22 |
+
}
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Add the global progress of the traffic
|
26 |
+
*
|
27 |
+
*/
|
28 |
+
public function getGlobalProgress() {
|
29 |
+
global $wpdb;
|
30 |
+
|
31 |
+
if ($wpdb->get_var("SHOW TABLES LIKE '" . $this->analytics_table . "'") != $this->analytics_table)
|
32 |
+
return false;
|
33 |
+
|
34 |
+
$progress = $this->setProgress();
|
35 |
+
if (isset(SQ_Tools::$options['sq_posts_status_close'])) {
|
36 |
+
$latest = $this->setProgress(date('Y-m-d', time() - 3600 * 24 * $this->prev_check));
|
37 |
+
//Chech if there is an inrease in trafic sinse previous check
|
38 |
+
$progress['increase'] = (int) ($latest['gapr'] < $progress['gapr']);
|
39 |
+
$progress['latest'] = $latest;
|
40 |
+
} else {
|
41 |
+
$progress['increase'] = 1;
|
42 |
+
}
|
43 |
+
return $progress;
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
*
|
48 |
+
* @param type $until
|
49 |
+
* @return type
|
50 |
+
*/
|
51 |
+
private function setProgress($until = '') {
|
52 |
+
$progress = array('op' => 0, 'nop' => 0, 'opc' => 0, 'nopc' => 0, 'gapr' => 0);
|
53 |
+
|
54 |
+
if ($tno = $this->getNOProgress($until))
|
55 |
+
if ($to = $this->getOProgress($until))
|
56 |
+
if ($to->count > 0 && $tno->count > 0 && $to->posts > 0 && $tno->posts > 0) {
|
57 |
+
$gapr = ((($to->count / $to->posts) * 100) / ($tno->count / $tno->posts)) - 100;
|
58 |
+
$progress = array('op' => $to->posts,
|
59 |
+
'nop' => $tno->posts,
|
60 |
+
'opc' => $to->count,
|
61 |
+
'nopc' => $tno->count,
|
62 |
+
'gapr' => $gapr
|
63 |
+
);
|
64 |
+
}
|
65 |
+
|
66 |
+
return $progress;
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Get the unoptimized traffic from database
|
71 |
+
* @global type $wpdb
|
72 |
+
* @return type
|
73 |
+
*/
|
74 |
+
public function getNOProgress($until) {
|
75 |
+
global $wpdb;
|
76 |
+
if ($until <> '')
|
77 |
+
$until = " AND date < '" . $until . "'";
|
78 |
+
|
79 |
+
$sql = "SELECT SUM(analytics.`count`) as `count`, COUNT(DISTINCT analytics.`post_id`) as `posts`
|
80 |
+
FROM `" . $this->analytics_table . "` analytics
|
81 |
+
INNER JOIN " . $wpdb->posts . " wp ON wp.ID = analytics.`post_id` AND wp.post_status = 'publish'
|
82 |
+
WHERE keyword = ''
|
83 |
+
" . $until;
|
84 |
+
|
85 |
+
return $wpdb->get_row($sql);
|
86 |
+
}
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Get the optimized traffic from database
|
90 |
+
* @global type $wpdb
|
91 |
+
* @return type
|
92 |
+
*/
|
93 |
+
public function getOProgress($until) {
|
94 |
+
global $wpdb;
|
95 |
+
if ($until <> '')
|
96 |
+
$until = " AND date < '" . $until . "'";
|
97 |
+
|
98 |
+
$sql = "SELECT SUM(analytics.`count`) as `count`, COUNT(DISTINCT analytics.`post_id`) as `posts`
|
99 |
+
FROM `" . $this->analytics_table . "` analytics
|
100 |
+
INNER JOIN " . $wpdb->posts . " wp ON wp.ID = analytics.`post_id` AND wp.post_status = 'publish'
|
101 |
+
WHERE keyword <> ''
|
102 |
+
" . $until;
|
103 |
+
|
104 |
+
return $wpdb->get_row($sql);
|
105 |
+
}
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Pack the traffic status popup
|
109 |
+
* @param array $progress
|
110 |
+
* @return string
|
111 |
+
*/
|
112 |
+
public function packStatus($progress) {
|
113 |
+
$str = '';
|
114 |
+
//Check show conditions
|
115 |
+
if (!$this->showPopup($progress))
|
116 |
+
return;
|
117 |
+
if (isset(SQ_Tools::$options['sq_posts_status_close']) && (time() - SQ_Tools::$options['sq_posts_status_close'] < 3600 * 24 * $this->prev_check))
|
118 |
+
return; //min 7 days before show it again
|
119 |
+
|
120 |
+
|
121 |
+
|
122 |
+
|
123 |
+
//Set the percent string to progress
|
124 |
+
$progress['gapr'] = number_format($progress['gapr'], 0) . '%';
|
125 |
+
$str .= '
|
126 |
+
<div id="sq_status">
|
127 |
+
<ul class="sq_box">
|
128 |
+
<li class="sq_header"><span>Squirrly SEO</span>' . sprintf(__('%s More Traffic for you!'), $progress['gapr']) . '<span class="sq_status_close">' . __('[close this box]') . ' X</span></li>
|
129 |
+
<li>
|
130 |
+
<div class="sq_status_image"></div>
|
131 |
+
<table>
|
132 |
+
<tr>
|
133 |
+
<td class="sq_status_text1">' . __('CONGRATULATIONS!!') . ' :-)</td>
|
134 |
+
<td class="sq_status_bigtext" rowspan="2">' . $progress['gapr'] . '</td>
|
135 |
+
</tr>
|
136 |
+
<td class="sq_status_text2">' . __('Your Traffic Increased by:') . '</td>
|
137 |
+
<tr>
|
138 |
+
</tr>
|
139 |
+
</table>
|
140 |
+
</li>
|
141 |
+
<li class="sq_status_text3">' . sprintf(__('the articles you’ve optimized with Squirrly SEO bring you %s more traffic than the other ones.'), $progress['gapr']) . '
|
142 |
+
</li>
|
143 |
+
</ul>
|
144 |
+
<div>
|
145 |
+
';
|
146 |
+
|
147 |
+
return $str;
|
148 |
+
}
|
149 |
+
|
150 |
+
/**
|
151 |
+
* Show popup condition
|
152 |
+
* @return type
|
153 |
+
*/
|
154 |
+
private function showPopup($progress) {
|
155 |
+
return ($progress['op'] > 0 && $progress['nop'] > 0 && ($progress['op'] < $progress['nop']) && $progress['opc'] > 100 && $progress['gapr'] > 100 && $progress['increase'] == 1);
|
156 |
+
}
|
157 |
+
|
158 |
+
}
|
models/SQ_Blocksearch.php
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* The model class for SQ_Blocksearch
|
5 |
+
*
|
6 |
+
*/
|
7 |
+
class Model_SQ_Blocksearch {
|
8 |
+
|
9 |
+
public $results;
|
10 |
+
|
11 |
+
public function searchImage($get) {
|
12 |
+
$pack = $results_free = $results = array();
|
13 |
+
$params = array('api_key' => '8c824e0994879c3580200f2eb7d4bdd7',
|
14 |
+
'method' => 'flickr.photos.search',
|
15 |
+
'format' => 'php_serial',
|
16 |
+
'tag_mode' => 'any',
|
17 |
+
'per_page' => $get['nrb'],
|
18 |
+
'page' => $get['page'],
|
19 |
+
'sort' => 'interestingness-desc',
|
20 |
+
// 'sort' => 'relevance',
|
21 |
+
'tags' => $get['q'],
|
22 |
+
// 'privacy_filter' => '1,2,3,4',
|
23 |
+
'license' => '7'
|
24 |
+
);
|
25 |
+
|
26 |
+
|
27 |
+
$this->doFlickrSearch($params, 1);
|
28 |
+
|
29 |
+
//Search for images with licence attributes
|
30 |
+
$params['license'] = '1,2,3,4,5,6';
|
31 |
+
$this->doFlickrSearch($params);
|
32 |
+
|
33 |
+
if (is_array($this->results) && count($this->results) > 0)
|
34 |
+
return json_encode($this->results);
|
35 |
+
|
36 |
+
return false;
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Get the images from flicker
|
41 |
+
* @param array $params
|
42 |
+
* @param integer $free: 1|0
|
43 |
+
*/
|
44 |
+
private function doFlickrSearch($params, $free = 0) {
|
45 |
+
foreach ($params as $k => $v) {
|
46 |
+
$pack[] = urlencode($k) . '=' . urlencode($v);
|
47 |
+
}
|
48 |
+
|
49 |
+
//Call Flickr
|
50 |
+
$url = "http://api.flickr.com/services/rest/?" . implode('&', $pack);
|
51 |
+
|
52 |
+
$rsp = wp_remote_fopen($url);
|
53 |
+
$rsp_obj = unserialize($rsp);
|
54 |
+
|
55 |
+
// if we have photos
|
56 |
+
if ($rsp_obj && $rsp_obj['photos']['total'] > 0) {
|
57 |
+
foreach ($rsp_obj['photos']['photo'] as $photo) {
|
58 |
+
|
59 |
+
$src = 'http://farm' . $photo['farm'] . '.static.flickr.com/' . $photo['server'] . '/' . $photo['id'] . '_' . $photo['secret'];
|
60 |
+
$source = 'http://www.flickr.com/photos/' . $photo['owner'] . '/' . $photo['id'];
|
61 |
+
|
62 |
+
$this->results['responseData']['results'][] = array('tbUrl' => $src . '_s.jpg',
|
63 |
+
'url' => $src . '.jpg',
|
64 |
+
'attribute' => ($free == 0) ? $source : '',
|
65 |
+
'width' => '',
|
66 |
+
'height' => '',
|
67 |
+
'contentNoFormatting' => $photo['title']);
|
68 |
+
}
|
69 |
+
}
|
70 |
+
}
|
71 |
+
|
72 |
+
}
|
models/SQ_Blockseo.php
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* The model class for SQ_Blockseo
|
5 |
+
*
|
6 |
+
*/
|
7 |
+
class Model_SQ_Blockseo {
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Get the advanced SEO from database
|
11 |
+
* @global integer $sq_postID
|
12 |
+
* @global type $wpdb
|
13 |
+
* @return string
|
14 |
+
*/
|
15 |
+
public function getAdvSeo() {
|
16 |
+
global $sq_postID, $wpdb;
|
17 |
+
$meta = array();
|
18 |
+
$str = '';
|
19 |
+
|
20 |
+
if ((int) $sq_postID == 0)
|
21 |
+
return;
|
22 |
+
|
23 |
+
$meta = array('sq_fp_title' => '',
|
24 |
+
'sq_fp_description' => '');
|
25 |
+
|
26 |
+
$sql = "SELECT `meta_id`, `meta_value`, `meta_key`
|
27 |
+
FROM `" . $wpdb->postmeta . "`
|
28 |
+
WHERE `post_id`=" . (int) $sq_postID;
|
29 |
+
|
30 |
+
$rows = $wpdb->get_results($sql);
|
31 |
+
|
32 |
+
foreach ($rows as $row) {
|
33 |
+
if (array_key_exists($row->meta_key, $meta))
|
34 |
+
$meta[$row->meta_key] = $row->meta_value;
|
35 |
+
}
|
36 |
+
|
37 |
+
return $meta;
|
38 |
+
}
|
39 |
+
|
40 |
+
}
|
models/SQ_Frontend.php
ADDED
@@ -0,0 +1,1492 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Model_SQ_Frontend {
|
4 |
+
|
5 |
+
/** @var string */
|
6 |
+
private $title;
|
7 |
+
|
8 |
+
/** @var string */
|
9 |
+
private $description;
|
10 |
+
|
11 |
+
/** @var array */
|
12 |
+
private $keywords;
|
13 |
+
|
14 |
+
/** @var integer */
|
15 |
+
private $min_title_length = 10;
|
16 |
+
|
17 |
+
/** @var integer */
|
18 |
+
private $max_title_length = 100;
|
19 |
+
|
20 |
+
/** @var integer */
|
21 |
+
private $max_description_length = 170;
|
22 |
+
|
23 |
+
/** @var integer */
|
24 |
+
private $min_description_length = 70;
|
25 |
+
|
26 |
+
/** @var integer */
|
27 |
+
private $max_keywrods = 4;
|
28 |
+
|
29 |
+
/** @var object Current post */
|
30 |
+
private $post;
|
31 |
+
|
32 |
+
/** @var array Meta custom content */
|
33 |
+
private $meta = array();
|
34 |
+
|
35 |
+
public function __construct() {
|
36 |
+
SQ_ObjController::getController('SQ_Tools', false);
|
37 |
+
}
|
38 |
+
|
39 |
+
/** @var meta from other plugins */
|
40 |
+
// private $op_meta = array();
|
41 |
+
/**
|
42 |
+
* Write the signature
|
43 |
+
* @return string
|
44 |
+
*/
|
45 |
+
public function setStart() {
|
46 |
+
return "\n\n<!-- Squirrly Wordpress SEO Plugin " . SQ_VERSION . ", visit: http://www.squirrly.co/ -->\n";
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* End the signature
|
51 |
+
* @return string
|
52 |
+
*/
|
53 |
+
public function setEnd() {
|
54 |
+
return "<!-- /Squirrly Wordpress SEO Plugin -->\n\n";
|
55 |
+
}
|
56 |
+
|
57 |
+
/* * *****USE BUFFER****** */
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Start the buffer record
|
61 |
+
* @return type
|
62 |
+
*/
|
63 |
+
public function startBuffer() {
|
64 |
+
ob_start(array($this, 'getBuffer'));
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Get the loaded buffer and change it
|
69 |
+
*
|
70 |
+
* @param buffer $buffer
|
71 |
+
* @return buffer
|
72 |
+
*/
|
73 |
+
public function getBuffer($buffer) {
|
74 |
+
$buffer = $this->setMetaInBuffer($buffer);
|
75 |
+
return $buffer;
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Flush the header from wordpress
|
80 |
+
*
|
81 |
+
* @return string
|
82 |
+
*
|
83 |
+
*/
|
84 |
+
public function flushHeader() {
|
85 |
+
$buffers = array();
|
86 |
+
if (function_exists('ob_list_handlers')) {
|
87 |
+
$buffers = @ob_list_handlers();
|
88 |
+
}
|
89 |
+
|
90 |
+
if (sizeof($buffers) > 0 && strtolower($buffers[sizeof($buffers) - 1]) == strtolower('Model_SQ_Frontend::getBuffer')) {
|
91 |
+
@ob_end_flush();
|
92 |
+
}
|
93 |
+
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Change the title, description and keywords in site's buffer
|
97 |
+
*
|
98 |
+
* @return string
|
99 |
+
*/
|
100 |
+
private function setMetaInBuffer($buffer) {
|
101 |
+
global $wp_query;
|
102 |
+
if (!isset($wp_query)) {
|
103 |
+
return $buffer;
|
104 |
+
}
|
105 |
+
|
106 |
+
$this->post = $wp_query->get_queried_object();
|
107 |
+
|
108 |
+
if (is_home() || (isset($wp_query->query) && empty($wp_query->query)) || is_single() || is_preview() || is_page() || is_archive() || is_author() || is_category() || is_tag() || is_search()) {
|
109 |
+
$title = $this->getCustomTitle();
|
110 |
+
if (isset($title) && !empty($title) && $title <> '') {
|
111 |
+
$buffer = @preg_replace('/<title[^<>]*>([^<>]*)<\/title>/si', sprintf("<title>%s</title>", $title), $buffer, 1, $count);
|
112 |
+
if ($count == 0) { //if no title found
|
113 |
+
$buffer .= sprintf("<title>%s</title>", $title) . "\n";
|
114 |
+
} //add the title
|
115 |
+
}
|
116 |
+
|
117 |
+
|
118 |
+
$description = $this->getCustomDescription();
|
119 |
+
if (isset($description) && !empty($description) && $description <> '') {
|
120 |
+
$buffer = @preg_replace('/<meta[^>]*name=\"description\"[^>]*content=[\"|\'][^>]*[\"|\'][^>]*>/si', $description, $buffer, 1, $count);
|
121 |
+
}
|
122 |
+
|
123 |
+
$keyword = $this->getCustomKeyword();
|
124 |
+
if (isset($keyword) && !empty($keyword) && $keyword <> '') {
|
125 |
+
$buffer = @preg_replace('/<meta[^>]*name=\"keywords"[^>]*content=[\"|\'][^>]*[\"|\'][^>]*>/si', $keyword, $buffer, 1, $count);
|
126 |
+
}
|
127 |
+
}
|
128 |
+
return $buffer;
|
129 |
+
}
|
130 |
+
|
131 |
+
/* * ********************** */
|
132 |
+
|
133 |
+
/**
|
134 |
+
* Overwrite the header with the correct parameters
|
135 |
+
*
|
136 |
+
* @return string
|
137 |
+
*/
|
138 |
+
public function setHeader() {
|
139 |
+
global $wp_query;
|
140 |
+
$ret = '';
|
141 |
+
$this->post = $wp_query->get_queried_object();
|
142 |
+
$this->meta['blogname'] = get_bloginfo('name');
|
143 |
+
|
144 |
+
if (!function_exists('preg_replace')) {
|
145 |
+
return $ret;
|
146 |
+
}
|
147 |
+
|
148 |
+
if ($this->isHomePage() || is_single() || is_page() || is_singular() || is_preview() || is_archive() || is_category() || is_author() || is_tag() || is_search()) {
|
149 |
+
|
150 |
+
/* Meta setting */
|
151 |
+
$this->title = $this->clearTitle($this->getCustomTitle());
|
152 |
+
|
153 |
+
if (SQ_Tools::$options['sq_auto_description'] == 1) {
|
154 |
+
$ret .= $this->getCustomDescription() . "\n";
|
155 |
+
$ret .= $this->getCustomKeyword() . "\n";
|
156 |
+
}
|
157 |
+
|
158 |
+
if (SQ_Tools::$options['sq_auto_canonical'] == 1) {
|
159 |
+
$ret .= $this->setCanonical();
|
160 |
+
$ret .= $this->setRelPrevNext();
|
161 |
+
}
|
162 |
+
|
163 |
+
if (SQ_Tools::$options['sq_auto_sitemap'] == 1) {
|
164 |
+
$ret .= $this->getXMLSitemap();
|
165 |
+
}
|
166 |
+
/* Auto setting */
|
167 |
+
|
168 |
+
if (SQ_Tools::$options['sq_auto_favicon'] == 1) {
|
169 |
+
$ret .= $this->getFavicon();
|
170 |
+
}
|
171 |
+
|
172 |
+
if (SQ_Tools::$options['sq_auto_meta'] == 1) {
|
173 |
+
$ret .= $this->getCopyright();
|
174 |
+
$ret .= $this->getGooglePlusMeta();
|
175 |
+
$ret .= $this->getLanguage();
|
176 |
+
$ret .= $this->getDublinCore();
|
177 |
+
}
|
178 |
+
if (SQ_Tools::$options['sq_auto_facebook'] == 1) {
|
179 |
+
$ret .= $this->getOpenGraph() . "\n";
|
180 |
+
}
|
181 |
+
|
182 |
+
if (SQ_Tools::$options['sq_auto_twitter'] == 1) {
|
183 |
+
$ret .= $this->getTwitterCard(SQ_Tools::$options) . "\n";
|
184 |
+
}
|
185 |
+
/* SEO optimizer tool */
|
186 |
+
$ret .= $this->getGoogleWT();
|
187 |
+
$ret .= $this->getGoogleAnalytics();
|
188 |
+
$ret .= $this->getFacebookIns();
|
189 |
+
$ret .= $this->getBingWT();
|
190 |
+
$ret .= $this->getAlexaT();
|
191 |
+
|
192 |
+
|
193 |
+
|
194 |
+
$ret .= $this->setEnd();
|
195 |
+
}
|
196 |
+
return $ret;
|
197 |
+
}
|
198 |
+
|
199 |
+
public function setFooter($code) {
|
200 |
+
$traffic = SQ_ObjController::getController('SQ_Traffic', false);
|
201 |
+
if (is_object($traffic)) {
|
202 |
+
echo $this->setStart();
|
203 |
+
echo $traffic->getTrafficScript($code);
|
204 |
+
echo $this->setEnd();
|
205 |
+
}
|
206 |
+
}
|
207 |
+
|
208 |
+
private function getTwitterCard($options) {
|
209 |
+
$meta = "\n";
|
210 |
+
|
211 |
+
//Title and Description is required
|
212 |
+
if ($this->title == '' || $this->description == '') {
|
213 |
+
return;
|
214 |
+
}
|
215 |
+
|
216 |
+
//if ($options['sq_twitter_creator'] == '' && $options['sq_twitter_site'] == '') return;
|
217 |
+
$sq_twitter_creator = $options['sq_twitter_account'];
|
218 |
+
$sq_twitter_site = $options['sq_twitter_account'];
|
219 |
+
|
220 |
+
if (!isset($this->thumb_image) || $this->thumb_image == '') {
|
221 |
+
$this->thumb_image = $this->getImageFromContent();
|
222 |
+
}
|
223 |
+
|
224 |
+
$meta .= '<meta name="twitter:card" value="summary" />' . "\n";
|
225 |
+
|
226 |
+
$meta .= (($sq_twitter_creator <> '') ? sprintf('<meta name="twitter:creator" value="%s" />', $sq_twitter_creator) . "\n" : '');
|
227 |
+
$meta .= (($sq_twitter_site <> '') ? sprintf('<meta name="twitter:site" value="%s" />', $sq_twitter_site) . "\n" : '');
|
228 |
+
|
229 |
+
$meta .= sprintf('<meta name="twitter:title" content="%s">', $this->title) . "\n";
|
230 |
+
$meta .= (($this->title == $this->description) ? sprintf('<meta name="twitter:description" content="%s">', $this->description . ' | ' . $this->meta['blogname']) . "\n" : '');
|
231 |
+
$meta .= ((isset($this->thumb_image) && $this->thumb_image <> '') ? sprintf('<meta name="twitter:image:src" content="%s">', $this->thumb_image) . "\n" : '');
|
232 |
+
$meta .= (($this->meta['blogname'] <> '') ? sprintf('<meta name="twitter:domain" content="%s">', $this->meta['blogname']) . "\n" : '');
|
233 |
+
|
234 |
+
return $meta;
|
235 |
+
}
|
236 |
+
|
237 |
+
/**
|
238 |
+
* Get the Open Graph Protocol
|
239 |
+
* @return string
|
240 |
+
*/
|
241 |
+
private function getOpenGraph() {
|
242 |
+
$meta = "\n";
|
243 |
+
$image = '';
|
244 |
+
|
245 |
+
$url = $this->getCanonicalUrl();
|
246 |
+
if (!isset($this->thumb_image) || $this->thumb_image == '') {
|
247 |
+
$this->thumb_image = $this->getImageFromContent();
|
248 |
+
}
|
249 |
+
|
250 |
+
if (!isset($this->thumb_video) || $this->thumb_video == '') {
|
251 |
+
$this->thumb_video = $this->getVideoFromContent();
|
252 |
+
}
|
253 |
+
|
254 |
+
if ($image == '' && $url == '') {
|
255 |
+
return;
|
256 |
+
}
|
257 |
+
//GET THE URL
|
258 |
+
$meta .= sprintf('<meta property="og:url" content="%s" />', $url) . "\n";
|
259 |
+
if (!$this->isHomePage() && (isset($this->thumb_image) && $this->thumb_image <> '')) {
|
260 |
+
$meta .= sprintf('<meta property="og:image" content="%s" />', $this->thumb_image) . "\n";
|
261 |
+
$meta .= sprintf('<meta property="og:image:width" content="%s" />', '500') . "\n";
|
262 |
+
}
|
263 |
+
|
264 |
+
if ((isset($this->thumb_video) && $this->thumb_video <> '')) {
|
265 |
+
$meta .= sprintf('<meta property="og:video" content="%s" />', $this->thumb_video) . "\n";
|
266 |
+
}
|
267 |
+
|
268 |
+
$meta .= sprintf('<meta property="og:title" content="%s" />', $this->title) . "\n";
|
269 |
+
$meta .= sprintf('<meta property="og:description" content="%s" />', $this->description) . "\n";
|
270 |
+
$meta .= (($this->meta['blogname'] <> '') ? sprintf('<meta property="og:site_name" content="%s" />', $this->meta['blogname']) . "\n" : '');
|
271 |
+
|
272 |
+
if (is_author()) {
|
273 |
+
$author = get_queried_object();
|
274 |
+
|
275 |
+
$meta .= sprintf('<meta property="og:type" content="%s" />', 'profile') . "\n";
|
276 |
+
$meta .= sprintf('<meta property="profile:first_name" content="%s" />', get_the_author_meta('first_name', $author->ID)) . "\n";
|
277 |
+
$meta .= sprintf('<meta property="profile:last_name" content="%s" />', get_the_author_meta('last_name', $author->ID)) . "\n";
|
278 |
+
} elseif (is_single() || is_page()) {
|
279 |
+
global $post;
|
280 |
+
$meta .= sprintf('<meta property="og:type" content="%s" />', ((isset($this->thumb_video) && $this->thumb_video <> '') ? 'video' : 'article')) . "\n";
|
281 |
+
if ((isset($this->thumb_video) && $this->thumb_video <> '')) {
|
282 |
+
|
283 |
+
} else {
|
284 |
+
$meta .= sprintf('<meta property="article:published_time" content="%s" />', get_the_time('c', $post->ID)) . "\n";
|
285 |
+
if ($this->keywords <> '') {
|
286 |
+
$keywords = preg_split('/[,]+/', $this->keywords);
|
287 |
+
if (is_array($keywords) && !empty($keywords)) {
|
288 |
+
foreach ($keywords as $keyword) {
|
289 |
+
$meta .= sprintf('<meta property="article:tag" content="%s" />', $keyword) . "\n";
|
290 |
+
}
|
291 |
+
}
|
292 |
+
}
|
293 |
+
}
|
294 |
+
} else {
|
295 |
+
$meta .= sprintf('<meta property="og:type" content="%s" />', 'website') . "\n";
|
296 |
+
}
|
297 |
+
|
298 |
+
return $meta;
|
299 |
+
}
|
300 |
+
|
301 |
+
/**
|
302 |
+
* Get the canonical link for the current page
|
303 |
+
*
|
304 |
+
* @return string
|
305 |
+
*/
|
306 |
+
private function setCanonical() {
|
307 |
+
$url = $this->getCanonicalUrl();
|
308 |
+
if ($url) {
|
309 |
+
remove_action('wp_head', 'rel_canonical');
|
310 |
+
return sprintf("<link rel=\"canonical\" href=\"%s\" />", $url) . "\n";
|
311 |
+
}
|
312 |
+
|
313 |
+
return '';
|
314 |
+
}
|
315 |
+
|
316 |
+
public function setRelPrevNext() {
|
317 |
+
global $paged;
|
318 |
+
$meta = "";
|
319 |
+
if (!$this->isHomePage()) {
|
320 |
+
if (get_previous_posts_link()) {
|
321 |
+
$meta .= sprintf('<link rel="prev" href="%s" />', get_pagenum_link($paged - 1)) . "\n";
|
322 |
+
}
|
323 |
+
if (get_next_posts_link()) {
|
324 |
+
$meta .= sprintf('<link rel="next" href="%s" />', get_pagenum_link($paged + 1)) . "\n";
|
325 |
+
}
|
326 |
+
}
|
327 |
+
|
328 |
+
return (($meta <> '') ? $meta . "\n" : '');
|
329 |
+
}
|
330 |
+
|
331 |
+
/**
|
332 |
+
* Get the correct title of the article
|
333 |
+
*
|
334 |
+
* @return string
|
335 |
+
*/
|
336 |
+
public function getCustomTitle() {
|
337 |
+
$title = '';
|
338 |
+
$sep = '|';
|
339 |
+
$post = $this->post;
|
340 |
+
//If its a home page and home page auto title is activated
|
341 |
+
if ($this->isHomePage() && $this->checkHomePosts() && SQ_Tools::$options['sq_auto_title'] == 1) { //for homepage
|
342 |
+
$title = $this->clearTitle($this->grabTitleFromPost());
|
343 |
+
if ($this->meta['blogname'] <> '') {
|
344 |
+
$title .= " " . $sep . " " . $this->meta['blogname'];
|
345 |
+
}
|
346 |
+
}
|
347 |
+
//If its a post/page
|
348 |
+
if (!$this->isHomePage() && (is_single() || is_page() || is_singular())) {
|
349 |
+
|
350 |
+
$title = $this->clearTitle($this->grabTitleFromPost($post->ID));
|
351 |
+
}
|
352 |
+
|
353 |
+
//If is category
|
354 |
+
if (is_category()) { //for category
|
355 |
+
$category = get_category(get_query_var('cat'), false);
|
356 |
+
$title = SQ_Tools::i18n($category->cat_name);
|
357 |
+
if ($title == '') {
|
358 |
+
$title = $this->clearTitle($this->grabTitleFromPost());
|
359 |
+
}
|
360 |
+
if (is_paged()) {
|
361 |
+
$title .= " " . $sep . " " . __('Page', _SQ_PLUGIN_NAME_) . " " . get_query_var('paged');
|
362 |
+
}
|
363 |
+
}
|
364 |
+
|
365 |
+
if (is_author()) { //for author
|
366 |
+
$author = SQ_Tools::i18n(get_the_author_meta('nicename', get_query_var('author')));
|
367 |
+
|
368 |
+
if ($title == '') {
|
369 |
+
$title = $this->clearTitle($this->grabTitleFromPost()) . " " . $sep . " " . ucfirst($author);
|
370 |
+
}
|
371 |
+
if ($title == '') {
|
372 |
+
$title = __('About') . " " . ucfirst($author);
|
373 |
+
}
|
374 |
+
if (is_paged()) {
|
375 |
+
$title .= " " . $sep . " " . __('Page', _SQ_PLUGIN_NAME_) . " " . get_query_var('paged');
|
376 |
+
}
|
377 |
+
}
|
378 |
+
|
379 |
+
if (is_tag()) { //for tags
|
380 |
+
if (is_paged()) {
|
381 |
+
$tag = get_query_var('tag');
|
382 |
+
$title = ucfirst(str_replace('-', ' ', SQ_Tools::i18n($tag))) . " " . $sep . " " . __('Page', _SQ_PLUGIN_NAME_) . " " . get_query_var('paged');
|
383 |
+
}
|
384 |
+
}
|
385 |
+
|
386 |
+
//If title then clear it
|
387 |
+
if ($title <> '') {
|
388 |
+
$title = $this->truncate($this->clearTitle($title), $this->min_title_length, $this->max_title_length);
|
389 |
+
}
|
390 |
+
|
391 |
+
/* Check if is a predefined Title */
|
392 |
+
if ($this->isHomePage() &&
|
393 |
+
SQ_Tools::$options['sq_auto_title'] == 1 &&
|
394 |
+
SQ_Tools::$options['sq_auto_seo'] == 0 &&
|
395 |
+
SQ_Tools::$options['sq_fp_title'] <> '') {
|
396 |
+
|
397 |
+
if (isset($post) && $this->getAdvancedMeta($post->ID, 'title')) {
|
398 |
+
$title = SQ_Tools::i18n($this->getAdvancedMeta($post->ID, 'title'));
|
399 |
+
} else {
|
400 |
+
$title = $this->clearTitle(SQ_Tools::$options['sq_fp_title']);
|
401 |
+
}
|
402 |
+
}
|
403 |
+
|
404 |
+
return $title;
|
405 |
+
}
|
406 |
+
|
407 |
+
/**
|
408 |
+
* Get the image from content
|
409 |
+
* @global type $wp_query
|
410 |
+
* @return type
|
411 |
+
*/
|
412 |
+
public function getImageFromContent() {
|
413 |
+
global $wp_query;
|
414 |
+
$match = array();
|
415 |
+
$post = $this->post;
|
416 |
+
|
417 |
+
if (!$post) {
|
418 |
+
foreach ($wp_query->posts as $post) {
|
419 |
+
if ($post->ID && get_post_status($post->ID) == 'publish') {
|
420 |
+
$post = get_post($post->ID);
|
421 |
+
break;
|
422 |
+
}
|
423 |
+
}
|
424 |
+
}
|
425 |
+
|
426 |
+
if ($post && isset($post->post_content)) {
|
427 |
+
preg_match('/<img[^>]*src="([^"]*)"[^>]*>/i', $post->post_content, $match);
|
428 |
+
}
|
429 |
+
|
430 |
+
if (empty($match)) {
|
431 |
+
return;
|
432 |
+
}
|
433 |
+
|
434 |
+
if (strpos($match[1], '//') === false) {
|
435 |
+
$match[1] = get_bloginfo('url') . $match[1];
|
436 |
+
}
|
437 |
+
|
438 |
+
return $match[1];
|
439 |
+
}
|
440 |
+
|
441 |
+
/**
|
442 |
+
* Get the video from content
|
443 |
+
* @global type $wp_query
|
444 |
+
* @return type
|
445 |
+
*/
|
446 |
+
public function getVideoFromContent() {
|
447 |
+
$post = $this->post;
|
448 |
+
|
449 |
+
if (!$post) {
|
450 |
+
return false;
|
451 |
+
}
|
452 |
+
|
453 |
+
if (isset($post->post_content)) {
|
454 |
+
preg_match('/(https?:)?\/\/(?:[0-9A-Z-]+\.)?(?:(youtube|youtu)(?:-nocookie)?\.(com|be)\/(?:[^"\']+))/si', $post->post_content, $match);
|
455 |
+
|
456 |
+
if (isset($match[0])) {
|
457 |
+
if (strpos($match[0], '//') !== false && strpos($match[0], 'http') === false) {
|
458 |
+
$match[0] = 'http:' . $match[0];
|
459 |
+
}
|
460 |
+
}
|
461 |
+
|
462 |
+
if (empty($match)) {
|
463 |
+
|
464 |
+
} return;
|
465 |
+
} else {
|
466 |
+
return;
|
467 |
+
}
|
468 |
+
|
469 |
+
return $match[0];
|
470 |
+
}
|
471 |
+
|
472 |
+
private function clearTitle($title) {
|
473 |
+
$title = str_replace(array('"', " ", " "), array('', ' ', ' '), $title);
|
474 |
+
return trim(strip_tags(html_entity_decode($title)));
|
475 |
+
}
|
476 |
+
|
477 |
+
/**
|
478 |
+
* Get the description from last/current article
|
479 |
+
*
|
480 |
+
* @return string
|
481 |
+
*/
|
482 |
+
private function getCustomDescription() {
|
483 |
+
$post = $this->post;
|
484 |
+
|
485 |
+
$sep = '|';
|
486 |
+
$description = '';
|
487 |
+
|
488 |
+
//Is home page, has posts and autodescription is on
|
489 |
+
if ($this->isHomePage() && $this->checkHomePosts() && SQ_Tools::$options['sq_auto_description'] == 1) { //for homepage
|
490 |
+
$description = $this->grabDescriptionFromPost();
|
491 |
+
}
|
492 |
+
|
493 |
+
//If not homepage and its a post/page
|
494 |
+
if (!$this->isHomePage() && (is_single() || is_page() || is_singular() || $this->checkPostsPage())) {
|
495 |
+
$description = $this->grabDescriptionFromPost();
|
496 |
+
}
|
497 |
+
|
498 |
+
//If is a category
|
499 |
+
if (is_category()) { //for categories
|
500 |
+
$category = get_category(get_query_var('cat'), false);
|
501 |
+
$description = SQ_Tools::i18n($category->category_description);
|
502 |
+
if ($description == '') {
|
503 |
+
$description = SQ_Tools::i18n($category->cat_name);
|
504 |
+
}
|
505 |
+
if ($description == '') {
|
506 |
+
$description = $this->grabDescriptionFromPost();
|
507 |
+
}
|
508 |
+
|
509 |
+
if (is_paged()) {
|
510 |
+
$description .= " " . $sep . " " . __('Page', _SQ_PLUGIN_NAME_) . " " . get_query_var('paged');
|
511 |
+
}
|
512 |
+
|
513 |
+
if ($this->isHomePage() && $description <> '') {
|
514 |
+
if ($this->meta['blogname'] <> '') {
|
515 |
+
$description .= " " . $sep . " " . $this->meta['blogname'];
|
516 |
+
}
|
517 |
+
}
|
518 |
+
}
|
519 |
+
|
520 |
+
//If is the author page
|
521 |
+
if (is_author()) { //for author
|
522 |
+
$description = SQ_Tools::i18n(get_the_author_meta('description', get_query_var('author')));
|
523 |
+
if ($description == '') {
|
524 |
+
$author = SQ_Tools::i18n(get_the_author_meta('nicename', get_query_var('author')));
|
525 |
+
$description = $this->grabDescriptionFromPost() . " " . $sep . " " . $author;
|
526 |
+
}
|
527 |
+
if (is_paged()) {
|
528 |
+
$description .= " " . $sep . " " . __('Page', _SQ_PLUGIN_NAME_) . " " . get_query_var('paged');
|
529 |
+
}
|
530 |
+
}
|
531 |
+
|
532 |
+
//If is tag
|
533 |
+
if (is_tag()) { //for tags
|
534 |
+
$description = SQ_Tools::i18n(tag_description());
|
535 |
+
if ($description == '') {
|
536 |
+
$tag = SQ_Tools::i18n(single_tag_title('', false));
|
537 |
+
$description = ucfirst($tag) . " " . $sep . " " . $this->grabDescriptionFromPost();
|
538 |
+
}
|
539 |
+
if (is_paged()) {
|
540 |
+
$description .= " " . $sep . " " . __('Page', _SQ_PLUGIN_NAME_) . " " . get_query_var('paged');
|
541 |
+
}
|
542 |
+
}
|
543 |
+
|
544 |
+
/* Check if is a predefined TitleIn Snippet */
|
545 |
+
if ($this->isHomePage() &&
|
546 |
+
SQ_Tools::$options['sq_auto_description'] == 1 &&
|
547 |
+
SQ_Tools::$options['sq_auto_seo'] == 0 &&
|
548 |
+
SQ_Tools::$options['sq_fp_description'] <> '') {
|
549 |
+
|
550 |
+
if (isset($post) && $this->getAdvancedMeta($post->ID, 'description')) {
|
551 |
+
$description = SQ_Tools::i18n($this->getAdvancedMeta($post->ID, 'description'));
|
552 |
+
} else {
|
553 |
+
$description = strip_tags(SQ_Tools::$options['sq_fp_description']);
|
554 |
+
}
|
555 |
+
}
|
556 |
+
|
557 |
+
$description = (($description <> '') ? $description : $this->title);
|
558 |
+
if ($description <> '') {
|
559 |
+
$this->description = $this->clearDescription($description);
|
560 |
+
|
561 |
+
if ($this->description <> '') { //prevent blank description
|
562 |
+
$description = sprintf("<meta name=\"description\" content=\"%s\" />", $this->description);
|
563 |
+
} else {
|
564 |
+
$description = '';
|
565 |
+
}
|
566 |
+
}
|
567 |
+
|
568 |
+
return $description;
|
569 |
+
}
|
570 |
+
|
571 |
+
private function clearDescription($description) {
|
572 |
+
$description = str_replace(array(" ", " ", "\r", "\n"), array(' ', '', '', ' '), $description);
|
573 |
+
$search = array("'<script[^>]*?>.*?<\/script>'si", // strip out javascript
|
574 |
+
"/<form.*?<\/form>/si",
|
575 |
+
"/<iframe.*?<\/iframe>/si"
|
576 |
+
);
|
577 |
+
|
578 |
+
if (function_exists('preg_replace')) {
|
579 |
+
$description = preg_replace($search, '', $description);
|
580 |
+
}
|
581 |
+
|
582 |
+
$description = html_entity_decode($description);
|
583 |
+
$description = strip_tags($description);
|
584 |
+
$description = str_replace('"', '\'', $description);
|
585 |
+
|
586 |
+
return trim($description);
|
587 |
+
}
|
588 |
+
|
589 |
+
/**
|
590 |
+
* Get the keywords from articles
|
591 |
+
*
|
592 |
+
* @return string
|
593 |
+
*/
|
594 |
+
private function getCustomKeyword() {
|
595 |
+
global $wp_query;
|
596 |
+
$keywords = '';
|
597 |
+
|
598 |
+
if ($this->checkPostsPage() && SQ_Tools::$options['sq_auto_description'] == 1) {
|
599 |
+
$post = $this->post;
|
600 |
+
$keywords = stripcslashes(SQ_Tools::i18n($this->grabKeywordsFromPost($post->ID)));
|
601 |
+
} elseif (is_single() || is_page()) {
|
602 |
+
$post = $this->post;
|
603 |
+
$keywords = stripcslashes(SQ_Tools::i18n($this->grabKeywordsFromPost($post->ID)));
|
604 |
+
} elseif (SQ_Tools::$options['sq_auto_description'] == 1) {
|
605 |
+
$keywords = trim(SQ_Tools::i18n($this->grabKeywordsFromPost()));
|
606 |
+
}
|
607 |
+
|
608 |
+
/* Check if is a predefined Keyword */
|
609 |
+
if (SQ_Tools::$options['sq_auto_description'] == 1) { //
|
610 |
+
if (($this->isHomePage() &&
|
611 |
+
SQ_Tools::$options['sq_auto_seo'] <> 1 &&
|
612 |
+
SQ_Tools::$options['sq_fp_keywords'] <> '') || $keywords == '') {
|
613 |
+
$keywords = strip_tags(SQ_Tools::$options['sq_fp_keywords']);
|
614 |
+
}
|
615 |
+
}
|
616 |
+
|
617 |
+
if (isset($keywords) && !empty($keywords) && !(is_home() && is_paged())) {
|
618 |
+
$this->keywords = str_replace('"', '', $keywords);
|
619 |
+
return sprintf("<meta name=\"keywords\" content=\"%s\" />", $this->keywords);
|
620 |
+
}
|
621 |
+
|
622 |
+
return false;
|
623 |
+
}
|
624 |
+
|
625 |
+
/**
|
626 |
+
* Get the copyright meta
|
627 |
+
*
|
628 |
+
* @return string
|
629 |
+
*/
|
630 |
+
private function getCopyright() {
|
631 |
+
$name = $this->getAuthorLinkFromBlog();
|
632 |
+
if (!$name) {
|
633 |
+
$name = $this->meta['blogname'];
|
634 |
+
}
|
635 |
+
|
636 |
+
if ($name <> '') {
|
637 |
+
return sprintf("<meta name=\"copyright\" content=\"%s\" />" . "\n", $name) . "\n";
|
638 |
+
}
|
639 |
+
|
640 |
+
return false;
|
641 |
+
}
|
642 |
+
|
643 |
+
/**
|
644 |
+
* Get the Google Plus Author meta
|
645 |
+
*
|
646 |
+
* @return string
|
647 |
+
*/
|
648 |
+
private function getGooglePlusMeta() {
|
649 |
+
$author = SQ_Tools::$options['sq_google_plus'];
|
650 |
+
if ($author == '') {
|
651 |
+
$author = $this->getAuthorLinkFromBlog();
|
652 |
+
} elseif (!$author) {
|
653 |
+
$author = $this->meta['blogname'];
|
654 |
+
} elseif (strpos($author, 'plus.google.com') === false && is_numeric($author)) {
|
655 |
+
$author = 'https://plus.google.com/' . $author . '/posts';
|
656 |
+
}
|
657 |
+
|
658 |
+
if ($this->isHomePage() && $author <> '') {
|
659 |
+
return '<link rel="author" href="' . $author . '" />' . "\n";
|
660 |
+
} else {
|
661 |
+
if (is_single() && !class_exists('ABH_Classes_ObjController')) {
|
662 |
+
return '<link rel="author" href="' . $author . '" />' . "\n";
|
663 |
+
}
|
664 |
+
}
|
665 |
+
return false;
|
666 |
+
}
|
667 |
+
|
668 |
+
/**
|
669 |
+
* Get the icons for serachengines
|
670 |
+
*
|
671 |
+
* @return string
|
672 |
+
*/
|
673 |
+
private function getFavicon() {
|
674 |
+
$str = '';
|
675 |
+
$rnd = '';
|
676 |
+
|
677 |
+
if (function_exists('base64_encode')) {
|
678 |
+
if (isset(SQ_Tools::$options['favicon_tmp']) && current_user_can('edit_plugins')) {
|
679 |
+
$rnd = '?ver=' . base64_encode(SQ_Tools::$options['favicon_tmp']);
|
680 |
+
}
|
681 |
+
}
|
682 |
+
|
683 |
+
$favicon = get_bloginfo('wpurl') . '/favicon.ico' . $rnd;
|
684 |
+
|
685 |
+
if (file_exists(ABSPATH . '/favicon.ico')) {
|
686 |
+
$str .= sprintf("<link rel=\"shortcut icon\" type=\"image/png\" href=\"%s\" />" . "\n", $favicon);
|
687 |
+
$str .= sprintf("<link rel=\"apple-touch-icon\" type=\"image/png\" href=\"%s\" />" . "\n", $favicon);
|
688 |
+
$str .= sprintf("<link rel=\"apple-touch-icon-precomposed\" type=\"image/png\" href=\"%s\" />" . "\n", $favicon);
|
689 |
+
}
|
690 |
+
return $str;
|
691 |
+
}
|
692 |
+
|
693 |
+
/**
|
694 |
+
* Get the language meta
|
695 |
+
*
|
696 |
+
* @return string
|
697 |
+
*/
|
698 |
+
private function getLanguage() {
|
699 |
+
$language = get_bloginfo('language');
|
700 |
+
|
701 |
+
if ($language <> '') {
|
702 |
+
return sprintf("<meta name=\"language\" content=\"%s\" />", $language) . "\n";
|
703 |
+
}
|
704 |
+
|
705 |
+
return false;
|
706 |
+
}
|
707 |
+
|
708 |
+
/**
|
709 |
+
* Get the DC.publisher meta
|
710 |
+
*
|
711 |
+
* @return string
|
712 |
+
*/
|
713 |
+
private function getDublinCore() {
|
714 |
+
global $wp_query;
|
715 |
+
$date = null;
|
716 |
+
$meta = '';
|
717 |
+
|
718 |
+
$name = $this->getAuthorLinkFromBlog();
|
719 |
+
if (!$name) {
|
720 |
+
$name = $this->meta['blogname'];
|
721 |
+
}
|
722 |
+
|
723 |
+
if ($name <> '') {
|
724 |
+
$meta .= sprintf("<meta name=\"DC.Publisher\" content=\"%s\" />", $name) . "\n";
|
725 |
+
}
|
726 |
+
|
727 |
+
$meta .= sprintf('<meta name="DC.Title" content="%s" />', $this->title) . "\n";
|
728 |
+
$meta .= sprintf('<meta name="DC.Description" content="%s" />', $this->description) . "\n";
|
729 |
+
|
730 |
+
if ($this->isHomePage()) {
|
731 |
+
$date = date('Y-m-d', strtotime(get_lastpostmodified()));
|
732 |
+
} elseif (is_single()) {
|
733 |
+
$post = $this->post;
|
734 |
+
$date = date('Y-m-d', strtotime($post->post_date));
|
735 |
+
}
|
736 |
+
|
737 |
+
if ($date) {
|
738 |
+
$meta .= sprintf("<meta name=\"DC.Date\" content=\"%s\" />", $date) . "\n";
|
739 |
+
$meta .= sprintf("<meta name=\"DC.date.issued\" content=\"%s\" />", $date) . "\n";
|
740 |
+
}
|
741 |
+
|
742 |
+
return $meta;
|
743 |
+
}
|
744 |
+
|
745 |
+
/**
|
746 |
+
* Get the XML Sitemap meta
|
747 |
+
*
|
748 |
+
* @return string
|
749 |
+
*/
|
750 |
+
private function getXMLSitemap() {
|
751 |
+
$xml_url = SQ_ObjController::getController('SQ_Sitemap', false)->getXmlUrl();
|
752 |
+
|
753 |
+
if ($xml_url <> '') {
|
754 |
+
return sprintf("<link rel=\"alternate\" type=\"application/rss+xml\" " . (($this->title <> '') ? "title=\"%s\"" : "") . " href=\"%s\" />", $this->title, $xml_url) . "\n";
|
755 |
+
}
|
756 |
+
|
757 |
+
return false;
|
758 |
+
}
|
759 |
+
|
760 |
+
/**
|
761 |
+
* Get the google Webmaster Tool code
|
762 |
+
*
|
763 |
+
* @return string
|
764 |
+
*/
|
765 |
+
private function getGoogleWT() {
|
766 |
+
$sq_google_wt = SQ_Tools::$options['sq_google_wt'];
|
767 |
+
|
768 |
+
if (($this->checkHomePosts() || $this->checkFrontPage()) && $sq_google_wt <> '') {
|
769 |
+
return sprintf("<meta name=\"google-site-verification\" content=\"%s\" />", $sq_google_wt) . "\n";
|
770 |
+
}
|
771 |
+
|
772 |
+
return false;
|
773 |
+
}
|
774 |
+
|
775 |
+
/**
|
776 |
+
* Get the google Analytics code
|
777 |
+
*
|
778 |
+
* @return string
|
779 |
+
*/
|
780 |
+
private function getGoogleAnalytics() {
|
781 |
+
$sq_google_analytics = SQ_Tools::$options['sq_google_analytics'];
|
782 |
+
|
783 |
+
if ($sq_google_analytics <> '') {
|
784 |
+
return sprintf("<script type=\"text/javascript\">
|
785 |
+
var _gaq = _gaq || [];
|
786 |
+
_gaq.push(['_setAccount', '%s']);
|
787 |
+
_gaq.push(['_trackPageview']);
|
788 |
+
(function() {
|
789 |
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
790 |
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
791 |
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
792 |
+
})();
|
793 |
+
</script>", $sq_google_analytics) . "\n";
|
794 |
+
}
|
795 |
+
|
796 |
+
return false;
|
797 |
+
}
|
798 |
+
|
799 |
+
/**
|
800 |
+
* Get the Facebook Insights code
|
801 |
+
*
|
802 |
+
* @return string
|
803 |
+
*/
|
804 |
+
private function getFacebookIns() {
|
805 |
+
$sq_facebook_insights = SQ_Tools::$options['sq_facebook_insights'];
|
806 |
+
|
807 |
+
if (($this->checkHomePosts() || $this->checkFrontPage()) && $sq_facebook_insights <> '') {
|
808 |
+
return sprintf("<meta property=\"fb:admins\" content=\"%s\" />", $sq_facebook_insights) . "\n";
|
809 |
+
}
|
810 |
+
|
811 |
+
return false;
|
812 |
+
}
|
813 |
+
|
814 |
+
/**
|
815 |
+
* Get the Alexa Tool code
|
816 |
+
*
|
817 |
+
* @return string
|
818 |
+
*/
|
819 |
+
private function getAlexaT() {
|
820 |
+
$sq_alexa = SQ_Tools::$options['sq_alexa'];
|
821 |
+
|
822 |
+
if (($this->checkHomePosts() || $this->checkFrontPage()) && $sq_alexa <> '') {
|
823 |
+
return sprintf("<meta name=\"alexaVerifyID\" content=\"%s\" />", $sq_alexa) . "\n";
|
824 |
+
}
|
825 |
+
|
826 |
+
return false;
|
827 |
+
}
|
828 |
+
|
829 |
+
/**
|
830 |
+
* Get the bing Webmaster Tool code
|
831 |
+
*
|
832 |
+
* @return string
|
833 |
+
*/
|
834 |
+
private function getBingWT() {
|
835 |
+
$sq_bing_wt = SQ_Tools::$options['sq_bing_wt'];
|
836 |
+
|
837 |
+
if (($this->checkHomePosts() || $this->checkFrontPage()) && $sq_bing_wt <> '') {
|
838 |
+
return sprintf("<meta name=\"msvalidate.01\" content=\"%s\" />", $sq_bing_wt) . "\n";
|
839 |
+
}
|
840 |
+
|
841 |
+
return false;
|
842 |
+
}
|
843 |
+
|
844 |
+
/* * *******************************************************************
|
845 |
+
* ******************************************************************** */
|
846 |
+
|
847 |
+
/**
|
848 |
+
* Get the title from the curent/last post
|
849 |
+
*
|
850 |
+
* @return string
|
851 |
+
*/
|
852 |
+
private function grabTitleFromPost($id = null) {
|
853 |
+
global $wp_query;
|
854 |
+
$post = null;
|
855 |
+
$title = '';
|
856 |
+
$advtitle = '';
|
857 |
+
|
858 |
+
if (isset($id)) {
|
859 |
+
$post = get_post($id);
|
860 |
+
}
|
861 |
+
|
862 |
+
if (!$post) {
|
863 |
+
foreach ($wp_query->posts as $post) {
|
864 |
+
$id = (is_attachment()) ? ($post->post_parent) : ($post->ID);
|
865 |
+
$post = get_post($id);
|
866 |
+
break;
|
867 |
+
}
|
868 |
+
}
|
869 |
+
|
870 |
+
if ($post) {
|
871 |
+
$title = SQ_Tools::i18n($post->post_title);
|
872 |
+
|
873 |
+
//If there is title saved in database
|
874 |
+
if ($advtitle = $this->getAdvancedMeta($post->ID, 'title')) {
|
875 |
+
$title = SQ_Tools::i18n($advtitle);
|
876 |
+
} elseif ($advtitle = $this->getOtherPluginsMeta($post->ID, 'title')) {
|
877 |
+
$title = SQ_Tools::i18n($advtitle);
|
878 |
+
}
|
879 |
+
}
|
880 |
+
|
881 |
+
return $title;
|
882 |
+
}
|
883 |
+
|
884 |
+
/**
|
885 |
+
* Get the description from the curent/last post
|
886 |
+
*
|
887 |
+
* @return string
|
888 |
+
*/
|
889 |
+
public function grabDescriptionFromPost($id = null) {
|
890 |
+
global $wp_query;
|
891 |
+
$post = null;
|
892 |
+
$description = '';
|
893 |
+
$advdescription = '';
|
894 |
+
|
895 |
+
if (isset($id)) {
|
896 |
+
$post = get_post($id);
|
897 |
+
}
|
898 |
+
|
899 |
+
if (!$post) {
|
900 |
+
foreach ($wp_query->posts as $post) {
|
901 |
+
$id = (is_attachment()) ? ($post->post_parent) : ($post->ID);
|
902 |
+
$post = get_post($id);
|
903 |
+
break;
|
904 |
+
}
|
905 |
+
}
|
906 |
+
|
907 |
+
|
908 |
+
if ($post) {
|
909 |
+
$description = $this->_truncate(SQ_Tools::i18n($post->post_excerpt), $this->min_description_length, $this->max_description_length);
|
910 |
+
if (!$description) {
|
911 |
+
$description = $this->truncate(SQ_Tools::i18n($post->post_content), $this->min_description_length, $this->max_description_length);
|
912 |
+
}
|
913 |
+
|
914 |
+
//If there is description saved in database
|
915 |
+
if ($advdescription = $this->getAdvancedMeta($post->ID, 'description')) {
|
916 |
+
$description = SQ_Tools::i18n($advdescription);
|
917 |
+
} elseif ($advdescription = $this->getOtherPluginsMeta($post->ID, 'description')) {
|
918 |
+
$description = SQ_Tools::i18n($advdescription);
|
919 |
+
}
|
920 |
+
}
|
921 |
+
// "internal whitespace trim"
|
922 |
+
|
923 |
+
$description = preg_replace("/\s\s+/u", " ", $description);
|
924 |
+
|
925 |
+
return $description;
|
926 |
+
}
|
927 |
+
|
928 |
+
/**
|
929 |
+
* Get the keywords from the curent/last post and from density
|
930 |
+
*
|
931 |
+
* @return array
|
932 |
+
*/
|
933 |
+
private function grabKeywordsFromPost($id = null) {
|
934 |
+
global $wp_query;
|
935 |
+
|
936 |
+
$this->max_keywrods = ($this->max_keywrods > 0 ? ($this->max_keywrods - 1) : 0);
|
937 |
+
if ($this->max_keywrods == 0) {
|
938 |
+
return;
|
939 |
+
}
|
940 |
+
|
941 |
+
$keywords = array();
|
942 |
+
$advkeywords = '';
|
943 |
+
|
944 |
+
|
945 |
+
if (isset($id)) {
|
946 |
+
$density = array();
|
947 |
+
$post = get_post($id);
|
948 |
+
|
949 |
+
foreach (wp_get_post_tags($id) as $keyword) {
|
950 |
+
$keywords[] = SQ_Tools::i18n($keyword->name);
|
951 |
+
}
|
952 |
+
|
953 |
+
if (count($keywords) <= $this->max_keywrods) {
|
954 |
+
$density = $this->calcDensity(strip_tags($post->post_content), $post->post_title, $this->description);
|
955 |
+
if (is_array($density)) {
|
956 |
+
if (is_array($keywords) && is_array($density)) {
|
957 |
+
$keywords = array_merge($keywords, $density);
|
958 |
+
} else {
|
959 |
+
if (is_array($density)) {
|
960 |
+
$keywords = $density;
|
961 |
+
}
|
962 |
+
}
|
963 |
+
}
|
964 |
+
}
|
965 |
+
if (sizeof($keywords) > $this->max_keywrods) {
|
966 |
+
$keywords = array_slice($keywords, 0, $this->max_keywrods);
|
967 |
+
}
|
968 |
+
} else {
|
969 |
+
if (is_404()) {
|
970 |
+
return null;
|
971 |
+
}
|
972 |
+
|
973 |
+
if (!is_home() && !is_page() && !is_single() && !$this->checkFrontPage() && !$this->checkPostsPage()) {
|
974 |
+
return null;
|
975 |
+
}
|
976 |
+
|
977 |
+
if (is_home()) {
|
978 |
+
foreach ($wp_query->posts as $post) {
|
979 |
+
foreach (wp_get_post_tags($post->ID) as $keyword) {
|
980 |
+
$keywords[] = SQ_Tools::i18n($keyword->name);
|
981 |
+
}
|
982 |
+
}
|
983 |
+
if (count($keywords) <= $this->max_keywrods) {
|
984 |
+
foreach ($wp_query->posts as $post) {
|
985 |
+
$more_keywords = $this->calcDensity(strip_tags($post->post_content), $post->post_title, $this->description);
|
986 |
+
|
987 |
+
if (is_array($more_keywords) && is_array($more_keywords)) {
|
988 |
+
$keywords = array_merge($keywords, $more_keywords);
|
989 |
+
}
|
990 |
+
}
|
991 |
+
}
|
992 |
+
if (sizeof($keywords) > $this->max_keywrods) {
|
993 |
+
$keywords = array_slice($keywords, 0, $this->max_keywrods);
|
994 |
+
}
|
995 |
+
}
|
996 |
+
if (count($keywords) <= $this->max_keywrods) {
|
997 |
+
foreach ($wp_query->posts as $post) {
|
998 |
+
$id = (is_attachment()) ? ($post->post_parent) : ($post->ID);
|
999 |
+
|
1000 |
+
foreach (wp_get_post_tags($id) as $keyword) {
|
1001 |
+
$keywords[] = SQ_Tools::i18n($keyword->name);
|
1002 |
+
}
|
1003 |
+
// autometa
|
1004 |
+
$autometa = stripcslashes(get_post_meta($id, 'autometa', true));
|
1005 |
+
//$autometa = stripcslashes(get_post_meta($post->ID, "autometa", true));
|
1006 |
+
if (isset($autometa) && !empty($autometa)) {
|
1007 |
+
$autometa_array = explode(' ', $autometa);
|
1008 |
+
foreach ($autometa_array as $e) {
|
1009 |
+
$keywords[] = SQ_Tools::i18n($e);
|
1010 |
+
}
|
1011 |
+
}
|
1012 |
+
}
|
1013 |
+
}
|
1014 |
+
}
|
1015 |
+
|
1016 |
+
//If there are keywords saved in database
|
1017 |
+
if ($advkeywords = $this->getAdvancedMeta($post->ID, 'keyword')) {
|
1018 |
+
$keywords[] = SQ_Tools::i18n($advkeywords);
|
1019 |
+
}
|
1020 |
+
|
1021 |
+
//If there are keywords in other plugins
|
1022 |
+
if ($advkeywords = $this->getOtherPluginsMeta($post->ID, 'keyword')) {
|
1023 |
+
$keywords[] = SQ_Tools::i18n($advkeywords);
|
1024 |
+
}
|
1025 |
+
|
1026 |
+
return $this->getUniqueKeywords($keywords);
|
1027 |
+
}
|
1028 |
+
|
1029 |
+
/**
|
1030 |
+
* Calculate the keyword density from blog content
|
1031 |
+
*
|
1032 |
+
* @return array
|
1033 |
+
*/
|
1034 |
+
private function calcDensity($text, $title = '', $description = '') {
|
1035 |
+
$keywords = array();
|
1036 |
+
$text = $title . '. ' . $text;
|
1037 |
+
if (function_exists('preg_replace')) {
|
1038 |
+
$text = preg_replace('/[^a-zA-Z0-9-.]/', ' ', $text);
|
1039 |
+
}
|
1040 |
+
|
1041 |
+
$title = explode(" ", $title);
|
1042 |
+
$description = explode(" ", $description);
|
1043 |
+
$words = explode(" ", strtolower($text));
|
1044 |
+
$phrases = $this->searchPhrase(strtolower($text));
|
1045 |
+
|
1046 |
+
$common_words = "a,i,he,she,it,and,me,my,you,the,tags,hash,that,this,they,their";
|
1047 |
+
$common_words = strtolower($common_words);
|
1048 |
+
$common_words = explode(",", $common_words);
|
1049 |
+
// Get keywords
|
1050 |
+
$words_sum = 0;
|
1051 |
+
foreach ($words as $value) {
|
1052 |
+
$common = false;
|
1053 |
+
$value = $this->trimReplace($value);
|
1054 |
+
if (strlen($value) >= 3) {
|
1055 |
+
foreach ($common_words as $common_word) {
|
1056 |
+
if ($common_word == $value) {
|
1057 |
+
$common = true;
|
1058 |
+
}
|
1059 |
+
}
|
1060 |
+
if ($common != true) {
|
1061 |
+
if (!preg_match("/http/i", $value) && !preg_match("/mailto:/i", $value)) {
|
1062 |
+
$keywords[] = SQ_Tools::i18n($value);
|
1063 |
+
$words_sum++;
|
1064 |
+
}
|
1065 |
+
}
|
1066 |
+
}
|
1067 |
+
}
|
1068 |
+
|
1069 |
+
$results = $results1 = $results2 = array();
|
1070 |
+
if (is_array($keywords) && count($keywords) > 0) {
|
1071 |
+
// Do some maths and write array
|
1072 |
+
$keywords = array_count_values($keywords);
|
1073 |
+
arsort($keywords);
|
1074 |
+
|
1075 |
+
if (sizeof($keywords) > 10) {
|
1076 |
+
$keywords = array_slice($keywords, 0, 10);
|
1077 |
+
}
|
1078 |
+
|
1079 |
+
$phraseId = 0;
|
1080 |
+
foreach ($keywords as $key => $value) {
|
1081 |
+
$percent = 100 / $words_sum * $value;
|
1082 |
+
if ($percent > 1 && in_array($key, $title)) {
|
1083 |
+
foreach ($phrases as $phrase => $count) {
|
1084 |
+
if (strpos($phrase, $key) !== false) {
|
1085 |
+
$results1[] = trim($key);
|
1086 |
+
$results2[] = $phrase;
|
1087 |
+
}
|
1088 |
+
}
|
1089 |
+
}
|
1090 |
+
|
1091 |
+
$results = array_merge($results2, $results1);
|
1092 |
+
}
|
1093 |
+
if (sizeof($keywords) > 4) {
|
1094 |
+
$results = array_slice($results, 0, 4);
|
1095 |
+
}
|
1096 |
+
}
|
1097 |
+
// Return array
|
1098 |
+
return $results;
|
1099 |
+
}
|
1100 |
+
|
1101 |
+
public function searchPhrase($text) {
|
1102 |
+
$words = explode(".", strtolower($text));
|
1103 |
+
//print_r($words);
|
1104 |
+
$frequencies = array();
|
1105 |
+
foreach ($words as $str) {
|
1106 |
+
$phrases = $this->twoWordPhrases($str);
|
1107 |
+
|
1108 |
+
foreach ($phrases as $phrase) {
|
1109 |
+
$key = join(' ', $phrase);
|
1110 |
+
if (!isset($frequencies[$key])) {
|
1111 |
+
$frequencies[$key] = 0;
|
1112 |
+
}
|
1113 |
+
$frequencies[$key] ++;
|
1114 |
+
}
|
1115 |
+
}
|
1116 |
+
arsort($frequencies);
|
1117 |
+
if (sizeof($frequencies) > 10) {
|
1118 |
+
$frequencies = array_slice($frequencies, 0, 10);
|
1119 |
+
}
|
1120 |
+
return $frequencies;
|
1121 |
+
}
|
1122 |
+
|
1123 |
+
public function twoWordPhrases($str) {
|
1124 |
+
$words = preg_split('#\s+#', $str, -1, PREG_SPLIT_NO_EMPTY);
|
1125 |
+
|
1126 |
+
$phrases = array();
|
1127 |
+
if (count($words) > 2) {
|
1128 |
+
foreach (range(0, count($words) - 2) as $offset) {
|
1129 |
+
$phrases[] = array_slice($words, $offset, 2);
|
1130 |
+
}
|
1131 |
+
}
|
1132 |
+
return $phrases;
|
1133 |
+
}
|
1134 |
+
|
1135 |
+
/**
|
1136 |
+
* Get the newlines out
|
1137 |
+
*
|
1138 |
+
* @return string
|
1139 |
+
*/
|
1140 |
+
private function trimReplace($string) {
|
1141 |
+
$string = trim($string);
|
1142 |
+
return (string) str_replace(array("\r", "\r\n", "\n"), '', $string);
|
1143 |
+
}
|
1144 |
+
|
1145 |
+
/**
|
1146 |
+
* Find the correct canonical url
|
1147 |
+
*
|
1148 |
+
* @return string
|
1149 |
+
*/
|
1150 |
+
public function getCanonicalUrl() {
|
1151 |
+
global $wp_query;
|
1152 |
+
|
1153 |
+
if (!isset($wp_query) || $wp_query->is_404 || $wp_query->is_search) {
|
1154 |
+
return false;
|
1155 |
+
}
|
1156 |
+
|
1157 |
+
$haspost = count($wp_query->posts) > 0;
|
1158 |
+
$has_ut = function_exists('user_trailingslashit');
|
1159 |
+
|
1160 |
+
if (get_query_var('m') <> '') {
|
1161 |
+
$m = preg_replace('/[^0-9]/', '', get_query_var('m'));
|
1162 |
+
switch (strlen($m)) {
|
1163 |
+
case 4:
|
1164 |
+
$link = get_year_link($m);
|
1165 |
+
break;
|
1166 |
+
case 6:
|
1167 |
+
$link = get_month_link(substr($m, 0, 4), substr($m, 4, 2));
|
1168 |
+
break;
|
1169 |
+
case 8:
|
1170 |
+
$link = get_day_link(substr($m, 0, 4), substr($m, 4, 2), substr($m, 6, 2));
|
1171 |
+
break;
|
1172 |
+
default:
|
1173 |
+
return false;
|
1174 |
+
}
|
1175 |
+
} elseif ((is_single() || is_page()) && $haspost) {
|
1176 |
+
$post = $wp_query->posts[0];
|
1177 |
+
$link = get_permalink($post->ID);
|
1178 |
+
$link = $this->getPaged($link);
|
1179 |
+
} elseif ((is_single() || is_page()) && $haspost) {
|
1180 |
+
$post = $wp_query->posts[0];
|
1181 |
+
$link = get_permalink($post->ID);
|
1182 |
+
$link = $this->getPaged($link);
|
1183 |
+
} elseif (is_author() && $haspost) {
|
1184 |
+
global $wp_version;
|
1185 |
+
if ($wp_version >= '2') {
|
1186 |
+
$author = get_userdata(get_query_var('author'));
|
1187 |
+
if ($author === false) {
|
1188 |
+
return false;
|
1189 |
+
}
|
1190 |
+
$link = get_author_posts_url($author->ID, $author->user_nicename);
|
1191 |
+
} else {
|
1192 |
+
global $cache_userdata;
|
1193 |
+
$userid = get_query_var('author');
|
1194 |
+
$link = get_author_posts_url($userid, $cache_userdata[$userid]->user_nicename);
|
1195 |
+
}
|
1196 |
+
} elseif (is_category() && $haspost) {
|
1197 |
+
$link = $this->getPaged(get_category_link(get_query_var('cat')));
|
1198 |
+
} else if (is_tag() && $haspost) {
|
1199 |
+
$tag = get_term_by('slug', get_query_var('tag'), 'post_tag');
|
1200 |
+
if (!empty($tag->term_id)) {
|
1201 |
+
$link = get_tag_link($tag->term_id);
|
1202 |
+
}
|
1203 |
+
$link = $this->getPaged($link);
|
1204 |
+
} elseif (is_day() && $haspost) {
|
1205 |
+
$link = get_day_link(get_query_var('year'), get_query_var('monthnum'), get_query_var('day'));
|
1206 |
+
} elseif (is_month() && $haspost) {
|
1207 |
+
$link = get_month_link(get_query_var('year'), get_query_var('monthnum'));
|
1208 |
+
} elseif (is_year() && $haspost) {
|
1209 |
+
$link = get_year_link(get_query_var('year'));
|
1210 |
+
} elseif (is_home()) {
|
1211 |
+
if ((get_option('show_on_front') == 'page') && ($pageid = get_option('page_for_posts'))) {
|
1212 |
+
$link = trailingslashit($this->getPaged(get_permalink($pageid)));
|
1213 |
+
} else {
|
1214 |
+
if (function_exists('icl_get_home_url')) {
|
1215 |
+
$link = icl_get_home_url();
|
1216 |
+
} else {
|
1217 |
+
$link = get_option('home');
|
1218 |
+
}
|
1219 |
+
$link = trailingslashit($this->getPaged($link));
|
1220 |
+
}
|
1221 |
+
} elseif (is_tax() && $haspost) {
|
1222 |
+
$taxonomy = get_query_var('taxonomy');
|
1223 |
+
$term = get_query_var('term');
|
1224 |
+
$link = $this->getPaged(get_term_link($term, $taxonomy));
|
1225 |
+
} else {
|
1226 |
+
return false;
|
1227 |
+
}
|
1228 |
+
|
1229 |
+
return $link;
|
1230 |
+
}
|
1231 |
+
|
1232 |
+
public function getAuthorLinkFromBlog() {
|
1233 |
+
global $wp_query, $wp_version;
|
1234 |
+
|
1235 |
+
if ($wp_query->is_author && count($wp_query->posts) > 0) {
|
1236 |
+
if ($wp_version >= '2') {
|
1237 |
+
$author = get_userdata(get_query_var('author'));
|
1238 |
+
if ($author === false) {
|
1239 |
+
return false;
|
1240 |
+
}
|
1241 |
+
return get_author_posts_url($author->ID, $author->user_nicename);
|
1242 |
+
} else {
|
1243 |
+
global $cache_userdata;
|
1244 |
+
$userid = get_query_var('author');
|
1245 |
+
return get_author_posts_url($userid, $cache_userdata[$userid]->user_nicename);
|
1246 |
+
}
|
1247 |
+
}
|
1248 |
+
return false;
|
1249 |
+
}
|
1250 |
+
|
1251 |
+
public function getPaged($link) {
|
1252 |
+
$page = get_query_var('paged');
|
1253 |
+
if ($page && $page > 1) {
|
1254 |
+
$link = trailingslashit($link) . "page/" . "$page/";
|
1255 |
+
}
|
1256 |
+
return $link;
|
1257 |
+
}
|
1258 |
+
|
1259 |
+
/**
|
1260 |
+
* Check if is the homepage
|
1261 |
+
*
|
1262 |
+
* @return bool
|
1263 |
+
*/
|
1264 |
+
private function isHomePage() {
|
1265 |
+
global $wp_query;
|
1266 |
+
return (is_home() || (isset($wp_query->query) && empty($wp_query->query) && !is_preview() ));
|
1267 |
+
}
|
1268 |
+
|
1269 |
+
/**
|
1270 |
+
* Check if page is shown in front
|
1271 |
+
*
|
1272 |
+
* @return bool
|
1273 |
+
*/
|
1274 |
+
private function checkFrontPage() {
|
1275 |
+
$post = $this->post;
|
1276 |
+
return is_page() && get_option('show_on_front') == 'page' && $post->ID == get_option('page_on_front');
|
1277 |
+
}
|
1278 |
+
|
1279 |
+
/**
|
1280 |
+
* Check if page is shown in home
|
1281 |
+
*
|
1282 |
+
* @return bool
|
1283 |
+
*/
|
1284 |
+
private function checkPostsPage() {
|
1285 |
+
$post = $this->post;
|
1286 |
+
|
1287 |
+
return is_home() && get_option('show_on_front') == 'page' && $post->ID == get_option('page_for_posts');
|
1288 |
+
}
|
1289 |
+
|
1290 |
+
/**
|
1291 |
+
* Check if posts in home page
|
1292 |
+
*
|
1293 |
+
* @return bool
|
1294 |
+
*/
|
1295 |
+
private function checkHomePosts() {
|
1296 |
+
global $wp_query;
|
1297 |
+
|
1298 |
+
if (!$this->checkPostsPage()) {
|
1299 |
+
return is_home() && (int) $wp_query->post_count > 0 && isset($wp_query->posts) && is_array($wp_query->posts);
|
1300 |
+
} else {
|
1301 |
+
return false;
|
1302 |
+
}
|
1303 |
+
}
|
1304 |
+
|
1305 |
+
public function truncate($text, $min, $max) {
|
1306 |
+
if (function_exists('strip_tags')) {
|
1307 |
+
$text = strip_tags($text);
|
1308 |
+
}
|
1309 |
+
|
1310 |
+
$text = str_replace(']]>', ']]>', $text);
|
1311 |
+
$text = @preg_replace('|\[(.+?)\](.+?\[/\\1\])?|s', '', $text);
|
1312 |
+
$text = strip_tags($text);
|
1313 |
+
|
1314 |
+
if ($max < strlen($text)) {
|
1315 |
+
while ($text[$max] != ' ' && $max > $min) {
|
1316 |
+
$max--;
|
1317 |
+
}
|
1318 |
+
}
|
1319 |
+
$text = substr($text, 0, $max);
|
1320 |
+
return trim(stripcslashes($text));
|
1321 |
+
}
|
1322 |
+
|
1323 |
+
public function _truncate($text) {
|
1324 |
+
if (function_exists('strip_tags'))
|
1325 |
+
$text = strip_tags($text);
|
1326 |
+
|
1327 |
+
$text = str_replace(']]>', ']]>', $text);
|
1328 |
+
$text = @preg_replace('|\[(.+?)\](.+?\[/\\1\])?|s', '', $text);
|
1329 |
+
$text = strip_tags($text);
|
1330 |
+
return trim(stripcslashes($text));
|
1331 |
+
}
|
1332 |
+
|
1333 |
+
/**
|
1334 |
+
* Show just distinct keywords
|
1335 |
+
*
|
1336 |
+
* @return string
|
1337 |
+
*/
|
1338 |
+
public function getUniqueKeywords($keywords) {
|
1339 |
+
$all = array();
|
1340 |
+
if (is_array($keywords)) {
|
1341 |
+
foreach ($keywords as $word) {
|
1342 |
+
if (function_exists('mb_strtolower')) {
|
1343 |
+
$all[] = mb_strtolower($word, get_bloginfo('charset'));
|
1344 |
+
} else {
|
1345 |
+
$all[] = strtolower($word);
|
1346 |
+
}
|
1347 |
+
}
|
1348 |
+
}
|
1349 |
+
|
1350 |
+
if (is_array($all) && count($all) > 0) {
|
1351 |
+
$all = array_unique($all);
|
1352 |
+
if (sizeof($all) > 5) {
|
1353 |
+
$all = array_slice($all, 0, 5);
|
1354 |
+
}
|
1355 |
+
|
1356 |
+
return implode(',', $all);
|
1357 |
+
}
|
1358 |
+
|
1359 |
+
return '';
|
1360 |
+
}
|
1361 |
+
|
1362 |
+
/**
|
1363 |
+
* Check if other plugin are/were installed and don't change the SEO
|
1364 |
+
*
|
1365 |
+
* @param type $post_id
|
1366 |
+
* @return boolean
|
1367 |
+
*/
|
1368 |
+
public function getAdvancedMeta($post_id, $meta = 'title') {
|
1369 |
+
global $wpdb;
|
1370 |
+
$field = '';
|
1371 |
+
$cond = '';
|
1372 |
+
|
1373 |
+
if (!isset($post_id) || (int) $post_id == 0) {
|
1374 |
+
return '';
|
1375 |
+
}
|
1376 |
+
|
1377 |
+
//check yoast
|
1378 |
+
switch ($meta) {
|
1379 |
+
case 'title':
|
1380 |
+
$field = 'sq_fp_title';
|
1381 |
+
break;
|
1382 |
+
case 'description':
|
1383 |
+
$field = 'sq_fp_description';
|
1384 |
+
break;
|
1385 |
+
case 'keyword':
|
1386 |
+
$field = 'sq_fp_keywords';
|
1387 |
+
break;
|
1388 |
+
default:
|
1389 |
+
$field = 'sq_fp_title';
|
1390 |
+
}
|
1391 |
+
|
1392 |
+
if ($field <> '' && isset($this->meta[$post_id][$field])) {
|
1393 |
+
return $this->meta[$post_id][$field];
|
1394 |
+
}
|
1395 |
+
|
1396 |
+
// Get the custom Squirrly meta
|
1397 |
+
//////////////////////////////////////////
|
1398 |
+
$fields = array('sq_fp_title' => '', 'sq_fp_description' => '', 'sq_fp_keywords' => '');
|
1399 |
+
|
1400 |
+
foreach ($fields as $meta_key => $meta_value) {
|
1401 |
+
$cond .= ($cond <> '' ? ' OR ' : '') . "`meta_key` = '$meta_key'";
|
1402 |
+
}
|
1403 |
+
|
1404 |
+
$sql = "SELECT `meta_key`, `meta_value`
|
1405 |
+
FROM `" . $wpdb->postmeta . "`
|
1406 |
+
WHERE ($cond) AND `post_id`=" . (int) $post_id;
|
1407 |
+
|
1408 |
+
if ($rows = $wpdb->get_results($sql)) {
|
1409 |
+
foreach ($rows as $row) {
|
1410 |
+
$this->meta[$post_id][$row->meta_key] = $row->meta_value;
|
1411 |
+
}
|
1412 |
+
}
|
1413 |
+
if (isset($this->meta[$post_id]) && is_array($this->meta[$post_id])) {
|
1414 |
+
$this->meta[$post_id] = array_merge($fields, $this->meta[$post_id]);
|
1415 |
+
} else {
|
1416 |
+
$this->meta[$post_id] = $fields;
|
1417 |
+
}
|
1418 |
+
//////////////////////////////////////////
|
1419 |
+
|
1420 |
+
if ($field <> '') {
|
1421 |
+
return $this->meta[$post_id][$field];
|
1422 |
+
}
|
1423 |
+
/////////////
|
1424 |
+
return false;
|
1425 |
+
}
|
1426 |
+
|
1427 |
+
/**
|
1428 |
+
* Check if other plugin are/were installed and don't change the SEO
|
1429 |
+
*
|
1430 |
+
* @param type $post_id
|
1431 |
+
* @return boolean
|
1432 |
+
*/
|
1433 |
+
public function getOtherPluginsMeta($post_id, $meta = 'title') {
|
1434 |
+
global $wpdb;
|
1435 |
+
$field = '';
|
1436 |
+
$cond = '';
|
1437 |
+
|
1438 |
+
if (!isset($post_id) || (int) $post_id == 0) {
|
1439 |
+
return '';
|
1440 |
+
}
|
1441 |
+
|
1442 |
+
//check yoast
|
1443 |
+
switch ($meta) {
|
1444 |
+
case 'title':
|
1445 |
+
$field = '_yoast_wpseo_title';
|
1446 |
+
break;
|
1447 |
+
case 'description':
|
1448 |
+
$field = '_yoast_wpseo_metadesc';
|
1449 |
+
break;
|
1450 |
+
case 'keyword':
|
1451 |
+
$field = '_yoast_wpseo_focuskw';
|
1452 |
+
break;
|
1453 |
+
default:
|
1454 |
+
$field = '_yoast_wpseo_title';
|
1455 |
+
}
|
1456 |
+
|
1457 |
+
if ($field <> '' && isset($this->meta[$post_id][$field])) {
|
1458 |
+
return $this->meta[$post_id][$field];
|
1459 |
+
}
|
1460 |
+
|
1461 |
+
// Get the custom Squirrly meta
|
1462 |
+
//////////////////////////////////////////
|
1463 |
+
$fields = array('_yoast_wpseo_title' => '', '_yoast_wpseo_metadesc' => '', '_yoast_wpseo_focuskw' => '');
|
1464 |
+
|
1465 |
+
foreach ($fields as $meta_key => $meta_value) {
|
1466 |
+
$cond .= ($cond <> '' ? ' OR ' : '') . "`meta_key` = '$meta_key'";
|
1467 |
+
}
|
1468 |
+
|
1469 |
+
$sql = "SELECT `meta_key`, `meta_value`
|
1470 |
+
FROM `" . $wpdb->postmeta . "`
|
1471 |
+
WHERE ($cond) AND `post_id`=" . (int) $post_id;
|
1472 |
+
//echo "History: ".$sql;
|
1473 |
+
$rows = $wpdb->get_results($sql);
|
1474 |
+
if ($rows) {
|
1475 |
+
foreach ($rows as $row) {
|
1476 |
+
$this->meta[$post_id][$row->meta_key] = $row->meta_value;
|
1477 |
+
}
|
1478 |
+
}
|
1479 |
+
if (isset($this->meta[$post_id]) && is_array($this->meta[$post_id])) {
|
1480 |
+
$this->meta[$post_id] = array_merge($fields, $this->meta[$post_id]);
|
1481 |
+
} else {
|
1482 |
+
$this->meta[$post_id] = $fields;
|
1483 |
+
}
|
1484 |
+
//////////////////////////////////////////
|
1485 |
+
if ($field <> '') {
|
1486 |
+
return $this->meta[$post_id][$field];
|
1487 |
+
}
|
1488 |
+
/////////////
|
1489 |
+
return false;
|
1490 |
+
}
|
1491 |
+
|
1492 |
+
}
|
models/SQ_Ico.php
ADDED
@@ -0,0 +1,229 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
Copyright 2011-2013 Chris Jean & iThemes
|
5 |
+
Licensed under GPLv2 or above
|
6 |
+
|
7 |
+
Version 1.0.2
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Model_SQ_Ico {
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Images in the BMP format.
|
14 |
+
*
|
15 |
+
* @var array
|
16 |
+
* @access private
|
17 |
+
*/
|
18 |
+
var $_images = array();
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Constructor - Create a new ICO generator.
|
22 |
+
*
|
23 |
+
* If the constructor is not passed a file, a file will need to be supplied using the {@link PHP_ICO::add_image}
|
24 |
+
* function in order to generate an ICO file.
|
25 |
+
*
|
26 |
+
* @param string $file Optional. Path to the source image file.
|
27 |
+
* @param array $sizes Optional. An array of sizes (each size is an array with a width and height) that the source image should be rendered at in the generated ICO file. If sizes are not supplied, the size of the source image will be used.
|
28 |
+
*/
|
29 |
+
function set_image($file = false, $sizes = array()) {
|
30 |
+
if (false != $file)
|
31 |
+
$this->add_image($file, $sizes);
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Add an image to the generator.
|
36 |
+
*
|
37 |
+
* This function adds a source image to the generator. It serves two main purposes: add a source image if one was
|
38 |
+
* not supplied to the constructor and to add additional source images so that different images can be supplied for
|
39 |
+
* different sized images in the resulting ICO file. For instance, a small source image can be used for the small
|
40 |
+
* resolutions while a larger source image can be used for large resolutions.
|
41 |
+
*
|
42 |
+
* @param string $file Path to the source image file.
|
43 |
+
* @param array $sizes Optional. An array of sizes (each size is an array with a width and height) that the source image should be rendered at in the generated ICO file. If sizes are not supplied, the size of the source image will be used.
|
44 |
+
* @return boolean true on success and false on failure.
|
45 |
+
*/
|
46 |
+
function add_image($file, $sizes = array()) {
|
47 |
+
|
48 |
+
if (false === ( $im = $this->_load_image_file($file) ))
|
49 |
+
return false;
|
50 |
+
|
51 |
+
|
52 |
+
if (empty($sizes))
|
53 |
+
$sizes = array(imagesx($im), imagesy($im));
|
54 |
+
|
55 |
+
// If just a single size was passed, put it in array.
|
56 |
+
if (!is_array($sizes[0]))
|
57 |
+
$sizes = array($sizes);
|
58 |
+
|
59 |
+
foreach ((array) $sizes as $size) {
|
60 |
+
list( $width, $height ) = $size;
|
61 |
+
|
62 |
+
$new_im = imagecreatetruecolor($width, $height);
|
63 |
+
|
64 |
+
imagecolortransparent($new_im, imagecolorallocatealpha($new_im, 0, 0, 0, 127));
|
65 |
+
imagealphablending($new_im, false);
|
66 |
+
imagesavealpha($new_im, true);
|
67 |
+
|
68 |
+
$source_width = imagesx($im);
|
69 |
+
$source_height = imagesy($im);
|
70 |
+
|
71 |
+
if (false === imagecopyresampled($new_im, $im, 0, 0, 0, 0, $width, $height, $source_width, $source_height))
|
72 |
+
continue;
|
73 |
+
|
74 |
+
$this->_add_image_data($new_im);
|
75 |
+
}
|
76 |
+
|
77 |
+
return true;
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Write the ICO file data to a file path.
|
82 |
+
*
|
83 |
+
* @param string $file Path to save the ICO file data into.
|
84 |
+
* @return boolean true on success and false on failure.
|
85 |
+
*/
|
86 |
+
function save_ico($file) {
|
87 |
+
if (false === ( $data = $this->_get_ico_data() ))
|
88 |
+
return false;
|
89 |
+
|
90 |
+
if (false === ( $fh = fopen($file, 'w') ))
|
91 |
+
return false;
|
92 |
+
|
93 |
+
if (false === ( fwrite($fh, $data) )) {
|
94 |
+
fclose($fh);
|
95 |
+
return false;
|
96 |
+
}
|
97 |
+
|
98 |
+
fclose($fh);
|
99 |
+
|
100 |
+
return true;
|
101 |
+
}
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Generate the final ICO data by creating a file header and adding the image data.
|
105 |
+
*
|
106 |
+
* @access private
|
107 |
+
*/
|
108 |
+
function _get_ico_data() {
|
109 |
+
if (!is_array($this->_images) || empty($this->_images))
|
110 |
+
return false;
|
111 |
+
|
112 |
+
|
113 |
+
$data = pack('vvv', 0, 1, count($this->_images));
|
114 |
+
$pixel_data = '';
|
115 |
+
|
116 |
+
$icon_dir_entry_size = 16;
|
117 |
+
|
118 |
+
$offset = 6 + ( $icon_dir_entry_size * count($this->_images) );
|
119 |
+
|
120 |
+
foreach ($this->_images as $image) {
|
121 |
+
$data .= pack('CCCCvvVV', $image['width'], $image['height'], $image['color_palette_colors'], 0, 1, $image['bits_per_pixel'], $image['size'], $offset);
|
122 |
+
$pixel_data .= $image['data'];
|
123 |
+
|
124 |
+
$offset += $image['size'];
|
125 |
+
}
|
126 |
+
|
127 |
+
$data .= $pixel_data;
|
128 |
+
unset($pixel_data);
|
129 |
+
|
130 |
+
|
131 |
+
return $data;
|
132 |
+
}
|
133 |
+
|
134 |
+
/**
|
135 |
+
* Take a GD image resource and change it into a raw BMP format.
|
136 |
+
*
|
137 |
+
* @access private
|
138 |
+
*/
|
139 |
+
function _add_image_data($im) {
|
140 |
+
$width = imagesx($im);
|
141 |
+
$height = imagesy($im);
|
142 |
+
|
143 |
+
|
144 |
+
$pixel_data = array();
|
145 |
+
|
146 |
+
$opacity_data = array();
|
147 |
+
$current_opacity_val = 0;
|
148 |
+
|
149 |
+
for ($y = $height - 1; $y >= 0; $y--) {
|
150 |
+
for ($x = 0; $x < $width; $x++) {
|
151 |
+
$color = imagecolorat($im, $x, $y);
|
152 |
+
|
153 |
+
$alpha = ( $color & 0x7F000000 ) >> 24;
|
154 |
+
$alpha = ( 1 - ( $alpha / 127 ) ) * 255;
|
155 |
+
|
156 |
+
$color &= 0xFFFFFF;
|
157 |
+
$color |= 0xFF000000 & ( $alpha << 24 );
|
158 |
+
|
159 |
+
$pixel_data[] = $color;
|
160 |
+
|
161 |
+
|
162 |
+
$opacity = ( $alpha <= 127 ) ? 1 : 0;
|
163 |
+
|
164 |
+
$current_opacity_val = ( $current_opacity_val << 1 ) | $opacity;
|
165 |
+
|
166 |
+
if (( ( $x + 1 ) % 32 ) == 0) {
|
167 |
+
$opacity_data[] = $current_opacity_val;
|
168 |
+
$current_opacity_val = 0;
|
169 |
+
}
|
170 |
+
}
|
171 |
+
|
172 |
+
if (( $x % 32 ) > 0) {
|
173 |
+
while (( $x++ % 32 ) > 0)
|
174 |
+
$current_opacity_val = $current_opacity_val << 1;
|
175 |
+
|
176 |
+
$opacity_data[] = $current_opacity_val;
|
177 |
+
$current_opacity_val = 0;
|
178 |
+
}
|
179 |
+
}
|
180 |
+
|
181 |
+
$image_header_size = 40;
|
182 |
+
$color_mask_size = $width * $height * 4;
|
183 |
+
$opacity_mask_size = ( ceil($width / 32) * 4 ) * $height;
|
184 |
+
|
185 |
+
|
186 |
+
$data = pack('VVVvvVVVVVV', 40, $width, ( $height * 2), 1, 32, 0, 0, 0, 0, 0, 0);
|
187 |
+
|
188 |
+
foreach ($pixel_data as $color)
|
189 |
+
$data .= pack('V', $color);
|
190 |
+
|
191 |
+
foreach ($opacity_data as $opacity)
|
192 |
+
$data .= pack('N', $opacity);
|
193 |
+
|
194 |
+
|
195 |
+
$image = array(
|
196 |
+
'width' => $width,
|
197 |
+
'height' => $height,
|
198 |
+
'color_palette_colors' => 0,
|
199 |
+
'bits_per_pixel' => 32,
|
200 |
+
'size' => $image_header_size + $color_mask_size + $opacity_mask_size,
|
201 |
+
'data' => $data,
|
202 |
+
);
|
203 |
+
|
204 |
+
$this->_images[] = $image;
|
205 |
+
}
|
206 |
+
|
207 |
+
/**
|
208 |
+
* Read in the source image file and convert it into a GD image resource.
|
209 |
+
*
|
210 |
+
* @access private
|
211 |
+
*/
|
212 |
+
function _load_image_file($file) {
|
213 |
+
// Run a cheap check to verify that it is an image file.
|
214 |
+
if (false === ( $size = getimagesize($file) ))
|
215 |
+
return false;
|
216 |
+
|
217 |
+
if (false === ( $file_data = file_get_contents($file) ))
|
218 |
+
return false;
|
219 |
+
|
220 |
+
if (false === ( $im = imagecreatefromstring($file_data) ))
|
221 |
+
return false;
|
222 |
+
|
223 |
+
unset($file_data);
|
224 |
+
|
225 |
+
|
226 |
+
return $im;
|
227 |
+
}
|
228 |
+
|
229 |
+
}
|
models/SQ_Menu.php
ADDED
@@ -0,0 +1,346 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Model_SQ_Menu {
|
4 |
+
|
5 |
+
/** @var array with the menu content
|
6 |
+
*
|
7 |
+
* $page_title (string) (required) The text to be displayed in the title tags of the page when the menu is selected
|
8 |
+
* $menu_title (string) (required) The on-screen name text for the menu
|
9 |
+
* $capability (string) (required) The capability required for this menu to be displayed to the user. User levels are deprecated and should not be used here!
|
10 |
+
* $menu_slug (string) (required) The slug name to refer to this menu by (should be unique for this menu). Prior to Version 3.0 this was called the file (or handle) parameter. If the function parameter is omitted, the menu_slug should be the PHP file that handles the display of the menu page content.
|
11 |
+
* $function The function that displays the page content for the menu page. Technically, the function parameter is optional, but if it is not supplied, then WordPress will basically assume that including the PHP file will generate the administration screen, without calling a function. Most plugin authors choose to put the page-generating code in a function within their main plugin file.:In the event that the function parameter is specified, it is possible to use any string for the file parameter. This allows usage of pages such as ?page=my_super_plugin_page instead of ?page=my-super-plugin/admin-options.php.
|
12 |
+
* $icon_url (string) (optional) The url to the icon to be used for this menu. This parameter is optional. Icons should be fairly small, around 16 x 16 pixels for best results. You can use the plugin_dir_url( __FILE__ ) function to get the URL of your plugin directory and then add the image filename to it. You can set $icon_url to "div" to have wordpress generate <br> tag instead of <img>. This can be used for more advanced formating via CSS, such as changing icon on hover.
|
13 |
+
* $position (integer) (optional) The position in the menu order this menu should appear. By default, if this parameter is omitted, the menu will appear at the bottom of the menu structure. The higher the number, the lower its position in the menu. WARNING: if 2 menu items use the same position attribute, one of the items may be overwritten so that only one item displays!
|
14 |
+
*
|
15 |
+
* */
|
16 |
+
public $menu = array();
|
17 |
+
|
18 |
+
/** @var array with the menu content
|
19 |
+
* $id (string) (required) HTML 'id' attribute of the edit screen section
|
20 |
+
* $title (string) (required) Title of the edit screen section, visible to user
|
21 |
+
* $callback (callback) (required) Function that prints out the HTML for the edit screen section. Pass function name as a string. Within a class, you can instead pass an array to call one of the class's methods. See the second example under Example below.
|
22 |
+
* $post_type (string) (required) The type of Write screen on which to show the edit screen section ('post', 'page', 'link', or 'custom_post_type' where custom_post_type is the custom post type slug)
|
23 |
+
* $context (string) (optional) The part of the page where the edit screen section should be shown ('normal', 'advanced', or 'side'). (Note that 'side' doesn't exist before 2.7)
|
24 |
+
* $priority (string) (optional) The priority within the context where the boxes should show ('high', 'core', 'default' or 'low')
|
25 |
+
* $callback_args (array) (optional) Arguments to pass into your callback function. The callback will receive the $post object and whatever parameters are passed through this variable.
|
26 |
+
*
|
27 |
+
* */
|
28 |
+
public $meta = array();
|
29 |
+
|
30 |
+
public function __construct() {
|
31 |
+
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Add a menu in WP admin page
|
36 |
+
*
|
37 |
+
* @param array $param
|
38 |
+
*
|
39 |
+
* @return void
|
40 |
+
*/
|
41 |
+
public function addMenu($param = null) {
|
42 |
+
if ($param)
|
43 |
+
$this->menu = $param;
|
44 |
+
|
45 |
+
if (is_array($this->menu)) {
|
46 |
+
|
47 |
+
if ($this->menu[0] <> '' && $this->menu[1] <> '') {
|
48 |
+
/* add the translation */
|
49 |
+
$this->menu[0] = __($this->menu[0], _SQ_PLUGIN_NAME_);
|
50 |
+
$this->menu[1] = __($this->menu[1], _SQ_PLUGIN_NAME_);
|
51 |
+
|
52 |
+
if (!isset($this->menu[5]))
|
53 |
+
$this->menu[5] = null;
|
54 |
+
if (!isset($this->menu[6]))
|
55 |
+
$this->menu[6] = null;
|
56 |
+
if (!isset($this->menu[7]))
|
57 |
+
$this->menu[7] = null;
|
58 |
+
|
59 |
+
/* add the menu with WP */
|
60 |
+
add_menu_page($this->menu[0], $this->menu[1], $this->menu[2], $this->menu[3], $this->menu[4], $this->menu[5], $this->menu[6], $this->menu[7]);
|
61 |
+
}
|
62 |
+
}
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Add a submenumenu in WP admin page
|
67 |
+
*
|
68 |
+
* @param array $param
|
69 |
+
*
|
70 |
+
* @return void
|
71 |
+
*/
|
72 |
+
public function addSubmenu($param = null) {
|
73 |
+
if ($param)
|
74 |
+
$this->menu = $param;
|
75 |
+
|
76 |
+
if (is_array($this->menu)) {
|
77 |
+
|
78 |
+
if ($this->menu[0] <> '' && $this->menu[1] <> '') {
|
79 |
+
/* add the translation */
|
80 |
+
$this->menu[0] = __($this->menu[0], _SQ_PLUGIN_NAME_);
|
81 |
+
$this->menu[1] = __($this->menu[1], _SQ_PLUGIN_NAME_);
|
82 |
+
|
83 |
+
if (!isset($this->menu[5]))
|
84 |
+
$this->menu[5] = null;
|
85 |
+
if (!isset($this->menu[6]))
|
86 |
+
$this->menu[6] = null;
|
87 |
+
if (!isset($this->menu[7]))
|
88 |
+
$this->menu[7] = null;
|
89 |
+
|
90 |
+
/* add the menu with WP */
|
91 |
+
add_submenu_page($this->menu[0], $this->menu[1], $this->menu[2], $this->menu[3], $this->menu[4], $this->menu[5], $this->menu[6], $this->menu[7]);
|
92 |
+
}
|
93 |
+
}
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Add a box Meta in WP
|
98 |
+
*
|
99 |
+
* @param array $param
|
100 |
+
*
|
101 |
+
* @return void
|
102 |
+
*/
|
103 |
+
public function addMeta($param = null) {
|
104 |
+
if ($param)
|
105 |
+
$this->meta = $param;
|
106 |
+
|
107 |
+
|
108 |
+
if (is_array($this->meta)) {
|
109 |
+
|
110 |
+
if ($this->meta[0] <> '' && $this->meta[1] <> '') {
|
111 |
+
/* add the translation */
|
112 |
+
$this->meta[1] = __($this->meta[1], _SQ_PLUGIN_NAME_);
|
113 |
+
|
114 |
+
if (!isset($this->meta[5]))
|
115 |
+
$this->meta[5] = null;
|
116 |
+
if (!isset($this->meta[6]))
|
117 |
+
$this->meta[6] = null;
|
118 |
+
/* add the box content with WP */
|
119 |
+
add_meta_box($this->meta[0], $this->meta[1], $this->meta[2], $this->meta[3], $this->meta[4], $this->meta[5]);
|
120 |
+
//add_meta_box('post'._SQ_PLUGIN_NAME_, __(ucfirst(_SQ_PLUGIN_NAME_),_SQ_PLUGIN_NAME_), array($this, 'showMenu'), 'post', 'side', 'high');
|
121 |
+
}
|
122 |
+
}
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* Check the google code saved at settings
|
127 |
+
*
|
128 |
+
* @return string
|
129 |
+
*/
|
130 |
+
public function checkGoogleWTCode($code) {
|
131 |
+
if ($code <> '') {
|
132 |
+
if (strpos($code, 'content') !== false) {
|
133 |
+
preg_match('/content\\s*=\\s*[\'\"]([^\'\"]+)[\'\"]/i', $code, $result);
|
134 |
+
if (isset($result[1]) && !empty($result[1]))
|
135 |
+
$code = $result[1];
|
136 |
+
}
|
137 |
+
|
138 |
+
if (strpos($code, '"') !== false) {
|
139 |
+
preg_match('/[\'\"]([^\'\"]+)[\'\"]/i', $code, $result);
|
140 |
+
if (isset($result[1]) && !empty($result[1]))
|
141 |
+
$code = $result[1];
|
142 |
+
}
|
143 |
+
|
144 |
+
if ($code == '')
|
145 |
+
SQ_Error::setError(__("The code for Google Webmaster Tool is incorrect.", _SQ_PLUGIN_NAME_));
|
146 |
+
}
|
147 |
+
return $code;
|
148 |
+
}
|
149 |
+
|
150 |
+
/**
|
151 |
+
* Check the google code saved at settings
|
152 |
+
*
|
153 |
+
* @return string
|
154 |
+
*/
|
155 |
+
public function checkGoogleAnalyticsCode($code) {
|
156 |
+
//echo $code;
|
157 |
+
if ($code <> '') {
|
158 |
+
if (strpos($code, '_gaq.push') !== false) {
|
159 |
+
preg_match('/_gaq.push\(\[[\'\"]_setAccount[\'\"],\\s?[\'\"]([^\'\"]+)[\'\"]\]\)/i', $code, $result);
|
160 |
+
if (isset($result[1]) && !empty($result[1]))
|
161 |
+
$code = $result[1];
|
162 |
+
}
|
163 |
+
|
164 |
+
if (strpos($code, '"') !== false) {
|
165 |
+
preg_match('/[\'\"]([^\'\"]+)[\'\"]/i', $code, $result);
|
166 |
+
if (isset($result[1]) && !empty($result[1]))
|
167 |
+
$code = $result[1];
|
168 |
+
}
|
169 |
+
|
170 |
+
if (strpos($code, 'UA-') === false) {
|
171 |
+
$code = '';
|
172 |
+
SQ_Error::setError(__("The code for Google Analytics is incorrect.", _SQ_PLUGIN_NAME_));
|
173 |
+
}
|
174 |
+
}
|
175 |
+
return $code;
|
176 |
+
}
|
177 |
+
|
178 |
+
/**
|
179 |
+
* Check the Facebook code saved at settings
|
180 |
+
*
|
181 |
+
* @return string
|
182 |
+
*/
|
183 |
+
public function checkFavebookInsightsCode($code) {
|
184 |
+
if ($code <> '') {
|
185 |
+
if (strpos($code, 'content') !== false) {
|
186 |
+
preg_match('/content\\s*=\\s*[\'\"]([^\'\"]+)[\'\"]/i', $code, $result);
|
187 |
+
if (isset($result[1]) && !empty($result[1]))
|
188 |
+
$code = $result[1];
|
189 |
+
}
|
190 |
+
|
191 |
+
if (strpos($code, '"') !== false) {
|
192 |
+
preg_match('/[\'\"]([^\'\"]+)[\'\"]/i', $code, $result);
|
193 |
+
if (isset($result[1]) && !empty($result[1]))
|
194 |
+
$code = $result[1];
|
195 |
+
}
|
196 |
+
|
197 |
+
if ($code == '')
|
198 |
+
SQ_Error::setError(__("The code for Facebook is incorrect.", _SQ_PLUGIN_NAME_));
|
199 |
+
}
|
200 |
+
return $code;
|
201 |
+
}
|
202 |
+
|
203 |
+
/**
|
204 |
+
* Check the Bing code saved at settings
|
205 |
+
*
|
206 |
+
* @return string
|
207 |
+
*/
|
208 |
+
public function checkBingWTCode($code) {
|
209 |
+
if ($code <> '') {
|
210 |
+
if (strpos($code, 'content') !== false) {
|
211 |
+
preg_match('/content\\s*=\\s*[\'\"]([^\'\"]+)[\'\"]/i', $code, $result);
|
212 |
+
if (isset($result[1]) && !empty($result[1]))
|
213 |
+
$code = $result[1];
|
214 |
+
}
|
215 |
+
|
216 |
+
if (strpos($code, '"') !== false) {
|
217 |
+
preg_match('/[\'\"]([^\'\"]+)[\'\"]/i', $code, $result);
|
218 |
+
if (isset($result[1]) && !empty($result[1]))
|
219 |
+
$code = $result[1];
|
220 |
+
}
|
221 |
+
|
222 |
+
if ($code == '')
|
223 |
+
SQ_Error::setError(__("The code for Bing is incorrect.", _SQ_PLUGIN_NAME_));
|
224 |
+
}
|
225 |
+
return $code;
|
226 |
+
}
|
227 |
+
|
228 |
+
/**
|
229 |
+
* Add the image to the root path
|
230 |
+
*
|
231 |
+
* @param string $file
|
232 |
+
* @param string $path
|
233 |
+
* @return array [name (the name of the file), favicon (the path of the ico), message (the returned message)]
|
234 |
+
*
|
235 |
+
*/
|
236 |
+
public function addFavicon($file, $path = ABSPATH) {
|
237 |
+
if (function_exists('fopen')) {
|
238 |
+
$f = @fopen($newfile, "w");
|
239 |
+
}
|
240 |
+
$out = array();
|
241 |
+
$out['name'] = strtolower(basename($file['name']));
|
242 |
+
$out['tmp'] = _SQ_CACHE_DIR_ . strtolower(basename($file['name']));
|
243 |
+
$out['favicon'] = $path . "/" . 'favicon.ico';
|
244 |
+
$file_err = $file['error'];
|
245 |
+
|
246 |
+
/* get the file extension */
|
247 |
+
$file_name = explode('.', $file['name']);
|
248 |
+
$file_type = strtolower($file_name[count($file_name) - 1]);
|
249 |
+
|
250 |
+
/* if the file has a name */
|
251 |
+
if (!empty($file['name'])) {
|
252 |
+
/* Check the extension */
|
253 |
+
$file_type = strtolower($file_type);
|
254 |
+
$files = array('ico', 'jpeg', 'jpg', 'gif', 'png');
|
255 |
+
$key = in_array($file_type, $files);
|
256 |
+
|
257 |
+
if (!$key) {
|
258 |
+
SQ_Error::setError(__("File type error: Only ICO, JPEG, JPG, GIF or PNG files are allowed.", _SQ_PLUGIN_NAME_));
|
259 |
+
return;
|
260 |
+
}
|
261 |
+
|
262 |
+
/* Check for error messages */
|
263 |
+
if (!$this->checkFunctions()) {
|
264 |
+
SQ_Error::setError(__("GD error: The GD library must be installed on your server.", _SQ_PLUGIN_NAME_));
|
265 |
+
return;
|
266 |
+
} else {
|
267 |
+
/* Delete the previous file if exists */
|
268 |
+
if (is_file($out['tmp'])) {
|
269 |
+
if (!unlink($out['tmp'])) {
|
270 |
+
SQ_Error::setError(__("Delete error: Could not delete the old favicon.", _SQ_PLUGIN_NAME_));
|
271 |
+
return;
|
272 |
+
}
|
273 |
+
}
|
274 |
+
|
275 |
+
/* Upload the file */
|
276 |
+
if (!move_uploaded_file($file['tmp_name'], $out['tmp'])) {
|
277 |
+
SQ_Error::setError(__("Upload error: Could not upload the favicon.", _SQ_PLUGIN_NAME_));
|
278 |
+
return;
|
279 |
+
}
|
280 |
+
|
281 |
+
/* Change the permision */
|
282 |
+
if (!chmod($out['tmp'], 0755)) {
|
283 |
+
SQ_Error::setError(__("Permission error: Could not change the favicon permissions.", _SQ_PLUGIN_NAME_));
|
284 |
+
return;
|
285 |
+
}
|
286 |
+
|
287 |
+
if ($file_type <> 'ico') {
|
288 |
+
/* Transform the image into icon */
|
289 |
+
|
290 |
+
switch ($file_type) {
|
291 |
+
case "jpeg":
|
292 |
+
case "jpg":
|
293 |
+
$im = @imagecreatefromjpeg($out['tmp']);
|
294 |
+
break;
|
295 |
+
case "gif":
|
296 |
+
$im = @imagecreatefromgif($out['tmp']);
|
297 |
+
break;
|
298 |
+
case "png":
|
299 |
+
$im = @imagecreatefrompng($out['tmp']);
|
300 |
+
break;
|
301 |
+
}
|
302 |
+
|
303 |
+
/* Save the file */
|
304 |
+
if ($im) {
|
305 |
+
$ico = SQ_ObjController::getModel('SQ_Ico');
|
306 |
+
$ico->set_image($out['tmp'], array(32, 32));
|
307 |
+
$ico->save_ico($out['favicon']);
|
308 |
+
} else {
|
309 |
+
SQ_Error::setError(__("ICO Error: Could not create the ICO from file. Try with another file type.", _SQ_PLUGIN_NAME_));
|
310 |
+
}
|
311 |
+
} else {
|
312 |
+
copy($out['tmp'], $out['favicon']);
|
313 |
+
}
|
314 |
+
|
315 |
+
$out['message'] = __("The favicon has been updated.", _SQ_PLUGIN_NAME_);
|
316 |
+
|
317 |
+
return $out;
|
318 |
+
}
|
319 |
+
}
|
320 |
+
}
|
321 |
+
|
322 |
+
private function checkFunctions() {
|
323 |
+
$required_functions = array(
|
324 |
+
'getimagesize',
|
325 |
+
'imagecreatefromstring',
|
326 |
+
'imagecreatetruecolor',
|
327 |
+
'imagecolortransparent',
|
328 |
+
'imagecolorallocatealpha',
|
329 |
+
'imagealphablending',
|
330 |
+
'imagesavealpha',
|
331 |
+
'imagesx',
|
332 |
+
'imagesy',
|
333 |
+
'imagecopyresampled',
|
334 |
+
);
|
335 |
+
|
336 |
+
foreach ($required_functions as $function) {
|
337 |
+
if (!function_exists($function)) {
|
338 |
+
SQ_Error::setError("The PHP_ICO class was unable to find the $function function, which is part of the GD library. Ensure that the system has the GD library installed and that PHP has access to it through a PHP interface, such as PHP's GD module. Since this function was not found, the library will be unable to create ICO files.");
|
339 |
+
return false;
|
340 |
+
}
|
341 |
+
}
|
342 |
+
|
343 |
+
return true;
|
344 |
+
}
|
345 |
+
|
346 |
+
}
|
models/SQ_Post.php
ADDED
@@ -0,0 +1,226 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Shown in the Post page (called from SQ_Menu)
|
5 |
+
*
|
6 |
+
*/
|
7 |
+
class Model_SQ_Post {
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Set the callback to tinymce with javascript SQ_eventChange function call on event
|
11 |
+
* @param string $init
|
12 |
+
* @return string
|
13 |
+
*/
|
14 |
+
public function setCallback($init) {
|
15 |
+
|
16 |
+
if (wp_default_editor() == 'tinymce') {
|
17 |
+
$init['setup'] = 'window.sq_tinymce.setup';
|
18 |
+
$init['onchange_callback'] = 'window.sq_tinymce.callback';
|
19 |
+
$init['content_css'] = ((isset($init['content_css']) && $init['content_css'] <> '') ? $init['content_css'] . ',' : '' ) . _SQ_THEME_URL_ . 'css/sq_frontend.css';
|
20 |
+
}
|
21 |
+
|
22 |
+
return $init;
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Register a button in tinymce editor
|
27 |
+
*/
|
28 |
+
public function registerButton($buttons) {
|
29 |
+
array_push($buttons, "|", "heading");
|
30 |
+
return $buttons;
|
31 |
+
}
|
32 |
+
|
33 |
+
public function addHeadingButton($plugin_array) {
|
34 |
+
$plugin_array['heading'] = _SQ_THEME_URL_ . 'js/tinymce.js';
|
35 |
+
return $plugin_array;
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Search for posts in the local blog
|
40 |
+
*
|
41 |
+
* @global object $wpdb
|
42 |
+
* @param string $q
|
43 |
+
* @return array
|
44 |
+
*/
|
45 |
+
public function searchPost($q, $exclude = array(), $start = 0, $nbr = 8) {
|
46 |
+
global $wpdb;
|
47 |
+
$responce = array();
|
48 |
+
if (sizeof($exclude) > 1) {
|
49 |
+
$exclude = join(',', $exclude);
|
50 |
+
} else
|
51 |
+
$exclude = (int) $exclude;
|
52 |
+
|
53 |
+
$q = trim($q, '"');
|
54 |
+
/* search in wp database */
|
55 |
+
$posts = $wpdb->get_results("SELECT ID, post_title, post_date_gmt, post_content, post_type FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' AND (post_title LIKE '%$q%' OR post_content LIKE '%$q%') AND ID not in ($exclude) ORDER BY post_title LIMIT " . $start . ',' . ($start + $nbr));
|
56 |
+
|
57 |
+
|
58 |
+
if ($posts) {
|
59 |
+
|
60 |
+
$responce['total'] = $wpdb->num_rows;
|
61 |
+
foreach ($posts as $post) {
|
62 |
+
$responce['results'][] = array('id' => $post->ID,
|
63 |
+
'url' => get_permalink($post->ID),
|
64 |
+
'title' => $post->post_title,
|
65 |
+
'content' => $this->truncate($post->post_content, 50),
|
66 |
+
'date' => $post->post_date_gmt);
|
67 |
+
}
|
68 |
+
} else {
|
69 |
+
$responce['error'] .= __('Squirrly could not find any results for: ') . ' "' . stripslashes($q) . '"';
|
70 |
+
}
|
71 |
+
return json_encode($responce);
|
72 |
+
}
|
73 |
+
|
74 |
+
private function truncate($text, $length = 25) {
|
75 |
+
if (!$length)
|
76 |
+
return $text;
|
77 |
+
|
78 |
+
$text = str_replace(']]>', ']]>', $text);
|
79 |
+
$text = @preg_replace('|\[(.+?)\](.+?\[/\\1\])?|s', '', $text);
|
80 |
+
$text = strip_tags($text);
|
81 |
+
$words = explode(' ', $text, $length + 1);
|
82 |
+
|
83 |
+
if (count($words) > $length) {
|
84 |
+
array_pop($words);
|
85 |
+
array_push($words, '...');
|
86 |
+
$text = implode(' ', $words);
|
87 |
+
}
|
88 |
+
return $text;
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Upload the image on server from version 2.0.4
|
93 |
+
*
|
94 |
+
* Add configuration page
|
95 |
+
*/
|
96 |
+
public function upload_image($url) {
|
97 |
+
$dir = null;
|
98 |
+
$file = array();
|
99 |
+
|
100 |
+
$response = wp_remote_get($url, array('timeout' => 30));
|
101 |
+
$file = wp_upload_bits(basename($url), '', wp_remote_retrieve_body($response), $dir);
|
102 |
+
|
103 |
+
$file['type'] = wp_remote_retrieve_header($response, 'content-type');
|
104 |
+
|
105 |
+
if (!isset($file['error']) || $file['error'] == '')
|
106 |
+
if (isset($file['url']) && $file['url'] <> '') {
|
107 |
+
$file['url'] = str_replace(get_bloginfo('url'), '', $file['url']);
|
108 |
+
$file['filename'] = basename($file['url']);
|
109 |
+
|
110 |
+
return $file;
|
111 |
+
}
|
112 |
+
|
113 |
+
return false;
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Save/Update Meta in database
|
118 |
+
*
|
119 |
+
* @param integer $post_id
|
120 |
+
* @param array $metas [key,value]
|
121 |
+
* @return true
|
122 |
+
*/
|
123 |
+
public function saveAdvMeta($post_id, $metas) {
|
124 |
+
global $wpdb;
|
125 |
+
|
126 |
+
if ((int) $post_id == 0 || !is_array($metas))
|
127 |
+
return;
|
128 |
+
|
129 |
+
foreach ($metas as $meta) {
|
130 |
+
$sql = "SELECT `meta_value`
|
131 |
+
FROM `" . $wpdb->postmeta . "`
|
132 |
+
WHERE `meta_key` = '" . $meta['key'] . "' AND `post_id`=" . (int) $post_id;
|
133 |
+
|
134 |
+
if ($wpdb->get_row($sql)) {
|
135 |
+
$sql = "UPDATE `" . $wpdb->postmeta . "`
|
136 |
+
SET `meta_value` = '" . addslashes($meta['value']) . "'
|
137 |
+
WHERE `meta_key` = '" . $meta['key'] . "' AND `post_id`=" . (int) $post_id;
|
138 |
+
} else {
|
139 |
+
$sql = "INSERT INTO `" . $wpdb->postmeta . "`
|
140 |
+
(`post_id`,`meta_key`,`meta_value`)
|
141 |
+
VALUES (" . (int) $post_id . ",'" . $meta['key'] . "','" . $meta['value'] . "')";
|
142 |
+
}
|
143 |
+
$wpdb->query($sql);
|
144 |
+
}
|
145 |
+
|
146 |
+
return $metas;
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* check if there are keywords saved
|
151 |
+
* @global object $wpdb
|
152 |
+
* @return integer|false
|
153 |
+
*/
|
154 |
+
public function countKeywords() {
|
155 |
+
global $wpdb;
|
156 |
+
|
157 |
+
if ($posts = $wpdb->get_row("SELECT count(`post_id`) as count
|
158 |
+
FROM `" . $wpdb->postmeta . "`
|
159 |
+
WHERE (`meta_key` = 'sq_post_keyword')")) {
|
160 |
+
|
161 |
+
return $posts->count;
|
162 |
+
}
|
163 |
+
|
164 |
+
return false;
|
165 |
+
}
|
166 |
+
|
167 |
+
/**
|
168 |
+
* check if there are keywords saved
|
169 |
+
* @global object $wpdb
|
170 |
+
* @return integer|false
|
171 |
+
*/
|
172 |
+
public function getPostWithKeywords($filter = '', $ord = 'meta_id') {
|
173 |
+
global $wpdb;
|
174 |
+
|
175 |
+
if ($filter <> '') {
|
176 |
+
$filter = ' AND (' . $filter . ') ';
|
177 |
+
}
|
178 |
+
|
179 |
+
if ($posts = $wpdb->get_results("SELECT `post_id`, `meta_value`
|
180 |
+
FROM `" . $wpdb->postmeta . "`
|
181 |
+
WHERE (`meta_key` = 'sq_post_keyword')"
|
182 |
+
. $filter .
|
183 |
+
'ORDER BY `' . $ord . '`')) {
|
184 |
+
|
185 |
+
$posts = array_map(create_function('$post', '$post->meta_value = json_decode($post->meta_value); return $post;'), $posts);
|
186 |
+
return $posts;
|
187 |
+
}
|
188 |
+
|
189 |
+
return false;
|
190 |
+
}
|
191 |
+
|
192 |
+
/**
|
193 |
+
* get the keyword
|
194 |
+
* @global object $wpdb
|
195 |
+
* @param integer $post_id
|
196 |
+
* @return boolean
|
197 |
+
*/
|
198 |
+
public function getKeyword($post_id) {
|
199 |
+
global $wpdb;
|
200 |
+
|
201 |
+
if ($row = $wpdb->get_row("SELECT `post_id`, `meta_value`
|
202 |
+
FROM `" . $wpdb->postmeta . "`
|
203 |
+
WHERE (`meta_key` = 'sq_post_keyword' AND `post_id`=" . (int) $post_id . ")
|
204 |
+
ORDER BY `meta_id` DESC")) {
|
205 |
+
|
206 |
+
return json_decode($row->meta_value);
|
207 |
+
}
|
208 |
+
|
209 |
+
return false;
|
210 |
+
}
|
211 |
+
|
212 |
+
/**
|
213 |
+
* Save the post keyword
|
214 |
+
* @param integer $post_id
|
215 |
+
* @param object $args
|
216 |
+
*/
|
217 |
+
public function saveKeyword($post_id, $args) {
|
218 |
+
$args->update = current_time('timestamp');
|
219 |
+
|
220 |
+
$meta[] = array('key' => 'sq_post_keyword',
|
221 |
+
'value' => json_encode($args));
|
222 |
+
|
223 |
+
$this->saveAdvMeta($post_id, $meta);
|
224 |
+
}
|
225 |
+
|
226 |
+
}
|
models/SQ_PostsList.php
ADDED
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Model_SQ_PostsList {
|
4 |
+
|
5 |
+
/** @var integer */
|
6 |
+
public $post_id;
|
7 |
+
public $audit;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Get the traffic total
|
11 |
+
* @return array
|
12 |
+
*/
|
13 |
+
public function getTotal($response) {
|
14 |
+
if (isset($response->posts)) {
|
15 |
+
$ranking = SQ_ObjController::getController('SQ_Ranking', false);
|
16 |
+
|
17 |
+
foreach ($response->posts as $post_id => &$values) {
|
18 |
+
if (isset($values->error)) {
|
19 |
+
if ($values->error == 'post_limited' && isset($values->error_message)) {
|
20 |
+
$values = '<span class="sq_no_rank" ref="' . $post_id . '"><a href="' . $values->error_link . '" target="_blank">' . $values->error_message . '</a></span>';
|
21 |
+
continue;
|
22 |
+
}
|
23 |
+
}
|
24 |
+
|
25 |
+
$graph = ''; //reset the graph
|
26 |
+
if (isset($values->visits)) {
|
27 |
+
|
28 |
+
if (!empty($values->visits)) {
|
29 |
+
$data = array();
|
30 |
+
$data[] = array('', __('Visits', _SQ_PLUGIN_NAME_));
|
31 |
+
foreach ($values->visits as $key => $visit) {
|
32 |
+
$data[] = array($key, (int) number_format_i18n($visit));
|
33 |
+
}
|
34 |
+
$graph = '<div class="sq_chart_title">' . __('monthly traffic', _SQ_PLUGIN_NAME_) . '</div><div id="sq_chart_' . $post_id . '" style="margin:0 auto; width:100px; height:40px;"></div><script>jQuery( document ).ready(function() {drawChart("sq_chart_' . $post_id . '", ' . json_encode($data) . ',false);});</script>';
|
35 |
+
}
|
36 |
+
|
37 |
+
$values = $graph . '<span class="sq_rank_column_button sq_show_more" ref="' . $post_id . '">' . __('See Analytics', _SQ_PLUGIN_NAME_) . '</span>';
|
38 |
+
} else {
|
39 |
+
$values = '<span class="sq_optimize" ref="' . $post_id . '">' . __('Optimize it with Squirrly to see the Analytics', _SQ_PLUGIN_NAME_) . '</span>';
|
40 |
+
}
|
41 |
+
}
|
42 |
+
}
|
43 |
+
return $response;
|
44 |
+
}
|
45 |
+
|
46 |
+
public function getAnalytics($analytics) {
|
47 |
+
$this->audit = $analytics;
|
48 |
+
if (isset($this->audit->content)) {
|
49 |
+
foreach ($this->audit->content as $key => $audit) {
|
50 |
+
$group[$key]['name'] = $key;
|
51 |
+
if (!empty($audit)) {
|
52 |
+
$group[$key]['total'] = 0;
|
53 |
+
$group[$key]['complete'] = 0;
|
54 |
+
$group[$key]['processed'] = 0;
|
55 |
+
|
56 |
+
foreach ($audit as $task) {
|
57 |
+
@$group[$key]['total'] = number_format_i18n($task->total);
|
58 |
+
@$group[$key]['complete'] += ($task->complete) ? 1 : 0;
|
59 |
+
@$group[$key]['processed'] += 1;
|
60 |
+
}
|
61 |
+
|
62 |
+
$color = 'sq_audit_task_completed_green';
|
63 |
+
|
64 |
+
if ($group[$key]['complete'] < ($group[$key]['processed'] / 2)) {
|
65 |
+
$color = 'sq_audit_task_completed_red';
|
66 |
+
}
|
67 |
+
if ($group[$key]['complete'] >= ($group[$key]['processed'] / 2)) {
|
68 |
+
$color = 'sq_audit_task_completed_yellow';
|
69 |
+
}
|
70 |
+
|
71 |
+
//custom values
|
72 |
+
if ($key == 'rank' && $group[$key]['total'] <= 10) { //in case of first page
|
73 |
+
$color = 'sq_audit_task_completed_green';
|
74 |
+
}
|
75 |
+
if ($key == 'links' && $group[$key]['total'] > 50) { //in case of first page
|
76 |
+
$color = 'sq_audit_task_completed_yellow';
|
77 |
+
}
|
78 |
+
if ($key == 'authority' && $group[$key]['total'] > 70) { //in case of first page
|
79 |
+
$color = 'sq_audit_task_completed_yellow';
|
80 |
+
}
|
81 |
+
|
82 |
+
if ($group[$key]['complete'] == $group[$key]['processed']) {
|
83 |
+
$color = 'sq_audit_task_completed_green';
|
84 |
+
}
|
85 |
+
//if the post its just indexed with the url then is not so good
|
86 |
+
if ($key == 'rank' && (int) $group[$key]['total'] == 0) {
|
87 |
+
$color = 'sq_audit_task_completed_yellow';
|
88 |
+
}
|
89 |
+
|
90 |
+
if ($key == 'rank') {
|
91 |
+
$total_tooltip = __('This post\'s current position in Google', _SQ_PLUGIN_NAME_);
|
92 |
+
}
|
93 |
+
if ($key == 'traffic') {
|
94 |
+
$total_tooltip = __('The total traffic for the last 30 days, for the current post', _SQ_PLUGIN_NAME_);
|
95 |
+
}
|
96 |
+
if ($key == 'social') {
|
97 |
+
$total_tooltip = __('The total number of shares on social media channels for this post', _SQ_PLUGIN_NAME_);
|
98 |
+
}
|
99 |
+
if ($key == 'authority') {
|
100 |
+
$total_tooltip = __('The total authority for this post', _SQ_PLUGIN_NAME_);
|
101 |
+
}
|
102 |
+
if ($key == 'links') {
|
103 |
+
$total_tooltip = __('The total number of inbound links to this post', _SQ_PLUGIN_NAME_);
|
104 |
+
}
|
105 |
+
@$group[$key]['tooltip'] = $total_tooltip;
|
106 |
+
@$group[$key]['color'] = $color;
|
107 |
+
}
|
108 |
+
}
|
109 |
+
$this->audit->groups = json_decode(json_encode($group));
|
110 |
+
|
111 |
+
return $this->audit;
|
112 |
+
} else {
|
113 |
+
return false;
|
114 |
+
}
|
115 |
+
}
|
116 |
+
|
117 |
+
}
|
readme.txt
ADDED
@@ -0,0 +1,384 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
=== SEO Plugin by SQUIRRLY ===
|
2 |
+
Contributors: florinmuresan, calinvingan, cifi
|
3 |
+
Tags: seo,seo optimization,seo content,seo plugin,squirly,squirrley,wordpress seo,content marketing strategy,marketing strategy,plugin,dutch,german,russian,romanian,search engine optimization,xml,sitemap,keyword,keyword research,post,posts,page,squirrly,tag,image,images,photos,flickr,statistics,google,content,title,description,favicon,apple,ios,andriod,mobile,canonical,author,googleplus,analytics,automation,admin,automatic seo,seo correction,seo title,seo meta,human friendly,title suggestion
|
4 |
+
Requires at least: 3.3
|
5 |
+
Tested up to: 3.8.2
|
6 |
+
Stable tag: trunk
|
7 |
+
|
8 |
+
Squirrly SEO Plugin is the Only SEO Tool that Allows You To Optimize Content And Measure Its Success. For Both Humans and Search Engines.
|
9 |
+
|
10 |
+
== Description ==
|
11 |
+
Squirrly helps you write content that's both Google Friendly and Human friendly. Excellent ballance between what search engine bots look for in your content and what Human readers crave for.
|
12 |
+
|
13 |
+
[youtube https://www.youtube.com/watch?v=Bf5runIfod0&list=PLKizZr50E58ZZukX6x-rbXATdYSgAlXDA]
|
14 |
+
|
15 |
+
Different customers, from areas such as e-commerce, law firms, digital agencies, online magazines, movie review sites, etc. have reported +285% increase in the number of readers, by optimizing their content with this tool, and by measuring and improving as advized by our tool.
|
16 |
+
|
17 |
+
All-In-All :: Squirrly SEO will help you get a tool that acts like an Expert Consultant, sitting right next to you, advising on SEO, and telling you where you need to improve.
|
18 |
+
|
19 |
+
Squirrly is a Freemium software, like MailChimp.
|
20 |
+
|
21 |
+
You’ll start with the free version of Squirrly SEO. It will help you if you have small content marketing needs, such as 5 articles published / month, 5 keyword analysis and a weekly audit report. When you'll require more, you can pay for the PRO Plan.
|
22 |
+
|
23 |
+
- <strong>Gives You SEO Advice as you're typing your articles.</strong> Squirrly helps you in real time to optimize your articles to 100%, while you are writing or editing them.
|
24 |
+
|
25 |
+
- <strong>Optimized articles get +285% traffic,</strong> on average (real statistics from over 16,500 people who participated in the survey).
|
26 |
+
|
27 |
+
- <strong>Finds you Keywords and Topics that your Customers actively search for</strong> and which will help you out-rank your competitors, not just follow them around
|
28 |
+
- <strong>The algorithm for Keyword analysis</strong> takes into accounts elements that will help you find suitable keywords for content optimization: for Humans and for Search Engines.
|
29 |
+
|
30 |
+
- <strong>Tracks all the aspects of your Content Marketing Strategy:</strong> Blogging, Traffic, SEO, Social Signals, Links, Authority. Every single week you get a report by email.
|
31 |
+
|
32 |
+
- <strong>Send the Audit report by email</strong> to your content writer, SEO person, developers, etc.
|
33 |
+
|
34 |
+
- <strong>It Gives You Professional Advice on How To Fix</strong> any of those areas that it helps track, so you can easily find out how to improve. Content from SEO Moz (recently just MOZ), Google, Authority Labs, etc.
|
35 |
+
|
36 |
+
- <strong>Monitors Your Progress, week by week.</strong> You'll get interesting data about the historical performance of each article you write.
|
37 |
+
|
38 |
+
- <strong>Analyze any single article. See how it improves over time.</strong>
|
39 |
+
|
40 |
+
- <strong>Optimize Your Content for Humans.</strong> We've recently added tools and lessons (free of charge) that will help you optimize all of your Content for Humans, not just for search engines.
|
41 |
+
|
42 |
+
- <strong>Stay up to date with your SEO and Social Signals, with our Email Alerts</strong>. We send out email alerts if something on your wordpress site needs immediate attention, so that you can act upon it and save your business the trouble.
|
43 |
+
|
44 |
+
- <strong>Free Images that You Can Use.</strong>
|
45 |
+
|
46 |
+
- <strong>Headline Suggestions based on your SEO keyword.</strong>
|
47 |
+
|
48 |
+
- <strong>Social Intelligence through the Inspiration Box, to help you write better content, by showing you recent tweets about your subject, how other journalists and bloggers have approached your topic. All of this in your "Add New Post" interface.</strong>
|
49 |
+
|
50 |
+
<strong>This is the FREE version of Squirrly SEO.</strong>
|
51 |
+
|
52 |
+
You can now use Squirrly SEO for free and if you have small content marketing needs (about one article posted per week, some keywords that you want to analyze), it's the perfect plan for you.
|
53 |
+
|
54 |
+
Once you start having bigger content marketing and SEO needs (more than one article posted per week), you can go PRO. Read more about it in the FAQ section.
|
55 |
+
|
56 |
+
Neil Patel, the co-founder of Kissmetrics and Crazy Egg, recommends us as one of the best wordpress seo plugins that really helps to improve traffic. http://www.quicksprout.com/university/how-to-maximize-your-seo-traffic-with-these-must-have-wordpress-plugins/
|
57 |
+
|
58 |
+
<em>"Wow ,I've been using your tool for a week now and one of my blog ranked no1 out of a million for its key word... amazing"</em>
|
59 |
+
|
60 |
+
<h3>Reviews</h3>
|
61 |
+
* <em>"You can be confident that without ever leaving your Add New Blog page you have a strong keyword, good and current content, and your post will be 100% optimized for the search engines."</em> - <strong>Jason Fox Marketing</strong>
|
62 |
+
|
63 |
+
* <em>"Features that exceed the stereotypical plugin"</em> - <strong>Robert, Yieldkit</strong>
|
64 |
+
|
65 |
+
* <em>"It's amazing! seeing a huge boost in traffic"</em>
|
66 |
+
|
67 |
+
* <em>"Great SEO info at a click"</em>
|
68 |
+
|
69 |
+
<strong>You can read reviews from Internet Marketing experts on http://www.squirrly.co/reviews</strong>
|
70 |
+
|
71 |
+
More than helping you with your internet marketing efforts, we strive to offer Excellence in Customer Service.
|
72 |
+
|
73 |
+
- we have a Free Coaching session with 14 lessons and 10 actionable work files, awaiting you after you install the plugin and connect to squirrly.co
|
74 |
+
|
75 |
+
- you'll be able to get support from us from the plugin, from our Facebook, our Twitter, email and we can even schedule a Skype call.
|
76 |
+
|
77 |
+
We're passionate about seeing you get a great and happy experience, so we'll do our best to fix anything that may come up very fast.
|
78 |
+
|
79 |
+
The <a title="Squirrly SEO in Delivering Happiness" href="http://www.deliveringhappiness.com/everyday-happiness-florin-squirrly-and-how-theyre-making-happy-work/" target="_blank">Delivering Happiness</a> blog featured us for this.
|
80 |
+
|
81 |
+
|
82 |
+
We're glad to have you,
|
83 |
+
Florin Muresan
|
84 |
+
Founder and CEO Squirrly UK
|
85 |
+
|
86 |
+
|
87 |
+
See all the Features of our product on the <a href="/extend/plugins/squirrly-seo/faq/" title="Squirrly Wordpress SEO"> FAQ Section </a>.
|
88 |
+
|
89 |
+
<a href="/extend/plugins/squirrly-seo/screenshots/" title="Squirrly SEO Plugin">Check our screenshots</a>
|
90 |
+
| <a href="http://www.squirrly.co" title="Squirrly SEO" target="_blank">Go to our official site</a> | Free Version (if you install from the WP directory) OR <a href="http://www.squirrly.co/pricing" title="See Pricing" target="_blank">Pricing Plans</a>
|
91 |
+
|
92 |
+
== Installation ==
|
93 |
+
1. Log In as an Admin on your Wordpress blog.
|
94 |
+
2. In the menu displayed on the left, there is a "Plugins" tab. Click it.
|
95 |
+
3. Now click "Add New".
|
96 |
+
4. There, you have the buttons: "Search | Upload | Featured | Popular | Newest". Click "Upload".
|
97 |
+
5. Upload the squirrly-seo.zip file.
|
98 |
+
6. After the upload is finished, click Activate Plugin.
|
99 |
+
7. Good. Now enter your email to connect with Squirrly.co
|
100 |
+
8. Then click "Write a New Post with Squirrly Seo".
|
101 |
+
9. Done. Type a keyword to the right of the screen and start using Squirrly Seo :) Enjoy!
|
102 |
+
|
103 |
+
== Screenshots ==
|
104 |
+
1. Wordpress Seo by Squirrly - Optimize your article with SEO Live Assistant
|
105 |
+
2. Wordpress Seo by Squirrly - Find the top keywords with the Keyword Researh
|
106 |
+
3. Wordpress Seo by Squirrly - Customize the META with the SEO Snippet
|
107 |
+
4. Wordpress Seo by Squirrly - Find your top posts and authors with Squirrly Analytics
|
108 |
+
5. Wordpress Seo by Squirrly - Monitor your success with the Performance Analytics
|
109 |
+
6. Wordpress Seo by Squirrly - Let Squirrly do the SEO Settings that your blog needs
|
110 |
+
7. Wordpress Seo by Squirrly - Check your Weekly Site Audit and get higher scores
|
111 |
+
|
112 |
+
|
113 |
+
== Changelog ==
|
114 |
+
= 3.1.1 =
|
115 |
+
* Added rel="prev" and rel="next" in head
|
116 |
+
* Added SEO META Duplicates notification
|
117 |
+
* Fixed the snippet for home page when the home is a specific page
|
118 |
+
* Added more details in SEO Analytics
|
119 |
+
*
|
120 |
+
|
121 |
+
= 3.1.0 =
|
122 |
+
* Added the Performance Analytics in Squirrly SEO Tab
|
123 |
+
* Added Analytics filter for custom post types
|
124 |
+
* Added Google Rank Column in Squirrly SEO > Performance Analytics
|
125 |
+
* Added Google Country Select in Squirrly SEO > Settings
|
126 |
+
|
127 |
+
= 3.0.0 =
|
128 |
+
* Added a new look in Squirrly SEO Settings
|
129 |
+
* Added the new dashboard tab in Squirrly Menu
|
130 |
+
* Added the traffic date information in Squirrly SEO Analytics
|
131 |
+
* Fixed the Favicon issue for PNG images
|
132 |
+
|
133 |
+
= 2.3.3 =
|
134 |
+
* Fixed the curl call issue in some cases
|
135 |
+
* Fixed the traffic loading speed in all posts
|
136 |
+
* Changed the task color for Squirrly SEO Analytics
|
137 |
+
* Changed the Keyword SERP check frequency
|
138 |
+
* Fixed minor bugs in SEO Live Assistant
|
139 |
+
* Enjoy Squirrly SEO!
|
140 |
+
|
141 |
+
= 2.3.1 =
|
142 |
+
* Fixed the javascript loading issue for some wordpress dashboards.
|
143 |
+
* Fixed SERP report for indexed url in google
|
144 |
+
|
145 |
+
= 2.3.0 =
|
146 |
+
* Add the new Squirrly SEO Analytics in all posts list
|
147 |
+
* Traffic graph for each post
|
148 |
+
|
149 |
+
= 2.2.3 =
|
150 |
+
* Fixed snippet encoding issue
|
151 |
+
* Fixed SEO Audit Button notification
|
152 |
+
|
153 |
+
= 2.2.2 =
|
154 |
+
* Small changes in Squirrly SEO Keyword Research look
|
155 |
+
* Fixed the snippet description issues
|
156 |
+
* Fixed small bugs
|
157 |
+
|
158 |
+
= 2.2.1 =
|
159 |
+
* Fixed traffic record issue
|
160 |
+
* Fixed SSL connection with the API issue
|
161 |
+
|
162 |
+
= 2.2.0 =
|
163 |
+
* Added a new theme for Squirrly SEO
|
164 |
+
* Added the 2nd version for SEO Live assistant
|
165 |
+
* Added Top Headline suggestion when adding a post title
|
166 |
+
* Compatible with Wordpress 3.8.1 version
|
167 |
+
* Fixed snippet issues
|
168 |
+
|
169 |
+
= 2.1.7 =
|
170 |
+
* Compatible with Wordpress 3.8 version
|
171 |
+
* Fixed css issue
|
172 |
+
* Updated the SEO live assistant
|
173 |
+
|
174 |
+
= 2.1.6 =
|
175 |
+
* Fixed css load issue
|
176 |
+
* Fixed duplicate descriptions
|
177 |
+
|
178 |
+
= 2.1.5 =
|
179 |
+
* Compatible with 3.7.1
|
180 |
+
* Update Open Graph Meta in Frontend
|
181 |
+
* Updates for Seo Live Assistant
|
182 |
+
|
183 |
+
= 2.1.4 =
|
184 |
+
* Update the Traffic Bot List
|
185 |
+
* Fixed database bugs for the traffic records
|
186 |
+
* Fixed header loading bugs
|
187 |
+
|
188 |
+
= 2.1.3 =
|
189 |
+
* Optimized Squirrly SEO for a faster load
|
190 |
+
* Fixed minor bugs in the theme's css files
|
191 |
+
* Added Alexa Meta Tool in Squirrly SEO Settings
|
192 |
+
* Updated the bot list in SEO Squirrly Article Rank
|
193 |
+
|
194 |
+
= 2.1.2 =
|
195 |
+
* Added unique SEO (title and description) for the author, tag and category pages
|
196 |
+
* Fixed Open Graph image size and image url for a better view in facebook and google
|
197 |
+
* Fixed some deprecated functions
|
198 |
+
* Wordpress 3.6.1 compatibility
|
199 |
+
|
200 |
+
= 2.1.1 =
|
201 |
+
* Fixed absolute path for images in feed
|
202 |
+
* Fixed unique title and description for categories and pages
|
203 |
+
* Fixed local save images minor bug
|
204 |
+
* Fixed keyword saving for main domain optimization
|
205 |
+
* Changed the blog limit and optimization limit for the free account
|
206 |
+
* Added the weekly SEO audit for all accounts
|
207 |
+
|
208 |
+
= 2.1.0 =
|
209 |
+
* Added Squirrly SEO Live Assistant for both Visual and HTML editors
|
210 |
+
* Added Squirrly SEO for custom post types
|
211 |
+
* Compatible with the Wordpress version 3.6
|
212 |
+
* Fixed the type delay for Seo Live Assistant
|
213 |
+
|
214 |
+
= 2.0.8 =
|
215 |
+
* Fixed the custom SEO Title and Description notification in posts list
|
216 |
+
* Changed the default SEO Settings
|
217 |
+
* Fixed image insert in editor
|
218 |
+
* Fixed minor bug that appeared on plugin activation
|
219 |
+
* Fixed Squirrly SEO local save for remote images
|
220 |
+
|
221 |
+
= 2.0.7 =
|
222 |
+
* Added the Squirrly SEO Traffic Progress report
|
223 |
+
* Fixed minor frontend bugs
|
224 |
+
* Fixed the date in sitemap for tags
|
225 |
+
|
226 |
+
= 2.0.6 =
|
227 |
+
(stable)
|
228 |
+
* Fixed header issue for remote requests
|
229 |
+
* Added SSL connection to https://my.squirrly.co
|
230 |
+
* Fixed post list loading issue in some cases
|
231 |
+
* Fixed Squirrly SEO Status Info for expired trial version
|
232 |
+
|
233 |
+
= 2.0.5 =
|
234 |
+
* Fixed Squirrly SEO loading loop when all posts are not public in All posts
|
235 |
+
* Add default message in SEO Article Rank when adding a new Post/Page
|
236 |
+
* Added support options in Squirrly SEO Settings
|
237 |
+
* Added the Russian (ru_RU) translation in Squirly SEO
|
238 |
+
* Check calls for HTTPS when curl protocol could not support that
|
239 |
+
|
240 |
+
= 2.0.4 =
|
241 |
+
* Added Custom Title/Description option in all Post/Pages
|
242 |
+
* Added SEO check if custom title is entered in Post/Page
|
243 |
+
* Added SEO check for META customization with other plugins
|
244 |
+
* Custom META notification in All Posts
|
245 |
+
* Added Dashboard page in Squirrly SEO Tab
|
246 |
+
* Added Account information, Blog status in dashboard
|
247 |
+
* Added affiliate option and images in Squirrly SEO Tab
|
248 |
+
* Validate remote images on save post to prevent bad images integration
|
249 |
+
* Compatible with Twitter search 1.1
|
250 |
+
* Changed the Sign-up messages
|
251 |
+
* Changed the timeout for remote API requests
|
252 |
+
|
253 |
+
= 2.0.3 =
|
254 |
+
* Added attributes informations for copyright free images
|
255 |
+
* Improved the Keyword Research results with competition results
|
256 |
+
* Improved custom META description and keywords
|
257 |
+
|
258 |
+
= 2.0.2 =
|
259 |
+
* Fixed minor Squirrly SEO Rank Bugs
|
260 |
+
* Fixed minor Snippet/Settings issues
|
261 |
+
* Added the Squirrly Keyword Suggestion in Squirrly Rank
|
262 |
+
|
263 |
+
= 2.0.1 =
|
264 |
+
* Added Squirrly SEO Rank in Post/Page lists
|
265 |
+
* Added Traffic progress monitor for each post/page
|
266 |
+
* Added Social Impact progress monitor for each post/page
|
267 |
+
* Added Inbound Links progress monitor for each post/page
|
268 |
+
|
269 |
+
== Credits ==
|
270 |
+
Florin Muresan - CEO at Squirrly
|
271 |
+
Calin Vingan - CTO at Squirrly
|
272 |
+
Andreea Leau - VP Marketing
|
273 |
+
Cristina Leau - Squirrly mascot designer
|
274 |
+
Alexandra Nicola - Content Writer
|
275 |
+
|
276 |
+
Investors:
|
277 |
+
Ibrahim Evsan, serial entrepreneur, one of the best known bloggers in Germany
|
278 |
+
Philipp Kandal, co-Founder and CTO of Skobbler (recently aquired for $24M by Telenav)
|
279 |
+
|
280 |
+
Many Thanks.
|
281 |
+
|
282 |
+
== License ==
|
283 |
+
Squirrly is Free to use. The version from the WP directory will install the Free Version.
|
284 |
+
|
285 |
+
You'll be able to use this seo software once you install the plugin and use your email to connect to Squirrly.co
|
286 |
+
|
287 |
+
For higher content marketing and SEO needs, you can check our Official Site and see what the PRO Plan offers.
|
288 |
+
|
289 |
+
|
290 |
+
== Frequently Asked Questions ==
|
291 |
+
= How does Squirrly Wordpress SEO Plugin work? =
|
292 |
+
Neil Patel, the Co-Founder of Kissmetrics and Crazy Egg made a great video on how to use Squirrly's Live Assistant:
|
293 |
+
http://www.quicksprout.com/university/how-to-maximize-your-seo-traffic-with-these-must-have-wordpress-plugins/
|
294 |
+
|
295 |
+
= How does the META Description work in Squirrly SEO Optimization? =
|
296 |
+
Based on your article, Squirrly will find the most relevant text and add it in the META Description.
|
297 |
+
|
298 |
+
You can opt-in to use the Advanced SEO Settings, which will allow you to customize how the META Title and Description will be. All while writing or editing your article.
|
299 |
+
|
300 |
+
= Is Squirrly SEO Plugin free? =
|
301 |
+
Yes, you just have to install the plugin from the WP directory into your site. Then connect with your email to Squirrly. The Free Version will automatically start. Read below for more. Once you have bigger content marketing needs, you can opt-in to upgrade to the PRO Plan.
|
302 |
+
|
303 |
+
= Does the Free Plan offer all the features? =
|
304 |
+
Yes. As of January 2014 all the features are also included in the free plan. There is NO trial period, NO other features that can be activated by paying money for the plugin. The free version has all a small wordpress site or blog needs to get started with SEO and Content Marketing. These are the blogs on which owners want to publish about 5 articles / month, analyze 5 different seo keywords, need a general Audit of their whole site and want to see the SEO analytics for their last posts.
|
305 |
+
|
306 |
+
= What about the PRO Plan? =
|
307 |
+
The PRO Plan is for those with bigger content marketing and SEO needs. For anything regarding the paid plans, go to our website: squirrly.co | The wordpress directory listing is only to be used for concerns regarding the Free version. You can get the PRO Plan after you've installed the plugin from this directory.
|
308 |
+
|
309 |
+
= Can I use squirrly seo on mobile? =
|
310 |
+
Yes, on IOS and ANDROID, it works both through the browser and wordpress app
|
311 |
+
|
312 |
+
= Can I use the images, tweets and articles given by the Inspiration Box? Are there any legal concerns? =
|
313 |
+
Yes, you can use the tweets and the paragraphs in your articles. They contain a link to the source and are perfectly legal to use. Of course, for the
|
314 |
+
articles add only some paragraphs, not the whole article. As for the images, you can use the Copyright-Free images that we offer, to make sure you will
|
315 |
+
not have any legal problems. Follow the license-compliance guidance we offer for each of them.
|
316 |
+
|
317 |
+
= Do I get support for your Wordpress SEO Plugin? =
|
318 |
+
Yes, we are focused on Delivering Happiness and this comes along with a good support package. We have a track record of replying in under 5 hours to
|
319 |
+
any request, no matter the time of day. And we also fix any problems which you may encounter very fast, so Squirrly is trust-worthy.
|
320 |
+
|
321 |
+
= What Features does Squirrly SEO Plugin offer? =
|
322 |
+
All of the features that we offer have been built having the customer's best interests in mind. We brought 90% of our clients to the first page of Google
|
323 |
+
and we've proven time and again that we are a great team that knows all there is to know about good *SEO automation*. We had a community of 20,000 blogs that all
|
324 |
+
used our SEO techniques, and they have gotten lots of hits from search engines due to our optimization. Now we offer the same quality for you:
|
325 |
+
|
326 |
+
[UPDATE] Squirrly now has over 300,000 downloads, so we've been offering great software for over a year now.
|
327 |
+
|
328 |
+
- SEO Advice as you're typing your articles
|
329 |
+
- Advice in real time from the SEO Live Assistant on how to write better content for your Human readers
|
330 |
+
- Weekly SEO Audit report, that shows you how well you did on: Blogging, Traffic, Links, SEO, Social Media and Authority
|
331 |
+
- Lots of advice in the reports for how you can fix each section
|
332 |
+
- Keyword Research and Analysis (that takes data from both SEMrush AND social media)
|
333 |
+
- Monitors your Site's Progress
|
334 |
+
- SEO Analytics for each post or page
|
335 |
+
- Shows you rank in Google
|
336 |
+
- Shows you Social Signals for each article
|
337 |
+
- Social Intelligence
|
338 |
+
- Images you can use (with advice on License for each image. Most are Free to use)
|
339 |
+
- Read Tweets, Wikis, Blogs
|
340 |
+
- Insert Tweets, Wikis, Blogs
|
341 |
+
- Headline Suggestions for your SEO Keyword or general topic
|
342 |
+
- You'll be alerted if there are SEO issues, 404 errors, visibility problems
|
343 |
+
- Search of images, tweets, wikis, blogs, etc. based on your keyword
|
344 |
+
- As you type your article or edit older articles, you can set the META information for that article (using the Squirrly Snippet)
|
345 |
+
- Facebook Open Graph support for both Images and Videos (if you have a video in your article, Squirrly will attach the open graph properties to it)
|
346 |
+
- Twitter Cards
|
347 |
+
- Customize your FavIcon
|
348 |
+
- Adds the icon for Apple Devices
|
349 |
+
- Google Analytics setup support
|
350 |
+
- Google Webmaster Tools setup support
|
351 |
+
- Google Authorship
|
352 |
+
- Google+ URL
|
353 |
+
- Bing META Code support
|
354 |
+
- Facebook META Code support
|
355 |
+
- adds the correct seo title in the home page
|
356 |
+
- adds the correct seo description and seo keywords in all pages
|
357 |
+
- adds canonical link in all pages
|
358 |
+
- adds the XML Sitemap for search engines: /sitemap.xml
|
359 |
+
- PING the XML Sitemap in google blogs
|
360 |
+
- adds the required METAs for home page (icon, author, language, dc publisher, etc.)
|
361 |
+
- adds the favicon and the icon for Apple devices.
|
362 |
+
- Support for Custom Post Types
|
363 |
+
- Fine tune Page Navigational Links
|
364 |
+
- Provides SEO Integration for WP e-Commerce sites
|
365 |
+
- Support for CMS-style WordPress installations
|
366 |
+
- optimizes your titles for search engines
|
367 |
+
- Generates META tags automatically
|
368 |
+
- For beginners, all these settings are made automatically to get the best SEO possible.
|
369 |
+
- For advanced users, you can fine-tune everything.
|
370 |
+
- You can override any title and set any META description and any META keywords you want.
|
371 |
+
- Real Time Snippet Preview
|
372 |
+
- Integrated with other Ecommerce Plugins like WooCommerce, MarketPress, Ready!, Shopp
|
373 |
+
- Compatibility with all the other plugins, like Auto Meta, Ultimate Tag Warrior and others.
|
374 |
+
|
375 |
+
And the best ones that we have (and the others don't):
|
376 |
+
|
377 |
+
- *Keyword research and Analysis*: find the keywords that are easier to rank for
|
378 |
+
- *SEO Live Assistant*: Your Wordpress gives you SEO adivce as you type your article
|
379 |
+
- *Inspiration box*: get images you can use for free, tweets you can quote and get up to date with latest news about your subject
|
380 |
+
- *SEO Rank*: Measure and Monitor the impact of SEO and Social Signals for each of your articles
|
381 |
+
|
382 |
+
= Where can I enter the title and page description? =
|
383 |
+
If you click the Squirrly tab in your dashboard, go to the "First Page Optimization" section and switch to Custom. You can enter custom Title, Description and Keywords.
|
384 |
+
If you are an advanced user then in each post/page edit you can customize the title and description from snippet section
|
screenshot-1.png
ADDED
Binary file
|
screenshot-2.png
ADDED
Binary file
|
screenshot-3.png
ADDED
Binary file
|
screenshot-4.png
ADDED
Binary file
|
screenshot-5.png
ADDED
Binary file
|
screenshot-6.png
ADDED
Binary file
|
screenshot-7.png
ADDED
Binary file
|
squirrly.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
Copyright (c) 2012, Squirrly Limited.
|
5 |
+
The copyrights to the software code in this file are licensed under the (revised) BSD open source license.
|
6 |
+
|
7 |
+
Plugin Name: SEO Plugin by SQUIRRLY
|
8 |
+
Plugin URI: https://my.squirrly.co
|
9 |
+
Description: Squirrly helps you write content that's both Google Friendly and Human friendly. Excellent ballance between what search engine bots look for in your content and what Human readers crave for.<BR> <a href="http://my.squirrly.co/user" target="_blank"><strong>Check your profile</strong></a>
|
10 |
+
Author: cifi, calinvingan, florinmuresan, lucianpacurar
|
11 |
+
Version: 3.1.1
|
12 |
+
Author URI: http://www.squirrly.co
|
13 |
+
*/
|
14 |
+
/* SET THE CURRENT VERSION ABOVE AND BELOW */
|
15 |
+
define('SQ_VERSION', '3.1.1');
|
16 |
+
|
17 |
+
/* Call config files */
|
18 |
+
require(dirname(__FILE__) . '/config/config.php');
|
19 |
+
|
20 |
+
/* important to check the PHP version */
|
21 |
+
if (PHP_VERSION_ID >= 5100) {
|
22 |
+
/* inport main classes */
|
23 |
+
require_once(_SQ_CLASSES_DIR_ . 'SQ_ObjController.php');
|
24 |
+
require_once(_SQ_CLASSES_DIR_ . 'SQ_BlockController.php');
|
25 |
+
|
26 |
+
/* Main class call */
|
27 |
+
$fc = SQ_ObjController::getController('SQ_FrontController', false);
|
28 |
+
$fc->run();
|
29 |
+
|
30 |
+
if (!is_admin()) {
|
31 |
+
SQ_ObjController::getController('SQ_Frontend');
|
32 |
+
}
|
33 |
+
|
34 |
+
add_action('sq_processCron', array(SQ_ObjController::getController('SQ_Ranking', false), 'processCron'));
|
35 |
+
} else {
|
36 |
+
/* Main class call */
|
37 |
+
add_action('admin_init', 'phpError');
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Show PHP Error message if PHP is lower the required
|
42 |
+
*/
|
43 |
+
function phpError() {
|
44 |
+
add_action('admin_notices', 'showError');
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Called in Notice Hook
|
49 |
+
*/
|
50 |
+
function showError() {
|
51 |
+
echo '<div class="update-nag"><span style="color:red; font-weight:bold;">' . __('For Squirrly to work, the PHP version has to be equal or greater then 5.1', _SQ_PLUGIN_NAME_) . '</span></div>';
|
52 |
+
}
|
53 |
+
|
54 |
+
// --
|
55 |
+
/**
|
56 |
+
* Upgrade Squirrly call.
|
57 |
+
*/
|
58 |
+
//add_action('upgrader_process_complete', array(SQ_ObjController::getController('SQ_Tools', false), 'sq_activate'));
|
59 |
+
register_activation_hook(__FILE__, array(SQ_ObjController::getController('SQ_Tools', false), 'sq_activate'));
|
60 |
+
register_deactivation_hook(__FILE__, array(SQ_ObjController::getController('SQ_Tools', false), 'sq_deactivate'));
|
61 |
+
|
62 |
+
|
themes/default/SQ_BlocStatus.php
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
|
themes/default/SQ_BlockAccount.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="sq_settings" class="sq_userinfo" >
|
2 |
+
<?php SQ_ObjController::getBlock('SQ_BlockSupport')->init(); ?>
|
3 |
+
|
4 |
+
<?php if (SQ_Tools::$options['sq_api'] <> '') { ?>
|
5 |
+
<form id="sq_settings_dashboard_form" name="settings" action="" method="post" enctype="multipart/form-data">
|
6 |
+
<span class="sq_icon"></span>
|
7 |
+
<div id="sq_settings_title" ><?php _e('Squirrly account information', _SQ_PLUGIN_NAME_); ?> </div>
|
8 |
+
<div id="sq_settings_body" style="min-height: 400px;">
|
9 |
+
<?php if (SQ_Tools::$options['sq_hide_survey'] == 0) { ?>
|
10 |
+
<div id="sq_survey" style="display: none;">
|
11 |
+
<span class="sq_survey_title" ><?php _e('Hey,', _SQ_PLUGIN_NAME_) ?></span>
|
12 |
+
<ul>
|
13 |
+
<li><?php echo __('Thanks for joining Squirrly. We love our users and we like it when they reach out to us.', _SQ_PLUGIN_NAME_) ?></li>
|
14 |
+
<li><?php echo __('If you wouldn’t mind, I’d love it if you answered one quick question: why did you sign up for Squirrly?', _SQ_PLUGIN_NAME_) ?></li>
|
15 |
+
<li>
|
16 |
+
<p id="sq_survey_msg"><textarea class="sq_small_input" name="sq_survey_message" cols="60" rows="10"></textarea></p>
|
17 |
+
<div id="sq_survey_error"></div>
|
18 |
+
<p><div id="sq_survey_close" ><?php echo __('[stop showing this message]', _SQ_PLUGIN_NAME_) ?></div> <input id="sq_survey_submit" type="button" value="<?php _e('Send Reply', _SQ_PLUGIN_NAME_) ?>"> </p>
|
19 |
+
</li>
|
20 |
+
</ul>
|
21 |
+
</div>
|
22 |
+
<?php } ?>
|
23 |
+
<?php
|
24 |
+
if (SQ_Tools::$options['sq_api'] <> '') {
|
25 |
+
echo '<fieldset style="background: none; border: none; box-shadow: none;"><div id="sq_userinfo"></div></fieldset>
|
26 |
+
<script type="text/javascript">
|
27 |
+
jQuery(document).ready(function() {
|
28 |
+
sq_getUserStatus("' . _SQ_API_URL_ . '", "' . SQ_Tools::$options['sq_api'] . '");
|
29 |
+
});
|
30 |
+
</script>';
|
31 |
+
}
|
32 |
+
?>
|
33 |
+
<div id="sq_settings_title" style="text-align: right">
|
34 |
+
<input id="sq_goto_dashboard" type="button" value="<?php _e('Go to dashboard', _SQ_PLUGIN_NAME_) ?> »" />
|
35 |
+
</div>
|
36 |
+
|
37 |
+
</div>
|
38 |
+
</form>
|
39 |
+
|
40 |
+
<?php } ?>
|
41 |
+
</div>
|
themes/default/SQ_BlockAffiliate.php
ADDED
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="sq_settings" >
|
2 |
+
<?php SQ_ObjController::getBlock('SQ_BlockSupport')->init(); ?>
|
3 |
+
<form id="sq_settings_affiliate_form" name="settings" action="" method="post" enctype="multipart/form-data">
|
4 |
+
<span class="sq_icon"></span>
|
5 |
+
<div id="sq_settings_title" ><?php _e('Join Squirrly today!', _SQ_PLUGIN_NAME_); ?> </div>
|
6 |
+
<div id="sq_settings_body">
|
7 |
+
<?php
|
8 |
+
if (SQ_Tools::$options['sq_api'] == '') {
|
9 |
+
echo '<fieldset style="padding: 0; border: none; background-color:transparent; box-shadow:none;" ><div id="sq_settings_login">';
|
10 |
+
SQ_ObjController::getBlock('SQ_Blocklogin')->init();
|
11 |
+
echo '</div></fieldset>';
|
12 |
+
}
|
13 |
+
?>
|
14 |
+
<fieldset>
|
15 |
+
<legend>
|
16 |
+
<span class="sq_legend_title"><?php _e('Join Squirrly today!', _SQ_PLUGIN_NAME_); ?></span>
|
17 |
+
<span><?php echo sprintf(__('%sHow I Started Making Money With the Squirrly Affiliate Program%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/affiliate_program_squirrly-pagblog-article_id62228.html" target="_blank">', '</a>'); ?></span>
|
18 |
+
|
19 |
+
<span><p class="sq_settings_affiliate_bigtitle">
|
20 |
+
<?php _e('Affiliate Benefits', _SQ_PLUGIN_NAME_); ?>
|
21 |
+
</p>
|
22 |
+
<ul class="sq_settings_affiliate_info">
|
23 |
+
<li>
|
24 |
+
<div>
|
25 |
+
<span><?php echo sprintf(__('- Recurring 45%s commission', _SQ_PLUGIN_NAME_), '%'); ?></span>
|
26 |
+
</div>
|
27 |
+
</li>
|
28 |
+
<li>
|
29 |
+
<div>
|
30 |
+
<span><?php _e('- No cost', _SQ_PLUGIN_NAME_); ?></span>
|
31 |
+
</div>
|
32 |
+
</li>
|
33 |
+
<li>
|
34 |
+
<div>
|
35 |
+
<span><?php _e('- Monthly payments in your Paypal account', _SQ_PLUGIN_NAME_); ?></span>
|
36 |
+
</div>
|
37 |
+
</li>
|
38 |
+
</ul></span>
|
39 |
+
</legend>
|
40 |
+
<div>
|
41 |
+
<p class="sq_settings_affiliate_bigbutton" style="margin-bottom:35px;">
|
42 |
+
<?php
|
43 |
+
if (SQ_Tools::$options['sq_api'] <> '')
|
44 |
+
if (SQ_Tools::$options['sq_affiliate_link'] <> '') {
|
45 |
+
echo '<span>' . SQ_Tools::$options['sq_affiliate_link'] . '</span>';
|
46 |
+
echo '<span class="sq_settings_info">' . __('To redirect users to your site, just change "squirrly.co" with your domain.', _SQ_PLUGIN_NAME_) . '</span>';
|
47 |
+
} else {
|
48 |
+
?><input type="submit" name="sq_affiliate_link" value="<?php _e('Generate affiliate link', _SQ_PLUGIN_NAME_) ?> »" /><?php
|
49 |
+
}
|
50 |
+
?>
|
51 |
+
</p>
|
52 |
+
|
53 |
+
<?php
|
54 |
+
if (SQ_Tools::$options['sq_api'] <> '') {
|
55 |
+
if (SQ_Tools::$options['sq_affiliate_link'] <> '') {
|
56 |
+
echo __('Your affiliate account is set and ready to go. Above you have the affiliate link. ', _SQ_PLUGIN_NAME_);
|
57 |
+
echo '<br />';
|
58 |
+
echo sprintf(__('Check your affiliate page: %sAffiliate page%s', _SQ_PLUGIN_NAME_), '<a href="' . _SQ_DASH_URL_ . 'login/?token=' . SQ_Tools::$options['sq_api'] . '&redirect_to=' . _SQ_DASH_URL_ . 'user/affiliate' . '" target="_blank" style="font-weight:bold">', '</a>');
|
59 |
+
} else {
|
60 |
+
echo sprintf(__('%sTerms of Use for our Affiliate Program%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/partnertermsofuse-pag68354.html" target="_blank" style="font-weight:bold">', '</a>');
|
61 |
+
}
|
62 |
+
} else {
|
63 |
+
echo __('After you connect to Squirrly you can begin to use your free Squirrly affiliate link immediately!', _SQ_PLUGIN_NAME_);
|
64 |
+
}
|
65 |
+
?>
|
66 |
+
</div>
|
67 |
+
|
68 |
+
</fieldset>
|
69 |
+
<?php if (SQ_Tools::$options['sq_affiliate_link'] <> '') { ?>
|
70 |
+
<fieldset>
|
71 |
+
<legend class="sq_legend_big">
|
72 |
+
<span class="sq_legend_title"><?php _e('Squirrly banners you can use', _SQ_PLUGIN_NAME_); ?></span>
|
73 |
+
</legend>
|
74 |
+
<div>
|
75 |
+
<ul class="sq_settings_affiliate_info">
|
76 |
+
<?php
|
77 |
+
$sq_affiliate_images[] = _SQ_THEME_URL_ . 'img/banners/banner1.jpg';
|
78 |
+
$sq_affiliate_images[] = _SQ_THEME_URL_ . 'img/banners/banner1.png';
|
79 |
+
$sq_affiliate_images[] = _SQ_THEME_URL_ . 'img/banners/banner2.png';
|
80 |
+
|
81 |
+
foreach ($sq_affiliate_images as $sq_affiliate_image) {
|
82 |
+
echo '<li><a href="' . SQ_Tools::$options['sq_affiliate_link'] . '" target="_blank"><img src="' . $sq_affiliate_image . '" alt="Seo Plugin by Squirrly" /></a>';
|
83 |
+
echo '<span class="sq_affiliate_banner" >';
|
84 |
+
echo '<textarea style="width: 500px; height: 45px;" onclick="this.focus(); this.select();"><a href="' . SQ_Tools::$options['sq_affiliate_link'] . '" target="_blank" title="Seo Plugin by Squirrly"><img src="' . $sq_affiliate_image . '" /></a></textarea>';
|
85 |
+
echo '</span></li>';
|
86 |
+
}
|
87 |
+
?>
|
88 |
+
</ul>
|
89 |
+
</div>
|
90 |
+
|
91 |
+
</fieldset>
|
92 |
+
<?php } ?>
|
93 |
+
</div>
|
94 |
+
<br style="clear: both;"/>
|
95 |
+
<div id="sq_settings_title" style="text-align: right">
|
96 |
+
<?php if ($view->options['sq_api'] <> '') { ?><input id="sq_goto_settings" type="button" value="<?php _e('Go to settings', _SQ_PLUGIN_NAME_) ?> »" /><?php } ?>
|
97 |
+
<input id="sq_goto_dashboard" type="button" <?php echo (($view->options['sq_api'] <> '') ? '' : 'style="display:none"') ?> value="<?php _e('See dashboard', _SQ_PLUGIN_NAME_) ?>" />
|
98 |
+
</div>
|
99 |
+
<div id="sq_settings_title" style="text-align: right">
|
100 |
+
<a href="?page=sq_dashboard" id="sq_goto_newpost" style="display:none" /><?php _e('<< START HERE >>', _SQ_PLUGIN_NAME_) ?></a>
|
101 |
+
</div>
|
102 |
+
<input type="hidden" name="action" value="sq_settings_affiliate" />
|
103 |
+
<input type="hidden" name="nonce" value="<?php echo wp_create_nonce(_SQ_NONCE_ID_); ?>" />
|
104 |
+
</form>
|
105 |
+
</div>
|
themes/default/SQ_BlockAnalytics.php
ADDED
@@ -0,0 +1,281 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="sq_analytics" >
|
2 |
+
<?php
|
3 |
+
foreach ($view->audit->content as $key => $audit) {
|
4 |
+
$current_grup = $view->audit->groups->$key;
|
5 |
+
?>
|
6 |
+
<div class="sq_analytics_groups" >
|
7 |
+
<ul class="sq_analytics_list" >
|
8 |
+
<li>
|
9 |
+
<?php if ($key <> 'rank') { ?>
|
10 |
+
<div class="sq_separator"></div>
|
11 |
+
<?php } ?>
|
12 |
+
<table>
|
13 |
+
<tr>
|
14 |
+
<td id="sq_analytics_tasks_header_<?php echo $key ?>" class="sq_analytics_tasks_header" colspan="4">
|
15 |
+
<div class="sq_tooltip" title="<?php echo $current_grup->tooltip ?>">
|
16 |
+
<span class="persist-header sq_analytics_tasks_header_title <?php echo $current_grup->color . '_text' ?>">
|
17 |
+
<?php echo ucfirst($key) ?>
|
18 |
+
</span>
|
19 |
+
|
20 |
+
<span class="sq_analytics_task_completed <?php echo $current_grup->color ?>" >
|
21 |
+
<?php echo ((isset($current_grup->total) && $current_grup->total >= 0) ? $current_grup->total : 'N/A') ?>
|
22 |
+
</span>
|
23 |
+
</div>
|
24 |
+
</td>
|
25 |
+
</tr>
|
26 |
+
</table>
|
27 |
+
|
28 |
+
|
29 |
+
<ul>
|
30 |
+
<?php
|
31 |
+
if (!empty($audit))
|
32 |
+
foreach ($audit as $key => $task) {
|
33 |
+
$task->id = $view->post_id . $task->id;
|
34 |
+
$replace = '';
|
35 |
+
//echo '<pre>' . print_R($task->value, true) . '</pre>';
|
36 |
+
if (is_array($task->value)) {
|
37 |
+
foreach ($task->value as $value) {
|
38 |
+
if (is_object($value)) {
|
39 |
+
if ($value->value <> '')
|
40 |
+
$replace .= '<span><a href="' . $value->url . '" rel="nofollow" target="_blank" rel="nofollow">' . $value->value . '</a></span>';
|
41 |
+
else
|
42 |
+
$replace .= '<span><a href="' . $value->url . '" rel="nofollow" target="_blank" rel="nofollow">' . $value->url . '</a></span>';
|
43 |
+
} else {
|
44 |
+
$replace .= '<span>' . $value . '</span>';
|
45 |
+
}
|
46 |
+
}
|
47 |
+
} elseif (is_object($task->value)) {
|
48 |
+
if ($task->name === 'Links') {
|
49 |
+
$task->value->mozLinks = number_format_i18n($task->value->mozLinks);
|
50 |
+
|
51 |
+
$replace .= '<ul class="sq_analytics_values" >
|
52 |
+
<li>
|
53 |
+
<div class="sq_analytics_values_title">' . __('Moz Inbound Links') . '</div>
|
54 |
+
<div class="sq_analytics_values_value">' . $task->value->mozLinks . '</div>
|
55 |
+
<div class="sq_rank_sprite sq_rank_seomoz_inbound"></div>
|
56 |
+
</li>
|
57 |
+
</ul>';
|
58 |
+
} elseif ($task->name === 'Authority') {
|
59 |
+
$task->value->mozAuthority = number_format_i18n($task->value->mozAuthority);
|
60 |
+
$task->value->mozRank = number_format_i18n($task->value->mozRank);
|
61 |
+
|
62 |
+
$replace .= '<ul class="sq_analytics_values" >
|
63 |
+
<li>
|
64 |
+
<div class="sq_analytics_values_title">' . __('Moz Authority') . '</div>
|
65 |
+
<div class="sq_analytics_values_value">' . $task->value->mozAuthority . '</div>
|
66 |
+
<div class="sq_rank_sprite sq_rank_seomoz_authority"></div>
|
67 |
+
</li>
|
68 |
+
<li>
|
69 |
+
<div class="sq_analytics_values_title">' . __('Moz Rank') . '</div>
|
70 |
+
<div class="sq_analytics_values_value">' . $task->value->mozRank . '</div>
|
71 |
+
<div class="sq_rank_sprite sq_rank_seomoz_rank"></div>
|
72 |
+
</li>
|
73 |
+
' .
|
74 |
+
((isset($task->value->googleRank)) ?
|
75 |
+
'<li>
|
76 |
+
<div class = "sq_analytics_values_title">' . __('Google Page Rank') . '</div>
|
77 |
+
<div class = "sq_analytics_values_value">' . $task->value->googleRank . '</div>
|
78 |
+
<div class = "sq_rank_sprite sq_rank_google_pagerank"></div>
|
79 |
+
</li>' : '') . '
|
80 |
+
' .
|
81 |
+
((isset($task->value->auditScore)) ?
|
82 |
+
'<li>
|
83 |
+
<div class = "sq_analytics_values_title">' . __('Squirrly Audit Score') . '</div>
|
84 |
+
<div class = "sq_analytics_values_value">' . $task->value->auditScore . '</div>
|
85 |
+
<div class = "sq_rank_sprite sq_rank_squirrly_rank"></div>
|
86 |
+
</li>' : '') . '
|
87 |
+
</ul>';
|
88 |
+
} elseif ($task->name === 'Shares') {
|
89 |
+
$task->value->facebookShare = number_format_i18n($task->value->facebookShare);
|
90 |
+
$task->value->facebookLike = number_format_i18n($task->value->facebookLike);
|
91 |
+
$task->value->linkedinShare = number_format_i18n($task->value->linkedinShare);
|
92 |
+
$task->value->plusShare = number_format_i18n($task->value->plusShare);
|
93 |
+
$task->value->redditShare = number_format_i18n($task->value->redditShare);
|
94 |
+
$task->value->stumbleShare = number_format_i18n($task->value->stumbleShare);
|
95 |
+
$task->value->twitterShare = number_format_i18n($task->value->twitterShare);
|
96 |
+
|
97 |
+
$replace .= '<ul class="sq_analytics_values" >
|
98 |
+
<li>
|
99 |
+
<div class="sq_analytics_values_title">' . __('Facebook shares') . '</div>
|
100 |
+
<div class="sq_analytics_values_value">' . $task->value->facebookShare . '</div>
|
101 |
+
<div class="sq_rank_sprite sq_rank_flag_facebook"></div>
|
102 |
+
</li>
|
103 |
+
<li>
|
104 |
+
<div class="sq_analytics_values_title">' . __('Facebook likes') . '</div>
|
105 |
+
<div class="sq_analytics_values_value">' . $task->value->facebookLike . '</div>
|
106 |
+
<div class="sq_rank_sprite sq_rank_flag_facebook_like"></div>
|
107 |
+
</li>
|
108 |
+
<li>
|
109 |
+
<div class="sq_analytics_values_title">' . __('Twitter shares') . '</div>
|
110 |
+
<div class="sq_analytics_values_value">' . $task->value->twitterShare . '</div>
|
111 |
+
<div class="sq_rank_sprite sq_rank_flag_twitter"></div>
|
112 |
+
</li>
|
113 |
+
<li>
|
114 |
+
<div class="sq_analytics_values_title">' . __('Google+ shares') . '</div>
|
115 |
+
<div class="sq_analytics_values_value">' . $task->value->plusShare . '</div>
|
116 |
+
<div class="sq_rank_sprite sq_rank_flag_googleplus"></div>
|
117 |
+
</li>
|
118 |
+
<li>
|
119 |
+
<div class="sq_analytics_values_title">' . __('LinkedIn Shares') . '</div>
|
120 |
+
<div class="sq_analytics_values_value">' . $task->value->linkedinShare . '</div>
|
121 |
+
<div class="sq_rank_sprite sq_rank_flag_linkedin"></div>
|
122 |
+
</li>
|
123 |
+
<li>
|
124 |
+
<div class="sq_analytics_values_title">' . __('StumbleUpon shares') . '</div>
|
125 |
+
<div class="sq_analytics_values_value">' . $task->value->stumbleShare . '</div>
|
126 |
+
<div class="sq_rank_sprite sq_rank_flag_stumbleupon"></div>
|
127 |
+
</li>
|
128 |
+
<li>
|
129 |
+
<div class="sq_analytics_values_title">' . __('Reddit shares') . '</div>
|
130 |
+
<div class="sq_analytics_values_value">' . $task->value->redditShare . '</div>
|
131 |
+
<div class="sq_rank_sprite sq_rank_flag_reddit"></div>
|
132 |
+
</li>
|
133 |
+
</ul>';
|
134 |
+
//$replace .= '<span>' . $key . ': ' . $value . '</span>';
|
135 |
+
} else {
|
136 |
+
foreach ($task->value as $key => $value) {
|
137 |
+
|
138 |
+
if (is_object($value)) {
|
139 |
+
if (isset($value->url) && isset($value->value)) {
|
140 |
+
|
141 |
+
if ($value->value <> '')
|
142 |
+
$replace .= '<span><a href="' . $value->url . '" rel="nofollow" target="_blank" rel="nofollow">' . $value->value . '</a></span>';
|
143 |
+
else
|
144 |
+
$replace .= '<span><a href="' . $value->url . '" rel="nofollow" target="_blank" rel="nofollow">' . $value->url . '</a></span>';
|
145 |
+
}
|
146 |
+
}
|
147 |
+
else {
|
148 |
+
$replace .= '<span>' . $value . '</span>';
|
149 |
+
}
|
150 |
+
}
|
151 |
+
}
|
152 |
+
} else {
|
153 |
+
$replace .= '<strong>' . $task->value . '</strong>';
|
154 |
+
}
|
155 |
+
$replace = str_replace(array('{keyword}', '{optimized}'), array($view->audit->keyword, $view->audit->optimized), $replace);
|
156 |
+
$task->title = str_replace(array('{keyword}', '{optimized}'), array($view->audit->keyword, $view->audit->optimized . '%'), $task->title);
|
157 |
+
?>
|
158 |
+
<li id="sq_analytics_task_<?php echo $task->id ?>" class="sq_analytics_tasks_row">
|
159 |
+
<table>
|
160 |
+
<tr>
|
161 |
+
<td rowspan="2" class="sq_first_header_column"><span class="<?php echo ((int) $task->complete == 1) ? 'sq_analytics_tasks_pass' : 'sq_analytics_tasks_fail' ?> sq_tooltip" title="<?php echo ((int) $task->complete == 1) ? __('Nicely done! Now you can focus on the other tasks', _SQ_PLUGIN_NAME_) : __('I know you can improve this. Please follow the documentation for a quicker progress', _SQ_PLUGIN_NAME_) ?>"></span></td>
|
162 |
+
<td colspan="2" class="sq_second_header_column"><?php if ($task->title <> '') { ?><span class="sq_analytics_tasks_title"><?php echo $task->title ?></span><?php } ?>
|
163 |
+
<span class="sq_analytics_tasks_value sq_analytics_tasks_value<?php echo ((int) $task->complete == 1) ? '_pass' : '_fail' ?>">
|
164 |
+
<?php
|
165 |
+
if ($task->complete) {
|
166 |
+
echo sprintf($task->success, $replace);
|
167 |
+
} else {
|
168 |
+
echo sprintf($task->error, $replace);
|
169 |
+
}
|
170 |
+
?>
|
171 |
+
</span>
|
172 |
+
</td>
|
173 |
+
</tr>
|
174 |
+
<tr>
|
175 |
+
<td class="sq_analytics_tasks_description sq_second_column">
|
176 |
+
<?php
|
177 |
+
if (isset($task->alias) && !is_array($task->alias)) {
|
178 |
+
$task->alias = array($task->alias);
|
179 |
+
}
|
180 |
+
//print_R($task->alias);
|
181 |
+
if (isset($task->alias) && is_array($task->alias)) {
|
182 |
+
foreach ($task->alias as $alias) {
|
183 |
+
|
184 |
+
$replace_alias = '';
|
185 |
+
if (is_array($alias->value) || is_object($alias->value)) {
|
186 |
+
foreach ($alias->value as $value) {
|
187 |
+
// print_R($value);
|
188 |
+
if (is_object($value)) {
|
189 |
+
if (isset($value->alias->url) && isset($value->alias->value))
|
190 |
+
$replace_alias .= '<span><a href="' . $value->url . '" rel="nofollow" target="_blank" rel="nofollow">' . $value->alias->value . '</a></span>';
|
191 |
+
} else
|
192 |
+
$replace_alias .= '<span>' . $value . '</span>';
|
193 |
+
}
|
194 |
+
} else {
|
195 |
+
$replace_alias .= '<strong>' . $alias->value . '</strong>';
|
196 |
+
}
|
197 |
+
|
198 |
+
if ($alias->complete)
|
199 |
+
echo '<span class="sq_analytics_tasks_alias">' . $alias->title . ' <strong class="sq_analytics_tasks_value sq_analytics_tasks_value_pass">' . sprintf($alias->success, $replace_alias) . '</strong></span>';
|
200 |
+
else
|
201 |
+
echo '<span class="sq_analytics_tasks_alias">' . $alias->title . ' <strong class="sq_analytics_tasks_value sq_analytics_tasks_value_fail">' . sprintf($alias->error, $replace_alias) . '</strong></span>';
|
202 |
+
}
|
203 |
+
}
|
204 |
+
if ($task->complete) {
|
205 |
+
$task->description = preg_replace('/<span[^>]*class="(sq_fix|sq_list_error_title|sq_list_error)">.*?<\/span>/is', '', $task->description);
|
206 |
+
} else {
|
207 |
+
$task->description = preg_replace('/<span[^>]*class="(sq_list_success_title|sq_list_success)">.*?<\/span>/is', '', $task->description);
|
208 |
+
}
|
209 |
+
$task->description = str_replace(array('{keyword}', '{optimized}'), array($view->audit->keyword, $view->audit->optimized), $task->description);
|
210 |
+
|
211 |
+
$array = array();
|
212 |
+
for ($i = 0; $i < substr_count($task->description, '%s'); $i++)
|
213 |
+
$array[] = $replace;
|
214 |
+
|
215 |
+
|
216 |
+
if (isset($task->graph) && !empty($task->graph) && isset($task->video) && $task->video <> '') {
|
217 |
+
?>
|
218 |
+
<div style="position: relative; text-align: center; margin-bottom: 15px;">
|
219 |
+
<div id="sq_analytics_tasks_video_cover_<?php echo $task->id ?>" class="sq_analytics_tasks_video_cover" rel="<?php echo $task->video ?>" ></div>
|
220 |
+
<a href="http://www.youtube.com/watch?v=<?php echo $task->video ?>" target="_blank" rel="nofollow" >Go to video</a>
|
221 |
+
</div>
|
222 |
+
<?php
|
223 |
+
}
|
224 |
+
echo @vsprintf($task->description, $array);
|
225 |
+
?>
|
226 |
+
</td>
|
227 |
+
<td class="sq_third_column">
|
228 |
+
<div style="position:relative">
|
229 |
+
<?php
|
230 |
+
if (isset($task->graph) && !empty($task->graph)) {
|
231 |
+
$data = array();
|
232 |
+
|
233 |
+
if ($task->name == 'Traffic') {
|
234 |
+
$data[] = array('', __('Visits', _SQ_PLUGIN_NAME_));
|
235 |
+
} else {
|
236 |
+
$data[] = array('', '');
|
237 |
+
}
|
238 |
+
foreach ($task->graph as $key => $value) {
|
239 |
+
if ($task->name == 'Traffic') {
|
240 |
+
$data[] = array($key, (int) number_format_i18n($value));
|
241 |
+
} else {
|
242 |
+
$data[] = array('', (int) number_format_i18n($value));
|
243 |
+
}
|
244 |
+
}
|
245 |
+
if (isset($task->value) && $task->name == 'GoogleSerp') {
|
246 |
+
echo '<div class="sq_chart_text">'
|
247 |
+
. (($task->value->value > 0) ? __('Current: ', _SQ_PLUGIN_NAME_) . $task->value->value : '') . '<br />'
|
248 |
+
. (($task->value->min > 0) ? __('Lowest: ', _SQ_PLUGIN_NAME_) . $task->value->min : '') . '<br />'
|
249 |
+
. (($task->value->max > 0) ? __('Highest: ', _SQ_PLUGIN_NAME_) . $task->value->max : '') . '<br />'
|
250 |
+
. '</div>';
|
251 |
+
echo '<div id="sq_chart_' . $task->id . '" class="sq_chart" style="margin:0 auto; width:200px; height:60px;"></div><script>var sq_chart_' . $task->id . '_val = drawChart("sq_chart_' . $task->id . '", ' . json_encode($data) . ',true); </script>';
|
252 |
+
} else {
|
253 |
+
echo '<div class="sq_chart_text">' . __('last 30 days', _SQ_PLUGIN_NAME_) . '</div>';
|
254 |
+
echo '<div id="sq_chart_' . $task->id . '" class="sq_chart" style="margin:0 auto; width:200px; height:60px;"></div><script>var sq_chart_' . $task->id . '_val = drawChart("sq_chart_' . $task->id . '", ' . json_encode($data) . ',false); </script>';
|
255 |
+
}
|
256 |
+
} elseif (isset($task->video) && $task->video <> '') {
|
257 |
+
?>
|
258 |
+
<div id="sq_analytics_tasks_video_cover_<?php echo $task->id ?>" class="sq_analytics_tasks_video_cover" rel="<?php echo $task->video ?>" ></div>
|
259 |
+
<a href="http://www.youtube.com/watch?v=<?php echo $task->video ?>" target="_blank" rel="nofollow" >Go to video</a>
|
260 |
+
<?php
|
261 |
+
} elseif (isset($task->side) && $task->side <> '') {
|
262 |
+
echo $task->side;
|
263 |
+
}
|
264 |
+
?>
|
265 |
+
</div>
|
266 |
+
</td>
|
267 |
+
</tr>
|
268 |
+
</table>
|
269 |
+
</li>
|
270 |
+
<?php } ?>
|
271 |
+
</ul>
|
272 |
+
</li>
|
273 |
+
</ul>
|
274 |
+
</div>
|
275 |
+
<?php } ?>
|
276 |
+
</div>
|
277 |
+
<script>
|
278 |
+
jQuery('.sq_analytics_tasks_video_cover').unbind('click').bind('click', function() {
|
279 |
+
jQuery(this).html('<object width="280" height="158"><param name="movie" value="https://www.youtube.com/v/' + jQuery(this).attr('rel') + ((jQuery(this).attr('rel').indexOf('?') != -1) ? '&' : '?') + 'version=3&hl=en_US&autoplay=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="https://www.youtube.com/v/' + jQuery(this).attr('rel') + ((jQuery(this).attr('rel').indexOf('?') != -1) ? '&' : '?') + 'version=3&hl=en_US&autoplay=1" type="application/x-shockwave-flash" width="280" height="158" allowscriptaccess="always" allowfullscreen="true"></embed></object>');
|
280 |
+
});
|
281 |
+
</script>
|
themes/default/SQ_BlockAudit.php
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="sq_dashboard_box">
|
2 |
+
<div class="sq_dashboard_audit"><span id="sq_audit_error" style="display: none;"><?php _e('Your site audit is not yet ready. It may take up to 7 days to audit your blog.', _SQ_PLUGIN_NAME_); ?></span></div>
|
3 |
+
</div>
|
4 |
+
<script type="text/javascript">
|
5 |
+
jQuery(document).ready(function() {
|
6 |
+
sq_checkAudit("<?php echo _SQ_DASH_URL_ ?>", "<?php echo SQ_Tools::$options['sq_api'] . md5(get_bloginfo('url')) ?>"); //Check the seo audit for this page
|
7 |
+
});
|
8 |
+
|
9 |
+
</script>
|
themes/default/SQ_BlockDashboard.php
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="sq_dashboard" >
|
2 |
+
<span class="sq_icon"></span>
|
3 |
+
<div id="sq_dashboard_title" ><?php _e('Squirrly dashboard', _SQ_PLUGIN_NAME_); ?> </div>
|
4 |
+
<div id="sq_dashboard_subtitle" ><?php _e('from this menu, you can start using all the great features of Squirrly (that you won’t find in any other seo plugins for wordpress)', _SQ_PLUGIN_NAME_); ?> </div>
|
5 |
+
<div id="sq_dashboard_body" style="min-height: 400px;">
|
6 |
+
|
7 |
+
<div class="sq_dashboard_box">
|
8 |
+
<div class="sq_dashboard_assistant"></div>
|
9 |
+
</div>
|
10 |
+
<div class="sq_dashboard_box">
|
11 |
+
<div class="sq_dashboard_analytics"></div>
|
12 |
+
</div>
|
13 |
+
|
14 |
+
<?php SQ_ObjController::getBlock('SQ_BlockAudit')->init(); ?>
|
15 |
+
|
16 |
+
<div class="sq_dashboard_box">
|
17 |
+
<div class="sq_dashboard_research"></div>
|
18 |
+
</div>
|
19 |
+
|
20 |
+
</div>
|
21 |
+
</div>
|
22 |
+
<script type="text/javascript">
|
23 |
+
//Dashboard
|
24 |
+
jQuery("#sq_dashboard").find('.sq_dashboard_assistant').bind('click', function() {
|
25 |
+
<?php
|
26 |
+
$recent_posts = wp_get_recent_posts();
|
27 |
+
if (!empty($recent_posts)) {
|
28 |
+
foreach ($recent_posts as $recent) {
|
29 |
+
echo 'location.href = "post.php?post=' . $recent["ID"] . '&action=edit";';
|
30 |
+
break;
|
31 |
+
}
|
32 |
+
} else {
|
33 |
+
echo 'location.href = "post-new.php";';
|
34 |
+
}
|
35 |
+
?>
|
36 |
+
});
|
37 |
+
jQuery("#sq_dashboard").find('.sq_dashboard_analytics').bind('click', function() {
|
38 |
+
<?php
|
39 |
+
if (SQ_ObjController::getModel('SQ_Post')->countKeywords() > 0) {
|
40 |
+
echo 'location.href = "admin.php?page=sq_posts";';
|
41 |
+
} else {
|
42 |
+
echo 'alert("' . __('To see the analytics for your posts, you have to start optimizing your articles using Squirrly. That will enable tracking, and we\'ll be able to send you valuable data about your post.', _SQ_PLUGIN_NAME_) . '");';
|
43 |
+
}
|
44 |
+
?>
|
45 |
+
});
|
46 |
+
|
47 |
+
jQuery("#sq_dashboard").find('.sq_dashboard_research').bind('click', function() {
|
48 |
+
location.href = "post-new.php#sq_research=1";
|
49 |
+
});
|
50 |
+
</script>
|
themes/default/SQ_BlockHelp.php
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="sq_settings" >
|
2 |
+
<span class="sq_icon"></span>
|
3 |
+
<div id="sq_settings_title" ><?php _e('Connect to Squirrly.co', _SQ_PLUGIN_NAME_); ?> </div>
|
4 |
+
<?php
|
5 |
+
if (SQ_Tools::$options['sq_api'] == '') {
|
6 |
+
echo '<div id="sq_settings_login">';
|
7 |
+
SQ_ObjController::getBlock('SQ_Blocklogin')->init();
|
8 |
+
echo '</div>';
|
9 |
+
}
|
10 |
+
?>
|
11 |
+
|
12 |
+
<div id="sq_settings_title" style="text-align: right">
|
13 |
+
<a href="?page=sq_dashboard" id="sq_goto_newpost" <?php echo ((SQ_Tools::$options['sq_api'] <> '') ? '' : 'style="display:none"') ?> /><?php _e('<< START HERE >>', _SQ_PLUGIN_NAME_) ?></a>
|
14 |
+
</div>
|
15 |
+
</div>
|
themes/default/SQ_BlockPostsAnalytics.php
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="sq_posts" >
|
2 |
+
<span class="sq_icon"></span>
|
3 |
+
<div id="sq_posts_title" ><?php _e('Squirrly Analytics', _SQ_PLUGIN_NAME_); ?> </div>
|
4 |
+
<div id="sq_posts_subtitle" ><?php _e('Don\'t see all your pages here? Make sure you optimize them with Squirrly, so that we can track them, and display you the analytics', _SQ_PLUGIN_NAME_); ?> </div>
|
5 |
+
|
6 |
+
<?php echo $view->getNavigationTop() ?>
|
7 |
+
<table class="wp-list-table widefat fixed posts" cellspacing="0">
|
8 |
+
<thead>
|
9 |
+
<tr>
|
10 |
+
<?php echo $view->getHeaderColumns() ?>
|
11 |
+
</tr>
|
12 |
+
</thead>
|
13 |
+
|
14 |
+
<tfoot>
|
15 |
+
<tr>
|
16 |
+
<?php echo $view->getHeaderColumns() ?>
|
17 |
+
</tr>
|
18 |
+
</tfoot>
|
19 |
+
|
20 |
+
<tbody id="the-list">
|
21 |
+
<?php echo $view->getRows() ?>
|
22 |
+
</tbody>
|
23 |
+
</table>
|
24 |
+
<?php echo $view->getNavigationBottom() ?>
|
25 |
+
<?php $view->hookFooter(); ?>
|
26 |
+
<?php echo $view->getScripts(); ?>
|
27 |
+
</div>
|
themes/default/SQ_BlockSupport.php
ADDED
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="sq_options">
|
2 |
+
<ul>
|
3 |
+
|
4 |
+
<li id="sq_options_dasboard">
|
5 |
+
<?php if (current_user_can('administrator')) { ?>
|
6 |
+
<span class="sq_push" style="display:none;">1</span>
|
7 |
+
<span class="sq_text" ><a href="<?php echo _SQ_DASH_URL_ ?>login/?token=<?php echo SQ_Tools::$options['sq_api'] ?>&redirect_to=<?php echo _SQ_DASH_URL_ ?>user/dashboard" title="<?php _e('Go to Profile', _SQ_PLUGIN_NAME_) ?>" target="_blank" ><span><?php _e('Profile', _SQ_PLUGIN_NAME_) ?></span></a></span><a href="<?php echo _SQ_DASH_URL_ ?>user/" title="<?php _e('Profile', _SQ_PLUGIN_NAME_) ?>" target="_blank" ><span class="sq_icon"></span></a>
|
8 |
+
<?php
|
9 |
+
} else {
|
10 |
+
echo ' ';
|
11 |
+
}
|
12 |
+
?>
|
13 |
+
</li>
|
14 |
+
|
15 |
+
<li id="sq_options_support">
|
16 |
+
|
17 |
+
<span class="sq_text" ><?php _e('Support', _SQ_PLUGIN_NAME_) ?></span><span class="sq_icon"></span>
|
18 |
+
<ul class="sq_options_support_popup" style="display: none;">
|
19 |
+
<div id="sq_options_close" >x</div>
|
20 |
+
<li><?php echo __('Need Help with Squirrly SEO?', _SQ_PLUGIN_NAME_) ?></li>
|
21 |
+
<li>
|
22 |
+
<p id="sq_support_msg"><textarea class="sq_small_input" name="sq_support_message" cols="30" rows="5"></textarea></p>
|
23 |
+
<div id="sq_options_support_error"></div>
|
24 |
+
<p><input id="sq_support_submit" type="button" value="<?php _e('Send Question', _SQ_PLUGIN_NAME_) ?>"></p>
|
25 |
+
|
26 |
+
</li>
|
27 |
+
<li><?php _e('Go to:', _SQ_PLUGIN_NAME_) ?> <a href="<?php echo _SQ_SUPPORT_URL_ ?>" title="<?php _e('support page', _SQ_PLUGIN_NAME_) ?>" target="_blank"><?php _e('support page', _SQ_PLUGIN_NAME_) ?></a></li>
|
28 |
+
|
29 |
+
</ul>
|
30 |
+
</li>
|
31 |
+
<li id="sq_options_feedback">
|
32 |
+
|
33 |
+
<span class="sq_icon <?php
|
34 |
+
if (isset($_COOKIE['sq_feedback_face']) && (int) $_COOKIE['sq_feedback_face'] > 0) {
|
35 |
+
echo 'sq_label_feedback_' . ((int) $_COOKIE['sq_feedback_face'] - 1);
|
36 |
+
}
|
37 |
+
?>" <?php
|
38 |
+
if (!isset($_COOKIE['sq_feedback_face'])) {
|
39 |
+
echo 'title="' . __('How was your Squirrly experience today?', _SQ_PLUGIN_NAME_) . '"';
|
40 |
+
}
|
41 |
+
?>></span>
|
42 |
+
<?php if (!isset($_COOKIE['sq_feedback_face']) || (isset($_COOKIE['sq_feedback_face']) && (int) $_COOKIE['sq_feedback_face'] < 3)) { ?>
|
43 |
+
<?php if (!isset(SQ_Tools::$options['sq_feedback'])) { ?>
|
44 |
+
<span class="sq_push">1</span>
|
45 |
+
<?php } ?>
|
46 |
+
<ul class="sq_options_feedback_popup" style="display: none;">
|
47 |
+
<div id="sq_options_feedback_close" >x</div>
|
48 |
+
<li><?php echo __('How was Squirrly today?', _SQ_PLUGIN_NAME_) ?></li>
|
49 |
+
<li>
|
50 |
+
<table width="100%" cellpadding="2" cellspacing="0" border="0">
|
51 |
+
<tr>
|
52 |
+
<td><label class="sq_label_feedback_smiley sq_label_feedback_0" for="sq_feedback_0"></label><input class="sq_feedback_smiley" type="radio" name="sq_feedback_face" id="sq_feedback_0" value="1" title="<?php _e('Angry', _SQ_PLUGIN_NAME_) ?>" /></td>
|
53 |
+
<td><label class="sq_label_feedback_smiley sq_label_feedback_1" for="sq_feedback_1"></label><input class="sq_feedback_smiley" type="radio" name="sq_feedback_face" id="sq_feedback_1" value="2" title="<?php _e('Sad', _SQ_PLUGIN_NAME_) ?>" /></td>
|
54 |
+
<td><label class="sq_label_feedback_smiley sq_label_feedback_2" for="sq_feedback_2"></label><input class="sq_feedback_smiley" type="radio" name="sq_feedback_face" id="sq_feedback_2" value="3" title="<?php _e('Happy', _SQ_PLUGIN_NAME_) ?>" /></td>
|
55 |
+
<td><label class="sq_label_feedback_smiley sq_label_feedback_3" for="sq_feedback_3"></label><input class="sq_feedback_smiley" type="radio" name="sq_feedback_face" id="sq_feedback_3" value="4" title="<?php _e('Excited', _SQ_PLUGIN_NAME_) ?>" /></td>
|
56 |
+
<td><label class="sq_label_feedback_smiley sq_label_feedback_4" for="sq_feedback_4"></label><input class="sq_feedback_smiley" type="radio" name="sq_feedback_face" id="sq_feedback_4" value="5" title="<?php _e('Love it', _SQ_PLUGIN_NAME_) ?>" /></td>
|
57 |
+
</tr>
|
58 |
+
</table>
|
59 |
+
<div id="sq_options_feedback_error"></div>
|
60 |
+
<p id="sq_feedback_msg" style="display: none;" >
|
61 |
+
<?php echo __('Please tell us why?', _SQ_PLUGIN_NAME_) ?>
|
62 |
+
<textarea class="sq_small_input" name="sq_feedback_message" cols="30" rows="2"></textarea>
|
63 |
+
<br />
|
64 |
+
<input id="sq_feedback_submit" type="button" value="<?php _e('Send feedback', _SQ_PLUGIN_NAME_) ?>">
|
65 |
+
</p>
|
66 |
+
|
67 |
+
</li>
|
68 |
+
<li><?php _e('Go to:', _SQ_PLUGIN_NAME_) ?> <a href="<?php echo _SQ_SUPPORT_URL_ ?>" title="<?php _e('support page', _SQ_PLUGIN_NAME_) ?>" target="_blank"><?php _e('support page', _SQ_PLUGIN_NAME_) ?></a></li>
|
69 |
+
</ul>
|
70 |
+
<?php } else { ?>
|
71 |
+
<ul class="sq_options_feedback_popup" style="display: none;">
|
72 |
+
<div id="sq_options_feedback_close" >x</div>
|
73 |
+
<li><?php echo __('Thank you! You can send us a happy face tomorow too.', _SQ_PLUGIN_NAME_) ?></li>
|
74 |
+
</ul>
|
75 |
+
<?php } ?>
|
76 |
+
</li>
|
77 |
+
|
78 |
+
</ul>
|
79 |
+
</div>
|
themes/default/SQ_Blocklogin.php
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="sq_blocklogin" class="sq_box">
|
2 |
+
<div class="sq_header"><?php _e('Squirrly.co Login', _SQ_PLUGIN_NAME_); ?></div>
|
3 |
+
<div class="sq_body">
|
4 |
+
<ul style="display: none;">
|
5 |
+
<li>
|
6 |
+
<div class="sq_error"></div>
|
7 |
+
<div class="sq_message" style="display: none;"></div>
|
8 |
+
</li>
|
9 |
+
<li><label for="sq_user"><?php _e('Email:', _SQ_PLUGIN_NAME_); ?></label><input type="text" id="sq_user" name="sq_user" /></li>
|
10 |
+
<li><label for="sq_password"><?php _e('Password:', _SQ_PLUGIN_NAME_); ?></label><input type="password" id="sq_password" name="sq_password" /></li>
|
11 |
+
<li><input type="button" id="sq_login" value="<?php _e('Login', _SQ_PLUGIN_NAME_); ?>" /></li>
|
12 |
+
<li><a id="sq_signup" href="javascript:void(0);" target="_blank" title="<?php _e('Register', _SQ_PLUGIN_NAME_); ?>"><?php _e('Register to Squirrly.co', _SQ_PLUGIN_NAME_); ?></a> |
|
13 |
+
<a href="<?php echo _SQ_DASH_URL_ . 'login/?action=lostpassword' ?>" target="_blank" title="<?php _e('Lost password?', _SQ_PLUGIN_NAME_); ?>"><?php _e('Lost password', _SQ_PLUGIN_NAME_); ?></a></li>
|
14 |
+
</ul>
|
15 |
+
<div id="sq_autologin" align="center">
|
16 |
+
<div class="sq_error"></div>
|
17 |
+
<span id="sq_register"><?php _e('Enter your email', _SQ_PLUGIN_NAME_); ?></span><span id="sq_register_wait"></span>
|
18 |
+
<div id="sq_register_email" ><label for="sq_email"><?php _e('Your E-mail:', _SQ_PLUGIN_NAME_); ?></label><input type="text" id="sq_email" name="sq_email" /></div>
|
19 |
+
<div id="sq_loginimage"><?php _e('Sign Up', _SQ_PLUGIN_NAME_); ?></div>
|
20 |
+
<div id="sq_signin"><?php _e('I already have an account', _SQ_PLUGIN_NAME_); ?></div>
|
21 |
+
<span><?php _e('This email connects you to Squirrly.co', _SQ_PLUGIN_NAME_); ?></span>
|
22 |
+
|
23 |
+
</div>
|
24 |
+
|
25 |
+
</div>
|
26 |
+
<script type="text/javascript">
|
27 |
+
// autoLogin();
|
28 |
+
//
|
29 |
+
//Call the autologin
|
30 |
+
var __invalid_email = '<?php _e('The email address is invalid!', _SQ_PLUGIN_NAME_); ?>';
|
31 |
+
var __try_again = '<?php _e('Click on Sign Up button and try again ...', _SQ_PLUGIN_NAME_); ?>';
|
32 |
+
var __error_login = '<?php _e('An error occured while logging in!', _SQ_PLUGIN_NAME_); ?>';
|
33 |
+
var __connecting = '<?php _e('Connecting ...', _SQ_PLUGIN_NAME_); ?>';
|
34 |
+
jQuery('#sq_loginimage').bind('click', function() {
|
35 |
+
sq_autoLogin();
|
36 |
+
});
|
37 |
+
</script>
|
38 |
+
</div>
|
39 |
+
<div id="sq_login_success" style="display: none;">
|
40 |
+
<div class="sq_header"><?php _e('Congratulations! Now write a new article with:', _SQ_PLUGIN_NAME_); ?></div>
|
41 |
+
<img src="<?php echo _SQ_STATIC_API_URL_ ?>default/img/squirrly_wordpress.png" />
|
42 |
+
<ul>
|
43 |
+
<li><?php _e('<strong>Keyword Research and Analysis</strong>: find the keywords that are easier to rank for.', _SQ_PLUGIN_NAME_); ?></li>
|
44 |
+
<li><?php _e('<strong>SEO Live Assistant</strong>: Your Wordpress gives you SEO adivce as you type your article.', _SQ_PLUGIN_NAME_); ?></li>
|
45 |
+
<li><?php _e('<strong>Inspiration box</strong>: get images you can use for free, tweets you can quote and get up to date with latest news about your subject.', _SQ_PLUGIN_NAME_); ?></li>
|
46 |
+
<li><?php _e('<strong>Article Rank</strong>: Measure and Monitor the impact of SEO and Social Signals for each of your articles.', _SQ_PLUGIN_NAME_); ?></li>
|
47 |
+
</ul>
|
48 |
+
|
49 |
+
</div>
|
themes/default/SQ_Blockresearch.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="sq_research" style="display: none">
|
2 |
+
<div id="sq_research_title" ><?php _e('Squirrly Keyword Research', _SQ_PLUGIN_NAME_); ?>
|
3 |
+
<input class="sq_keywords_research_clear" type="button" value="<?php _e('Clear', _SQ_PLUGIN_NAME_); ?>" />
|
4 |
+
</div>
|
5 |
+
<div id="sq_research_body">
|
6 |
+
|
7 |
+
<ul id="sq_keywords_research">
|
8 |
+
<li>
|
9 |
+
<div style="clear:left"><?php _e('Keyword:', _SQ_PLUGIN_NAME_); ?></div>
|
10 |
+
<input type="text" name="sq_keyword_research" id="sq_keyword_research[]" value="" />
|
11 |
+
<input type="button" class="sq_research_selectit" value="<?php _e('Use this keyword', _SQ_PLUGIN_NAME_); ?>" style="display: none" />
|
12 |
+
|
13 |
+
<div class="sq_keywords_info"></div>
|
14 |
+
</li>
|
15 |
+
|
16 |
+
</ul>
|
17 |
+
|
18 |
+
|
19 |
+
<div id="sq_research_help" >
|
20 |
+
<input class="sq_keywords_research_add" type="button" value="<?php _e('+ Add keyword', _SQ_PLUGIN_NAME_); ?>" />
|
21 |
+
<input class="sq_keywords_research_submit" type="button" value="<?php _e('Do the research', _SQ_PLUGIN_NAME_); ?>" />
|
22 |
+
|
23 |
+
<ul>
|
24 |
+
<li><?php _e('Enter even more keywords.', _SQ_PLUGIN_NAME_); ?></li>
|
25 |
+
<li style="display:none; color: brown; font-weight: bold;"><?php _e('Let some keywords for the next time as well!', _SQ_PLUGIN_NAME_); ?></li>
|
26 |
+
</ul>
|
27 |
+
</div>
|
28 |
+
|
29 |
+
|
30 |
+
</div>
|
31 |
+
<div id="sq_research_close" style="display: none;" >x</div>
|
32 |
+
|
33 |
+
</div>
|
themes/default/SQ_Blocksearch.php
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="sq_preloading" ><?php _e('Waiting for your editor to load .. ', _SQ_PLUGIN_NAME_); ?></div>
|
2 |
+
<div class="sq_box" style="display: none">
|
3 |
+
<div class="sq_header" ><?php _e('Optimize for Keyword', _SQ_PLUGIN_NAME_); ?></div>
|
4 |
+
<div id="sq_blocksearch">
|
5 |
+
<div class="sq_keyword">
|
6 |
+
<?php
|
7 |
+
global $sq_postID;
|
8 |
+
if (!isset($_COOKIE['sq_keyword_' . $sq_postID]) || $_COOKIE['sq_keyword_' . $sq_postID] == '') {
|
9 |
+
if (!isset(SQ_Tools::$options['sq_keyword_help']) || (int) SQ_Tools::$options['sq_keyword_help'] == 1) {
|
10 |
+
?>
|
11 |
+
<div id="sq_keyword_help" style="display:none" ><span></span><?php _e('Enter a keyword', _SQ_PLUGIN_NAME_); ?><p><?php _e('for Squirrly Live SEO optimization', _SQ_PLUGIN_NAME_); ?></p></div>
|
12 |
+
<?php
|
13 |
+
}
|
14 |
+
}
|
15 |
+
?>
|
16 |
+
<input type="text" id="sq_keyword" name="sq_keyword" value="<?php echo ((isset($_COOKIE['sq_keyword_' . $sq_postID]) && $_COOKIE['sq_keyword_' . $sq_postID] <> '') ? utf8_decode($_COOKIE['sq_keyword_' . $sq_postID]) : '') ?>" autocomplete="off" />
|
17 |
+
|
18 |
+
<input type="button" id="sq_keyword_check" value=">" />
|
19 |
+
<div id="sq_suggestion" style="display:none">
|
20 |
+
<div id="sq_suggestion_close">x</div>
|
21 |
+
<ul class="sq_progressbar">
|
22 |
+
<li>Weak</li>
|
23 |
+
<li><div id="sq_suggestion_rank"></div></li>
|
24 |
+
<li>Great</li>
|
25 |
+
</ul>
|
26 |
+
<div class="sq_research_link" style="display:none"><?php _e('Do a research', _SQ_PLUGIN_NAME_); ?></div>
|
27 |
+
<input type="button" id="sq_selectit" value="<?php _e('Use this keyword', _SQ_PLUGIN_NAME_); ?>" style="display: none" />
|
28 |
+
</div>
|
29 |
+
<div id="sq_suggestion_help" style="display:none">
|
30 |
+
<ul>
|
31 |
+
<li><?php _e('Enter a keyword above!', _SQ_PLUGIN_NAME_); ?></li>
|
32 |
+
<li class="sq_research_link"><?php _e('I have more then one keyword!', _SQ_PLUGIN_NAME_); ?></li>
|
33 |
+
</ul>
|
34 |
+
</div>
|
35 |
+
</div>
|
36 |
+
<div id="sq_types" style="display:none">
|
37 |
+
<ul>
|
38 |
+
<li id="sq_type_img" title="<?php _e('Images', _SQ_PLUGIN_NAME_) ?>"></li>
|
39 |
+
<li id="sq_type_twitter" title="<?php _e('Twitter', _SQ_PLUGIN_NAME_) ?>"></li>
|
40 |
+
<li id="sq_type_wiki" title="<?php _e('Wiki', _SQ_PLUGIN_NAME_) ?>"></li>
|
41 |
+
<li id="sq_type_news" title="<?php _e('News', _SQ_PLUGIN_NAME_) ?>"></li>
|
42 |
+
<li id="sq_type_blog" title="<?php _e('Blogs', _SQ_PLUGIN_NAME_) ?>"></li>
|
43 |
+
<li id="sq_type_local" title="<?php _e('My articles', _SQ_PLUGIN_NAME_) ?>"></li>
|
44 |
+
</ul>
|
45 |
+
</div>
|
46 |
+
<div style="position: relative;"><div id="sq_search_close" style="display:none">x</div></div>
|
47 |
+
<div class="sq_search"></div>
|
48 |
+
<div id="sq_search_img_filter" style="display:none" ><label id="sq_search_img_nolicence_label" <?php if (isset(SQ_Tools::$options['sq_img_licence']) && (int) SQ_Tools::$options['sq_img_licence'] == 1) echo 'class="checked"'; ?> for="sq_search_img_nolicence"><span></span><?php _e('Show only Copyright Free images', _SQ_PLUGIN_NAME_) ?></label><input id="sq_search_img_nolicence" type="checkbox" value="1" style="display:none" <?php if (isset(SQ_Tools::$options['sq_img_licence']) && (int) SQ_Tools::$options['sq_img_licence'] == 1) echo 'checked="checked"'; ?> /></div>
|
49 |
+
</div>
|
50 |
+
</div>
|
themes/default/SQ_Blockseo.php
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="sq_box" style="display: none">
|
2 |
+
<div id="sq_blockseo" style="display: none">
|
3 |
+
<div class="sq_header"><?php _e('Squirrly SEO Live Assistant', _SQ_PLUGIN_NAME_); ?></div>
|
4 |
+
<div class="sq_tasks"></div>
|
5 |
+
</div>
|
6 |
+
</div>
|
themes/default/SQ_Menu.php
ADDED
@@ -0,0 +1,496 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="sq_settings" >
|
2 |
+
<form id="sq_settings_form" name="settings" action="" method="post" enctype="multipart/form-data">
|
3 |
+
<span class="sq_icon"></span>
|
4 |
+
<div id="sq_settings_title" ><?php _e('Squirrly settings', _SQ_PLUGIN_NAME_); ?> </div>
|
5 |
+
<div id="sq_settings_title" >
|
6 |
+
<input type="submit" name="sq_update" value="<?php _e('Save settings', _SQ_PLUGIN_NAME_) ?> »" />
|
7 |
+
<input id="sq_goto_dashboard" type="button" value="<?php _e('Go to dashboard', _SQ_PLUGIN_NAME_) ?> »" />
|
8 |
+
</div>
|
9 |
+
<div id="sq_settings_body">
|
10 |
+
<fieldset>
|
11 |
+
<legend>
|
12 |
+
<span class="sq_legend_title"><?php _e('Let Squirrly automatically optimize my blog', _SQ_PLUGIN_NAME_); ?></span>
|
13 |
+
<span class="sq_option_disclamer"><?php _e('<strong>For SEO Setting you can use "All In One SEO", "Wordpress SEO by Yoast", or other such plugins.</strong>', _SQ_PLUGIN_NAME_); ?></span>
|
14 |
+
|
15 |
+
<span><?php _e('If you want, you can also use the built-in settings from Squirrly (useful for beginners), by switching Yes below.', _SQ_PLUGIN_NAME_); ?></span>
|
16 |
+
<div class="sq_option_content">
|
17 |
+
<div class="sq_switch">
|
18 |
+
<input id="sq_use_on" type="radio" class="sq_switch-input" name="sq_use" value="1" <?php echo (($view->options['sq_use'] == 1) ? "checked" : '') ?> />
|
19 |
+
<label for="sq_use_on" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
|
20 |
+
<input id="sq_use_off" type="radio" class="sq_switch-input" name="sq_use" value="0" <?php echo ((!$view->options['sq_use']) ? "checked" : '') ?> />
|
21 |
+
<label for="sq_use_off" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
|
22 |
+
<span class="sq_switch-selection"></span>
|
23 |
+
</div>
|
24 |
+
</div>
|
25 |
+
</legend>
|
26 |
+
<div>
|
27 |
+
<ul id="sq_settings_sq_use" class="sq_settings_info">
|
28 |
+
<span><?php _e('What does Squirrly automatically do for SEO?', _SQ_PLUGIN_NAME_); ?></span>
|
29 |
+
<li>
|
30 |
+
<?php
|
31 |
+
$auto_option = false;
|
32 |
+
if ($view->options['sq_auto_canonical'] == 1)
|
33 |
+
$auto_option = true;
|
34 |
+
?>
|
35 |
+
<div class="sq_option_content sq_option_content_small">
|
36 |
+
<div class="sq_switch sq_seo_switch_condition" style="<?php echo (($view->options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
|
37 |
+
<input id="sq_auto_canonical1" type="radio" class="sq_switch-input" name="sq_auto_canonical" value="1" <?php echo ($auto_option ? "checked" : '') ?> />
|
38 |
+
<label for="sq_auto_canonical1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
|
39 |
+
<input id="sq_auto_canonical0" type="radio" class="sq_switch-input" name="sq_auto_canonical" value="0" <?php echo (!$auto_option ? "checked" : '') ?> />
|
40 |
+
<label for="sq_auto_canonical0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
|
41 |
+
<span class="sq_switch-selection"></span>
|
42 |
+
</div>
|
43 |
+
<span><?php echo sprintf(__('Add <strong>%scanonical link%s</strong>, <strong>%srel="prev" and rel="next"%s</strong> metas', _SQ_PLUGIN_NAME_), '<a href="https://support.google.com/webmasters/answer/139066" target="_blank">', '</a>', '<a href="https://support.google.com/webmasters/answer/1663744" target="_blank">', '</a>'); ?></span>
|
44 |
+
</div>
|
45 |
+
</li>
|
46 |
+
<li>
|
47 |
+
<?php
|
48 |
+
$auto_option = false;
|
49 |
+
if ($view->options['sq_auto_sitemap'] == 1)
|
50 |
+
$auto_option = true;
|
51 |
+
?>
|
52 |
+
<div class="sq_option_content sq_option_content_small">
|
53 |
+
<div class="sq_switch sq_seo_switch_condition" style="<?php echo (($view->options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
|
54 |
+
<input id="sq_auto_sitemap1" type="radio" class="sq_switch-input" name="sq_auto_sitemap" value="1" <?php echo ($auto_option ? "checked" : '') ?> />
|
55 |
+
<label for="sq_auto_sitemap1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
|
56 |
+
<input id="sq_auto_sitemap0" type="radio" class="sq_switch-input" name="sq_auto_sitemap" value="0" <?php echo (!$auto_option ? "checked" : '') ?> />
|
57 |
+
<label for="sq_auto_sitemap0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
|
58 |
+
<span class="sq_switch-selection"></span>
|
59 |
+
</div>
|
60 |
+
<span><?php echo sprintf(__('Add the <strong>%sXML Sitemap%s</strong> for search engines', _SQ_PLUGIN_NAME_), '<a href="https://support.google.com/webmasters/answer/156184?rd=1" target="_blank">', '</a>'); ?>: <strong><?php echo '/sitemap.xml' ?></strong></span>
|
61 |
+
</div>
|
62 |
+
</li>
|
63 |
+
<li>
|
64 |
+
<?php
|
65 |
+
$auto_option = false;
|
66 |
+
if ($view->options['sq_auto_meta'] == 1)
|
67 |
+
$auto_option = true;
|
68 |
+
?>
|
69 |
+
<div class="sq_option_content sq_option_content_small">
|
70 |
+
<div class="sq_switch sq_seo_switch_condition" style="<?php echo (($view->options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
|
71 |
+
<input id="sq_auto_meta1" type="radio" class="sq_switch-input" name="sq_auto_meta" value="1" <?php echo ($auto_option ? "checked" : '') ?> />
|
72 |
+
<label for="sq_auto_meta1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
|
73 |
+
<input id="sq_auto_meta0" type="radio" class="sq_switch-input" name="sq_auto_meta" value="0" <?php echo (!$auto_option ? "checked" : '') ?> />
|
74 |
+
<label for="sq_auto_meta0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
|
75 |
+
<span class="sq_switch-selection"></span>
|
76 |
+
</div>
|
77 |
+
<span><?php _e('Add the required METAs for home page (<strong>icon, author, language, dc publisher</strong>, etc.)', _SQ_PLUGIN_NAME_); ?></span>
|
78 |
+
</div>
|
79 |
+
</li>
|
80 |
+
<li>
|
81 |
+
<?php
|
82 |
+
$auto_option = false;
|
83 |
+
if ($view->options['sq_auto_favicon'] == 1)
|
84 |
+
$auto_option = true;
|
85 |
+
?>
|
86 |
+
<div class="sq_option_content sq_option_content_small">
|
87 |
+
<div class="sq_switch sq_seo_switch_condition" style="<?php echo (($view->options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
|
88 |
+
<input id="sq_auto_favicon1" type="radio" class="sq_switch-input" name="sq_auto_favicon" value="1" <?php echo ($auto_option ? "checked" : '') ?> />
|
89 |
+
<label for="sq_auto_favicon1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
|
90 |
+
<input id="sq_auto_favicon0" type="radio" class="sq_switch-input" name="sq_auto_favicon" value="0" <?php echo (!$auto_option ? "checked" : '') ?> />
|
91 |
+
<label for="sq_auto_favicon0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
|
92 |
+
<span class="sq_switch-selection"></span>
|
93 |
+
</div>
|
94 |
+
<span><?php _e('Add the <strong>favicon</strong> and the <strong>icon for Apple devices</strong>.', _SQ_PLUGIN_NAME_); ?></span>
|
95 |
+
</div>
|
96 |
+
</li>
|
97 |
+
|
98 |
+
|
99 |
+
</ul>
|
100 |
+
</div>
|
101 |
+
</fieldset>
|
102 |
+
<fieldset id="sq_social_media" style="<?php echo (($view->options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
|
103 |
+
<legend>
|
104 |
+
<span class="sq_legend_title"><?php _e('Social Media Options', _SQ_PLUGIN_NAME_); ?></span>
|
105 |
+
<span><?php echo sprintf(__('%sHow to pop out in Social Media with your links%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/how-to-pop-out-in-social-media-with-your-links." target="_blank">', '</a>'); ?></span>
|
106 |
+
<span><?php echo sprintf(__('%sGet busy with Facebook’s new Search Engine functions%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/get-busy-with-facebooks-new-search-engine-functions" target="_blank">', '</a>'); ?></span>
|
107 |
+
<span><?php echo sprintf(__('%sHow I Added Twitter Cards in My WordPress for Better Inbound Marketing%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/inbound_marketing_twitter_cards-pagblog-article_id62232.html" target="_blank">', '</a>'); ?></span>
|
108 |
+
</legend>
|
109 |
+
|
110 |
+
<div>
|
111 |
+
<ul id="sq_settings_sq_use" class="sq_settings_info">
|
112 |
+
<span><?php _e('What does Squirrly automatically do for Social Media?', _SQ_PLUGIN_NAME_); ?></span>
|
113 |
+
<li>
|
114 |
+
<?php
|
115 |
+
$auto_option = false;
|
116 |
+
if ($view->options['sq_auto_facebook'] == 1)
|
117 |
+
$auto_option = true;
|
118 |
+
?>
|
119 |
+
<div class="sq_option_content sq_option_content_small">
|
120 |
+
<div class="sq_switch sq_seo_switch_condition" style="<?php echo (($view->options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
|
121 |
+
<input id="sq_auto_facebook1" type="radio" class="sq_switch-input" name="sq_auto_facebook" value="1" <?php echo ($auto_option ? "checked" : '') ?> />
|
122 |
+
<label for="sq_auto_facebook1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
|
123 |
+
<input id="sq_auto_facebook0" type="radio" class="sq_switch-input" name="sq_auto_facebook" value="0" <?php echo (!$auto_option ? "checked" : '') ?> />
|
124 |
+
<label for="sq_auto_facebook0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
|
125 |
+
<span class="sq_switch-selection"></span>
|
126 |
+
</div>
|
127 |
+
<span><?php echo __('Add the <strong>Social Open Graph objects</strong> for a good looking share. ', _SQ_PLUGIN_NAME_) . ' <a href="https://developers.facebook.com/tools/debug/og/object?q=' . urlencode(get_bloginfo('wpurl')) . '" target="_blank" title="Facebook Object Validator">Check here</a>'; ?></span>
|
128 |
+
</div>
|
129 |
+
</li>
|
130 |
+
<li>
|
131 |
+
<?php
|
132 |
+
$auto_option = false;
|
133 |
+
if ($view->options['sq_auto_twitter'] == 1)
|
134 |
+
$auto_option = true;
|
135 |
+
?>
|
136 |
+
<div class="sq_option_content sq_option_content_small">
|
137 |
+
<div class="sq_switch sq_seo_switch_condition" style="<?php echo (($view->options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
|
138 |
+
<input id="sq_auto_twitter1" type="radio" class="sq_switch-input" name="sq_auto_twitter" value="1" <?php echo ($auto_option ? "checked" : '') ?> />
|
139 |
+
<label for="sq_auto_twitter1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
|
140 |
+
<input id="sq_auto_twitter0" type="radio" class="sq_switch-input" name="sq_auto_twitter" value="0" <?php echo (!$auto_option ? "checked" : '') ?> />
|
141 |
+
<label for="sq_auto_twitter0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
|
142 |
+
<span class="sq_switch-selection"></span>
|
143 |
+
</div>
|
144 |
+
<span><?php echo __('Add the <strong>Twitter card</strong> in your tweets. ', _SQ_PLUGIN_NAME_) . ' <a href="https://dev.twitter.com/docs/cards/validation/validator" target="_blank" title="Twitter Card Validator">Check here</a> <em>(Select Summary > Validate URLs)</em>'; ?></span>
|
145 |
+
</div>
|
146 |
+
<div>
|
147 |
+
<span id="sq_twitter_account" style=" <?php echo (!$auto_option ? 'display:none;' : ''); ?>" ><?php _e('Your twitter account: ', _SQ_PLUGIN_NAME_); ?><input type="text" name="sq_twitter_account" value="<?php echo (($view->options['sq_twitter_account'] <> '') ? $view->options['sq_twitter_account'] : '') ?>" size="30" style="width:150px;" placeholder="@" /> </span>
|
148 |
+
</div>
|
149 |
+
</li>
|
150 |
+
</ul>
|
151 |
+
</div>
|
152 |
+
</fieldset>
|
153 |
+
<fieldset id="sq_title_description_keywords" <?php echo (($view->options['sq_use'] == 0) ? 'style="display:none;"' : ''); ?> <?php echo (($view->options['sq_fp_title'] == '' || $view->options['sq_auto_seo'] == 1) ? '' : 'class="sq_custom_title"'); ?>>
|
154 |
+
<legend>
|
155 |
+
<span class="sq_legend_title"><?php _e('First page optimization', _SQ_PLUGIN_NAME_); ?></span>
|
156 |
+
<span><?php echo sprintf(__('%sThe best SEO approach to Meta information%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/the-best-seo-approach-to-meta-information" target="_blank">', '</a>'); ?></span>
|
157 |
+
|
158 |
+
<span><?php _e('Add the correct <strong>title</strong> in the home page', _SQ_PLUGIN_NAME_); ?></span>
|
159 |
+
<?php
|
160 |
+
$auto_option = false;
|
161 |
+
if ($view->options['sq_auto_title'] == 1)
|
162 |
+
$auto_option = true;
|
163 |
+
?>
|
164 |
+
<div class="sq_option_content sq_option_content">
|
165 |
+
<div class="sq_switch sq_seo_switch_condition" style="<?php echo (($view->options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
|
166 |
+
<input id="sq_auto_title1" type="radio" class="sq_switch-input" name="sq_auto_title" value="1" <?php echo ($auto_option ? "checked" : '') ?> />
|
167 |
+
<label for="sq_auto_title1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
|
168 |
+
<input id="sq_auto_title0" type="radio" class="sq_switch-input" name="sq_auto_title" value="0" <?php echo (!$auto_option ? "checked" : '') ?> />
|
169 |
+
<label for="sq_auto_title0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
|
170 |
+
<span class="sq_switch-selection"></span>
|
171 |
+
</div>
|
172 |
+
</div>
|
173 |
+
|
174 |
+
<span><?php _e('Add the correct <strong>description</strong> and <strong>keywords</strong> in home page', _SQ_PLUGIN_NAME_); ?></span>
|
175 |
+
<?php
|
176 |
+
$auto_option = false;
|
177 |
+
if ($view->options['sq_auto_description'] == 1)
|
178 |
+
$auto_option = true;
|
179 |
+
?>
|
180 |
+
<div class="sq_option_content sq_option_content">
|
181 |
+
<div class="sq_switch sq_seo_switch_condition" style="<?php echo (($view->options['sq_use'] == 0) ? 'display:none;' : ''); ?>">
|
182 |
+
<input id="sq_auto_description1" type="radio" class="sq_switch-input" name="sq_auto_description" value="1" <?php echo ($auto_option ? "checked" : '') ?> />
|
183 |
+
<label for="sq_auto_description1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
|
184 |
+
<input id="sq_auto_description0" type="radio" class="sq_switch-input" name="sq_auto_description" value="0" <?php echo (!$auto_option ? "checked" : '') ?> />
|
185 |
+
<label for="sq_auto_description0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
|
186 |
+
<span class="sq_switch-selection"></span>
|
187 |
+
</div>
|
188 |
+
|
189 |
+
</div>
|
190 |
+
|
191 |
+
</legend>
|
192 |
+
|
193 |
+
<div>
|
194 |
+
<?php
|
195 |
+
$auto_option = false;
|
196 |
+
if ($view->options['sq_fp_title'] == '' || $view->options['sq_auto_seo'] == 1)
|
197 |
+
$auto_option = true;
|
198 |
+
?>
|
199 |
+
<div class="sq_option_content">
|
200 |
+
<div class="sq_switch">
|
201 |
+
<input id="sq_automatically" type="radio" class="sq_switch-input" name="sq_auto_seo" value="1" <?php echo ($auto_option ? "checked" : '') ?> />
|
202 |
+
<label for="sq_automatically" class="sq_switch-label sq_switch-label-off"><?php _e('Auto', _SQ_PLUGIN_NAME_); ?></label>
|
203 |
+
<input id="sq_customize" type="radio" class="sq_switch-input" name="sq_auto_seo" value="0" <?php echo (!$auto_option ? "checked" : '') ?> />
|
204 |
+
<label for="sq_customize" class="sq_switch-label sq_switch-label-on"><?php _e('Custom', _SQ_PLUGIN_NAME_); ?></label>
|
205 |
+
<span class="sq_switch-selection"></span>
|
206 |
+
</div>
|
207 |
+
<span class="sq_option_info_small"><?php _e('Home page SEO optimization', _SQ_PLUGIN_NAME_); ?></span>
|
208 |
+
</div>
|
209 |
+
|
210 |
+
<div id="sq_customize_settings" <?php echo (!$auto_option ? '' : 'style="display: none;"') ?>>
|
211 |
+
<p class="withborder">
|
212 |
+
<?php _e('Title:', _SQ_PLUGIN_NAME_); ?><input type="text" name="sq_fp_title" value="<?php echo (($view->options['sq_fp_title'] <> '') ? $view->options['sq_fp_title'] : '') ?>" size="75" /><span id="sq_title_info" />
|
213 |
+
<span id="sq_fp_title_length"></span><span class="sq_settings_info"><?php _e('Tips: Length 10-75 chars', _SQ_PLUGIN_NAME_); ?></span>
|
214 |
+
</p>
|
215 |
+
<p class="withborder">
|
216 |
+
<?php _e('Description:', _SQ_PLUGIN_NAME_); ?><textarea name="sq_fp_description" cols="70" rows="3" ><?php echo (($view->options['sq_fp_description'] <> '') ? $view->options['sq_fp_description'] : '') ?></textarea><span id="sq_description_info" />
|
217 |
+
<span id="sq_fp_description_length"></span><span class="sq_settings_info"><?php _e('Tips: Length 70-165 chars', _SQ_PLUGIN_NAME_); ?></span>
|
218 |
+
</p>
|
219 |
+
<p class="withborder">
|
220 |
+
<?php _e('Keywords:', _SQ_PLUGIN_NAME_); ?><input type="text" name="sq_fp_keywords" value="<?php echo (($view->options['sq_fp_keywords'] <> '') ? $view->options['sq_fp_keywords'] : '') ?>" size="70" />
|
221 |
+
<span id="sq_fp_keywords_length"></span><span class="sq_settings_info"><?php _e('Tips: 2-4 keywords', _SQ_PLUGIN_NAME_); ?></span>
|
222 |
+
</p>
|
223 |
+
</div>
|
224 |
+
|
225 |
+
<span class="sq_option_info"><?php _e('You First Page Preview (Title, Description, Keywords)', _SQ_PLUGIN_NAME_); ?></span>
|
226 |
+
<div id="sq_snippet">
|
227 |
+
<div id="sq_snippet_name"><?php _e('Squirrly Snippet', _SQ_PLUGIN_NAME_) ?></div>
|
228 |
+
|
229 |
+
<ul id="sq_snippet_ul">
|
230 |
+
<li id="sq_snippet_title"></li>
|
231 |
+
<li id="sq_snippet_url"></li>
|
232 |
+
<li id="sq_snippet_description"></li>
|
233 |
+
<li id="sq_snippet_source"><a href="http://www.google.com/webmasters/tools/richsnippets?url=<?php echo urlencode(get_bloginfo('wpurl')) ?>" target="_blank"><?php _e('Check with google ...', _SQ_PLUGIN_NAME_) ?></a></li>
|
234 |
+
</ul>
|
235 |
+
|
236 |
+
<div id="sq_snippet_disclaimer" <?php echo (!$auto_option ? '' : 'style="display: none;"') ?>><?php _e('If you don\'t see any changes in custom optimization, check if another SEO plugin affects Squirrly SEO', _SQ_PLUGIN_NAME_) ?></div>
|
237 |
+
</div>
|
238 |
+
</div>
|
239 |
+
</fieldset>
|
240 |
+
<fieldset>
|
241 |
+
<legend>
|
242 |
+
<span class="sq_legend_title"><?php _e('Squirrly Options', _SQ_PLUGIN_NAME_); ?></span>
|
243 |
+
<span><?php echo sprintf(__('%sThe right premises in working with Squirrly, WordPress SEO plugin%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/the-right-premises-in-working-with-squirrly-wordpress-seo-plugin" target="_blank">', '</a>'); ?></span>
|
244 |
+
<span><?php echo sprintf(__('%sGetting inspired with Squirrly WordPress SEO plugin%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/getting-inspired-with-squirrly-wordpress-seo-plugin" target="_blank">', '</a>'); ?></span>
|
245 |
+
|
246 |
+
<span><?php echo sprintf(__('%sThere is a New SEO Live Assistant from Squirrly%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/there-is-a-new-seo-live-assistant-from-squirrly" target="_blank">', '</a>'); ?></span>
|
247 |
+
<span><?php echo sprintf(__('%sHow to create Human friendly content with the WordPress SEO plugin?%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/how-to-create-human-friendly-content-with-the-a-wordpress-seo-plugin" target="_blank">', '</a>'); ?></span>
|
248 |
+
|
249 |
+
</legend>
|
250 |
+
|
251 |
+
<div>
|
252 |
+
<div class="sq_option_content" >
|
253 |
+
<div class="sq_switch">
|
254 |
+
<input id="ignore_warn_yes" class="sq_switch-input" type="radio" name="ignore_warn" value="0" <?php echo (($view->options['ignore_warn'] == 0) ? "checked" : '') ?> />
|
255 |
+
<label for="ignore_warn_yes" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
|
256 |
+
<input id="sq_ignore_warn" class="sq_switch-input" type="radio" name="ignore_warn" value="1" <?php echo (($view->options['ignore_warn'] == 1) ? "checked" : '') ?> />
|
257 |
+
<label for="sq_ignore_warn" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
|
258 |
+
<span class="sq_switch-selection"></span>
|
259 |
+
</div>
|
260 |
+
<span><?php _e('Let Squirrly warn me if there are errors related to SEO settings', _SQ_PLUGIN_NAME_); ?></span>
|
261 |
+
</div>
|
262 |
+
|
263 |
+
<div class="sq_option_content">
|
264 |
+
<div class="sq_switch">
|
265 |
+
<input id="sq_keyword_help1" type="radio" class="sq_switch-input" name="sq_keyword_help" value="1" <?php echo (($view->options['sq_keyword_help'] == 1) ? "checked" : '') ?> />
|
266 |
+
<label for="sq_keyword_help1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
|
267 |
+
<input id="sq_keyword_help0" type="radio" class="sq_switch-input" name="sq_keyword_help" value="0" <?php echo (($view->options['sq_keyword_help'] == 0) ? "checked" : '') ?> />
|
268 |
+
<label for="sq_keyword_help0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
|
269 |
+
<span class="sq_switch-selection"></span>
|
270 |
+
</div>
|
271 |
+
<span><?php _e('Show <strong>"Enter a keyword"</strong> bubble when posting a new article.', _SQ_PLUGIN_NAME_); ?></span>
|
272 |
+
</div>
|
273 |
+
|
274 |
+
<div class="sq_option_content">
|
275 |
+
<div class="sq_switch">
|
276 |
+
<input id="sq_keyword_information1" type="radio" class="sq_switch-input" name="sq_keyword_information" value="1" <?php echo (($view->options['sq_keyword_information'] == 1) ? "checked" : '') ?> />
|
277 |
+
<label for="sq_keyword_information1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
|
278 |
+
<input id="sq_keyword_information0" type="radio" class="sq_switch-input" name="sq_keyword_information" value="0" <?php echo (($view->options['sq_keyword_information'] == 0) ? "checked" : '') ?> />
|
279 |
+
<label for="sq_keyword_information0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
|
280 |
+
<span class="sq_switch-selection"></span>
|
281 |
+
</div>
|
282 |
+
<span><?php _e('Always show <strong>Keyword Informations</strong> about the selected keyword.', _SQ_PLUGIN_NAME_); ?></span>
|
283 |
+
</div>
|
284 |
+
|
285 |
+
|
286 |
+
<div class="sq_option_content">
|
287 |
+
<div class="sq_switch">
|
288 |
+
<input id="sq_sla1" type="radio" class="sq_switch-input" name="sq_sla" value="1" <?php echo (($view->options['sq_sla'] == 1) ? "checked" : '') ?> />
|
289 |
+
<label for="sq_sla1" class="sq_switch-label sq_switch-label-off"><?php _e('Yes', _SQ_PLUGIN_NAME_); ?></label>
|
290 |
+
<input id="sq_sla0" type="radio" class="sq_switch-input" name="sq_sla" value="0" <?php echo (($view->options['sq_sla'] == 0) ? "checked" : '') ?> />
|
291 |
+
<label for="sq_sla0" class="sq_switch-label sq_switch-label-on"><?php _e('No', _SQ_PLUGIN_NAME_); ?></label>
|
292 |
+
<span class="sq_switch-selection"></span>
|
293 |
+
</div>
|
294 |
+
<span><?php _e('Use <strong> the NEW version of the SEO Live Assistant</strong>.', _SQ_PLUGIN_NAME_); ?></span>
|
295 |
+
</div>
|
296 |
+
|
297 |
+
|
298 |
+
<div class="sq_option_content">
|
299 |
+
<p class=" withbordertop">
|
300 |
+
<span><?php _e('Select the country for which Squirrly will check the google rank', _SQ_PLUGIN_NAME_); ?></span>
|
301 |
+
</p>
|
302 |
+
<div class="abh_select">
|
303 |
+
<select id="sq_google_country" name="sq_google_country">
|
304 |
+
<option value="com"><?php _e('Default', _SQ_PLUGIN_NAME_); ?> - Google.com (http://www.google.com/)</option>
|
305 |
+
<option value="as"><?php _e('American Samoa', _SQ_PLUGIN_NAME_); ?> (http://www.google.as/)</option>
|
306 |
+
<option value=".off.ai"><?php _e('Anguilla', _SQ_PLUGIN_NAME_); ?> (http://www.google.off.ai/)</option>
|
307 |
+
<option value="com.ag"><?php _e('Antigua and Barbuda', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.ag/)</option>
|
308 |
+
<option value="com.ar"><?php _e('Argentina', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.ar/)</option>
|
309 |
+
<option value="com.au"><?php _e('Australia', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.au/)</option>
|
310 |
+
<option value="at"><?php _e('Austria', _SQ_PLUGIN_NAME_); ?> (http://www.google.at/)</option>
|
311 |
+
<option value="az"><?php _e('Azerbaijan', 'seo-rank-reporter'); ?> (http://www.google.az/)</option>
|
312 |
+
<option value="be"><?php _e('Belgium', _SQ_PLUGIN_NAME_); ?> (http://www.google.be/)</option>
|
313 |
+
<option value="com.br"><?php _e('Brazil', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.br/)</option>
|
314 |
+
<option value="vg"><?php _e('British Virgin Islands', _SQ_PLUGIN_NAME_); ?> (http://www.google.vg/)</option>
|
315 |
+
<option value="bi"><?php _e('Burundi', _SQ_PLUGIN_NAME_); ?> (http://www.google.bi/)</option>
|
316 |
+
<option value="ca"><?php _e('Canada', _SQ_PLUGIN_NAME_); ?> (http://www.google.ca/)</option>
|
317 |
+
<option value="td"><?php _e('Chad', _SQ_PLUGIN_NAME_); ?> (http://www.google.td/)</option>
|
318 |
+
<option value="cl"><?php _e('Chile', _SQ_PLUGIN_NAME_); ?> (http://www.google.cl/)</option>
|
319 |
+
<option value="com.co"><?php _e('Colombia', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.co/)</option>
|
320 |
+
<option value="co.cr"><?php _e('Costa Rica', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.cr/)</option>
|
321 |
+
<option value="ci"><?php _e('Côte d\'Ivoire', _SQ_PLUGIN_NAME_); ?> (http://www.google.ci/)</option>
|
322 |
+
<option value="com.cu"><?php _e('Cuba', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.cu/)</option>
|
323 |
+
<option value="cd"><?php _e('Dem. Rep. of the Congo', _SQ_PLUGIN_NAME_); ?> (http://www.google.cd/)</option>
|
324 |
+
<option value="dk"><?php _e('Denmark', _SQ_PLUGIN_NAME_); ?> (http://www.google.dk/)</option>
|
325 |
+
<option value="dj"><?php _e('Djibouti', _SQ_PLUGIN_NAME_); ?> (http://www.google.dj/)</option>
|
326 |
+
<option value="com.do"><?php _e('Dominican Republic', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.do/)</option>
|
327 |
+
<option value="com.ec"><?php _e('Ecuador', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.ec/)</option>
|
328 |
+
<option value="com.sv"><?php _e('El Salvador', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.sv/)</option>
|
329 |
+
<option value="fm"><?php _e('Federated States of Micronesia', _SQ_PLUGIN_NAME_); ?> (http://www.google.fm/)</option>
|
330 |
+
<option value="com.fj"><?php _e('Fiji', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.fj/)</option>
|
331 |
+
<option value="fi"><?php _e('Finland', _SQ_PLUGIN_NAME_); ?> (http://www.google.fi/)</option>
|
332 |
+
<option value="fr"><?php _e('France', _SQ_PLUGIN_NAME_); ?> (http://www.google.fr/)</option>
|
333 |
+
<option value="gm"><?php _e('The Gambia', _SQ_PLUGIN_NAME_); ?> (http://www.google.gm/)</option>
|
334 |
+
<option value="ge"><?php _e('Georgia', _SQ_PLUGIN_NAME_); ?> (http://www.google.ge/)</option>
|
335 |
+
<option value="de"><?php _e('Germany', _SQ_PLUGIN_NAME_); ?> (http://www.google.de/)</option>
|
336 |
+
<option value="com.gi"><?php _e('Gibraltar', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.gi/)</option>
|
337 |
+
<option value="com.gr"><?php _e('Greece', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.gr/)</option>
|
338 |
+
<option value="gl"><?php _e('Greenland', _SQ_PLUGIN_NAME_); ?> (http://www.google.gl/)</option>
|
339 |
+
<option value="gg"><?php _e('Guernsey', _SQ_PLUGIN_NAME_); ?> (http://www.google.gg/)</option>
|
340 |
+
<option value="hn"><?php _e('Honduras', _SQ_PLUGIN_NAME_); ?> (http://www.google.hn/)</option>
|
341 |
+
<option value="com.hk"><?php _e('Hong Kong', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.hk/)</option>
|
342 |
+
<option value="co.hu"><?php _e('Hungary', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.hu/)</option>
|
343 |
+
<option value="co.in"><?php _e('India', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.in/)</option>
|
344 |
+
<option value="ie"><?php _e('Ireland', _SQ_PLUGIN_NAME_); ?> (http://www.google.ie/)</option>
|
345 |
+
<option value="co.im"><?php _e('Isle of Man', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.im/)</option>
|
346 |
+
<option value="co.il"><?php _e('Israel', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.il/)</option>
|
347 |
+
<option value="it"><?php _e('Italy', _SQ_PLUGIN_NAME_); ?> (http://www.google.it/)</option>
|
348 |
+
<option value="com.jm"><?php _e('Jamaica', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.jm/)</option>
|
349 |
+
<option value="co.jp"><?php _e('Japan', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.jp/)</option>
|
350 |
+
<option value="co.je"><?php _e('Jersey', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.je/)</option>
|
351 |
+
<option value="kz"><?php _e('Kazakhstan', _SQ_PLUGIN_NAME_); ?> (http://www.google.kz/)</option>
|
352 |
+
<option value="co.kr"><?php _e('Korea', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.kr/)</option>
|
353 |
+
<option value="lv"><?php _e('Latvia', _SQ_PLUGIN_NAME_); ?> (http://www.google.lv/)</option>
|
354 |
+
<option value="co.ls"><?php _e('Lesotho', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.ls/)</option>
|
355 |
+
<option value="li"><?php _e('Liechtenstein', _SQ_PLUGIN_NAME_); ?> (http://www.google.li/)</option>
|
356 |
+
<option value="lt"><?php _e('Lithuania', _SQ_PLUGIN_NAME_); ?> (http://www.google.lt/)</option>
|
357 |
+
<option value="lu"><?php _e('Luxembourg', _SQ_PLUGIN_NAME_); ?> (http://www.google.lu/)</option>
|
358 |
+
<option value="mw"><?php _e('Malawi', _SQ_PLUGIN_NAME_); ?> (http://www.google.mw/)</option>
|
359 |
+
<option value="com.my"><?php _e('Malaysia', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.my/)</option>
|
360 |
+
<option value="com.mt"><?php _e('Malta', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.mt/)</option>
|
361 |
+
<option value="mu"><?php _e('Mauritius', _SQ_PLUGIN_NAME_); ?> (http://www.google.mu/)</option>
|
362 |
+
<option value="com.mx"><?php _e('México', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.mx/)</option>
|
363 |
+
<option value="ms"><?php _e('Montserrat', _SQ_PLUGIN_NAME_); ?> (http://www.google.ms/)</option>
|
364 |
+
<option value="com.na"><?php _e('Namibia', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.na/)</option>
|
365 |
+
<option value="com.np"><?php _e('Nepal', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.np/)</option>
|
366 |
+
<option value="nl"><?php _e('Netherlands', _SQ_PLUGIN_NAME_); ?> (http://www.google.nl/)</option>
|
367 |
+
<option value="co.nz"><?php _e('New Zealand', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.nz/)</option>
|
368 |
+
<option value="com.ni"><?php _e('Nicaragua', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.ni/)</option>
|
369 |
+
<option value="com.nf"><?php _e('Norfolk Island', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.nf/)</option>
|
370 |
+
<option value="com.pk"><?php _e('Pakistan', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.pk/)</option>
|
371 |
+
<option value="com.pa"><?php _e('Panamá', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.pa/)</option>
|
372 |
+
<option value="com.py"><?php _e('Paraguay', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.py/)</option>
|
373 |
+
<option value="com.pe"><?php _e('Perú', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.pe/)</option>
|
374 |
+
<option value="com.ph"><?php _e('Philippines', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.ph/)</option>
|
375 |
+
<option value="pn"><?php _e('Pitcairn Islands', _SQ_PLUGIN_NAME_); ?> (http://www.google.pn/)</option>
|
376 |
+
<option value="pl"><?php _e('Poland', _SQ_PLUGIN_NAME_); ?> (http://www.google.pl/)</option>
|
377 |
+
<option value="pt"><?php _e('Portugal', _SQ_PLUGIN_NAME_); ?> (http://www.google.pt/)</option>
|
378 |
+
<option value="com.pr"><?php _e('Puerto Rico', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.pr/)</option>
|
379 |
+
<option value="cg"><?php _e('Rep. of the Congo', _SQ_PLUGIN_NAME_); ?> (http://www.google.cg/)</option>
|
380 |
+
<option value="ro"><?php _e('Romania', _SQ_PLUGIN_NAME_); ?> (http://www.google.ro/)</option>
|
381 |
+
<option value="ru"><?php _e('Russia', _SQ_PLUGIN_NAME_); ?> (http://www.google.ru/)</option>
|
382 |
+
<option value="rw"><?php _e('Rwanda', _SQ_PLUGIN_NAME_); ?> (http://www.google.rw/)</option>
|
383 |
+
<option value="sh"><?php _e('Saint Helena', _SQ_PLUGIN_NAME_); ?> (http://www.google.sh/)</option>
|
384 |
+
<option value="sm"><?php _e('San Marino', _SQ_PLUGIN_NAME_); ?> (http://www.google.sm/)</option>
|
385 |
+
<option value="com.sg"><?php _e('Singapore', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.sg/)</option>
|
386 |
+
<option value="sk"><?php _e('Slovakia', _SQ_PLUGIN_NAME_); ?> (http://www.google.sk/)</option>
|
387 |
+
<option value="co.za"><?php _e('South Africa', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.za/)</option>
|
388 |
+
<option value="es"><?php _e('Spain', _SQ_PLUGIN_NAME_); ?> (http://www.google.es/)</option>
|
389 |
+
<option value="se"><?php _e('Sweden', _SQ_PLUGIN_NAME_); ?> (http://www.google.se/)</option>
|
390 |
+
<option value="ch"><?php _e('Switzerland', _SQ_PLUGIN_NAME_); ?> (http://www.google.ch/)</option>
|
391 |
+
<option value="com.tw"><?php _e('Taiwan', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.tw/)</option>
|
392 |
+
<option value="co.th"><?php _e('Thailand', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.th/)</option>
|
393 |
+
<option value="tt"><?php _e('Trinidad and Tobago', _SQ_PLUGIN_NAME_); ?> (http://www.google.tt/)</option>
|
394 |
+
<option value="com.tr"><?php _e('Turkey', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.tr/)</option>
|
395 |
+
<option value="com.ua"><?php _e('Ukraine', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.ua/)</option>
|
396 |
+
<option value="ae"><?php _e('United Arab Emirates', _SQ_PLUGIN_NAME_); ?> (http://www.google.ae/)</option>
|
397 |
+
<option value="co.uk"><?php _e('United Kingdom', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.uk/)</option>
|
398 |
+
<option value="com.uy"><?php _e('Uruguay', _SQ_PLUGIN_NAME_); ?> (http://www.google.com.uy/)</option>
|
399 |
+
<option value="uz"><?php _e('Uzbekistan', _SQ_PLUGIN_NAME_); ?> (http://www.google.uz/)</option>
|
400 |
+
<option value="vu"><?php _e('Vanuatu', _SQ_PLUGIN_NAME_); ?> (http://www.google.vu/)</option>
|
401 |
+
<option value="co.ve"><?php _e('Venezuela', _SQ_PLUGIN_NAME_); ?> (http://www.google.co.ve/)</option>
|
402 |
+
</select>
|
403 |
+
</div>
|
404 |
+
|
405 |
+
|
406 |
+
</div>
|
407 |
+
</div>
|
408 |
+
</fieldset>
|
409 |
+
<a name="sq_favicon_anchor"></a>
|
410 |
+
<fieldset id="sq_favicon" style="<?php echo (($view->options['sq_auto_favicon'] == 0) ? 'display:none;' : ''); ?>">
|
411 |
+
<legend>
|
412 |
+
<span class="sq_legend_title"><?php _e('Change the Website Icon', _SQ_PLUGIN_NAME_); ?></span>
|
413 |
+
<span><?php _e('Now even the tablets and smartphone browsers also make use of your icons. This has led to an increasesd importance to having a good favicon.', _SQ_PLUGIN_NAME_); ?> </span>
|
414 |
+
<span><?php echo sprintf(__('You can use %shttp://convertico.com/%s to convert your photo to icon and upload it here after that.', _SQ_PLUGIN_NAME_), '<a href="http://convertico.com/" target="_blank">', '</a>'); ?></span>
|
415 |
+
|
416 |
+
</legend>
|
417 |
+
<div>
|
418 |
+
<p>
|
419 |
+
<?php _e('File types: JPG, JPEG, GIF and PNG.', _SQ_PLUGIN_NAME_); ?>
|
420 |
+
</p>
|
421 |
+
<?php echo ((defined('SQ_MESSAGE_FAVICON')) ? '<span class="sq_message sq_error" style="display: block; padding: 11px 0;">' . SQ_MESSAGE_FAVICON . '</span>' : '') ?>
|
422 |
+
<p>
|
423 |
+
<?php _e('Upload file:', _SQ_PLUGIN_NAME_); ?><br />
|
424 |
+
<?php if (file_exists(ABSPATH . '/favicon.ico')) { ?>
|
425 |
+
<img src="<?php echo get_bloginfo('url') . '/favicon.ico' . '?' . time() ?>" style="float: left; margin-top: 5px; width: 20px; height: 20px;" />
|
426 |
+
<?php } ?>
|
427 |
+
<input type="file" name="favicon" id="favicon" style="float: left;" />
|
428 |
+
<input type="submit" name="sq_update" value="<?php _e('Upload', _SQ_PLUGIN_NAME_) ?>" style="float: left; margin-top: 0;" />
|
429 |
+
|
430 |
+
</p>
|
431 |
+
|
432 |
+
<span class="sq_settings_info"><?php _e('If you don\'t see the new icon in your browser, empty the browser cache and refresh the page.', _SQ_PLUGIN_NAME_); ?></span>
|
433 |
+
</div>
|
434 |
+
</fieldset>
|
435 |
+
<fieldset >
|
436 |
+
<legend>
|
437 |
+
<span class="sq_legend_title"><?php _e('Tracking Tools', _SQ_PLUGIN_NAME_); ?></span>
|
438 |
+
<span><?php echo sprintf(__('%sLink your Google+ profile to the content you create%s', _SQ_PLUGIN_NAME_), '<a href="https://plus.google.com/authorship" target="_blank">', '</a>'); ?></span>
|
439 |
+
<span><?php echo sprintf(__('%sStarBox, the author box that’s pushing content marketing to the stars%s', _SQ_PLUGIN_NAME_), '<a href="http://www.squirrly.co/starbox-the-author-box-thats-pushing-content-marketing-to-the-stars" target="_blank">', '</a>'); ?></span>
|
440 |
+
<span><?php echo sprintf(__('%sHow to Get the Most Out of Google Analytics%s', _SQ_PLUGIN_NAME_), '<a href="http://mashable.com/2012/01/04/google-analytics-guide/" target="_blank">', '</a>'); ?></span>
|
441 |
+
<span><?php echo sprintf(__('%sA Beginner’s Guide to Facebook Insights%s', _SQ_PLUGIN_NAME_), '<a href="http://mashable.com/2010/09/03/facebook-insights-guide/" target="_blank">', '</a>'); ?></span>
|
442 |
+
|
443 |
+
</legend>
|
444 |
+
<div>
|
445 |
+
<p class="withborder withcode">
|
446 |
+
<span class="sq_icon sq_icon_googleplus"></span>
|
447 |
+
<?php _e('Google Plus URL:', _SQ_PLUGIN_NAME_); ?><br /><strong><input type="text" name="sq_google_plus" value="<?php echo (($view->options['sq_google_plus'] <> '') ? $view->options['sq_google_plus'] : '') ?>" size="60" /> (e.g. https://plus.google.com/00000000000000/posts)</strong>
|
448 |
+
</p>
|
449 |
+
<p class="withborder withcode">
|
450 |
+
<span class="sq_icon sq_icon_googleanalytics"></span>
|
451 |
+
<?php echo sprintf(__('Google %sAnalytics ID%s:', _SQ_PLUGIN_NAME_), '<a href="http://maps.google.com/analytics/" target="_blank">', '</a>'); ?><br><strong><input type="text" name="sq_google_analytics" value="<?php echo (($view->options['sq_google_analytics'] <> '') ? $view->options['sq_google_analytics'] : '') ?>" size="15" /> (e.g. UA-XXXXXXX-XX)</strong>
|
452 |
+
</p>
|
453 |
+
<p class="withborder withcode" >
|
454 |
+
<span class="sq_icon sq_icon_facebookinsights"></span>
|
455 |
+
<?php echo sprintf(__('Facebook META code (for %sInsights%s ):', _SQ_PLUGIN_NAME_), '<a href="http://www.facebook.com/insights/" target="_blank">', '</a>'); ?><br><strong><meta property="fb:admins" content=" <input type="text" name="sq_facebook_insights" value="<?php echo (($view->options['sq_facebook_insights'] <> '') ? $view->options['sq_facebook_insights'] : '') ?>" size="15" /> " /></strong>
|
456 |
+
</p>
|
457 |
+
</div>
|
458 |
+
</fieldset>
|
459 |
+
<fieldset >
|
460 |
+
<legend>
|
461 |
+
<span class="sq_legend_title"><?php _e('Search Engines Tools', _SQ_PLUGIN_NAME_); ?></span>
|
462 |
+
<span><?php echo sprintf(__('%sBest practices to help Google find, crawl, and index your site%s', _SQ_PLUGIN_NAME_), '<a href="https://support.google.com/webmasters/answer/35769?hl=en" target="_blank">', '</a>'); ?></span>
|
463 |
+
<span><?php echo sprintf(__('%sBing Webmaster Tools Help & How-To Center%s', _SQ_PLUGIN_NAME_), '<a href="http://www.bing.com/webmaster/help/help-center-661b2d18" target="_blank">', '</a>'); ?></span>
|
464 |
+
|
465 |
+
</legend>
|
466 |
+
<div>
|
467 |
+
<p class="withborder withcode">
|
468 |
+
<span class="sq_icon sq_icon_googlewt"></span>
|
469 |
+
<?php echo sprintf(__('Google META verification code for %sWebmaster Tool%s:', _SQ_PLUGIN_NAME_), '<a href="http://maps.google.com/webmasters/" target="_blank">', '</a>'); ?><br><strong><meta name="google-site-verification" content=" <input type="text" name="sq_google_wt" value="<?php echo (($view->options['sq_google_wt'] <> '') ? $view->options['sq_google_wt'] : '') ?>" size="15" /> " /></strong>
|
470 |
+
</p>
|
471 |
+
<p class="withborder withcode" >
|
472 |
+
<span class="sq_icon sq_icon_bingwt" ></span>
|
473 |
+
<?php echo sprintf(__('Bing META code (for %sWebmaster Tool%s ):', _SQ_PLUGIN_NAME_), '<a href="http://www.bing.com/toolbox/webmaster/" target="_blank">', '</a>'); ?><br><strong><meta name="msvalidate.01" content=" <input type="text" name="sq_bing_wt" value="<?php echo (($view->options['sq_bing_wt'] <> '') ? $view->options['sq_bing_wt'] : '') ?>" size="15" /> " /></strong>
|
474 |
+
</p>
|
475 |
+
<p class="withborder withcode" >
|
476 |
+
<span class="sq_icon sq_icon_alexat" ></span>
|
477 |
+
<?php echo sprintf(__('Alexa META code (for %sAlexa Tool%s ):', _SQ_PLUGIN_NAME_), '<a href="http://www.alexa.com/pro/subscription/signup?tsver=0&puid=200" target="_blank">', '</a>'); ?><br><strong><meta name="alexaVerifyID" content=" <input type="text" name="sq_alexa" value="<?php echo (($view->options['sq_alexa'] <> '') ? $view->options['sq_alexa'] : '') ?>" size="15" /> /></strong>
|
478 |
+
</p>
|
479 |
+
</div>
|
480 |
+
</fieldset>
|
481 |
+
|
482 |
+
<div id="sq_settings_submit">
|
483 |
+
<input type="hidden" name="action" value="sq_settings_update" />
|
484 |
+
<input type="hidden" name="nonce" value="<?php echo wp_create_nonce(_SQ_NONCE_ID_); ?>" />
|
485 |
+
<input type="submit" name="sq_update" value="<?php _e('Save settings', _SQ_PLUGIN_NAME_) ?> »" />
|
486 |
+
</div>
|
487 |
+
</div>
|
488 |
+
</form>
|
489 |
+
<script type="text/javascript">
|
490 |
+
var sq_blogurl = "<?php echo get_bloginfo('url') ?>";
|
491 |
+
var __snippetshort = "<?php echo __('Too short', _SQ_PLUGIN_NAME_) ?>";
|
492 |
+
var __snippetlong = "<?php echo __('Too long', _SQ_PLUGIN_NAME_) ?>";
|
493 |
+
|
494 |
+
jQuery('#sq_settings').find('select[name=sq_google_country]').val('<?php echo $view->options['sq_google_country']; ?>');
|
495 |
+
</script>
|
496 |
+
</div>
|
themes/default/SQ_notices.php
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if ($type == 'errors_count') {
|
3 |
+
/* for the Menu counter */
|
4 |
+
?>
|
5 |
+
<span class='awaiting-mod count-<?php echo $message; ?>'>
|
6 |
+
<span class='sq_count pending-count'><?php echo $message; ?></span>
|
7 |
+
</span>
|
8 |
+
<?php } else { ?>
|
9 |
+
<div id="<?php echo $id ?>" class="<?php echo $type; ?> sq_message">
|
10 |
+
|
11 |
+
<p>
|
12 |
+
<strong><?php echo $message; ?></strong>
|
13 |
+
</p>
|
14 |
+
|
15 |
+
</div>
|
16 |
+
<?php } ?>
|
themes/default/css/sq_blockaudit.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
#cl_settings_body .sq_button{display:inline-block;background-color:#FFF;line-height:35px;color:#504310;font-size:18px;text-shadow:0.1em 0.1em #FFFF52;background:#FFD424;cursor:pointer;border:1px solid #F7A504;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;font-weight:bold;padding:0px 10px;margin:6px 0 5px 6px;width:250px;text-align:center;text-decoration:none}#sq_settings_body a.sq_button{padding:8px 11px;text-transform:none;text-decoration:none}#sq_settings #sq_option_audit{display:inline-block}#sq_settings #sq_option_audit_link,#sq_settings #sq_option_audit_notready{display:block;width:100%;text-align:center}#sq_settings #sq_audit_date{display:inline-block;margin:0px 0 0 7px;color:#ccc;font-size:15px;text-align:center}
|
themes/default/css/sq_blockresearch.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
.sq_beta{display:none !important}.sq_limit_exceeded{clear:both !important;margin:0 auto;text-align:center}.sq_limit_exceeded a{text-decoration:none;display:block;width:200px;clear:both;background-color:#1cab09;font-size:15px;font-weight:bold;color:white;margin:10px auto 0 auto;padding:11px;position:relative;text-shadow:1px 1px #555;cursor:pointer}#sq_research_tab:before,#sq_research:before{display:block;border:none;content:" ";background:transparent url('../img/sprite.png') repeat-x;background-position:0 -360px;width:100%;height:5px;border-radius:2px 2px 0 0;opacity:0.3}#sq_research_tab:hover:before,#sq_research:hover:before{opacity:0.8}#sq_research{position:relative;padding:0px 0 5px 0;margin:20px 1px;background-color:#fcfcfc;min-width:460px;box-shadow:0px 1px 2px -1px #444;-moz-box-shadow:0px 1px 2px -1px #444;-webkit-box-shadow:0px 1px 2px -1px #444}#sq_research_tab{position:relative;padding:0px 0 5px 0;margin:20px 1px;background-color:#fcfcfc;min-width:460px;cursor:pointer;box-shadow:0px 1px 2px -1px #444;-moz-box-shadow:0px 1px 2px -1px #444;-webkit-box-shadow:0px 1px 2px -1px #444}#sq_research_tab #sq_research_tab_title{display:block;text-align:left;font-size:18px;font-weight:normal;line-height:30px;color:#333;margin:0 0 10px 0;padding:10px 0 10px 10px;height:16px}.sq_arrow_down{float:right;width:35px;height:20px;margin-top:14px;margin-right:10px;background:transparent url('../img/sprite.png?rev=1') no-repeat;background-position:-221px -50px;cursor:pointer}.sq_arrow_up{float:right;width:35px;height:20px;margin-top:14px;margin-right:10px;background:transparent url('../img/sprite.png?rev=1') no-repeat;background-position:-262px -50px;cursor:pointer}#sq_research #sq_research_title{display:block;text-align:left;font-size:18px;font-weight:normal;line-height:30px;color:#333;border-bottom:1px dashed #d1d1d1;margin:0 0 10px 0;padding:10px 0 20px 10px;height:16px}#sq_research #sq_research_body{display:block;font-size:12px;color:#333;line-height:16px;text-align:left;padding:10px 0 2px 10px}#sq_research .sq_keywords_research_add{background-color:transparent;color:green;font-size:12px;font-weight:bold;text-shadow:1px 1px white;box-shadow:1px 1px 0px 0px white;border:1px solid green;padding:5px 6px;margin-left:0px;margin-top:0px;cursor:pointer}#sq_research .sq_keywords_research_submit{background-color:green;color:white;font-size:12px;font-weight:bold;text-shadow:1px 1px #333;box-shadow:1px 1px 0px 0px white;border:1px solid green;padding:5px 6px;margin-left:10px;margin-top:0px;cursor:pointer}#sq_research .sq_keywords_research_clear{background-color:transparent;color:green;font-size:11px;font-weight:bold;text-shadow:1px 1px white;box-shadow:1px 1px 0px 0px white;border:1px solid green;padding:4px 5px;margin-left:15px;margin-top:0px;cursor:pointer}#sq_research .sq_research_selectit{padding:4px 11px;font-size:12px;font-weight:bold;color:white;cursor:pointer;background-color:#1cab09;text-shadow:1px 1px #555;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px}#sq_research .sq_keywords_research_clear{float:right;margin-right:10px;margin-top:2px}#sq_research .sq_keyword_research{float:left;width:420px;margin-top:2px;line-height:16px;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;padding:5px;font-size:14px;font-weight:bold;color:darkGreen}#sq_research_body #sq_keywords_research{display:table;width:100%}#sq_research_body #sq_keywords_research > li{display:table;width:100%;border-bottom:1px solid #dedede;padding-bottom:13px;margin-bottom:10px}#sq_research_body .sq_searching{width:100% !important;height:30px;margin-top:10px;background:transparent url('../img/sq_searching.gif') no-repeat center}#sq_research_body #sq_keywords_research > li > div{float:left}#sq_research_body #sq_keywords_research > li > div:first-child{margin-top:7px;margin-right:5px;font-size:15px;font-weight:bold;color:green}#sq_research_body ul.sq_progressbar li{float:left;padding:0 2px}#sq_research_body input[type=text]{float:left;width:255px;padding:5px;font-size:14px;font-weight:bold;color:#333;background-color:#e2ffd6}#sq_research_body .sq_research_selectit{float:left}#sq_research_body .sq_keywords_info{margin-left:10px;display:table;width:230px}#sq_research_body #sq_research_help{clear:both}#sq_research #sq_research_close{position:absolute;background-color:#e5d8cd;right:-6px;top:-3px;font-size:13px;font-weight:bold;color:#333;width:8px;line-height:16px;padding:0px 5px 3px;border-radius:10px;-webkit-border-radius:10px;-moz-border-radius:10px;border:1px solid darkOliveGreen;cursor:pointer;z-index:2}#sq_research_body .sq_top_keywords{clear:both !important;float:none !important;width:450px !important;margin:0 auto !important;padding-top:15px}#sq_research_body .sq_top_keywords table{border-collapse:collapse}#sq_research_body .sq_top_keywords > table{position:relative;background-color:#f7f7f7;width:100%}#sq_research_body .sq_top_keywords > table{border:1px solid #D1D1D1}#sq_research_body .sq_top_keywords > table > tbody > tr{background-color:#fff}#sq_research_body .sq_top_keywords > table > tr > th,#sq_research_body .sq_top_keywords > table > tbody > tr > th,#sq_research_body .sq_top_keywords > table > tr > td,#sq_research_body .sq_top_keywords > table > tbody > tr > td{border:1px solid #f1f1f1;padding:3px 10px;color:#414141;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:1.4em}#sq_research_body .sq_top_keywords > table > tr > th{text-align:center;font-weight:bold;color:#ccc}#sq_research_body .sq_top_keywords_rank{font-size:14px;font-weight:bold;margin-left:5px}#sq_research_body .sq_top_keywords_rank strong{font-size:14px;margin:0 5px;border:1px solid red;background-color:white;border-radius:50px;-webkit-border-radius:50px;-moz-border-radius:50px;padding:3px 7px;text-shadow:1px 1px white;color:red;font-family:'Megalopolis',Arial,Helvetica,Sans-Serif;text-align:center}#sq_research_body .sq_research_showinfo{display:inline-block;background:transparent url('../img/sprite.png') no-repeat;background-position:0px -48px;margin:3px 0 0 5px;cursor:pointer;font-weight:bold;color:brown;width:25px;height:25px}#sq_research_body .sq_research_showinfo:hover{background-position:0px -71px}#sq_research_body .sq_top_keywords_info{display:none;background-color:#F7F7F7;width:220px;padding:5px;position:absolute;right:-230px;top:0px;text-align:center;border:1px solid #CCCCCC;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;box-shadow:0 0 10px 0 #999999;-moz-box-shadow:0 0 10px 0 #999999;-webkit-box-shadow:0 0 10px 0 #999999;z-index:10}#sq_research_body .sq_to_keywords_info table{margin:0 auto}#sq_research_body .sq_top_keywords_info td{border-bottom:1px dashed #D8D8D8;padding:4px 10px;color:#414141;text-align:left;font-size:12px}#sq_research_body .sq_top_keywords_info td .sq_top_keywords_rank{font-size:12px;font-weight:normal}#sq_research_body .sq_input_noback{background:transparent;border:0px}ul.sq_research_lang{position:absolute;display:block;top:4px;right:100px;width:117px;height:30px;margin-top:9px;padding:0}ul.sq_research_lang li.sq_research_lang{float:left;background:transparent url('../img/sprite.png') no-repeat;background-position:0px -48px;margin-right:5px;width:18px;height:13px;cursor:pointer}ul.sq_research_lang li.selected{border:1px solid darkgreen;border-radius:2px;margin-top:-2px;margin-left:-2px}li#sq_research_lang_us{background-position:-10px -234px}li#sq_research_lang_uk{background-position:-32px -234px}li#sq_research_lang_ca{background-position:-54px -234px}li#sq_research_lang_de{background-position:-76px -234px}li#sq_research_lang_fr{background-position:-99px -234px}li#sq_research_lang_it{background-position:-121px -234px}li#sq_research_lang_es{background-position:-143px -234px}li#sq_research_lang_ru{background-position:-209px -234px}li#sq_research_lang_br{background-position:-165px -234px}li#sq_research_lang_au{background-position:-187px -234px}
|
themes/default/css/sq_blocksearch.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
#sq_blocksearch input,#sq_blocksearch textarea,#sq_blocksearch{font-family:Arial, Helvetica, sans-serif}#sq_tinymce_inactive{padding:20px !important;font-size:16px}#sq_blocksearch ::-webkit-scrollbar{width:18px;height:15px}#sq_blocksearch ::-webkit-scrollbar-button:start:decrement,#sq_blocksearch ::-webkit-scrollbar-button:end:increment{height:1px;display:block;background-color:#EFF7FF}#sq_blocksearch ::-webkit-scrollbar-track{border-left:6px solid transparent;border-right:1px solid transparent;background-clip:padding-box}#sq_blocksearch ::-webkit-scrollbar-thumb:vertical{min-height:28px;padding-top:100px;border-left:6px solid transparent;border-right:1px solid transparent;border-top:0 solid transparent;border-bottom:0 solid transparent;background-clip:padding-box;background-color:rgba(0, 0, 0, 0.2);-webkit-box-shadow:inset 1px 1px 0 rgba(0, 0, 0, 0.1), inset 0 -1px 0 rgba(0, 0, 0, 0.07)}#sq_search_second{text-align:center}#sq_blocksearch .sq_keyword{background-color:lightslategray;position:relative;text-align:center;height:auto;width:100%;z-index:1001}#sq_blocksearch .sq_keyword #sq_keyword_help{position:absolute;background-color:brown;font-size:24px;font-weight:bold;color:white;top:-24px;left:-238px;width:204px;height:auto;padding:20px 10px;line-height:22px;border-radius:1px;-webkit-border-radius:1px;-moz-border-radius:1px;box-shadow:0px 0px 9px 0px #000;-moz-box-shadow:0 0 9px 0px #000;-webkit-box-shadow:0 0 9px 0px #000}#sq_blocksearch .sq_keyword #sq_keyword_help span{position:absolute;right:-25px;top:34px;width:0;height:0;border-top:13px solid transparent;border-bottom:9px solid transparent;border-left:25px solid brown}#sq_blocksearch .sq_keyword #sq_keyword_help p{line-height:13px;margin-top:5px;font-size:11px;color:#d1d1d1}#sq_blocksearch #sq_keyword,#sq_blocksearch #sq_keyword_second{display:inline-block;margin:16px 2px;width:85%;line-height:26px;height:30px;padding:0 5px;font-size:15px;font-weight:bold;background-color:#e2ffd6;color:darkgreen}#sq_blocksearch #sq_keyword_check,#sq_blocksearch #sq_keyword_second_check{display:inline-block;line-height:26px;width:26px;height:30px;background-color:#89e46a;font-size:15px;font-weight:bold;color:white;margin:0px;padding:0px;border:none;cursor:pointer}#sq_blocksearch .sq_search_notrelevant{line-height:30px;width:125px}.sq_search > a{display:block;width:100%;text-align:center;margin:4px auto 0 auto;padding:0;text-decoration:underline;font-size:14px;color:#21759B}#sq_blocksearch #sq_types{height:26px;padding:5px 0;background-color:#fcfcfc;box-shadow:0px 1px 3px -2px #888;-moz-box-shadow:0px 1px 3px -2px #888;-webkit-box-shadow:0px 1px 3px -2px #888}#sq_blocksearch #sq_types ul{margin:0}#sq_blocksearch #sq_types ul li{float:left;background:transparent url('../img/sprite.png') no-repeat;margin:0 0 0 17px;cursor:pointer;font-weight:bold;color:brown;width:26px;height:25px}#sq_blocksearch #sq_types #sq_type_img{background-position:0px 0px}#sq_blocksearch #sq_types #sq_type_twitter{background-position:-27px 0px}#sq_blocksearch #sq_types #sq_type_news{background-position:-137px 0px}#sq_blocksearch #sq_types #sq_type_blog{background-position:-54px 0px}#sq_blocksearch #sq_types #sq_type_wiki{background-position:-84px 0px}#sq_blocksearch #sq_types #sq_type_local{background-position:-164px 0px}#sq_blocksearch #sq_types #sq_type_img:hover{background-position:0px -25px}#sq_blocksearch #sq_types #sq_type_twitter:hover{background-position:-27px -25px}#sq_blocksearch #sq_types #sq_type_news:hover{background-position:-137px -24px}#sq_blocksearch #sq_types #sq_type_blog:hover{background-position:-54px -25px}#sq_blocksearch #sq_types #sq_type_wiki:hover{background-position:-84px -25px}#sq_blocksearch #sq_types #sq_type_local:hover{background-position:-164px -25px}#sq_blocksearch .sq_search{display:block;overflow-y:auto;max-height:310px;overflow-x:hidden;clear:both}#sq_blocksearch .sq_search ul{padding:0 0px 0 4px;margin:0;list-style:none;clear:both}#sq_blocksearch .sq_search ul li.sq_search_li{display:block;width:95%;font-size:12px;font-weight:normal;padding:5px 5px;margin:7px auto;background-color:#FFF;border:1px solid #DDD;border-radius:1px;-webkit-border-radius:1px;-moz-border-radius:1px;box-shadow:0 1px 0 #A8A8A8;-webkit-box-shadow:0 1px 0 #A8A8A8;-moz-box-shadow:0 1px 0 #A8A8A8}#sq_blocksearch .sq_search .sq_attribution{clear:both;margin:0;text-shadow:1px 1px white;height:25px}#sq_blocksearch .sq_search ul li.sq_search_li:hover .sq_attribution > ul{display:block}#sq_blocksearch .sq_search li.sq_search_li .sq_attribution > ul{display:none;background-color:#F1F1F1;height:17px;padding:2px 2px;margin:0;text-align:center;text-shadow:1px 1px white}#sq_blocksearch .sq_search li.sq_search_li .sq_attribution > ul > li{font-size:11px;font-family:"Lucida Grande",Arial, Helvetica, sans-serif;font-weight:normal;color:brown;float:left;width:66px;margin-right:5px;padding-right:5px;border-right:1px solid #CCC;cursor:pointer}#sq_blocksearch .sq_search li.sq_search_li .sq_attribution > ul > li:last-child{border-right:0px !important}#sq_blocksearch .sq_search ul .sq_info{clear:both;font-size:10px;font-family:"Lucida Grande",Arial, Helvetica, sans-serif;color:#AAA;padding:3px 0 0;float:right}#sq_blocksearch .sq_search .sq_info ul li{float:left;margin-right:5px;padding-right:5px;border-right:1px solid #CCC}#sq_blocksearch .sq_search .sq_info ul li:last-child{border-right-width:0px !important}#sq_blocksearch .sq_search ul li.sq_search_img_li{position:relative;float:left;background-color:white;width:54px;height:54px;padding:2px;margin:0 3px 6px 0;border:1px solid #BBB;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-shadow:0 0 4px #CCC;-moz-box-shadow:0 0 4px #CCC;-webkit-box-shadow:0 0 4px #CCC;transition-property:border-color;transition-duration:.33s;-moz-transition-property:border-color;-moz-transition-duration:.33s;-webkit-transition-property:border-color;-webkit-transition-duration:.33s;cursor:pointer}#sq_blocksearch .sq_search ul li.sq_search_img_li:hover{border-color:#333}#sq_blocksearch .sq_search ul li.sq_search_img_li > img{clip:rect(5px, 64px, 59px, 10px);position:absolute;margin-top:-5px;margin-left:-10px;max-height:75px}#sq_blocksearch #sq_search_img_filter{width:100%;background-color:#fcfcfc;height:22px;text-align:center;padding:4px 0px;border-top:1px solid #ccc}#sq_blocksearch #sq_search_img_filter label#sq_search_img_nolicence_label{position:relative;font-size:13px;color:#333;text-shadow:1px 1px white}#sq_blocksearch #sq_search_img_filter label span{position:absolute;display:block;width:28px;height:25px;left:-29px;top:-4px;background:transparent url('../img/sprite.png') no-repeat;background-position:-166px -47px}#sq_blocksearch #sq_search_img_filter label.checked span{background-position:-190px -47px}.sq_zoomImg_img{width:auto;height:54px}.sq_zoomImg{position:absolute;visibility:visible}.sq_zoomImg_Inner{background-color:#fff;border:1px solid #d9d9d9;-moz-box-shadow:0 4px 16px rgba(0,0,0,0.2);-webkit-box-shadow:0 4px 16px rgba(0,0,0,0.2);box-shadow:0 4px 16px rgba(0,0,0,0.2);color:#555;padding:5px;position:relative}.sq_zoomImg_frame img{border:1px solid #d9d9d9;display:block;margin:auto;max-width:115px;max-height:115px}#sq_blocksearch .sq_search li.sq_search_img_li .sq_attribute{position:absolute;font-family:Arial, sans-serif;font-size:8px;color:#999;bottom:-3px;right:-3px;background:white;border:grey;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;z-index:1;padding:0 5px}#sq_blocksearch .sq_search ul li.search_category{clear:both;font-size:14px;color:#464646;width:100%;height:16px;border:none}#sq_blocksearch .sq_search ul li.sq_search_twitter_li .sq_author_avatar{float:left;width:36px;height:36px;margin:3px 10px 0 0px}#sq_blocksearch .sq_search ul li.sq_search_twitter_li .sq_quote_content{font-size:10px;margin-left:46px}#sq_blocksearch .sq_search ul li.sq_search_twitter_li .sq_quote_author{color:#555;font-size:12px;line-height:15px}#sq_blocksearch .sq_search ul li.sq_search_twitter_li .sq_author_name{line-height:17px;margin-right:5px;color:#555;font-size:12px;font-weight:normal;text-align:left}#sq_blocksearch .sq_search ul li.sq_search_twitter_li .sq_quote_text{margin-left:0}#sq_blocksearch .sq_search ul li.sq_search_blog_li .sq_news_title{font-size:12px;font-weight:700;color:#333;line-height:18px;margin:0 0 5px 0}#sq_blocksearch .sq_search ul li.sq_search_blog_li .sq_news_text{font-size:12px;color:#333;line-height:15px;text-align:left}#sq_blog_preview{position:relative;border:1px solid #e5e5e5;padding:0px;margin-bottom:15px;background-color:#fcfcfc}#sq_blog_preview:before{display:block;border:none;content:" ";background:transparent url('../img/sprite.png') repeat-x;background-position:0 -361px;width:100%;height:5px;border-radius:2px 2px 0 0;opacity:0.3}#sq_blog_preview #sq_blog_preview_partner{position:absolute;top:15px;right:20px}#sq_blog_preview #sq_blog_preview_partner a{background-color:#333;text-decoration:none;color:white;font-size:22px;font-weight:bold;margin-left:5px;padding:0 3px;border:1px solid #333}#sq_blog_preview #sq_blog_preview_title{display:block;font-size:18px;font-weight:normal;line-height:30px;color:#333;border-bottom:1px dashed #d1d1d1;margin:0 0 10px 0;padding:10px 0 20px 10px;height:16px}#sq_blog_preview #sq_blog_preview_body{display:block;font-size:12px;color:#333;line-height:16px;text-align:left;padding:0 0 0 10px;max-height:300px;overflow-y:auto;overflow-x:hidden}#sq_blog_preview #sq_blog_preview_body p{position:relative;background-color:transparent;font-family:'PT Serif', Arial, Helvetica, sans-serif;font-size:14px;color:#1F0909;font-weight:normal;line-height:24px;padding:0;margin:0;margin-bottom:16px;text-align:left;white-space:normal;color:#333333}#sq_blog_preview #sq_blog_preview_body .sq_mark{background-color:#FFED5F;color:black;padding:0 3px 0;font-size:14px;line-height:20px;box-shadow:0 0 5px #FFF6AC;-moz-box-shadow:0 0 5px #FFF6AC;-webkit-box-shadow:0 0 5px #FFF6AC}#sq_blog_preview #sq_blog_preview_body .sq_blog_option{position:absolute;display:none;background-color:#f5f5f5;font-size:11px;color:red;bottom:0px;right:5px;cursor:pointer;z-index:1}#sq_blog_preview #sq_blog_preview_body p:hover{background-color:#f5f5f5}#sq_blog_preview #sq_blog_preview_body p:hover .sq_blog_option{display:block;-webkit-animation:fadeIn 0.3s;-moz-animation:fadeIn 0.3s;-ms-animation:fadeIn 0.3s}#sq_blocksearch{position:relative}#sq_blocksearch .sq_search ul li.sq_search_wiki_li .sq_wiki_title{font-size:12px;font-weight:700;color:#333;line-height:18px;margin:0 0 5px 0}#sq_blocksearch .sq_search ul li.sq_search_local_li .sq_local_title{font-size:12px;font-weight:700;color:#333;line-height:18px;margin:0 0 5px 0}#sq_blocksearch #sq_suggestion,#sq_blocksearch #sq_suggestion_help{clear:both;display:table;position:relative;background-color:white;width:100% !important;height:75px;padding:10px 0 10px 0}#sq_blocksearch .sq_gsuggestion_height{height:175px !important}#sq_blocksearch #sq_suggestion .sq_gsuggestion{margin:0;padding:0}#sq_blocksearch #sq_suggestion .sq_gsuggestion .sq_item_gsuggestion{clear:both;float:none;height:auto;line-height:13px;font-size:12px;font-weight:bold;color:#2c6e2c;text-align:left;cursor:pointer;margin:0;padding:6px 12px}#sq_blocksearch #sq_suggestion .sq_gsuggestion .sq_item_active{background-color:#f1f1f1}#sq_blocksearch #sq_suggestion ul li{height:20px;font-size:13px;float:left;text-align:center}#sq_blocksearch #sq_suggestion input#sq_selectit{width:200px;background-color:#1cab09;font-size:12px;font-weight:bold;color:white;margin:10px auto 0 auto;padding:5px;position:relative;text-shadow:1px 1px #555;cursor:pointer}#sq_blocksearch #sq_suggestion ul li span{display:inline-block;height:20px;font-weight:bold;margin-left:5px}#sq_blocksearch #sq_suggestion_help{height:60px}#sq_blocksearch #sq_suggestion_help ul li{height:20px;text-align:center;color:darkGreen;font-size:14px;font-weight:bold}#sq_blocksearch #sq_suggestion_help ul li.sq_research_link,#sq_suggestion .sq_research_link{font-size:13px;font-weight:bold;color:#21759B;margin-top:5px;text-decoration:underline;text-align:center;cursor:pointer;text-decoration:none}#sq_blocksearch .sq_keyword #sq_suggestion_rank{margin-top:-5px}#sq_blocksearch #sq_suggestion ul.sq_progressbar{height:15px;line-height:18px;padding:0;margin:0 auto;width:250px}#sq_blocksearch #sq_suggestion ul.sq_progressbar li:nth-child(1n){width:50px;text-align:right;color:red}#sq_blocksearch #sq_suggestion ul.sq_progressbar li:nth-child(2n){width:132px}#sq_blocksearch #sq_suggestion ul.sq_progressbar li:nth-child(3n){width:50px;text-align:left;color:darkgreen}#sq_blocksearch #sq_suggestion ul.sq_smalldetails{clear:both;width:220px;margin:0 auto 10px auto}#sq_blocksearch #sq_suggestion ul.sq_smalldetails li{height:15px;font-size:10px;color:gray;margin:0 4px;padding:0;float:none}#sq_blocksearch #sq_suggestion div.sq_smalldetails{width:240px;margin:0 auto;font-size:11px;font-weight:bold;color:brown;text-align:center}#sq_blocksearch #sq_suggestion .sq_keywords_info{display:table;width:230px}#sq_blocksearch #sq_suggestion .sq_keywords_info{clear:both;width:190px;z-index:1;background-color:#F7F7F7;border:1px solid #CCC;padding:5px;margin:0 auto;text-align:center;border-radius:1px;-webkit-border-radius:1px;-moz-border-radius:1px}#sq_blocksearch #sq_suggestion .sq_keywords_info table{margin:0 auto}#sq_blocksearch #sq_suggestion .sq_keywords_info td{border-bottom:1px dashed #D8D8D8;padding:4px 10px;color:#414141;font-size:14px;text-align:left;font-family:Arial, Helvetica, sans-serif;font-size:12px;line-height:1.4em}#sq_blocksearch #sq_suggestion_close,#sq_blocksearch #sq_search_close,#sq_blog_preview #sq_blog_preview_close{position:absolute;background-color:#f1f1f1;right:-6px;top:-3px;font-size:13px;font-weight:bold;color:#333;width:8px;line-height:16px;padding:0px 5px 3px;border-radius:10px;-webkit-border-radius:10px;-moz-border-radius:10px;border:1px solid darkOliveGreen;cursor:pointer;z-index:2}#sq_blocksearch #sq_search_close{top:-13px}#sq_blocksearch .sq_show_mgs{clear:both;display:block;padding:7px;margin-top:10px;border-top:1px dashed #D1D1D1}#sq_suggestion .sq_show_mgs{max-width:200px;margin:20px auto 0 auto;border-top:none}#sq_suggestion .sq_searching{width:100% !important;margin-top:30px;background:transparent url('../img/sq_searching.gif') no-repeat center;background-size:180px auto}#sq_blocksearch .sq_more{clear:both;position:relative;width:100%;height:17px;text-align:center;padding:0;margin:0;margin-bottom:5px}#sq_blocksearch .sq_more span{display:block;width:0;height:0;border-left:20px solid transparent;border-right:20px solid transparent;border-top:12px solid green;padding:0;margin:0 auto;cursor:pointer}#publishing-action{float:left !important;width:100%}#sq_publish_alert{text-align:left;font-size:12px;font-weight:bold;color:red;text-shadow:1px 1px white;margin:0 0 5px 0;padding:0}#sq_publish_alert #sq_publish_alert_yes{display:block;float:left;clear:both;margin:7px 0px 0 8px;padding:6px 35px;font-size:12px;font-weight:bold;color:white;cursor:pointer;background-color:#1cab09;text-shadow:1px 1px #555;background:-moz-linear-gradient(top, #1cab09, darkgreen);background:-webkit-gradient(linear, left top, left bottom, from(#1cab09), to(darkgreen));border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px}#sq_publish_alert #sq_publish_alert_yes:hover{border:1px solid #777;margin:6px -1px -1px 7px}#sq_subscription{font-size:13px;font-weight:bold;color:red;padding:0px !important;text-align:center;width:275px;margin:0 auto 15px auto;background-color:#fff;box-shadow:0px 0px 6px 0px #888;-moz-box-shadow:0px 0px 6px 0px #888;-webkit-box-shadow:0px 0px 6px 0px #888}#sq_subscription .sq_renew{padding:10px;line-height:20px}#sq_subscription .sq_renew a{display:block;font-size:16px;background-color:green;color:white;font-weight:bold;margin:10px;padding:6px;text-decoration:none;border-radius:7px}#sq_subscription > a{display:block;margin:0;padding:0;height:300px}#sq_options_feedback .sq_options_feedback_popup li{clear:both}#sq_facebook_b{padding:6px 0;clear:both}#sq_facebook_b > span{display:block;float:left;font-weight:bold;color:darkgreen}#sq_facebook_b .sq_facebook_title{width:100%;font-size:16px;text-align:center;margin:5px auto}#sq_facebook_b .sq_facebook_image{width:100px;margin:3px 7px 5px 24px}#sq_facebook_b .sq_facebook_image img{width:100px}#sq_facebook_b .sq_facebook_frame{margin-top:35px}#sq_coupon{position:relative;background-image:none;background-color:#ED6612;border:2px solid #F1F2F4;border-radius:5px;padding:0px;margin:0 0 10px 0;background-color:#F3F8FD;height:auto;width:100%}#sq_coupon #sq_coupon_close{position:absolute;background-color:#E5D8CD;right:-6px;top:-3px;font-size:13px;font-weight:bold;color:#333;line-height:16px;width:8px;height:12px;padding:0px 5px 6px;border-radius:10px;border:1px solid darkOliveGreen;cursor:pointer;z-index:2}
|
themes/default/css/sq_blockseo.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
#sq_blockseo{position:relative}#sq_blockseo .sq_overlay{position:absolute;width:100%;background-color:#333;text-align:center;margin-bottom:0;vertical-align:middle;opacity:0.6;z-index:2;line-height:0;bottom:0;top:1px;text-shadow:2px 2px black;cursor:pointer}#sq_blockseo input,#sq_blockseo textarea #sq_blockseo{font-family:Arial, Helvetica, sans-serif}#sq_blockseo .sq_tasks{padding:2px 5px}#sq_blockseo .sq_tasks .sq_help{display:none}#sq_blockseo .sq_tasks ul li{position:relative;display:block;width:81%;background-color:#fff;font-family:"Lucida Grande",Arial, Helvetica, sans-serif;font-size:11px;font-weight:normal;padding:5px 40px 5px 5px;margin:5px auto;box-shadow:0px 0px 2px 0px #888;-moz-box-shadow:0px 0px 2px 0px #888;-webkit-box-shadow:0px 0px 2px 0px #888}#sq_blockseo .sq_tasks ul li.sq_tasks_category{color:#999;background-color:transparent;padding:0;margin:13px 0px 0 0 !important;border:0px !important;box-shadow:none !important;-moz-box-shadow:none !important;-webkit-box-shadow:none !important}#sq_blockseo .sq_tasks ul li.checked{background-color:#1ebd09;color:white;text-shadow:1px 1px #777}#sq_blockseo .sq_tasks ul li .sq_seo_priority{display:none;position:absolute;height:25px;width:30px;right:23px;top:4px}#sq_blockseo .sq_tasks ul li .sq_seo_locked{background:transparent url(../img/sprite.png) no-repeat;background-position:-87px -50px;display:block;position:absolute;height:20px;width:20px;right:23px;top:4px;cursor:pointer}#sq_blockseo .sq_tasks ul li .sq_seo_priority_essential{background:transparent url(../img/sprite.png) no-repeat;background-position:-45px -49px;cursor:pointer}#sq_blockseo .sq_tasks ul li .arrow:after{content:none;background-color:transparent}#sq_blockseo .sq_tasks ul li .arrow{display:block;position:absolute;background:transparent url(../img/sprite.png) no-repeat;background-position:-146px -76px;right:5px;top:6px;bottom:auto;left:auto;height:16px;width:16px;overflow:visible;z-index:1;cursor:pointer}#sq_blockseo .sq_tasks ul li.checked .arrow{background-position:-121px -76px}#sq_blockseo .sq_tasks ul li .arrow:hover{background-position:-146px -76px;z-index:2}#sq_blockseo .sq_tasks ul li .arrow:hover .sq_help{display:table;position:absolute;background:#737373;font-weight:normal;font-size:12px;color:#F9F9F9;left:-240px;top:28px;height:50px;width:250px;padding:10px 5px;overflow:hidden;z-index:5;border:1px solid #CCC;border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;text-shadow:1px 1px black}#sq_blockseo .sq_tasks ul li.sq_density_high,#sq_blockseo .sq_tasks ul li.sq_density_title_high,#sq_blockseo .sq_tasks ul li.sq_over_density_high{background-color:red !important;color:white !important}#sq_blockseo .sq_tasks ul li.sq_locked{color:lightgray;background-color:#F8F8F8}#sq_blockseo .sq_error{padding:15px}body ul.sq_notification{position:fixed;background-color:#47BD09;text-align:center;width:100%;height:auto;top:28px;padding:0;margin:0;list-style:none !important;box-shadow:0px 0px 11px 0px #000;-moz-box-shadow:0px 0px 11px 0px #000;-webkit-box-shadow:0px 0px 11px 0px #000;z-index:100001}body ul.sq_notification_front{z-index:100002}body ul.sq_density_high,body ul.sq_density_title_high{background-color:red !important}body ul.sq_density_high li,body ul.sq_density_title_high li{color:white !important}body ul.sq_density_low,body ul.sq_density_title_low{background-color:red !important}body ul.sq_density_low li,body ul.sq_density_title_low li{color:white !important}body ul.sq_notification li{position:relative;font-family:"Lucida Grande",Arial, Helvetica, sans-serif;font-size:15px;font-weight:normal;color:white;text-shadow:1px 1px #777;line-height:16px;list-style:none !important;width:380px;height:auto;margin:0 auto;padding:10px 0 10px 0px;text-align:left}body ul.sq_notification li .arrow{position:absolute;top:8px;left:-33px;width:25px;height:25px;float:left;margin:0px 10px 0 0;background:transparent url('../img/sprite.png') no-repeat;background-position:-140px -49px}body ul.sq_notification li .arrow::after{background-color:transparent !important}body ul.sq_complete{position:fixed;background-color:#47BD09;text-align:center;width:100%;height:auto;top:28px;padding:0;margin:0;list-style:none !important;box-shadow:0px 0px 11px 0px #000;-moz-box-shadow:0px 0px 11px 0px #000;-webkit-box-shadow:0px 0px 11px 0px #000;z-index:100003}body ul.sq_complete li{position:relative;font-family:"Lucida Grande",Arial, Helvetica, sans-serif;font-size:15px;font-weight:normal;color:white;text-shadow:1px 1px #777;line-height:16px;list-style:none !important;width:380px;height:auto;margin:0 auto;padding:45px 0;text-align:left}body ul.sq_complete li span{background:transparent url('../img/complete.png') no-repeat;background-size:90px;position:absolute;top:0px;left:-110px;width:92px;height:92px;float:left;margin:5px 10px 0 0}@media only screen and (max-width: 850px){#sq_blockseo .sq_tasks ul li{width:92%}#sq_blocksearch #sq_keyword,#sq_blocksearch #sq_keyword_second{width:94%}#sq_blocksearch .sq_search ul li.sq_search_img_li{margin:0 2px 9px 20px;padding:6px}}#sq_snippet #sq_snippet_ul li#sq_snippet_reset{background-color:#F1F1F1 !important;font-weight:normal;border:1px solid #999;color:#777;text-shadow:none}.sq_request_synonyms{color:lightcoral;text-decoration:underline;cursor:pointer}.sq_request_synonyms_oo{color:lightcyan;text-decoration:underline;cursor:pointer}#titlediv #sq_wp_title_suggestion:before{display:block;content:" ";background:transparent url('../img/sprite.png') repeat-x;background-position:0 -360px;width:100%;height:5px;border-radius:2px 2px 0 0;opacity:0.3}#titlediv #sq_wp_title_suggestion:hover:before{opacity:0.8}#titlediv #sq_wp_title_suggestion,#titlediv #sq_wp_title_suggestion_help{clear:both;display:table;position:relative;background-color:white;width:100%;height:50px;padding:0px 0;margin:9px 0 0 0}#titlediv #sq_wp_title_suggestion #sq_wp_title_name{position:absolute;right:20px;top:-8px;background-color:linen;border:1px solid #ddd;font-size:10px;padding:0px 10px}#titlediv .sq_gsuggestion_height{height:175px !important}#titlediv #sq_wp_title_suggestion .sq_show_mgs{display:block;line-height:50px}#titlediv #sq_wp_title_suggestion .sq_gsuggestion{margin:5px 0;padding:0}#titlediv #sq_wp_title_suggestion .sq_gsuggestion .sq_item_gsuggestion{clear:both;float:none;height:auto;line-height:20px;font-size:14px;font-weight:bold;color:#999;text-align:left;cursor:pointer;margin:0;padding:6px 12px}#titlediv #sq_wp_title_suggestion .sq_gsuggestion .sq_item_active{background-color:#f1f1f1}#titlediv #sq_wp_title_suggestion ul li{height:20px;font-size:13px;float:left;text-align:center}#titlediv #sq_wp_title_suggestion input#sq_selectit{width:200px;background-color:#1cab09;font-size:12px;font-weight:bold;color:white;margin:10px auto 0 auto;padding:5px;position:relative;text-shadow:1px 1px #555;cursor:pointer}#titlediv #sq_wp_title_suggestion ul li span{display:inline-block;height:20px;font-weight:bold;margin-left:5px}#titlediv #sq_wp_title_suggestion #sq_title_suggestion_close{position:absolute;background-color:#f1f1f1;right:-6px;top:-6px;font-size:13px;font-weight:bold;color:#333;width:8px;line-height:16px;padding:0px 5px 3px;border-radius:10px;-webkit-border-radius:10px;-moz-border-radius:10px;border:1px solid darkOliveGreen;cursor:pointer;z-index:2}
|
themes/default/css/sq_frontend.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
.sq_quote_content,.sq_blog_content,.sq_wiki_content,.sq_local_content{position:relative;clear:both;background:white;font-size:14px;color:#333;max-width:500px;margin:5px auto 5px auto;padding:13px;-webkit-transition:.1s border-color;-moz-transition:.1s border-color;transition:.1s border-color;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;border:1px solid #DDD;-webkit-box-shadow:0 1px 0 #DDD;-moz-box-shadow:0 1px 0 #ddd;box-shadow:0 1px 0 #DDD}.sq_quote_content p{line-height:0px !important;margin:0px !important;padding:0px !important}.sq_author_avatar{display:block;float:left;width:48px;height:48px;padding:1px;margin:0;border:1px solid #DDD}.sq_quote_text{margin-left:62px;line-height:1.5em;padding-left:21px;background:url("../img/avatar-margin.png") left top no-repeat;min-height:52px;font-family:"Georgia",serif;font-size:16px}.sq_blog_content p{line-height:0px !important;margin:0px !important;padding:0px !important}a.sq_news{display:block;font-family:"Helvetica",sans-serif;font-weight:700;color:#0074B7;font-size:14px;line-height:1.4em;margin-bottom:5px;text-decoration:none}.sq_news_text{font-size:12px;color:#333}.sq_wiki_content p{line-height:0px !important;margin:0px !important;padding:0px !important}a.sq_wiki{display:block;font-family:"Helvetica",sans-serif;font-weight:700;color:#0074B7;font-size:14px;line-height:1.4em;margin-bottom:5px;text-decoration:none}.sq_wiki_text{font-size:12px;color:#333}.sq_local_content p{line-height:0px !important;margin:0px !important;padding:0px !important}a.sq_local{display:block;font-family:"Helvetica",sans-serif;font-weight:700;color:#0074B7;font-size:14px;line-height:1.4em;margin-bottom:5px;text-decoration:none}.sq_local_text{font-size:12px;color:#333}
|
themes/default/css/sq_global.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
.sq_message{line-height:19px;padding:0px 0;font-size:13px;text-align:center;margin:-1px 15px 0 5px;border-width:1px;border-style:solid;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;background-color:#FFFBCC;border-color:#E6DB55}.sq_notices{font-size:13px;color:#555}.sq_error{font-size:13px;color:#555;width:99% !important}.sq_loading{height:60px;background:transparent url('../img/loading.gif') no-repeat center}.sq_minloading{height:20px;width:20px;background:transparent url('../img/minloading.gif') no-repeat center}#sq_preloading{text-align:center;font-size:14px;color:gray}.sq_error{text-align:center;font-size:14px;font-weight:bold;color:brown;margin:5px 0}.sq_beta{font-size:11px;color:darkRed;vertical-align:top;line-height:16px;display:inline-block;margin:0 0 0 5px;border:1px solid darkRed;padding:0 3px}.sq_tooltip{display:inline;position:relative}.sq_tooltip:hover:after{background:#333;background:rgba(0,0,0,.8);border-radius:5px;bottom:26px;color:#fff;font-size:14px;content:attr(title);left:20%;padding:5px 15px;position:absolute;z-index:98;width:250px}.sq_tooltip:hover:before{border:solid;border-color:#333 transparent;border-width:6px 6px 0 6px;bottom:20px;content:"";left:30px;position:absolute;z-index:99}#sq_settings #sq_snippet{max-width:550px}#sq_settings #sq_snippet #sq_snippet_ul{min-height:65px}#sq_snippet{position:relative;margin:20px 0;position:relative;margin:20px 1px;box-shadow:0px 1px 2px -1px #444;-moz-box-shadow:0px 1px 2px -1px #444;-webkit-box-shadow:0px 1px 2px -1px #444}#sq_snippet:before{display:block;content:" ";background:transparent url('../img/sprite.png') repeat-x;background-position:0 -360px;width:100%;height:5px;border-radius:2px 2px 0 0;opacity:0.3}#sq_snippet:hover:before{opacity:0.8}#sq_snippet #sq_snippet_ul{background-color:white;width:auto;padding:15px;margin:0 0 20px 0}#sq_snippet #sq_snippet_ul li{font-family:arial, sans-serif;font-size:13px;font-weight:normal;line-height:10px;margin:0;padding:0}#sq_snippet #sq_snippet_ul li#sq_snippet_update,#sq_snippet #sq_snippet_ul li#sq_snippet_customize,#sq_snippet #sq_snippet_ul li#sq_snippet_reset{background-color:green;min-width:40px;height:10px;color:white;font-size:12px;font-weight:bold;text-shadow:1px 1px #333;box-shadow:1px 1px 0px 0px white;border:1px solid green;border-radius:5px;padding:7px 8px;cursor:pointer;float:right;margin:13px 3px;text-align:center}#sq_settings #sq_snippet #sq_snippet_ul li#sq_snippet_update{margin:1px}#sq_snippet #sq_snippet_ul #sq_snippet_title,#sq_snippet #sq_snippet_ul #sq_snippet_title_value{color:#12c;text-decoration:none;cursor:pointer;line-height:16px;font-size:14px;font-weight:normal}#sq_snippet #sq_snippet_ul #sq_snippet_title{max-width:450px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}#sq_snippet #sq_snippet_ul #sq_snippet_title_value{max-width:480px}#sq_snippet #sq_snippet_ul #sq_snippet_title_value input{font-size:12px;width:410px;height:20px;margin:2px 0;background-color:lightgoldenrodyellow}#sq_snippet #sq_snippet_ul #sq_snippet_url,#sq_snippet #sq_snippet_ul #sq_snippet_url a{color:#093;height:16px;line-height:14px;overflow:visible;text-decoration:none}#sq_snippet #sq_snippet_ul #sq_snippet_description,#sq_snippet #sq_snippet_ul #sq_snippet_description_value{color:#222;font-size:12px;line-height:16px;margin-top:4px;max-width:480px;overflow:hidden}#sq_snippet #sq_snippet_ul #sq_snippet_description_value textarea{font-size:12px;width:410px;height:40px;margin:2px 0;background-color:lightgoldenrodyellow}#sq_snippet #sq_snippet_name{position:absolute;right:0;top:-8px;background-color:linen;border:1px solid #ddd;font-size:10px;padding:0px 10px}#sq_snippet #sq_snippet_disclaimer{position:absolute;left:0;bottom:-17px;color:#999;font-size:10px;padding:0px 3px}#sq_snippet #sq_snippet_ul #sq_snippet_source{position:absolute;bottom:1px;right:2px}#sq_snippet #sq_snippet_ul #sq_snippet_source a{font-size:10px;color:lightslategray;text-decoration:none}#sq_snippet .sq_meta_info{display:inline-block;font-size:11px;color:gray;margin:4px 3px;vertical-align:top}#sq_snippet #sq_snippet_ul li#sq_snippet_keywords{margin:10px 0 0 0;color:blue;font-size:10px;cursor:pointer}@media only screen and (max-width: 1024px){#sq_snippet #sq_snippet_ul #sq_snippet_title{clear:both}}
|
themes/default/css/sq_menu.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
#sq_settings{font-family:Arial, sans-serif;position:relative}#sq_settings .sq_icon{display:block;float:left;margin:10px 11px 0 0;height:40px;width:33px;background:transparent url('../img/sprite.png') no-repeat;background-position:-47px -155px}#sq_settings #sq_settings_title{font-size:36px;font-weight:normal;line-height:49px;color:#333;margin:0 15px 3px 0;padding-top:5px;padding-bottom:0px;height:auto;vertical-align:bottom}#sq_settings #sq_settings_title a,#sq_settings #sq_settings_title input{display:block;float:left;font-size:15px;font-weight:bold;color:white;background-color:green;border:1px solid white;line-height:25px;padding:5px 10px;margin:6px 0 0 0px;text-decoration:none;cursor:pointer}#sq_settings #sq_goto_newpost,#sq_settings #sq_goto_dashboard,#sq_settings #sq_settings_title #sq_goto_newpost,#sq_settings #sq_settings_title #sq_goto_dashboard{display:inline-block;background-color:#FFF;line-height:35px;color:#504310;font-size:15px;text-shadow:0.1em 0.1em #FFFF52;background:#FFD424;cursor:pointer;border:1px solid #F7A504;font-weight:bold;padding:0px 10px;margin:6px 0 5px 6px;width:250px;text-align:center;text-decoration:none}#sq_settings #sq_goto_newpost,#sq_settings #sq_goto_dashboard{display:block;font-size:18px;height:20px;margin:6px auto;padding:5px 10px;height:35px}#sq_settings #sq_login_success{text-align:center;font-size:18px;padding:14px 0;margin:15px auto;color:#008000}#sq_settings #sq_login_success img{margin:30px auto 8px auto}#sq_settings #sq_login_success ul{padding:0;margin:0}#sq_settings #sq_login_success li{text-align:left;font-size:13px;padding:10px;margin:0 7px}#sq_settings_login{width:100% !important}#sq_settings_login #sq_blocklogin label{width:80px}#sq_settings_login .sq_box{max-width:540px;min-width:500px;background:#f0f0f0 url('../img/settings_login.jpg') 0px 0px no-repeat;border:1px solid #ddd;font-size:1.1em;margin:70px auto;padding:1em;font-family:Arial,Verdana,Helvetica,sans-serif;box-shadow:0 5px 9px -5px #222;text-align:center}#sq_settings_login .sq_login_done{background:#f0f0f0 url('../img/settings_login_done.jpg') 0px 0px no-repeat}#sq_settings_login .sq_box .sq_header{color:#11a5c1;font-size:28px;font-weight:bold;margin:0;padding:5px 0;line-height:29px;text-shadow:1px 2px white}#sq_settings_login .sq_login_done .sq_header{font-size:24px}#sq_settings_login #sq_blocklogin ul li{width:500px !important}#sq_settings_login #sq_blocklogin ul li input[type=text],#sq_settings_login #sq_blocklogin ul li input[type=password]{min-width:250px}#sq_settings_login #sq_blocklogin #sq_register_email{width:500px}#sq_settings_login #sq_blocklogin #sq_register_email input[type=text]{min-width:250px}#sq_settings .sq_settings_affiliate_bigtitle{font-size:26px !important;margin:0;padding:5px 0}#sq_settings .sq_settings_affiliate_bigbutton{margin-bottom:35px;text-align:center}#sq_settings .sq_settings_affiliate_bigbutton input{padding:15px !important;font-size:18px !important;cursor:pointer}#sq_settings .sq_settings_affiliate_bigbutton span{display:block;font-size:18px;color:green;font-weight:bold;margin:20px 0 0 0}#sq_settings .sq_settings_affiliate_info{margin-bottom:35px}#sq_settings .sq_settings_affiliate_info li{margin-left:16px;font-weight:bold;font-size:14px;line-height:20px}#sq_settings .sq_affiliate_banner{display:block;margin-bottom:20px;font-weight:normal;font-size:12px;line-height:20px}#sq_settings .sq_settings_info{text-align:left}#sq_settings #sq_settings_howto{font-family:'Segoe UI', Arial, sans-serif;position:relative;background:#ED6612 url('../img/settings_howto.jpg') 24px 13px no-repeat;border:2px solid #F1F2F4;padding:10px;margin:10px auto 20px auto;background-color:#F3F8FD;height:450px;width:740px}#sq_settings #sq_settings_howto #sq_settings_howto_title{display:block;width:100%;font-size:28px;font-weight:bold;line-height:39px;color:#11A5C1;margin:0 0 10px 0;padding-bottom:5px;text-align:center;text-shadow:1px 1px white;height:auto}#sq_settings #sq_settings_howto #sq_settings_howto_body{display:table;font-size:20px;line-height:27px;color:#A8A8A8;padding:25px 0;text-shadow:1px 1px white}#sq_settings #sq_settings_howto #sq_settings_howto_body p{float:left;width:243px;margin:0 18px;text-align:left}#sq_settings #sq_settings_howto #sq_settings_howto_body p span{display:block;font-size:30px;color:#333;line-height:42px}#sq_settings #sq_settings_howto #sq_settings_button{display:block;text-align:center;float:right;font-size:17px;font-weight:bold;color:white;background:#ED6612 url('../img/settings_edit.png') 5px 7px no-repeat;border:1px solid #D45C14;margin:10px 75px;padding:5px 15px 5px 34px;text-decoration:none;text-shadow:1px 1px #BF4509}#sq_settings #sq_settings_title #sq_settings_howto_close{display:inline-block;font-size:12px;color:blue;font-weight:normal;line-height:30px;cursor:pointer}#sq_settings .sq_user_title{color:#1d9ed4 !important;font-size:26px;margin:0;padding:5px 0 !important;text-align:left}#sq_settings #sq_user_stats_list li{margin:0;padding:3px 0 3px 24px;line-height:25px;font-size:14px}#sq_settings #sq_user_stats_list li strong{color:green;font-size:16px}#sq_settings #sq_user_info .sq_settings_info{color:#333;padding-top:15px;text-align:left}#sq_settings #sq_user_info .sq_settings_info a{font-weight:bold}#sq_settings #sq_user_info .sq_button a{clear:both;display:block;float:right;font-size:15px;font-weight:bold;color:white;background-color:green;border:1px solid white;line-height:25px;padding:5px 10px;margin:20px 0 0 20px;text-decoration:none;text-shadow:1px 1px #333;cursor:pointer}#sq_settings #sq_userinfo{color:#333;font-size:14px;font-weight:normal;min-height:500px;margin:0 15px 5px 0;padding:0px;text-shadow:1px 1px white}#sq_settings #sq_userinfo li{padding:10px}.sq_userinfo fieldset{float:none !important}.sq_userinfo fieldset > div{width:auto !important}#sq_settings #sq_settings_body{display:block;font-size:12px;color:#333;line-height:16px;text-align:left;margin-top:20px}#sq_settings_body #sq_settings_left,#sq_settings_body #sq_settings_right{float:left}#sq_settings_body #sq_settings_submit{clear:both}#sq_settings_body fieldset{float:left;clear:both;width:900px;background:#fcfcfc;border:1px solid #ddd;font-size:1.1em;margin:10px auto;padding:0;font-family:Arial,Verdana,Helvetica,sans-serif;text-shadow:1px 1px white;box-shadow:0 5px 9px -6px #222}#sq_settings_body fieldset > div{float:left;padding:20px 0 0 0px;width:550px}#sq_settings_body fieldset legend{float:left;width:280px;height:300px;background:#161a16 repeat-x top left;border:none;font-weight:normal;font-size:14px;margin:0 10px 0 0;padding:25px;line-height:20px;text-align:left;color:#fff;text-shadow:none}#sq_settings_body fieldset legend.sq_legend_big{height:810px}#sq_settings_body fieldset legend > span{display:block;font-size:13px;color:#ccc;margin:25px 0 10px 0;clear:both;text-shadow:1px 1px #000}#sq_settings_body fieldset legend .sq_legend_title{font-weight:lighter;color:#f9f9f9;font-size:23px;line-height:30px;margin-top:0}#sq_settings_body fieldset legend > span a{color:#5dabcf;font-size:14px;font-weight:normal;text-decoration:none}#sq_settings_body fieldset legend .sq_option_content{width:123px;margin:0 auto}#sq_settings_body span.sq_settings_info{clear:both;display:block;font-size:10px;padding-right:10px;width:100%;text-align:right}#sq_settings_body ul.sq_settings_info > span{display:block;color:#777;font-size:16px;font-weight:bold;margin-bottom:22px;list-style:none}#sq_settings_body ul.sq_settings_info li{margin:17px 10px;font-size:11px;font-weight:normal;color:#777}#sq_settings_body fieldset p{vertical-align:top;margin:5px 0 5px 0;padding:0 0 0.5em 0;font-weight:normal;font-size:15px}#sq_settings_body fieldset .withborder{clear:both;vertical-align:top;min-height:40px;margin:7px 0 10px 0;padding:0 0 10px 0;font-weight:normal;font-size:12px;border-bottom:1px dashed #CCC}#sq_settings_body fieldset .withbordertop{border-top:1px dashed #CCC;padding-top:15px}#sq_settings_body fieldset .withcode{min-height:85px}#sq_settings_body fieldset .withcode strong{display:block;font-size:10px;color:#333;margin-left:15px;margin-top:10px}#sq_settings_body fieldset .withcode input[type=text]{width:170px;font-size:10px;margin:0;border:1px solid green}#sq_settings_body fieldset #sq_twitter_account{display:block;font-weight:bold;font-size:13px;color:darksalmon;margin:15px auto;width:350px}#sq_settings_body fieldset .sq_icon{display:block;float:left;background:transparent url('../img/sprite.png') no-repeat;margin:0 10px 0 0;color:brown;width:55px;height:50px}#sq_settings_body fieldset .sq_icon_googleplus{background-position:-221px -100px}#sq_settings_body fieldset .sq_icon_googlewt{background-position:-112px -100px}#sq_settings_body fieldset .sq_icon_googleanalytics{background-position:0px -100px}#sq_settings_body fieldset .sq_icon_facebookinsights{background-position:-59px -100px}#sq_settings_body fieldset .sq_icon_bingwt{background-position:-165px -100px}#sq_settings_body fieldset .sq_icon_alexat{background-position:-270px -100px}#sq_settings_body fieldset p input,#sq_settings_body fieldset p textarea{margin-left:15px;padding:4px;border:1px solid green;max-width:415px}#sq_settings_body input[type=submit]{font-size:15px;font-weight:bold;line-height:30px;padding:1px 10px;margin-left:11px;margin-top:5px;background-color:green;border:none;color:white}#sq_settings_body .customize,#sq_settings_body ._customize{font-size:12px;font-weight:bold;color:blue;cursor:pointer}#sq_settings_body ._customize{margin-top:10px}#sq_settings_body .sq_custom_title legend{height:415px}@media only screen and (max-width: 1800px){#sq_settings_body #sq_settings_left,#sq_settings_body #sq_settings_right{float:none}#sq_settings_body #sq_settings_left fieldset,#sq_settings_body #sq_settings_right fieldset{margin:10px auto 20px auto}}.sq_option_content{clear:both;padding:6px 0;height:30px}.sq_option_content > span{position:relative;padding-top:3px;display:block;vertical-align:middle;line-height:16px;font-size:12px;text-shadow:1px 1px #FFF}.sq_switch{float:left;position:relative;margin:0px 9px 0 0;height:26px;width:120px;border:1px solid #e2ffd6;background:rgba(0, 0, 0, 0.25);-webkit-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.3), 0 1px rgba(255, 255, 255, 0.1);box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.3), 0 1px rgba(255, 255, 255, 0.1)}.sq_switch-label{position:relative;z-index:2;float:left;width:58px;line-height:26px;font-size:11px;color:rgba(255, 255, 255, 0.35);text-align:center;text-shadow:0 1px 1px rgba(0, 0, 0, 0.45);cursor:pointer}.sq_switch-label:active{font-weight:bold}.sq_switch-label-off{padding-left:2px}.sq_switch-label-on{padding-right:2px}.sq_switch-input{display:none !important}.sq_switch-input:checked + .sq_switch-label{font-weight:bold;color:rgba(0, 0, 0, 0.65);text-shadow:0px 1px rgba(255, 255, 255, 0.25);-webkit-transition:0.15s ease-out;-moz-transition:0.15s ease-out;-o-transition:0.15s ease-out;transition:0.15s ease-out}.sq_switch-input:checked + .sq_switch-label-on ~ .sq_switch-selection{left:60px;background:lightgray}.sq_switch-selection{display:block;position:absolute;z-index:1;top:2px;left:2px;width:58px;height:22px;background:#89e46a;background-image:-webkit-linear-gradient(top, #9dd993, #89e46a);background-image:-moz-linear-gradient(top, #9dd993, #89e46a);background-image:-o-linear-gradient(top, #9dd993, #89e46a);background-image:linear-gradient(to bottom, #9dd993, #89e46a);-webkit-box-shadow:inset 0 1px rgba(255, 255, 255, 0.5), 0 0 2px rgba(0, 0, 0, 0.2);box-shadow:inset 0 1px rgba(255, 255, 255, 0.5), 0 0 2px rgba(0, 0, 0, 0.2);-webkit-transition:left 0.15s ease-out;-moz-transition:left 0.15s ease-out;-o-transition:left 0.15s ease-out;transition:left 0.15s ease-out}.sq_option_content_small{clear:both;padding:0px 0;height:20px}.sq_option_content span.sq_option_info{display:block;font-size:15px;margin-top:30px}.sq_option_content > span.sq_option_info_small{line-height:20px;font-size:12px;color:#777}.sq_option_content_small .sq_switch{margin:0px 9px 0 0;height:18px;width:60px}.sq_option_content_small .sq_switch-label{width:28px;line-height:17px;font-size:9px}.sq_option_content_small .sq_switch-input:checked + .sq_switch-label-on ~ .sq_switch-selection{left:31px}.sq_option_content_small .sq_switch-selection{top:1px;left:1px;width:28px;height:16px}.sq_option_content_small > span{font-size:12px !important}#sq_dashboard{font-family:Arial, sans-serif;position:relative;max-width:925px}#sq_dashboard .sq_icon,#sq_posts .sq_icon{display:block;float:left;margin:10px 11px 0 0;height:40px;width:33px;background:transparent url('../img/sprite.png') no-repeat;background-position:-47px -155px}#sq_dashboard #sq_dashboard_title,#sq_posts #sq_posts_title{font-size:36px;font-weight:normal;line-height:50px;color:#444444;margin:0;padding:5px;height:auto}#sq_dashboard #sq_dashboard_subtitle,#sq_posts #sq_posts_subtitle{font-size:18px;font-weight:normal;line-height:24px;color:#777;margin:0 0 20px 45px;padding-bottom:3px;height:auto}#sq_posts .wp-list-table td{vertical-align:middle}#sq_dashboard .sq_dashboard_box{width:900px;margin:10px auto 10px 0px;padding:0;background-color:transparent;box-shadow:0 5px 9px -6px #222}#sq_dashboard .sq_dashboard_box > div{width:900px;height:295px;border:1px solid #ddd;cursor:pointer}#sq_dashboard .sq_dashboard_assistant{background:transparent url('../img/dashboard_assistant.png') no-repeat}#sq_dashboard .sq_dashboard_analytics{background:transparent url('../img/dashboard_analytics.png') no-repeat}#sq_dashboard .sq_dashboard_audit{background:transparent url('../img/dashboard_audit.png') no-repeat}#sq_dashboard .sq_dashboard_research{background:transparent url('../img/dashboard_research.png') no-repeat}#sq_dashboard .sq_dashboard_audit #sq_audit_date{color:white;float:left;margin-top:254px;margin-left:26px;font-size:18px}#sq_dashboard .sq_dashboard_audit #sq_audit_error{color:white;float:left;max-width:277px;line-height:23px;margin-top:242px;margin-left:26px;font-size:16px}#sq_settings #sq_survey{display:block;width:600px;margin:40px auto;color:#777;font-size:16px;line-height:23px}#sq_settings #sq_survey .sq_survey_title{font-size:35px}#sq_settings #sq_survey ul{padding:0;margin:15px 0}#sq_settings #sq_survey li textarea{width:100%}#sq_settings #sq_survey li #sq_survey_submit{background-color:green;font-size:12px;font-weight:bold;color:white;width:100px;margin:0px auto 5px auto;padding:5px;position:relative;text-shadow:1px 1px #555;cursor:pointer}#sq_settings #sq_survey li #sq_survey_close{float:right;font-size:12px;cursor:pointer}
|
themes/default/css/sq_post.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
#postsquirrly{background-color:transparent;background-image:none;border:none;margin:0 0 10px 0;padding:2px;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}.sq_push{position:absolute;top:-7px;left:30px;font-size:10px;margin:0;border:1px solid #333;background-color:darkred;border-radius:50px;-webkit-border-radius:50px;-moz-border-radius:50px;padding:0px 1px;width:14px;text-shadow:1px 1px #333;color:#fff;font-family:'Megalopolis',Arial,Helvetica,Sans-Serif;text-align:center}#sq_options_dasboard .sq_push{left:36px}#postsquirrly div,#postsquirrly p,#postsquirrly td,#postsquirrly .inside{margin:0;padding:0}#postsquirrly .hndle,#postsquirrly .handlediv{display:none}#postsquirrly .sq_header{color:#a0a0a0;font-size:14px;font-weight:normal;padding:4px 10px;margin:0;border-bottom:1px dashed #d1d1d1;box-shadow:0px 1px 2px -1px #ccc;-moz-box-shadow:0px 1px 2px -1px #ccc;-webkit-box-shadow:0px px 2px -1px #ccc}#postsquirrly .sq_box{background-color:#fcfcfc;margin-bottom:15px;box-shadow:0px 1px 2px -1px #444;-moz-box-shadow:0px 1px 2px -1px #444;-webkit-box-shadow:0px 1px 2px -1px #444}#postsquirrly .sq_box:before{display:block;content:" ";background:transparent url('../img/sprite.png') repeat-x;background-position:0 -360px;width:100%;height:5px;border-radius:2px 2px 0 0;opacity:0.3}#postsquirrly .sq_box:hover:before{opacity:0.8}#postsquirrly .sq_box:hover .sq_header{color:#444}#sq_blocklogin{background-color:lightYellow}#sq_blocklogin input,#sq_blocklogin textarea #sq_blocklogin{font-family:Arial, Helvetica, sans-serif;font-size:14px;height:30px;padding:6px}#sq_blocklogin #sq_login{cursor:pointer;background-color:green;color:white;min-width:50px;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px}#sq_blocklogin label{margin-top:0px;margin-right:2px;width:72px;display:inline-block}#sq_blocklogin ul li{position:relative;display:table;width:260px;font-family:"Lucida Grande",Arial, Helvetica, sans-serif;font-size:12px;padding:4px 0px 4px 15px;margin:5px 0px;line-height:16px;text-shadow:1px 1px white;text-align:center}#sq_blocklogin .sq_info{font-size:13px;text-align:center}#sq_blocklogin .sq_error{font-size:12px;text-align:center;color:red;margin-top:5px;margin-bottom:5px}#sq_blocklogin #sq_register{margin:5px 0}#sq_blocklogin #sq_register_wait{display:inline-block;margin-left:2px}#sq_blocklogin #sq_autologin{padding:20px 10px 5px 10px}#sq_blocklogin #sq_autologin #sq_loginimage{display:block;background-color:green;height:auto;width:100px;font-size:15px;color:white;font-weight:bold;margin:13px;padding:10px 0;text-decoration:none;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;cursor:pointer}#sq_blocklogin #sq_register_email{text-align:center;width:250px;height:45px;margin:0px auto;margin-top:14px;margin-bottom:11px}#sq_blocklogin #sq_register_email #sq_email{width:160px !important;border:2px solid green}#sq_blocklogin #sq_signin{color:#11a5c1;margin:5px;cursor:pointer}#sq_options{float:right;position:relative;height:40px;margin:0;padding:0;z-index:1003}#postsquirrly #sq_options{float:none}#sq_options > ul{margin:10px 0}#sq_options > ul > li{position:relative;width:100px;float:right;color:#444444;font-family:Segoe UI;font-size:14px;margin:0 auto;padding:0px 0 0 0px;cursor:pointer}#sq_options li#sq_options_support{margin-left:27px;width:105px}#sq_options_support .sq_text,#sq_options_dasboard .sq_text a{display:block;float:left;font-family:Segoe UI;font-size:12px;color:#333;text-decoration:none;padding:3px 5px;border:1px solid #ccc;border-radius:5px;background:white;background:-moz-linear-gradient(top, white, #f5f5f5);background:-webkit-gradient(linear, left top, left bottom, from(white), to(#f5f5f5))}#sq_options .sq_icon{display:block;float:left;margin-top:-8px;margin-left:3px;background:transparent url('../img/sprite.png') no-repeat}#sq_options > ul > li#sq_options_feedback{width:30px;margin-left:2px}#sq_options_feedback .sq_label_feedback_smiley{display:block;height:37px;width:37px;background:transparent url('../img/sprite.png') no-repeat;border:none;cursor:pointer}#sq_options_feedback .sq_feedback_smiley{display:none}#sq_options_feedback .sq_label_feedback_0{background-position:-102px -154px !important}#sq_options_feedback .sq_label_feedback_1{background-position:-148px -154px !important}#sq_options_feedback .sq_label_feedback_2{background-position:-194px -154px !important}#sq_options_feedback .sq_label_feedback_3{background-position:-240px -154px !important}#sq_options_feedback .sq_label_feedback_4{background-position:-284px -154px !important}#sq_options_feedback .sq_icon{height:37px;width:35px;background-position:-194px -154px}#sq_options_support .sq_icon{height:37px;width:30px;background-position:-5px -154px}#sq_options_dasboard .sq_icon{height:39px;width:40px;background-position:-40px -154px}#sq_options_support .sq_options_support_popup,#sq_options_feedback .sq_options_feedback_popup{display:table;min-width:245px;position:absolute;z-index:1002;background-color:white;padding:5px;margin-top:0px;top:33px;border:1px solid #CCC;border-radius:0 7px 7px 7px;-moz-border-radius:0 7px 7px 7px;-webkit-border-radius:0 7px 7px 7px;box-shadow:1px 4px 6px -1px #888;-moz-box-shadow:1px 4px 6px -1px #888;-webkit-box-shadow:1px 4px 6px -1px #888;cursor:default}#sq_options_support .sq_options_support_popup{left:-50px}#sq_options_feedback .sq_options_feedback_popup{left:-101px}#sq_options_support .sq_options_support_popup li,#sq_options_feedback .sq_options_feedback_popup li{color:#333;line-height:16px;font-size:13px;font-weight:normal;margin:0;padding:3px 5px}#sq_options_support #sq_options_support_error,#sq_options_feedback #sq_options_feedback_error{margin:6px 0}#sq_options_feedback .sq_small_input{width:240px}#sq_options_support .sq_small_input{width:225px}#sq_options_support .sq_options_support_popup #sq_support_submit,#sq_options_feedback .sq_options_feedback_popup #sq_feedback_submit{background-color:green;font-size:12px;font-weight:bold;color:white;width:100px;margin:10px auto 5px auto;padding:5px;position:relative;text-shadow:1px 1px #555;cursor:pointer}#sq_options_support #sq_options_close,#sq_options_feedback #sq_options_feedback_close{position:absolute;background-color:#e5d8cd;right:-6px;top:-3px;font-size:13px;font-weight:bold;color:#333;width:8px;line-height:16px;padding:0px 5px 3px;border-radius:10px;border:1px solid darkOliveGreen;cursor:pointer;z-index:2}#sq_options_feedback .sq_options_feedback_popup li{clear:both}#sq_facebook_b{padding:6px 0;clear:both}#sq_facebook_b > span{display:block;float:left;font-weight:bold;color:darkgreen}#sq_facebook_b .sq_facebook_title{width:100%;font-size:16px;text-align:center;margin:5px auto}#sq_facebook_b .sq_facebook_image{width:100px;margin:3px 7px 5px 24px}#sq_facebook_b .sq_facebook_image img{width:100px}#sq_facebook_b .sq_facebook_frame{margin-top:35px}#sq_status{margin:40px 0}#sq_status .sq_box{position:relative;width:750px;height:205px;background:#f6f6f6 url('../img/status/backgroundv2.jpg') 0px 0px no-repeat;border:1px solid #DDD;font-size:1.1em;margin:0 auto;padding:0;font-family:Arial,Verdana,Helvetica,sans-serif;box-shadow:0 5px 9px -5px #222;text-align:center;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px}#sq_status .sq_box .sq_header{clear:both;color:#1ca12f;font-size:13px;font-weight:bold;margin:0;padding:3px 5px;line-height:23px;text-align:left;text-shadow:1px 2px #FFF;background:#F1F1F1;background-image:-webkit-gradient(linear,left bottom,left top,from(#ECECEC),to(#F9F9F9));background-image:-webkit-linear-gradient(bottom,#ECECEC,#F9F9F9);background-image:-moz-linear-gradient(bottom,#ECECEC,#F9F9F9);background-image:-o-linear-gradient(bottom,#ECECEC,#F9F9F9);background-image:linear-gradient(to top,#ECECEC,#F9F9F9)}#sq_status .sq_box .sq_header span{color:#444;margin-right:10px}#sq_status .sq_box .sq_header .sq_status_close{float:right;color:#999;font-size:10px;cursor:pointer}#sq_status .sq_box table{margin:35px 25px 0 25px}#sq_status .sq_box td{text-align:left;font-size:13px;text-shadow:1px 1px #FFF}#sq_status .sq_box .sq_status_image{position:absolute;background:transparent url('../img/status/squirrly_cheers.png') 0px 0px no-repeat;background-size:210px;width:220px;height:170px;right:0px;top:88px}#sq_status .sq_box .sq_status_text1{color:#444;font-weight:normal;font-size:16px;line-height:40px}#sq_status .sq_box .sq_status_text2{color:#444;font-size:20px;font-weight:bold;width:270px}#sq_status .sq_box .sq_status_text3{color:#A8A8A8;font-size:16px;margin-top:14px;padding-left:30px;line-height:21px;width:355px;text-align:left}#sq_status .sq_box .sq_status_bigtext{color:#1ca12f;padding-top:12px;font-size:63px;width:210px;text-align:center}
|
themes/default/css/sq_postslist.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
#postmiddlesquirrly{display:block}#sq_posts{margin:15px 15px 0 0}th#sq_rank_column{color:brown;width:125px}#sq_posts th.column-title{width:250px}#sq_posts th.column-type{width:70px}#sq_posts th.column-traffic{width:100px}#sq_posts th.column-rank{width:150px}#sq_posts th.column-keywords{width:100px}#sq_posts th.column-date{width:90px}td.sq_rank_column .sq_rank_column_row{text-align:center;position:relative;width:100%;min-height:80px}td.sq_rank_column .sq_rank_column_row .sq_optimize{font-size:12px;color:lightcoral;cursor:pointer}td.sq_rank_column .sq_rank_column_row .sq_no_rank{color:#999}td.sq_rank_column .sq_rank_column_row .sq_chart_title{position:absolute;font-size:9px;color:#cfcfcf;top:33px;text-align:center;width:100%}td.sq_rank_column .sq_rank_column_row:hover .sq_chart_title{color:darkgoldenrod}td.sq_rank_column .sq_rank_column_button{display:block;margin:10px auto;background-color:#89e46a;font-size:13px;font-weight:bold;color:white;line-height:16px;text-shadow:none;padding:7px 0px;border-radius:0px;-webkit-border-radius:0px;-moz-border-radius:0px;border:none;box-shadow:0px 0px 2px 0px white;cursor:pointer;width:100px;text-align:center;z-index:2}.sq_rank_layout_content .sq_rank_zone_header .sq_rank_zone_title{background-position:-60px -74px}.sq_post_rank_row{position:relative;padding:0px 0 5px 0 !important;margin:0px !important;border-left:1px solid #999;border-right:1px solid #999;background-color:#fff;min-width:460px;overflow:visible !important;box-shadow:0px 5px 6px -4px #000;-moz-box-shadow:0px 5px 6px -4px #000;-webkit-box-shadow:0px 5px 6px -4px #000}.sq_post_rank_row:before{display:block;border:none;content:" ";background:transparent url('../img/sprite.png') repeat-x;background-position:0 -360px;width:100%;height:5px;border-radius:2px 2px 0 0}.sq_post_rank_row .sq_post_rank_title{display:block;text-align:left;font-size:18px;font-weight:normal;line-height:30px;color:#333;margin:0 0 10px 0;padding:10px 0 10px 10px;height:16px}.sq_post_rank_row .sq_separator{display:block;clear:both;background:transparent url("../img/sprite.png") repeat-x;background-position:0px -367px;width:100%;height:3px;margin:2px auto 30px auto}.sq_post_rank_row .sq_post_rank_close{position:absolute;background-color:#e5d8cd;right:-7px;top:-7px;font-size:13px;font-weight:bold;color:#333;width:8px;line-height:16px;padding:0px 5px 3px;border-radius:10px;-webkit-border-radius:10px;-moz-border-radius:10px;border:1px solid darkOliveGreen;cursor:pointer;z-index:2}.sq_post_rank_row .sq_post_rank_refresh{position:absolute;right:30px;top:18px;font-size:12px;font-weight:bold;color:white;line-height:16px;padding:2px 9px;background-color:#57c332;text-shadow:1px 1px #333;border:1px solid #89e46a;box-shadow:0px 0px 2px 0px #57c332;cursor:pointer;z-index:2}#sq_analytics .sq_first_header_column{width:122px}#sq_analytics .sq_second_column{width:528px}#sq_analytics .sq_second_column span{width:100%}#sq_analytics .sq_third_column{position:relative;overflow:visible;width:300px;text-align:center}#sq_analytics .sq_analytics_task_completed{display:block;top:-22px;float:left;position:relative;line-height:40px;width:auto;height:auto;min-width:50px;min-height:40px;margin:0 20px;padding:10px;text-align:center;font-size:30px;color:#fff;box-shadow:1px 1px 2px 0px #999;filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=1, OffY=1, Color='#999');-ms-filter:"progid:DXImageTransform.Microsoft.Shadow(Strength=1, Direction=270, Color='#999')";border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;-webkit-border-radius:5px 5px 5px 0}#sq_analytics .sq_analytics_tasks .sq_analytics_task_completed{display:block;width:100px;height:65px;font-size:20px;color:#fff;text-shadow:1px 1px #555;line-height:29px;vertical-align:middle}#sq_analytics .sq_analytics_task_completed:before{content:"";width:0;height:0;position:absolute;bottom:-13px;left:0;border-width:0 0 14px 25px;border-style:solid;z-index:2}#sq_analytics .sq_analytics_task_completed:after{content:"";width:0;height:0;position:absolute;bottom:-15px;left:0;border-collapse:collapse;border-width:0 0 15px 28px;border-style:solid;border-color:transparent transparent transparent #999}#sq_analytics .sq_audit_task_completed_green{color:#fff;background:#1e9a04}#sq_analytics .sq_audit_task_completed_green_text{color:#1e9a04}#sq_analytics .sq_audit_task_completed_green:before{border-color:transparent transparent transparent #1e9a04}#sq_analytics .sq_audit_task_completed_yellow{color:#fff;background:#f6a304}#sq_analytics .sq_audit_task_completed_yellow_text{color:#f6a304}#sq_analytics .sq_audit_task_completed_yellow:before{border-color:transparent transparent transparent #f6a304}#sq_analytics .sq_audit_task_completed_red{color:#fff;background:#bb0d0c}#sq_analytics .sq_audit_task_completed_red_text{color:#bb0d0c}#sq_analytics .sq_audit_task_completed_red:before{border-color:transparent transparent transparent #bb0d0c}#sq_analytics div.sq_analytics_groups{width:80%;margin:0 auto 50px auto}#sq_analytics .sq_analytics_list > li{margin-top:40px}#sq_analytics .sq_analytics_list td{border:none;vertical-align:top;overflow:visible}#sq_analytics .sq_analytics_list .sq_analytics_tasks_header{height:50px;overflow:visible}#sq_analytics .sq_analytics_list .sq_analytics_tasks_header .sq_analytics_tasks_header_title{float:left;font-size:36px;line-height:16px}#sq_analytics .sq_analytics_list .sq_analytics_tasks_header .sq_analytics_task_completed{margin:0 21px !important;padding:10px}#sq_analytics .sq_analytics_list .sq_analytics_tasks_header .sq_analytics_task_completed:before{right:4px;left:auto}#sq_analytics .sq_analytics_list .sq_analytics_tasks_header .sq_analytics_task_completed:after{bottom:-15px;right:2px;left:auto;border-width:0 0 15px 26px}.sq_analytics_tasks_pass{display:block;background:transparent url("../img/sprite.png") repeat-x;background-position:-5px -380px;height:84px;width:97px;margin-right:20px}.sq_analytics_tasks_fail{display:block;background:transparent url("../img/sprite.png") repeat-x;background-position:-103px -380px;height:84px;width:97px;margin-right:20px}#sq_analytics .sq_analytics_tasks_row{width:100%;position:relative;margin-top:30px}#sq_analytics .sq_analytics_tasks_row > table{width:100%}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_title{font-size:24px;line-height:28px;color:#a8a8a8;padding-right:10px}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_value{font-size:24px;line-height:28px}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_value_pass a{font-size:15px}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_value_fail a{font-size:15px}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_value_pass{color:#1e9a04}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_value_fail{color:#f7681a}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_description{padding-top:20px;max-width:540px;font-size:16px;line-height:21px;color:#a8a8a8}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_description span{display:block;margin-bottom:15px;margin-left:0}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_description span.sq_analytics_tasks_alias{margin-bottom:10px}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_description .sq_analytics_tasks_value{font-size:15px;line-height:21px}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_description a{text-decoration:none}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_description ul li{margin-left:10px;margin-top:7px;font-size:14px}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_description .sq_tip,#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_description .sq_fix{font-size:14px;line-height:19px;color:#333333}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_description .sq_tip a,#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_description .sq_fix a{text-decoration:none}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_description .sq_fix strong{color:#f7681a}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_description .sq_analytics_values{width:330px;margin:30px auto 0 auto}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_description .sq_analytics_values li > div{float:left;margin-right:10px}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_description .sq_analytics_values li{clear:both;height:30px;line-height:20px;border-bottom:1px dashed #eee}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_description .sq_analytics_values li .sq_analytics_values_title{font-size:16px;width:195px}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_description .sq_analytics_values li .sq_analytics_values_value{font-weight:bold;width:75px;text-align:right}#sq_analytics .sq_list_error_title,#sq_analytics .sq_list_success_title{display:block;font-size:20px;color:#333;height:31px;width:90% !important;margin-top:30px;padding-left:30px;border-bottom:5px solid #ccc;box-shadow:0px 1px 0 0 #999;filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=1, Color='#999');-ms-filter:"progid:DXImageTransform.Microsoft.Shadow(Strength=1, Direction=270, Color='#999')";border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;background:transparent url("../img/list_icon.png") no-repeat 1px 3px}#sq_analytics .sq_list_error,#sq_analytics .sq_list_success{display:block;font-size:15px;font-weight:normal;color:#333;margin-left:0px;margin-top:5px}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_description .sq_list_success span{margin-bottom:10px}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_value .sq_list_error,#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_value .sq_list_success{font-style:italic}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_video_cover{background:#333 url("../img/sprite.png") no-repeat;background-position:-208px -375px;width:280px;height:158px;border:2px solid #000;border-radius:5px;margin:0 auto;cursor:pointer}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_video a{display:block;width:280px;text-align:center;font-size:15px;margin-top:3px;margin:0 5px}#sq_analytics .sq_analytics_tasks_row .sq_chart_text{position:absolute;font-size:14px;line-height:20px;color:#cfcfcf;top:80px;text-align:center;width:93%}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_side{text-align:center}#sq_analytics .sq_analytics_tasks_row .sq_analytics_tasks_side .sq_analytics_tasks_side_text{display:block;font-size:14px;line-height:21px;color:#cfcfcf;text-align:center}#sq_analytics .sq_rank_sprite{float:left;display:block;margin:1px 0 0 0;background:transparent url('../img/sprite.png') no-repeat;background-position:20px 0px;width:20px;height:20px}#sq_analytics .sq_rank_flag_big{display:block;float:none;margin:0 auto 6px auto;background-position:-7px -279px;width:72px;height:70px}#sq_analytics .sq_rank_flag_facebook{background-position:-10px -253px}#sq_analytics .sq_rank_flag_facebook_big{background-position:-7px -279px}#sq_analytics .sq_rank_flag_facebook_like{background-position:-212px -253px}#sq_analytics .sq_rank_flag_twitter{background-position:-53px -253px}#sq_analytics .sq_rank_flag_twitter_big{background-position:-372px -279px}#sq_analytics .sq_rank_flag_googleplus{background-position:-31px -253px}#sq_analytics .sq_rank_flag_googleplus_big{background-position:-153px -279px}#sq_analytics .sq_rank_flag_stumbleupon{background-position:-190px -253px}#sq_analytics .sq_rank_flag_stumbleupon_big{background-position:-299px -279px}#sq_analytics .sq_rank_flag_linkedin{background-position:-231px -253px}#sq_analytics .sq_rank_flag_linkedin_big{background-position:-80px -279px}#sq_analytics .sq_rank_flag_reddit{background-position:-250px -253px}#sq_analytics .sq_rank_flag_reddit_big{background-position:-226px -279px}#sq_analytics .sq_rank_seomoz_inbound{background-position:-97px -253px}#sq_analytics .sq_rank_seomoz_authority{background-position:-119px -253px}#sq_analytics .sq_rank_seomoz_rank{background-position:-273px -253px}#sq_analytics .sq_rank_google_pagerank{background-position:-273px -253px}#sq_analytics .sq_rank_squirrly_rank{background-position:-314px -253px}.sq_rank_custom_meta{display:block;font-size:13px;width:16px;height:16px;margin:0;padding:0;cursor:pointer;float:right}.sq_rank_customtitle{background-position:-308px -75px}.sq_rank_customdescription{background-position:-326px -75px}
|
themes/default/img/avatar-margin.png
ADDED
Binary file
|
themes/default/img/banners/banner1.jpg
ADDED
Binary file
|
themes/default/img/banners/banner1.png
ADDED
Binary file
|
themes/default/img/banners/banner2.jpg
ADDED
Binary file
|
themes/default/img/banners/banner2.png
ADDED
Binary file
|
themes/default/img/banners/banner3.png
ADDED
Binary file
|
themes/default/img/complete.png
ADDED
Binary file
|
themes/default/img/dashboard_analytics.png
ADDED
Binary file
|
themes/default/img/dashboard_assistant.png
ADDED
Binary file
|
themes/default/img/dashboard_audit.png
ADDED
Binary file
|
themes/default/img/dashboard_research.png
ADDED
Binary file
|
themes/default/img/header_back.png
ADDED
Binary file
|
themes/default/img/header_stars.png
ADDED
Binary file
|
themes/default/img/heading.png
ADDED
Binary file
|
themes/default/img/loading.gif
ADDED
Binary file
|
themes/default/img/menu_icon_16.png
ADDED
Binary file
|
themes/default/img/minloading.gif
ADDED
Binary file
|
themes/default/img/settings_edit.png
ADDED
Binary file
|
themes/default/img/settings_howto.jpg
ADDED
Binary file
|
themes/default/img/settings_login.jpg
ADDED
Binary file
|
themes/default/img/settings_login_done.jpg
ADDED
Binary file
|
themes/default/img/sprite.png
ADDED
Binary file
|
themes/default/img/sq_searching.gif
ADDED
Binary file
|
themes/default/img/status/backgroundv2.jpg
ADDED
Binary file
|
themes/default/img/status/squirrly_cheers.png
ADDED
Binary file
|
themes/default/js/jcache.js
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
(function(jQuery){this.version='(beta)(0.0.1)';this.maxSize=10;this.keys=new Array();this.cache_length=0;this.items=new Array();this.setItem=function(pKey,pValue)
|
3 |
+
{if(typeof(pValue)!='undefined')
|
4 |
+
{if(typeof(this.items[pKey])=='undefined')
|
5 |
+
{this.cache_length++;}
|
6 |
+
this.keys.push(pKey);this.items[pKey]=pValue;if(this.cache_length>this.maxSize)
|
7 |
+
{this.removeOldestItem();}}
|
8 |
+
return pValue;}
|
9 |
+
this.removeItem=function(pKey)
|
10 |
+
{var tmp;if(typeof(this.items[pKey])!='undefined')
|
11 |
+
{this.cache_length--;var tmp=this.items[pKey];delete this.items[pKey];}
|
12 |
+
return tmp;}
|
13 |
+
this.getItem=function(pKey)
|
14 |
+
{return this.items[pKey];}
|
15 |
+
this.hasItem=function(pKey)
|
16 |
+
{return typeof(this.items[pKey])!='undefined';}
|
17 |
+
this.removeOldestItem=function()
|
18 |
+
{this.removeItem(this.keys.shift());}
|
19 |
+
this.clear=function()
|
20 |
+
{var tmp=this.cache_length;this.keys=new Array();this.cache_length=0;this.items=new Array();return tmp;}
|
21 |
+
jQuery.jCache=this;return jQuery;})(jQuery);
|
themes/default/js/jquery.progressbar.js
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
(function($){$.extend({progressBar:new function(){this.defaults={steps:2,stepDuration:2,max:10,showText:false,textFormat:'percentage',width:121,height:12,callback:null,boxImage:sq_baseurl+sq_uri+'/js/images/progressbar.gif',barImage:{0:sq_baseurl+sq_uri+'/js/images/progressbg_red.gif',3:sq_baseurl+sq_uri+'/js/images/progressbg_orange.gif',7:sq_baseurl+sq_uri+'/js/images/progressbg_green.gif'},running_value:0,value:0,image:null};this.construct=function(arg1,arg2){var argvalue=null;var argconfig=null;if(arg1!=null){if(!isNaN(arg1)){argvalue=arg1;if(arg2!=null){argconfig=arg2;}}else{argconfig=arg1;}}
|
3 |
+
return this.each(function(child){var pb=this;var config=this.config;if(argvalue!=null&&this.bar!=null&&this.config!=null){this.config.value=parseInt(argvalue)
|
4 |
+
if(argconfig!=null)
|
5 |
+
pb.config=$.extend(this.config,argconfig);config=pb.config;}else{var $this=$(this);var config=$.extend({},$.progressBar.defaults,argconfig);config.id=$this.attr('id')?$this.attr('id'):Math.ceil(Math.random()*100000);if(argvalue==null)
|
6 |
+
argvalue=$this.html().replace("%","")
|
7 |
+
config.value=parseInt(argvalue);config.running_value=0;config.image=getBarImage(config);var numeric=['steps','stepDuration','max','width','height','running_value','value'];for(var i=0;i<numeric.length;i++)
|
8 |
+
config[numeric[i]]=parseInt(config[numeric[i]]);$this.html("");var bar=document.createElement('img');var text=document.createElement('span');var $bar=$(bar);var $text=$(text);pb.bar=$bar;$bar.attr('id',config.id+"_pbImage");$text.attr('id',config.id+"_pbText");$text.html(getText(config));$bar.attr('title',getText(config));$bar.attr('alt',getText(config));$bar.attr('src',config.boxImage);$bar.attr('width',config.width);$bar.css("width",config.width+"px");$bar.css("height",config.height+"px");$bar.css("background-image","url("+config.image+")");$bar.css("background-position",((config.width*-1))+'px 50%');$bar.css("padding","0");$bar.css("margin","0");$this.append($bar);$this.append($text);}
|
9 |
+
function getPercentage(config){return config.running_value*100/config.max;}
|
10 |
+
function getBarImage(config){var image=config.barImage;if(typeof(config.barImage)=='object'){for(var i in config.barImage){if(config.running_value>=parseInt(i)){image=config.barImage[i];}else{break;}}}
|
11 |
+
return image;}
|
12 |
+
function getText(config){if(config.showText){if(config.textFormat=='percentage'){return" "+Math.round(config.running_value)+"%";}else if(config.textFormat=='fraction'){return" "+config.running_value+'/'+config.max;}}}
|
13 |
+
config.increment=Math.round((config.value-config.running_value)/config.steps);if(config.increment<0)
|
14 |
+
config.increment*=-1;if(config.increment<1)
|
15 |
+
config.increment=1;var t=setInterval(function(){var pixels=config.width/100;if(config.running_value>config.value){if(config.running_value-config.increment<config.value){config.running_value=config.value;}else{config.running_value-=config.increment;}}
|
16 |
+
else if(config.running_value<config.value){if(config.running_value+config.increment>config.value){config.running_value=config.value;}else{config.running_value+=config.increment;}}
|
17 |
+
if(config.running_value==config.value)
|
18 |
+
clearInterval(t);var $bar=$("#"+config.id+"_pbImage");var $text=$("#"+config.id+"_pbText");var image=getBarImage(config);if(image!=config.image){$bar.css("background-image","url("+image+")");config.image=image;}
|
19 |
+
$bar.css("background-position",(((config.width*-1))+(getPercentage(config)*pixels))+'px 50%');$bar.attr('title',getText(config));$text.html(getText(config));if(config.callback!=null&&typeof(config.callback)=='function')
|
20 |
+
config.callback(config);pb.config=config;},config.stepDuration);});};}});$.fn.extend({progressBar:$.progressBar.construct});})(jQuery);
|
themes/default/js/sq_blockaudit.js
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
|
2 |
+
function sq_checkAudit(sq_dash_url,sq_token){jQuery.getJSON(sq_dash_url+'api/?callback=?',{action:'check_audit',token:sq_token},function(data){if(typeof data.audit!=='undefined'&&typeof data.error!=='undefined'){if(data.audit==true&&data.error==false){if(typeof data.datetime!=='undefined'&&jQuery('sq_audit_date').length==0){jQuery("#sq_dashboard").find('.sq_dashboard_audit').append('<span id="sq_audit_date">Last update: '+data.datetime+'</span>');}
|
3 |
+
jQuery("#sq_dashboard").find('.sq_dashboard_audit').bind('click',function(){var href=sq_dash_url+'user/audit/'+sq_token;var win=window.open(href,'_blank');win.focus();});}else{jQuery("#sq_dashboard").find('#sq_audit_error').show();jQuery("#sq_dashboard").find('.sq_dashboard_audit').bind('click',function(){alert(jQuery("#sq_dashboard").find('#sq_audit_error').html());});}}else{jQuery("#sq_dashboard").find('.sq_audit_error').html('Could not connect to server!');jQuery("#sq_dashboard").find('.sq_audit_error').show();}});}
|
themes/default/js/sq_blocklogin.js
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
jQuery(document).ready(function(){jQuery('#sq_email').bind('keypress',function(event){if(event.keyCode==13)
|
3 |
+
sq_autoLogin();return event.keyCode!=13;});jQuery('#sq_user').bind('keypress',function(event){if(event.keyCode==13)
|
4 |
+
jQuery('#sq_login').trigger('click');return event.keyCode!=13;});jQuery('#sq_password').bind('keypress',function(event){if(event.keyCode==13)
|
5 |
+
jQuery('#sq_login').trigger('click');return event.keyCode!=13;});jQuery('#sq_signin').bind('click',function(event){jQuery('#sq_autologin').hide();jQuery('#sq_blocklogin').find('ul').show();jQuery('#sq_user').val(jQuery('#sq_email').val());jQuery('#sq_email').focus();});jQuery('#sq_signup').bind('click',function(event){jQuery('#sq_autologin').show();jQuery('#sq_blocklogin').find('ul').hide();jQuery('#sq_email').focus();});jQuery('#sq_login').bind('click',function(){jQuery('#sq_login').addClass('sq_minloading');jQuery('#sq_login').attr("disabled","disabled");jQuery('#sq_login').val('');jQuery.getJSON(sqQuery.ajaxurl,{action:'sq_login',user:jQuery('#sq_user').val(),password:jQuery('#sq_password').val(),nonce:sqQuery.nonce}).success(function(response){if(typeof response.error!='undefined')
|
6 |
+
if(response.error=='invalid_token'){jQuery.getJSON(sqQuery.ajaxurl,{action:'sq_reset',nonce:sqQuery.nonce}).success(function(response){if(typeof response.reset!='undefined')
|
7 |
+
if(response.reset=='success')
|
8 |
+
location.reload();});}
|
9 |
+
jQuery('#sq_login').removeAttr("disabled");jQuery('#sq_login').val('Login');jQuery('#sq_login').removeClass('sq_minloading');if(typeof response.token!='undefined'){__token=response.token;sq_reload(response);}else
|
10 |
+
if(typeof response.error!='undefined')
|
11 |
+
jQuery('#sq_blocklogin').find('.sq_error').html(response.error);}).error(function(response){if(response.status==200&&response.responseText.indexOf('{')>0){response.responseText=response.responseText.substr(response.responseText.indexOf('{'),response.responseText.lastIndexOf('}'));try{response=jQuery.parseJSON(response.responseText);jQuery('#sq_login').removeAttr("disabled");jQuery('#sq_login').val('Login');jQuery('#sq_login').removeClass('sq_minloading');if(typeof response.token!='undefined'){__token=response.token;sq_reload(response);}else
|
12 |
+
if(typeof response.error!='undefined')
|
13 |
+
jQuery('#sq_blocklogin').find('.sq_error').html(response.error);}catch(e){}}else{jQuery('#sq_login').removeAttr("disabled");jQuery('#sq_login').val('Login');jQuery('#sq_login').removeClass('sq_minloading');jQuery('#sq_blocklogin').find('.sq_error').html(__error_login);}});});});function sq_autoLogin(){if(!checkEmail(jQuery('#sq_email').val())){jQuery('#sq_blocklogin').find('.sq_error').html(__invalid_email);jQuery('#sq_register_email').show();jQuery('#sq_register').html(__try_again);return false;}
|
14 |
+
jQuery('#sq_register').html(__connecting);jQuery('#sq_register_wait').addClass('sq_minloading');jQuery('#sq_blocklogin').find('.sq_message').hide();jQuery.getJSON(sqQuery.ajaxurl,{action:'sq_register',email:jQuery('#sq_email').val(),nonce:sqQuery.nonce}).success(function(response){jQuery('#sq_register_wait').removeClass('sq_minloading');if(typeof response.token!='undefined'){__token=response.token;if(typeof response.success!='undefined'){jQuery('#sq_login_success').html(response.success);}
|
15 |
+
sq_reload(response);}else{if(typeof response.info!='undefined'){jQuery('#sq_autologin').hide();jQuery('#sq_blocklogin').find('ul').show();jQuery('#sq_blocklogin').find('.sq_message').html(response.info).show();jQuery('#sq_user').val(jQuery('#sq_email').val());jQuery('#sq_password').focus();}else{if(typeof response.error!='undefined'){jQuery('#sq_blocklogin').find('.sq_error').html(response.error);jQuery('#sq_register_email').show();jQuery('#sq_register').html(__try_again);}}}}).error(function(response){if(response.status==200&&response.responseText.indexOf('{')>0){response.responseText=response.responseText.substr(response.responseText.indexOf('{'),response.responseText.lastIndexOf('}'));try{response=jQuery.parseJSON(response.responseText);if(typeof response.info!='undefined'){jQuery('#sq_autologin').hide();jQuery('#sq_blocklogin').find('ul').show();jQuery('#sq_blocklogin').find('.sq_message').html(response.info).show();jQuery('#sq_user').val(jQuery('#sq_email').val());jQuery('#sq_password').focus();}else{if(typeof response.error!='undefined'){jQuery('#sq_blocklogin').find('.sq_error').html(response.error);jQuery('#sq_register_email').show();jQuery('#sq_register').html(__try_again);}}}catch(e){}}else{jQuery('#sq_register_wait').removeClass('sq_minloading');jQuery('#sq_blocklogin').find('.sq_error').html(__error_login);jQuery('#sq_register_email').show();jQuery('#sq_register').html(__try_again);}});}
|
16 |
+
function sq_reload(response){if(typeof response.success!='undefined'){jQuery('#sq_login_success').html(response.success);}
|
17 |
+
if(jQuery('#content-html').length>0){jQuery('#sq_blocklogin').remove();location.reload();}else{if(jQuery('#sq_blocklogin').length==0)
|
18 |
+
jQuery('#sq_settings').prepend('<div id="sq_blocklogin">');jQuery('#sq_blocklogin').addClass('sq_login_done');jQuery('#sq_blocklogin').html(jQuery('#sq_login_success'));jQuery('#sq_blocklogin').append(jQuery('#sq_goto_newpost'));jQuery('#sq_login_success').show();jQuery('#sq_goto_newpost').show();}}
|
19 |
+
function checkEmail(email)
|
20 |
+
{var emailRegEx=/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;if(email!='')
|
21 |
+
if(emailRegEx.test(email)){return true;}else{return false;}
|
22 |
+
return true;}
|
themes/default/js/sq_blocksupport.js
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
jQuery(document).ready(function(){if(typeof sq_facebook_b==='undefined')
|
3 |
+
var sq_facebook_b='<iframe src="//www.facebook.com/plugins/like.php?href=https%3A%2F%2Fwww.facebook.com%2FSquirrly.co&send=false&layout=button_count&width=90&show_faces=false&font=arial&colorscheme=light&action=like&height=21&appId=384403641631593" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:90px; height:21px;" allowTransparency="true"></iframe>';jQuery('#sq_options_support').find('span').bind('click',function(){jQuery('.sq_options_support_popup').show();jQuery('.sq_options_feedback_popup').hide();});jQuery('#sq_options_close').bind('click',function(){jQuery('.sq_options_support_popup').hide();});jQuery('#sq_options_feedback').find('span').bind('click',function(){jQuery('.sq_options_feedback_popup').show();jQuery("#sq_options_feedback").find('.sq_push').hide();jQuery('.sq_options_support_popup').hide();});jQuery("#sq_options_feedback_close").bind('click',function(){jQuery('.sq_options_feedback_popup').hide();});jQuery("#sq_feedback_0").bind('click',function(){jQuery('#sq_feedback_msg').show();});jQuery("#sq_feedback_1").bind('click',function(){jQuery('#sq_feedback_msg').show();});jQuery("#sq_feedback_2").bind('click',function(){jQuery("#sq_feedback_submit").trigger('click');for(i=0;i<5;i++)
|
4 |
+
jQuery('#sq_options_feedback').find('.sq_icon').removeClass('sq_label_feedback_'+i);jQuery('#sq_options_feedback').find('.sq_icon').addClass('sq_label_feedback_2');if(jQuery("#sq_facebook_b").length==0)
|
5 |
+
jQuery("#sq_options_feedback_error").after('<div id="sq_facebook_b"><span class="sq_facebook_title">We\'re also on facebook</span><span class="sq_facebook_image"><a href="http://www.facebook.com/Squirrly.co" target="_blank"><img src="http://static.api.squirrly.co/default/img/social/squirrly_facebook.png"></a></span> <span class="sq_facebook_frame">'+sq_facebook_b+'</span></div>');});jQuery("#sq_feedback_3").bind('click',function(){jQuery("#sq_feedback_submit").trigger('click');for(i=0;i<5;i++)
|
6 |
+
jQuery('#sq_options_feedback').find('.sq_icon').removeClass('sq_label_feedback_'+i);jQuery('#sq_options_feedback').find('.sq_icon').addClass('sq_label_feedback_3');if(jQuery("#sq_facebook_b").length==0)
|
7 |
+
jQuery("#sq_options_feedback_error").after('<div id="sq_facebook_b"><span class="sq_facebook_title">We\'re also on facebook</span><span class="sq_facebook_image"><a href="http://www.facebook.com/Squirrly.co" target="_blank"><img src="http://static.api.squirrly.co/default/img/social/squirrly_facebook.png"></a></span> <span class="sq_facebook_frame">'+sq_facebook_b+'</span></div>');});jQuery("#sq_feedback_4").bind('click',function(){jQuery("#sq_feedback_submit").trigger('click');for(i=0;i<5;i++)
|
8 |
+
jQuery('#sq_options_feedback').find('.sq_icon').removeClass('sq_label_feedback_'+i);jQuery('#sq_options_feedback').find('.sq_icon').addClass('sq_label_feedback_4');if(jQuery("#sq_facebook_b").length==0)
|
9 |
+
jQuery("#sq_options_feedback_error").after('<div id="sq_facebook_b"><span class="sq_facebook_title">We\'re also on facebook</span><span class="sq_facebook_image"><a href="http://www.facebook.com/Squirrly.co" target="_blank"><img src="http://static.api.squirrly.co/default/img/social/squirrly_facebook.png"></a></span> <span class="sq_facebook_frame">'+sq_facebook_b+'</span></div>');});jQuery("#sq_feedback_submit").bind('click',function(){jQuery('#sq_feedback_msg').hide();jQuery('#sq_options_feedback_error').html('<p class="sq_minloading" style="margin:0 auto; padding:2px;"></p>')
|
10 |
+
jQuery('#sq_feedback_submit').attr("disabled","disabled");document.cookie="sq_feedback_face="+jQuery("input[name=sq_feedback_face]:radio:checked").val()+"; expires="+(60*12)+"; path=/";jQuery.getJSON(sqQuery.ajaxurl,{action:'sq_feedback',feedback:jQuery("input[name=sq_feedback_face]:radio:checked").val(),message:jQuery("textarea[name=sq_feedback_message]").val(),nonce:sqQuery.nonce}).success(function(response){jQuery('#sq_feedback_submit').removeAttr("disabled");jQuery('#sq_feedback_submit').val('Send feedback');jQuery("textarea[name=sq_feedback_message]").val('');if(typeof response.message!='undefined'){jQuery('#sq_options_feedback_error').removeClass('sq_error').addClass('sq_message').html(response.message);}else
|
11 |
+
jQuery('#sq_options_feedback_error').removeClass('sq_error').html('');}).error(function(response){if(response.status==200&&response.responseText.indexOf('{')>0){response.responseText=response.responseText.substr(response.responseText.indexOf('{'),response.responseText.lastIndexOf('}'));try{response=jQuery.parseJSON(response.responseText);jQuery('#sq_feedback_submit').removeAttr("disabled");jQuery('#sq_feedback_submit').val('Send feedback');jQuery("textarea[name=sq_feedback_message]").val('');if(typeof response.message!='undefined'){jQuery('#sq_options_feedback_error').removeClass('sq_error').addClass('sq_message').html(response.message);}else
|
12 |
+
jQuery('#sq_options_feedback_error').removeClass('sq_error').html('');}catch(e){}}else{jQuery('#sq_feedback_submit').removeAttr("disabled");jQuery('#sq_feedback_submit').val('Send feedback');jQuery('#sq_feedback_submit').removeClass('sq_minloading');jQuery('#sq_options_feedback_error').addClass('sq_error').removeClass('sq_message').html('Could not send the feedback');}});});jQuery("#sq_support_submit").bind('click',function(){jQuery('#sq_options_support_error').html('<p class="sq_minloading" style="margin:0 auto; padding:2px;"></p>')
|
13 |
+
jQuery('#sq_support_submit').attr("disabled","disabled");jQuery.getJSON(sqQuery.ajaxurl,{action:'sq_support',message:jQuery("textarea[name=sq_support_message]").val(),nonce:sqQuery.nonce}).success(function(response){jQuery('#sq_support_submit').removeAttr("disabled");jQuery("textarea[name=sq_support_message]").val('');if(typeof response.message!='undefined'){jQuery('#sq_options_support_error').removeClass('sq_error').addClass('sq_message').html(response.message);}else
|
14 |
+
jQuery('#sq_options_support_error').removeClass('sq_error').html('');}).error(function(response){if(response.status==200&&response.responseText.indexOf('{')>0){response.responseText=response.responseText.substr(response.responseText.indexOf('{'),response.responseText.lastIndexOf('}'));try{response=jQuery.parseJSON(response.responseText);jQuery('#sq_support_submit').removeAttr("disabled");jQuery("textarea[name=sq_support_message]").val('');if(typeof response.message!='undefined'){jQuery('#sq_options_support_error').removeClass('sq_error').addClass('sq_message').html(response.message);}else
|
15 |
+
jQuery('#sq_options_support_error').removeClass('sq_error').html('');}catch(e){}}else{jQuery('#sq_support_submit').removeAttr("disabled");jQuery('#sq_support_submit').val('Send feedback');jQuery('#sq_support_submit').removeClass('sq_minloading');jQuery('#sq_options_support_error').addClass('sq_error').removeClass('sq_message').html('Could not send the feedback');}});});jQuery("#sq_survey_submit").bind('click',function(){jQuery('#sq_survey_error').html('<p class="sq_minloading" style="margin:0 auto; padding:2px;"></p>')
|
16 |
+
jQuery('#sq_survey_submit').attr("disabled","disabled");jQuery.getJSON(sqQuery.ajaxurl,{action:'sq_support',subject:'Survey message',message:jQuery("textarea[name=sq_survey_message]").val(),nonce:sqQuery.nonce}).success(function(response){jQuery('#sq_survey_submit').removeAttr("disabled");jQuery("textarea[name=sq_survey_message]").val('');if(typeof response.message!='undefined'){jQuery('#sq_survey_error').removeClass('sq_error').addClass('sq_message').html(response.message);}else
|
17 |
+
jQuery('#sq_survey_error').removeClass('sq_error').html('');if(typeof response.success!='undefined'){jQuery.getJSON(sqQuery.ajaxurl,{action:'sq_hide_survey',sq_hide_survey:'1',nonce:sqQuery.nonce});}}).error(function(response){if(response.status==200&&response.responseText.indexOf('{')>0){response.responseText=response.responseText.substr(response.responseText.indexOf('{'),response.responseText.lastIndexOf('}'));try{response=jQuery.parseJSON(response.responseText);jQuery('#sq_survey_submit').removeAttr("disabled");jQuery("textarea[name=sq_survey_message]").val('');if(typeof response.message!='undefined'){jQuery('#sq_survey_error').removeClass('sq_error').addClass('sq_message').html(response.message);}else
|
18 |
+
jQuery('#sq_survey_error').removeClass('sq_error').html('');}catch(e){}}else{jQuery('#sq_survey_submit').removeAttr("disabled");jQuery('#sq_survey_submit').val('Send feedback');jQuery('#sq_survey_submit').removeClass('sq_minloading');jQuery('#sq_survey_error').addClass('sq_error').removeClass('sq_message').html('Could not send your message');}});});jQuery("#sq_survey_close").bind('click',function(){jQuery.getJSON(sqQuery.ajaxurl,{action:'sq_hide_survey',sq_hide_survey:'1',nonce:sqQuery.nonce}).success(function(){jQuery('#sq_survey').hide();});});});
|
themes/default/js/sq_menu.js
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
jQuery(document).ready(function(){var snippet_timeout;jQuery("#sq_goto_dashboard").bind('click',function(){location.href="?page=sq_dashboard";});jQuery("#sq_goto_settings").bind('click',function(){location.href="?page=squirrly";});jQuery('#sq_automatically').bind('click',function(){jQuery('#sq_customize_settings').hide();jQuery('#sq_snippet_disclaimer').hide();jQuery('#sq_title_description_keywords').removeClass('sq_custom_title');});jQuery('#sq_settings_form').find('input[type=radio]').bind('click',function(){sq_submitSettings();sq_getSnippet();});jQuery('#sq_customize').bind('click',function(){jQuery('#sq_customize_settings').show();jQuery('#sq_snippet_disclaimer').show();jQuery('#sq_title_description_keywords').addClass('sq_custom_title');});jQuery('#sq_settings').find('input[name=sq_fp_title]').bind('keyup',function(){if(snippet_timeout){clearTimeout(snippet_timeout);}
|
3 |
+
snippet_timeout=setTimeout(function(){sq_submitSettings();sq_getSnippet();},1000)
|
4 |
+
sq_trackLength(jQuery(this),'title');});jQuery('#sq_settings').find('textarea[name=sq_fp_description]').bind('keyup',function(){if(snippet_timeout){clearTimeout(snippet_timeout);}
|
5 |
+
snippet_timeout=setTimeout(function(){sq_submitSettings();sq_getSnippet();},1000)
|
6 |
+
sq_trackLength(jQuery(this),'description');});if(jQuery('#sq_settings').find('input[name=sq_auto_seo]').length>0){sq_getSnippet();}
|
7 |
+
jQuery('#sq_auto_favicon1').bind('click',function(){jQuery('#sq_favicon').slideDown('fast');});jQuery('#sq_auto_favicon0').bind('click',function(){jQuery('#sq_favicon').slideUp('fast');});jQuery('#sq_use_on').bind('click',function(){jQuery('#sq_settings .sq_seo_switch_condition').show();jQuery('#sq_title_description_keywords').slideDown('fast');jQuery('#sq_social_media').slideDown('fast');jQuery('#sq_favicon').slideDown('fast');if(parseInt(jQuery('.sq_count').html())>0){var notif=(parseInt(jQuery('.sq_count').html())-1);if(notif>0){jQuery('.sq_count').html(notif);}else{jQuery('.sq_count').html(notif);jQuery('.sq_count').hide();}}
|
8 |
+
jQuery('#sq_fix_auto').slideUp('show');});jQuery('#sq_use_off').bind('click',function(){jQuery('#sq_settings .sq_seo_switch_condition').hide();jQuery('#sq_title_description_keywords').slideUp('fast');jQuery('#sq_social_media').slideUp('fast');jQuery('#sq_favicon').slideUp('fast');if(parseInt(jQuery('.sq_count').html())>=0){var notif=(parseInt(jQuery('.sq_count').html())+1);if(notif>0){jQuery('.sq_count').html(notif).show();}}
|
9 |
+
jQuery('#sq_fix_auto').slideDown('show');});jQuery('#sq_google_index1').bind('click',function(){if(parseInt(jQuery('.sq_count').html())>0){var notif=(parseInt(jQuery('.sq_count').html())-1);if(notif>0){jQuery('.sq_count').html(notif);}else{jQuery('.sq_count').html(notif);jQuery('.sq_count').hide();}}
|
10 |
+
jQuery('#sq_fix_private').slideUp('show');});jQuery('#sq_google_index0').bind('click',function(){if(parseInt(jQuery('.sq_count').html())>=0){var notif=(parseInt(jQuery('.sq_count').html())+1);if(notif>0){jQuery('.sq_count').html(notif).show();}}
|
11 |
+
jQuery('#sq_fix_private').slideDown('show');});jQuery('#sq_auto_twitter1').bind('click',function(){jQuery('#sq_twitter_account').show();});jQuery('#sq_auto_twitter0').bind('click',function(){jQuery('#sq_twitter_account').hide();});jQuery('#sq_settings').find('input[name=sq_auto_favicon]').bind('click',function(){});});function sq_showSaved(){}
|
12 |
+
function sq_trackLength(field,type){var min=0;var max=0;if(typeof field==='undefined')
|
13 |
+
return;if(type=='title'||type=='wp_title'){min=10;max=75;}else
|
14 |
+
if(type=='description'){min=70;max=165;}
|
15 |
+
if(min>0&&min>field.val().length)
|
16 |
+
jQuery('#sq_'+type+'_info').html(__snippetshort);else
|
17 |
+
if(max>0&&max<field.val().length)
|
18 |
+
jQuery('#sq_'+type+'_info').html(__snippetlong);else
|
19 |
+
if(max>0){jQuery('#sq_'+type+'_info').html(field.val().length+'/'+max);}}
|
20 |
+
function sq_getSnippet(url,show_url){if(typeof url=='undefined')
|
21 |
+
url='';if(typeof sq_blogurl!='undefined')
|
22 |
+
url=sq_blogurl;if(typeof show_url=='undefined')
|
23 |
+
show_url='';jQuery('#sq_snippet_ul').addClass('sq_minloading');jQuery('#sq_snippet_title').html('');jQuery('#sq_snippet_url').html('');jQuery('#sq_snippet_description').html('');jQuery('#sq_snippet_keywords').hide();jQuery('#sq_snippet').show();jQuery('#sq_snippet_update').hide();jQuery('#sq_snippet_customize').hide();setTimeout(function(){jQuery.getJSON(sqQuery.ajaxurl,{action:'sq_get_snippet',url:url,nonce:sqQuery.nonce}).success(function(response){jQuery('#sq_snippet_ul').removeClass('sq_minloading');jQuery('#sq_snippet_update').show();jQuery('#sq_snippet_customize').show();jQuery('#sq_snippet_keywords').show();if(response){jQuery('#sq_snippet_title').html(response.title);if(show_url!='')
|
24 |
+
jQuery('#sq_snippet_url').html('<a href="'+url+'" target="_blank">'+show_url+'</a>');else
|
25 |
+
jQuery('#sq_snippet_url').html(response.url);jQuery('#sq_snippet_description').html(response.description);}}).error(function(){jQuery('#sq_snippet_ul').removeClass('sq_minloading');jQuery('#sq_snippet_update').show();}).complete(function(){jQuery('#sq_snippet_ul').removeClass('sq_minloading');jQuery('#sq_snippet_update').show();});},500);}
|
26 |
+
function sq_submitSettings(){jQuery.getJSON(sqQuery.ajaxurl,{action:'sq_settings_update',sq_use:jQuery('#sq_settings').find('input[name=sq_use]:checked').val(),sq_auto_title:jQuery('#sq_settings').find('input[name=sq_auto_title]:checked').val(),sq_auto_description:jQuery('#sq_settings').find('input[name=sq_auto_description]:checked').val(),sq_auto_canonical:jQuery('#sq_settings').find('input[name=sq_auto_canonical]:checked').val(),sq_auto_sitemap:jQuery('#sq_settings').find('input[name=sq_auto_sitemap]:checked').val(),sq_auto_meta:jQuery('#sq_settings').find('input[name=sq_auto_meta]:checked').val(),sq_auto_favicon:jQuery('#sq_settings').find('input[name=sq_auto_favicon]:checked').val(),sq_auto_facebook:jQuery('#sq_settings').find('input[name=sq_auto_facebook]:checked').val(),sq_auto_twitter:jQuery('#sq_settings').find('input[name=sq_auto_twitter]:checked').val(),sq_twitter_account:jQuery('#sq_settings').find('input[name=sq_twitter_account]').val(),sq_auto_seo:jQuery('#sq_settings').find('input[name=sq_auto_seo]:checked').val(),sq_fp_title:jQuery('#sq_settings').find('input[name=sq_fp_title]').val(),sq_fp_description:jQuery('#sq_settings').find('textarea[name=sq_fp_description]').val(),sq_fp_keywords:jQuery('#sq_settings').find('input[name=sq_fp_keywords]').val(),ignore_warn:jQuery('#sq_settings').find('input[name=ignore_warn]:checked').val(),sq_keyword_help:jQuery('#sq_settings').find('input[name=sq_keyword_help]:checked').val(),sq_keyword_information:jQuery('#sq_settings').find('input[name=sq_keyword_information]:checked').val(),sq_google_country:jQuery('#sq_settings').find('select[name=sq_google_country]').filter(":selected").val(),sq_google_plus:jQuery('#sq_settings').find('input[name=sq_google_plus]').val(),sq_google_wt:jQuery('#sq_settings').find('input[name=sq_google_wt]').val(),sq_google_analytics:jQuery('#sq_settings').find('input[name=sq_google_analytics]').val(),sq_facebook_insights:jQuery('#sq_settings').find('input[name=sq_facebook_insights]').val(),sq_bing_wt:jQuery('#sq_settings').find('input[name=sq_bing_wt]').val(),sq_alexa:jQuery('#sq_settings').find('input[name=sq_alexa]').val(),sq_sla:jQuery('#sq_settings').find('input[name=sq_sla]:checked').val(),nonce:sqQuery.nonce});}
|
27 |
+
function sq_getUserStatus(api_url,token){jQuery('#sq_userinfo').addClass('sq_loading');jQuery('#sq_userstatus').addClass('sq_loading');jQuery.getJSON(api_url+'sq/user/status/?callback=?',{token:token,lang:(document.getElementsByTagName("html")[0].getAttribute("lang")||window.navigator.language),}).success(function(response){if(typeof response.error!='undefined')
|
28 |
+
if(response.error=='invalid_token'){jQuery.getJSON(sqQuery.ajaxurl,{action:'sq_reset',nonce:sqQuery.nonce}).success(function(response){if(typeof response.reset!='undefined')
|
29 |
+
if(response.reset=='success')
|
30 |
+
location.href="?page=sq_howto";});}
|
31 |
+
jQuery('#sq_userinfo').removeClass('sq_loading').removeClass('sq_error');jQuery('#sq_userstatus').removeClass('sq_loading').removeClass('sq_error');if(typeof response.info!=='undefined'&&response.info!=''){jQuery('#sq_userinfo').html(response.info);}
|
32 |
+
if(typeof response.stats!=='undefined'&&response.stats!=''){jQuery('#sq_userstatus').html(response.stats);}
|
33 |
+
if(typeof response.data!=='undefined'&&typeof response.data.user_registered_date!=='undefined'){var currentDate=new Date();var day=currentDate.getDate();if(day.toString().length==1)
|
34 |
+
day='0'+day.toString();var month=currentDate.getMonth()+1;if(month.toString().length==1)
|
35 |
+
month='0'+month.toString();var year=currentDate.getFullYear();var currDate=year+'-'+month+'-'+day;var passed=((new Date(currDate).getTime()-new Date(response.data.user_registered_date).getTime())/(24*60*60*1000));;if(passed<=3&&jQuery('#sq_survey').length>0)
|
36 |
+
jQuery('#sq_survey').show();}}).error(function(){jQuery('#sq_userinfo').html('');jQuery('#sq_userstatus').html('');})}
|
themes/default/js/sq_rank.js
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
(function(){var SQ=this;if(typeof this.sq_dashurl=='undefined')
|
3 |
+
if(typeof sq_dashurl!=='undefined')
|
4 |
+
this.sq_dashurl=sq_dashurl;else
|
5 |
+
this.sq_dashurl='https://my.squirrly.co/';if(typeof this.__token=='undefined'&&typeof __token!=='undefined')
|
6 |
+
this.__token=__token;if(typeof this.typenow=='undefined'&&typeof typenow!=='undefined')
|
7 |
+
this.typenow=typenow;this.inArray=function(id,array){if(array.length==0)
|
8 |
+
return false;for(var i=0;i<array.length;i++){if(array[i]==id){return true;}}
|
9 |
+
return false;};this.getHashParam=function(key){if(location.href.indexOf("#")!=-1&&window.location.href.split('#')[1]!=''){var results=new RegExp('[\\?&#]'+key+'=([^&#]*)').exec(window.location.href);if(results)
|
10 |
+
return results[1]||0;}
|
11 |
+
return false;};this.setHashParam=function(key,val){var separator='';if(!this.getHashParam(key)){if(location.href.indexOf("#")!=-1){if(location.href.split('#')[1]!='')
|
12 |
+
separator='&';}else{separator='#';}
|
13 |
+
window.location.href=window.location.href+separator+key+'='+val;}else{window.location.href=window.location.href.replace(key+'='+this.getHashParam(key),key+'='+val);}
|
14 |
+
return false;};this.sq_rank={getRanks:function(posts){jQuery.getJSON(sqQuery.ajaxurl,{action:'sq_posts_rank',posts:posts,nonce:sqQuery.nonce}).success(function(response){if(response)
|
15 |
+
if(typeof response.error!=='undefined'){if(response.error=='subscription_expired')
|
16 |
+
jQuery('.sq_rank_column_row').each(function(){jQuery(this).removeClass('sq_minloading').html('<span class="sq_rank"><span class="sq_expired">For Squirrly Rank<br /><a href="'+SQ.sq_dashurl+'login/?token='+SQ.__token+'&redirect_to='+escape(SQ.sq_dashurl+'user/plans')+'" target="_blank">upgrade your plan</a></span></span>');});}else{if(typeof response.global!=='undefined'){jQuery('.wrap').before(response.global);}
|
17 |
+
if(typeof response.status!=='undefined'){jQuery('.wrap').before(response.status);jQuery('.sq_status_close').bind('click',function(){jQuery('#sq_status').remove();jQuery.getJSON(sqQuery.ajaxurl,{action:'sq_posts_status_close',nonce:sqQuery.nonce});});}
|
18 |
+
var post_id;jQuery('.sq_rank_column_row').each(function(){jQuery(this).removeClass('sq_minloading');if(jQuery.inArray(jQuery(this).attr('ref'),posts)!==-1){post_id=jQuery(this).attr('ref');jQuery(this).removeClass('sq_minloading').html('<span class="sq_rank" ref="'+post_id+'"></span>');response.posts[jQuery(this).attr('ref')].offpage=((response.posts[post_id].offpage>0)?'+':'')+response.posts[post_id].offpage;if(response.posts[post_id].onpage>0){jQuery(this).find('.sq_rank').append('<span class="sq_rank_column_button sq_show_more" ref="'+post_id+'">'+__sq_rankseemore_text+'</span>');SQ.sq_eventsrank.addClick(jQuery(this).find('.sq_show_more'));}else{jQuery(this).find('.sq_rank').append('<span class="sq_rank_column_button sq_optimize" ref="'+post_id+'">'+__sq_optimize_text+'</span>');}}else{jQuery(this).removeClass('sq_minloading').html('<span class="sq_no_rank" ref="'+post_id+'">'+__sq_ranknotpublic_text+'</span>');}});jQuery('.sq_optimize').bind('click',function(){if(typeof sqQuery.adminposturl!=='undefined')
|
19 |
+
location.href=sqQuery.adminposturl+"?post="+jQuery(this).attr('ref')+"&action=edit";else
|
20 |
+
location.href="/wp-admin/post.php?post="+jQuery(this).attr('ref')+"&action=edit";});}});jQuery('.sq_rank_column_row').each(function(){});}};this.sq_eventsrank={listen:function(posts){SQ.sq_rank.getRanks(posts);},addClick:function(arrow){arrow.unbind('click').bind('click',function(){var post_id=jQuery(this).attr('ref');SQ.sq_eventsrank.arrowClick(post_id,jQuery(this),true);});if(SQ.getHashParam('sq_brief')!=''){var posts=[];if(SQ.getHashParam('sq_brief').indexOf(",")!=-1){posts=SQ.getHashParam('sq_brief').split(",");}else{posts[0]=SQ.getHashParam('sq_brief');}
|
21 |
+
for(var i=0;i<posts.length;i++){jQuery('.sq_rank_column_row[ref='+posts[0]+']').find('.sq_show_more').trigger('click');}}},arrowClick:function(post_id,_this,scroll){SQ.sq_eventsrank.loadBrief(post_id);if(jQuery('#sq_post-'+post_id).is(":visible")){jQuery('#sq_post-'+post_id).hide();if(jQuery('#sq_post-'+post_id).length!=0)
|
22 |
+
jQuery('#sq_post_details-'+post_id).hide();if(typeof _this!=='undefined'){_this.find('.sq_arrow_down').removeClass('sq_arrow_up');_this.find('.sq_more_detail_text').html(__sq_more_details);}}else{jQuery('#sq_post-'+post_id).show();if(typeof _this!=='undefined'){_this.find('.sq_arrow_down').addClass('sq_arrow_up');_this.find('.sq_more_detail_text').html(__sq_less_details);if(scroll)
|
23 |
+
var rowtop=jQuery('#sq_post-'+post_id).find('.sq_post_rank_content').offset().top-200;var scrolltop=jQuery(window).scrollTop();if(scrolltop<rowtop){jQuery('html,body').animate({scrollTop:rowtop},1000,function(){});}}}
|
24 |
+
if(typeof _this!=='undefined'){jQuery('#sq_post-'+post_id).find('.sq_post_rank_close').unbind('click').bind('click',function(){_this.trigger('click');});}
|
25 |
+
jQuery('#sq_post-'+post_id).find('.sq_post_rank_refresh').unbind('click').bind('click',function(){SQ.sq_eventsrank.loadBrief(post_id);});},loadBrief:function(post_id){if(jQuery('#sq_post-'+post_id).length==0){jQuery('#post-'+post_id).after('<tr id="sq_post-'+post_id+'" style="display:none"><td colspan="'+(jQuery('#post-'+post_id+' td').length+1)+'" class="sq_post_rank_row"><div class="sq_post_rank_title">'+__sq_article_rank+'</div><div class="sq_post_rank_content sq_loading"></div><div class="sq_post_arrow_details"></div><div class="sq_post_rank_close">x</div><div class="sq_post_rank_refresh">'+__sq_refresh+'</div></td></tr>');}else{jQuery('#sq_post-'+post_id).find('.sq_post_rank_content').html('');jQuery('#sq_post-'+post_id).find('.sq_post_arrow_details').html('');jQuery('#sq_post_details-'+post_id).hide();jQuery('#sq_post-'+post_id).find('.sq_post_rank_content').addClass('sq_loading');}
|
26 |
+
jQuery.getJSON(sqQuery.ajaxurl,{action:'sq_post_rank_brief',post:post_id,nonce:sqQuery.nonce}).success(function(response){jQuery('#sq_post-'+post_id).find('.sq_post_rank_content').removeClass('sq_loading');jQuery('#sq_rank_default_text').remove();if(response)
|
27 |
+
if(typeof response.error!=='undefined'){jQuery('#sq_post-'+post_id).find('.sq_post_rank_content').html('<ul class="sq_no_information"><li>'+response.message+'</li></ul>');}else{jQuery('#sq_post-'+post_id).find('.sq_post_arrow_details').html('<span class="sq_arrow_button"><span class="sq_more_detail_text">'+__sq_more_details+'</span><span class="sq_arrow_down"></span></span>');jQuery('#sq_post-'+post_id).find('.sq_post_rank_content').html(response);jQuery('#sq_post-'+post_id).find('.sq_post_arrow_details').prepend('<div class="sq_report_interval">'+__sq_interval_text+'<select id="sq_interval-'+post_id+'"><option value="day">'+__sq_interval_day+'</option><option value="week">'+__sq_interval_week+'</option><option value="month" selected="selected" >'+__sq_interval_month+'</option></select></div>');jQuery('#sq_interval-'+post_id).bind('change',function(){jQuery('#sq_post_details-'+post_id).hide();jQuery('#sq_post-'+post_id).find('.sq_arrow_button').trigger('click');});jQuery('#sq_post-'+post_id).find('.sq_rank_history_text').bind('click',function(){if(jQuery(this).attr('ref')!=''){jQuery('#sq_post_details-'+post_id).hide();jQuery('#sq_interval-'+post_id+' option[value='+jQuery(this).attr('ref')+']').attr("selected","selected");jQuery('#sq_post-'+post_id).find('.sq_arrow_button').trigger('click');}});SQ.sq_eventsrank.detailsClick(jQuery('#sq_post-'+post_id).find('.sq_arrow_button'),post_id);jQuery('#sq_post-'+post_id).find('.sq_post_arrow_details').append('<span class="sq_allposts_button" style="display:none"><span class="sq_allposts_text">'+__sq_goto_allposts+'</span></span>');jQuery('#sq_post-'+post_id).find('.sq_allposts_button').bind('click',function(){if(typeof sqQuery.adminlisturl!=='undefined')
|
28 |
+
location.href=sqQuery.adminlisturl+"?post_type="+SQ.typenow+"&post_status=publish&sq_post_id="+post_id+"#sq_brief="+post_id;else
|
29 |
+
location.href="/wp-admin/edit.php?post_type="+SQ.typenow+"&post_status=publish&sq_post_id="+post_id+"#sq_brief="+post_id;});var originalFontSize=12;jQuery('.sq_rank_total_value').each(function(){var spanHeight=jQuery(this).outerHeight();var sectionHeight=50;var ratio=(sectionHeight/spanHeight);if(ratio<1)
|
30 |
+
ratio=ratio/1.10;var newFontSize=ratio*originalFontSize;jQuery(this).css({"font-size":newFontSize});});}});},loadDetails:function(post_id){var sq_interval='month';if(jQuery('#sq_post_details-'+post_id).length==0){jQuery('#sq_post-'+post_id).after('<tr id="sq_post_details-'+post_id+'" style="display:none"><td colspan="'+(jQuery('#post-'+post_id+' td').length+1)+'" class="sq_post_rank_row"><div class="sq_post_rank_content sq_loading"></div></td></tr>');}else{jQuery('#sq_post_details-'+post_id).find('.sq_post_rank_content').html('');jQuery('#sq_post_details-'+post_id).find('.sq_post_rank_content').addClass('sq_loading');}
|
31 |
+
if(jQuery('#sq_interval-'+post_id).length!=0&&jQuery('#sq_interval-'+post_id+' :selected').val()!='')
|
32 |
+
sq_interval=jQuery('#sq_interval-'+post_id+' :selected').val();jQuery.getJSON(sqQuery.ajaxurl,{action:'sq_post_rank',post:post_id,interval:sq_interval,nonce:sqQuery.nonce}).success(function(response){jQuery('#sq_post_details-'+post_id).find('.sq_post_rank_content').removeClass('sq_loading');jQuery('#sq_post_details-'+post_id).find('.sq_post_rank_content').html(response.rank);});},detailsClick:function(details,post_id){details.unbind('click').bind('click',function(){SQ.sq_eventsrank.loadDetails(post_id);if(jQuery('#sq_post_details-'+post_id).is(":visible")){jQuery('#sq_post_details-'+post_id).hide();jQuery(this).find('.sq_arrow_down').removeClass('sq_arrow_up');jQuery(this).find('.sq_more_detail_text').html(__sq_more_details);}else{jQuery('#sq_post_details-'+post_id).show();jQuery(this).find('.sq_arrow_down').addClass('sq_arrow_up');jQuery(this).find('.sq_more_detail_text').html(__sq_less_details);var rowtop=jQuery(this).offset().top-50;var scrolltop=jQuery(window).scrollTop();if(scrolltop<rowtop){jQuery('html,body').animate({scrollTop:rowtop},1000,function(){});}}});}};})(window);jQuery(document).ready(function(){if(typeof sq_posts!=='undefined')
|
33 |
+
window.sq_eventsrank.listen(sq_posts);});
|
themes/default/js/tinymce.js
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
|
2 |
+
(function(){tinymce.create('tinymce.plugins.Heading',{init:function(ed,url){ed.addButton('heading',{title:'heading.button',image:url+'/../img/heading.png',onclick:function(){if(ed.selection.getContent()!=''){ed.execCommand('mceReplaceContent',false,'<h2>'+ed.selection.getContent()+'</h2>');ed.execCommand('mceCleanup',false);}}});},createControl:function(n,cm){return null;}});tinymce.PluginManager.add('heading',tinymce.plugins.Heading);})();
|
themes/default/js/xregexp.js
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
;(function(g){"function"===typeof define?define(g):"object"===typeof exports?(g=g(),("object"===typeof module?module.exports=g:exports).XRegExp=g):XRegExp=g()})(function(){var g,I=function(a,b,c){var d;if(c)if(a.__proto__)a.__proto__=f.prototype;else for(d in f.prototype)a[d]=f.prototype[d];a[j]={captureNames:b};return a},C=function(a){return l.replace.call(a,/([\s\S])(?=[\s\S]*\1)/g,"")},v=function(a,b){if(!f.isRegExp(a))throw new TypeError("Type RegExp expected");var c=l.exec.call(/\/([a-z]*)$/i,String(a))[1],b=b||{};b.add&&(c=C(c+b.add));b.remove&&(c=l.replace.call(c,RegExp("["+b.remove+"]+","g"),""));return a=I(RegExp(a.source,c),a[j]&&a[j].captureNames?a[j].captureNames.slice(0):null,b.addProto)},y=function(a,b){if(Array.prototype.indexOf)return a.indexOf(b);var c=a.length,d;for(d=0;d<c;++d)if(a[d]===b)return d;return-1},D=function(a,b){return J.call(a)==="[object "+b+"]"},K=function(a,b,c){return l.test.call(-1<c.indexOf("x")?/^(?:\s+|#.*|\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/:/^(?:\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/,a.slice(b))},L=function(a){a=a||{};D(a,"String")&&(a=f.forEach(a,/[^\s,]+/,function(a){this[a]=!0},{}));return a},N=function(a){if(!/^[\w$]$/.test(a))throw Error("Flag must be a single character A-Za-z0-9_$");M[a]=!0},O=function(a){RegExp.prototype.exec=(a?k:l).exec;RegExp.prototype.test=(a?k:l).test;String.prototype.match=(a?k:l).match;String.prototype.replace=(a?k:l).replace;String.prototype.split=(a?k:l).split;u.natives=a},w=function(a){if(null==a)throw new TypeError("Cannot convert null or undefined to object");return a},j="xregexp",f,u={astral:!1,natives:!1},l={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},k={},E={},z={},F=[],T={"default":/\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S])|\(\?[:=!]|[?*+]\?|{\d+(?:,\d*)?}\??|[\s\S]/,"class":/\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S])|[\s\S]/},U=/\$(?:{([\w$]+)}|(\d\d?|[\s\S]))/g,V=void 0===l.exec.call(/()??/,"")[1],G=void 0!==RegExp.prototype.sticky,M={g:!0,i:!0,m:!0,y:G},J={}.toString,t;f=function(a,b){var c={hasNamedCapture:!1,captureNames:[]},d="default",e="",n=0,h,i;if(f.isRegExp(a)){if(void 0!==b)throw new TypeError("Cannot supply flags when copying a RegExp");return v(a,{addProto:!0})}a=void 0===a?"":String(a);b=void 0===b?"":String(b);i=a+"/"+b;if(!z[i]){h=a;var g=b,m;if(C(g)!==g)throw new SyntaxError("Invalid duplicate regex flag "+g);h=l.replace.call(h,/^\(\?([\w$]+)\)/,function(a,b){if(l.test.call(/[gy]/,b))throw new SyntaxError("Cannot use flag g or y in mode modifier "+a);g=C(g+b);return""});for(m=0;m<g.length;++m)if(!M[g.charAt(m)])throw new SyntaxError("Unknown regex flag "+g.charAt(m));h={pattern:h,flags:g};a=h.pattern;for(b=h.flags;n<a.length;){do{h=a;m=b;for(var j=n,P=d,q=c,p=F.length,k=null,r=void 0,s=void 0;p--;)if(s=F[p],(s.scope===P||"all"===s.scope)&&(!s.flag||-1<m.indexOf(s.flag)))if(r=f.exec(h,s.regex,j,"sticky")){k={matchLength:r[0].length,output:s.handler.call(q,r,P,m),reparse:s.reparse};break}(h=k)&&h.reparse&&(a=a.slice(0,n)+h.output+a.slice(n+h.matchLength))}while(h&&h.reparse);h?(e+=h.output,n+=h.matchLength||1):(h=f.exec(a,T[d],n,"sticky")[0],e+=h,n+=h.length,"["===h&&"default"===d?d="class":"]"===h&&"class"===d&&(d="default"))}z[i]={pattern:l.replace.call(e,/\(\?:\)(?=\(\?:\))|^\(\?:\)|\(\?:\)$/g,""),flags:l.replace.call(b,/[^gimy]+/g,""),captures:c.hasNamedCapture?c.captureNames:null}}i=z[i];return I(RegExp(i.pattern,i.flags),i.captures,!0)};f.prototype=RegExp();f.version="3.0.0-pre";f.addToken=function(a,b,c){var c=c||{},d=c.optionalFlags,e;c.flag&&N(c.flag);if(d){d=l.split.call(d,"");for(e=0;e<d.length;++e)N(d[e])}F.push({regex:v(a,{add:"g"+(G?"y":"")}),handler:b,scope:c.scope||"default",flag:c.flag,reparse:c.reparse});f.cache.flush("patterns")};f.cache=function(a,b){var c=a+"/"+(b||"");return E[c]||(E[c]=f(a,b))};f.cache.flush=function(a){"patterns"===a?z={}:E={}};f.escape=function(a){return l.replace.call(w(a),/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")};f.exec=function(a,b,c,d){var e="g";if(G&&(d||b.sticky&&!1!==d))e+="y";b[j]=b[j]||{captureNames:null};e=b[j][e]||(b[j][e]=v(b,{add:e,remove:!1===d?"y":""}));e.lastIndex=c=c||0;a=k.exec.call(e,a);d&&(a&&a.index!==c)&&(a=null);b.global&&(b.lastIndex=a?e.lastIndex:0);return a};f.forEach=function(a,b,c,d){for(var e=0,n=-1;e=f.exec(a,b,e);)c.call(d,e,++n,a,b),e=e.index+(e[0].length||1);return d};f.globalize=function(a){return v(a,{add:"g",addProto:!0})};f.install=function(a){a=L(a);!u.astral&&a.astral&&(f.cache.flush("patterns"),u.astral=!0);!u.natives&&a.natives&&O(!0)};f.isInstalled=function(a){return!!u[a]};f.isRegExp=function(a){return"[object RegExp]"===J.call(a)};f.match=function(a,b,c){var d=b.global&&"one"!==c||"all"===c,e=(d?"g":"")+(b.sticky?"y":"");b[j]=b[j]||{captureNames:null};e=b[j][e||"noGY"]||(b[j][e||"noGY"]=v(b,{add:e,remove:"one"===c?"g":""}));a=l.match.call(w(a),e);b.global&&(b.lastIndex="one"===c&&a?a.index+a[0].length:0);return d?a||[]:a&&a[0]};f.matchChain=function(a,b){return function d(a,n){var h=b[n].regex?b[n]:{regex:b[n]},i=[],g=function(a){if(h.backref){if(!(a.hasOwnProperty(h.backref)||+h.backref<a.length))throw new ReferenceError("Backreference to undefined group: "+h.backref);i.push(a[h.backref]||"")}else i.push(a[0])},m;for(m=0;m<a.length;++m)f.forEach(a[m],h.regex,g);return n===b.length-1||!i.length?i:d(i,n+1)}([a],0)};f.replace=function(a,b,c,d){var e=f.isRegExp(b),n=b.global&&"one"!==d||"all"===d,h=(n?"g":"")+(b.sticky?"y":""),i=b;e?(b[j]=b[j]||{captureNames:null},i=b[j][h||"noGY"]||(b[j][h||"noGY"]=v(b,{add:h,remove:"one"===d?"g":""}))):n&&(i=RegExp(f.escape(String(b)),"g"));a=k.replace.call(w(a),i,c);e&&b.global&&(b.lastIndex=0);return a};f.replaceEach=function(a,b){var c,d;for(c=0;c<b.length;++c)d=b[c],a=f.replace(a,d[0],d[1],d[2]);return a};f.split=function(a,b,c){return k.split.call(w(a),b,c)};f.test=function(a,b,c,d){return!!f.exec(a,b,c,d)};f.uninstall=function(a){a=L(a);u.astral&&a.astral&&(f.cache.flush("patterns"),u.astral=!1);u.natives&&a.natives&&O(!1)};f.union=function(a,b){var c=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*]/g,d=[],e=0,n,h,i,g=function(a,b,c){var d=h[e-n];if(b){if(++e,d)return"(?<"+d+">"}else if(c)return"\\"+(+c+n);return a},m;if(!D(a,"Array")||!a.length)throw new TypeError("Must provide a nonempty array of patterns to merge");for(m=0;m<a.length;++m)i=a[m],f.isRegExp(i)?(n=e,h=i[j]&&i[j].captureNames||[],d.push(l.replace.call(f(i.source).source,c,g))):d.push(f.escape(i));return f(d.join("|"),b)};k.exec=function(a){var b=this.lastIndex,c=l.exec.apply(this,arguments),d,e;if(c){!V&&(1<c.length&&-1<y(c,""))&&(d=v(this,{remove:"g"}),l.replace.call(String(a).slice(c.index),d,function(){var a=arguments.length,b;for(b=1;b<a-2;++b)void 0===arguments[b]&&(c[b]=void 0)}));if(this[j]&&this[j].captureNames)for(e=1;e<c.length;++e)(d=this[j].captureNames[e-1])&&(c[d]=c[e]);this.global&&(!c[0].length&&this.lastIndex>c.index)&&(this.lastIndex=c.index)}this.global||(this.lastIndex=b);return c};k.test=function(a){return!!k.exec.call(this,a)};k.match=function(a){var b;if(f.isRegExp(a)){if(a.global)return b=l.match.apply(this,arguments),a.lastIndex=0,b}else a=RegExp(a);return k.exec.call(a,w(this))};k.replace=function(a,b){var c=f.isRegExp(a),d,e,g;c?(a[j]&&(e=a[j].captureNames),d=a.lastIndex):a+="";g=D(b,"Function")?l.replace.call(String(this),a,function(){var d=arguments,i;if(e){d[0]=new String(d[0]);for(i=0;i<e.length;++i)e[i]&&(d[0][e[i]]=d[i+1])}if(c&&a.global)a.lastIndex=d[d.length-2]+d[0].length;return b.apply(void 0,d)}):l.replace.call(null==this?this:String(this),a,function(){var a=arguments;return l.replace.call(String(b),U,function(b,c,d){if(c){d=+c;if(d<=a.length-3)return a[d]||"";d=e?y(e,c):-1;if(d<0)throw new SyntaxError("Backreference to undefined group "+b);return a[d+1]||""}if(d==="$")return"$";if(d==="&"||+d===0)return a[0];if(d==="`")return a[a.length-1].slice(0,a[a.length-2]);if(d==="'")return a[a.length-1].slice(a[a.length-2]+a[0].length);d=+d;if(!isNaN(d)){if(d>a.length-3)throw new SyntaxError("Backreference to undefined group "+
|
2 |
+
b);return a[d]||""}throw new SyntaxError("Invalid token "+b);})});c&&(a.lastIndex=a.global?0:d);return g};k.split=function(a,b){if(!f.isRegExp(a))return l.split.apply(this,arguments);var c=String(this),d=[],e=a.lastIndex,g=0,h,b=(void 0===b?-1:b)>>>0;f.forEach(c,a,function(a){a.index+a[0].length>g&&(d.push(c.slice(g,a.index)),1<a.length&&a.index<c.length&&Array.prototype.push.apply(d,a.slice(1)),h=a[0].length,g=a.index+h)});g===c.length?(!l.test.call(a,"")||h)&&d.push(""):d.push(c.slice(g));a.lastIndex=e;return d.length>b?d.slice(0,b):d};t=f.addToken;t(/\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4})|x(?![\dA-Fa-f]{2}))/,function(a,b){if("B"===a[1]&&"default"===b)return a[0];throw new SyntaxError("Invalid escape "+a[0]);},{scope:"all"});t(/\[(\^?)]/,function(a){return a[1]?"[\\s\\S]":"\\b\\B"});t(/\(\?#[^)]*\)/,function(a,b,c){return K(a.input,a.index+a[0].length,c)?"":"(?:)"});t(/\s+|#.*/,function(a,b,c){return K(a.input,a.index+a[0].length,c)?"":"(?:)"},{flag:"x"});t(/\./,function(){return"[\\s\\S]"},{flag:"s"});t(/\\k<([\w$]+)>/,function(a){var b=isNaN(a[1])?y(this.captureNames,a[1])+1:+a[1],c=a.index+a[0].length;if(!b||b>this.captureNames.length)throw new SyntaxError("Backreference to undefined group "+a[0]);return"\\"+b+(c===a.input.length||isNaN(a.input.charAt(c))?"":"(?:)")});t(/\\(\d+)/,function(a,b){if(!("default"===b&&/^[1-9]/.test(a[1])&&+a[1]<=this.captureNames.length)&&"0"!==a[1])throw new SyntaxError("Cannot use octal escape or backreference to undefined group "+a[0]);return a[0]},{scope:"all"});t(/\(\?P?<([\w$]+)>/,function(a){if(!isNaN(a[1]))throw new SyntaxError("Cannot use integer as capture name "+a[0]);if("length"===a[1]||"__proto__"===a[1])throw new SyntaxError("Cannot use reserved word as capture name "+a[0]);if(-1<y(this.captureNames,a[1]))throw new SyntaxError("Cannot use same name for multiple groups "+a[0]);this.captureNames.push(a[1]);this.hasNamedCapture=!0;return"("});t(/\((?!\?)/,function(a,b,c){if(-1<c.indexOf("n"))return"(?:";this.captureNames.push(null);return"("},{optionalFlags:"n"});g=f;var Q=function(a){return g.isRegExp(a)?a[A]&&a[A].captureNames?a:g(a.source):g(a)},A="xregexp",R=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*]/g,W=g.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/,R],"g");g.build=function(a,b,c){var d=/^\(\?([\w$]+)\)/.exec(a),e={},f=0,h,i=0,l=[0],m,j;d&&(c=c||"",d[1].replace(/./g,function(a){c+=-1<c.indexOf(a)?"":a}));for(j in b)if(b.hasOwnProperty(j)){var d=Q(b[j]),k=e,q=j,p;p=d.source;var o=/^\^/,r=/\$$/;p=o.test(p)&&r.test(p.replace(/\\[\s\S]/g,""))?p.replace(o,"").replace(r,""):p;k[q]={pattern:p,names:d[A].captureNames||[]}}a=Q(a);m=a[A].captureNames||[];a=a.source.replace(W,function(a,b,c,d,g){var j=b||c,k;if(j){if(!e.hasOwnProperty(j))throw new ReferenceError("Undefined property "+a);if(b){k=m[i];l[++i]=++f;a="(?<"+(k||j)+">"}else a="(?:";h=f;return a+e[j].pattern.replace(R,function(a,b,c){if(b){k=e[j].names[f-h];++f;if(k)return"(?<"+k+">"}else if(c)return"\\"+(+c+h);return a})+")"}if(d){k=m[i];l[++i]=++f;if(k)return"(?<"+k+">"}else if(g)return"\\"+
|
3 |
+
l[+g];return a});return g(a,c)};var x=function(a,b,c,d){return{name:a,value:b,start:c,end:d}};g.matchRecursive=function(a,b,c,d,e){var d=d||"",e=e||{},f=-1<d.indexOf("g"),h=-1<d.indexOf("y"),i=d.replace(/y/g,""),j=e.escapeChar,e=e.valueNames,m=[],l=0,k=0,q=0,p=0,o,r,s,b=g(b,i),c=g(c,i);if(j){if(1<j.length)throw Error("Cannot use more than one escape character");j=g.escape(j);s=RegExp("(?:"+j+"[\\S\\s]|(?:(?!"+g.union([b,c]).source+")[^"+j+"])+)+",d.replace(/[^im]+/g,""))}for(;;){j&&(q+=(g.exec(a,s,q,"sticky")||[""])[0].length);d=g.exec(a,b,q);i=g.exec(a,c,q);d&&i&&(d.index<=i.index?i=null:d=null);if(d||i)k=(d||i).index,q=k+(d||i)[0].length;else if(!l)break;if(h&&!l&&k>p)break;if(d)l||(o=k,r=q),++l;else if(i&&l){if(!--l&&(e?(e[0]&&o>p&&m.push(x(e[0],a.slice(p,o),p,o)),e[1]&&m.push(x(e[1],a.slice(o,r),o,r)),e[2]&&m.push(x(e[2],a.slice(r,k),r,k)),e[3]&&m.push(x(e[3],a.slice(k,q),k,q))):m.push(a.slice(r,k)),p=q,!f))break}else throw Error("Unbalanced delimiter found in string");k===q&&++q}f&&(!h&&e&&e[0]&&a.length>p)&&m.push(x(e[0],a.slice(p),p,a.length));return m};var B=function(a){return a.replace(/[- _]+/g,"").toLowerCase()},H=function(a){for(;4>a.length;)a="0"+a;return a},S=function(a){var b=/^\\[xu](.+)/.exec(a);return b?parseInt(b[1],16):a.charCodeAt("\\"===a.charAt(0)?1:0)},o={};g.addToken(/\\([pP])(?:{(\^?)([^}]*)}|([A-Za-z]))/,function(a,b,c){var d="P"===a[1]||!!a[2],e=-1<c.indexOf("A")||g.isInstalled("astral"),c=B(a[4]||a[3]),f=o[c];if("P"===a[1]&&a[2])throw new SyntaxError("Invalid double negation "+
|
4 |
+
a[0]);if(!o.hasOwnProperty(c))throw new SyntaxError("Unknown Unicode token "+a[0]);if(f.inverseOf){c=B(f.inverseOf);if(!o.hasOwnProperty(c))throw new ReferenceError("Unicode token missing data "+a[0]+" -> "+f.inverseOf);f=o[c];d=!d}if(!f.bmp&&!e)throw new SyntaxError("Astral mode required for Unicode token "+a[0]);if(e){if("class"===b)throw new SyntaxError("Astral mode does not support Unicode tokens within character classes");a=d?"a!":"a=";if(!(b=o[c][a]))b=o[c],c=o[c],e="",c.bmp&&!c.isBmpLast&&(e="["+c.bmp+"]"+(c.astral?"|":"")),c.astral&&(e+=c.astral),c.isBmpLast&&c.bmp&&(e+=(c.astral?"|":"")+"["+c.bmp+"]"),b=b[a]=d?"(?:(?!"+e+")(?:[\ud800-\udbff][\udc00-\udfff]|[\x00-\uffff]))":"(?:"+e+")";return b}if("class"===b)if(d){if(!(d=o[c]["b!"])){var d=o[c],h="",i=-1,j;g.forEach(o[c].bmp,/(\\x..|\\u....|\\?[\s\S])(?:-(\\x..|\\u....|\\?[\s\S]))?/,function(a){j=S(a[1]);j>i+1&&(h+="\\u"+H(parseInt(i+1,10).toString(16)),j>i+2&&(h+="-\\u"+H(parseInt(j-1,10).toString(16))));i=S(a[2]||a[1])});65535>i&&(h+="\\u"+H(parseInt(i+1,10).toString(16)),65534>i&&(h+="-\\uFFFF"));d=d["b!"]=h}}else d=f.bmp;else d=(d?"[^":"[")+f.bmp+"]";return d},{scope:"all",optionalFlags:"A"});g.addUnicodeData=function(a){var b,c;for(c=0;c<a.length;++c){b=a[c];if(!b.name)throw Error("Unicode token requires name");if(!b.inverseOf&&!b.bmp&&!b.astral)throw Error("Unicode token has no character data "+b.name);o[B(b.name)]=b;b.alias&&(o[B(b.alias)]=b)}g.cache.flush("patterns")};g.addUnicodeData([{name:"L",alias:"Letter",bmp:"A-Za-z\u00aa\u00b5\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2183\u2184\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005\u3006\u3031-\u3035\u303b\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6e5\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc",astral:"\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude33\ude60-\ude7c\udf00-\udf35\udf40-\udf55\udf60-\udf72]|\ud801[\udc00-\udc9d]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1e\udf30-\udf40\udf42-\udf49\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud81a[\udc00-\ude38]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd83-\uddb2\uddc1-\uddc4]|\ud86e[\udc00-\udc1d]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud803[\udc00-\udc48]|\ud80d[\udc00-\udc2e]|\ud805[\ude80-\udeaa]|\ud87e[\udc00-\ude1d]|\ud81b[\udf00-\udf44\udf50\udf93-\udf9f]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud82c[\udc00\udc01]|[\ud80c\ud840-\ud868\ud86a-\ud86c][\udc00-\udfff]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud808[\udc00-\udf6e]"}]);if(!g.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Blocks");g.addUnicodeData([{name:"InAegean_Numbers",astral:"\ud800[\udd00-\udd3f]"},{name:"InAlchemical_Symbols",astral:"\ud83d[\udf00-\udf7f]"},{name:"InAlphabetic_Presentation_Forms",bmp:"\ufb00-\ufb4f"},{name:"InAncient_Greek_Musical_Notation",astral:"\ud834[\ude00-\ude4f]"},{name:"InAncient_Greek_Numbers",astral:"\ud800[\udd40-\udd8f]"},{name:"InAncient_Symbols",astral:"\ud800[\udd90-\uddcf]"},{name:"InArabic",bmp:"\u0600-\u06ff"},{name:"InArabic_Extended_A",bmp:"\u08a0-\u08ff"},{name:"InArabic_Mathematical_Alphabetic_Symbols",astral:"\ud83b[\ude00-\udeff]"},{name:"InArabic_Presentation_Forms_A",bmp:"\ufb50-\ufdff"},{name:"InArabic_Presentation_Forms_B",bmp:"\ufe70-\ufeff"},{name:"InArabic_Supplement",bmp:"\u0750-\u077f"},{name:"InArmenian",bmp:"\u0530-\u058f"},{name:"InArrows",bmp:"\u2190-\u21ff"},{name:"InAvestan",astral:"\ud802[\udf00-\udf3f]"},{name:"InBalinese",bmp:"\u1b00-\u1b7f"},{name:"InBamum",bmp:"\ua6a0-\ua6ff"},{name:"InBamum_Supplement",astral:"\ud81a[\udc00-\ude3f]"},{name:"InBasic_Latin",bmp:"\x00-\u007f"},{name:"InBatak",bmp:"\u1bc0-\u1bff"},{name:"InBengali",bmp:"\u0980-\u09ff"},{name:"InBlock_Elements",bmp:"\u2580-\u259f"},{name:"InBopomofo",bmp:"\u3100-\u312f"},{name:"InBopomofo_Extended",bmp:"\u31a0-\u31bf"},{name:"InBox_Drawing",bmp:"\u2500-\u257f"},{name:"InBrahmi",astral:"\ud804[\udc00-\udc7f]"},{name:"InBraille_Patterns",bmp:"\u2800-\u28ff"},{name:"InBuginese",bmp:"\u1a00-\u1a1f"},{name:"InBuhid",bmp:"\u1740-\u175f"},{name:"InByzantine_Musical_Symbols",astral:"\ud834[\udc00-\udcff]"},{name:"InCJK_Compatibility",bmp:"\u3300-\u33ff"},{name:"InCJK_Compatibility_Forms",bmp:"\ufe30-\ufe4f"},{name:"InCJK_Compatibility_Ideographs",bmp:"\uf900-\ufaff"},{name:"InCJK_Compatibility_Ideographs_Supplement",astral:"\ud87e[\udc00-\ude1f]"},{name:"InCJK_Radicals_Supplement",bmp:"\u2e80-\u2eff"},{name:"InCJK_Strokes",bmp:"\u31c0-\u31ef"},{name:"InCJK_Symbols_and_Punctuation",bmp:"\u3000-\u303f"},{name:"InCJK_Unified_Ideographs",bmp:"\u4e00-\u9fff"},{name:"InCJK_Unified_Ideographs_Extension_A",bmp:"\u3400-\u4dbf"},{name:"InCJK_Unified_Ideographs_Extension_B",astral:"[\ud840-\ud868][\udc00-\udfff]|\ud869[\udc00-\udedf]"},{name:"InCJK_Unified_Ideographs_Extension_C",astral:"\ud86d[\udc00-\udf3f]|[\ud86a-\ud86c][\udc00-\udfff]|\ud869[\udf00-\udfff]"},{name:"InCJK_Unified_Ideographs_Extension_D",astral:"\ud86d[\udf40-\udfff]|\ud86e[\udc00-\udc1f]"},{name:"InCarian",astral:"\ud800[\udea0-\udedf]"},{name:"InChakma",astral:"\ud804[\udd00-\udd4f]"},{name:"InCham",bmp:"\uaa00-\uaa5f"},{name:"InCherokee",bmp:"\u13a0-\u13ff"},{name:"InCombining_Diacritical_Marks",bmp:"\u0300-\u036f"},{name:"InCombining_Diacritical_Marks_Supplement",bmp:"\u1dc0-\u1dff"},{name:"InCombining_Diacritical_Marks_for_Symbols",bmp:"\u20d0-\u20ff"},{name:"InCombining_Half_Marks",bmp:"\ufe20-\ufe2f"},{name:"InCommon_Indic_Number_Forms",bmp:"\ua830-\ua83f"},{name:"InControl_Pictures",bmp:"\u2400-\u243f"},{name:"InCoptic",bmp:"\u2c80-\u2cff"},{name:"InCounting_Rod_Numerals",astral:"\ud834[\udf60-\udf7f]"},{name:"InCuneiform",astral:"\ud808[\udc00-\udfff]"},{name:"InCuneiform_Numbers_and_Punctuation",astral:"\ud809[\udc00-\udc7f]"},{name:"InCurrency_Symbols",bmp:"\u20a0-\u20cf"},{name:"InCypriot_Syllabary",astral:"\ud802[\udc00-\udc3f]"},{name:"InCyrillic",bmp:"\u0400-\u04ff"},{name:"InCyrillic_Extended_A",bmp:"\u2de0-\u2dff"},{name:"InCyrillic_Extended_B",bmp:"\ua640-\ua69f"},{name:"InCyrillic_Supplement",bmp:"\u0500-\u052f"},{name:"InDeseret",astral:"\ud801[\udc00-\udc4f]"},{name:"InDevanagari",bmp:"\u0900-\u097f"},{name:"InDevanagari_Extended",bmp:"\ua8e0-\ua8ff"},{name:"InDingbats",bmp:"\u2700-\u27bf"},{name:"InDomino_Tiles",astral:"\ud83c[\udc30-\udc9f]"},{name:"InEgyptian_Hieroglyphs",astral:"\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2f]"},{name:"InEmoticons",astral:"\ud83d[\ude00-\ude4f]"},{name:"InEnclosed_Alphanumeric_Supplement",astral:"\ud83c[\udd00-\uddff]"},{name:"InEnclosed_Alphanumerics",bmp:"\u2460-\u24ff"},{name:"InEnclosed_CJK_Letters_and_Months",bmp:"\u3200-\u32ff"},{name:"InEnclosed_Ideographic_Supplement",astral:"\ud83c[\ude00-\udeff]"},{name:"InEthiopic",bmp:"\u1200-\u137f"},{name:"InEthiopic_Extended",bmp:"\u2d80-\u2ddf"},{name:"InEthiopic_Extended_A",bmp:"\uab00-\uab2f"},{name:"InEthiopic_Supplement",bmp:"\u1380-\u139f"},{name:"InGeneral_Punctuation",bmp:"\u2000-\u206f"},{name:"InGeometric_Shapes",bmp:"\u25a0-\u25ff"},{name:"InGeorgian",bmp:"\u10a0-\u10ff"},{name:"InGeorgian_Supplement",bmp:"\u2d00-\u2d2f"},{name:"InGlagolitic",bmp:"\u2c00-\u2c5f"},{name:"InGothic",astral:"\ud800[\udf30-\udf4f]"},{name:"InGreek_Extended",bmp:"\u1f00-\u1fff"},{name:"InGreek_and_Coptic",bmp:"\u0370-\u03ff"},{name:"InGujarati",bmp:"\u0a80-\u0aff"},{name:"InGurmukhi",bmp:"\u0a00-\u0a7f"},{name:"InHalfwidth_and_Fullwidth_Forms",bmp:"\uff00-\uffef"},{name:"InHangul_Compatibility_Jamo",bmp:"\u3130-\u318f"},{name:"InHangul_Jamo",bmp:"\u1100-\u11ff"},{name:"InHangul_Jamo_Extended_A",bmp:"\ua960-\ua97f"},{name:"InHangul_Jamo_Extended_B",bmp:"\ud7b0-\ud7ff"},{name:"InHangul_Syllables",bmp:"\uac00-\ud7af"},{name:"InHanunoo",bmp:"\u1720-\u173f"},{name:"InHebrew",bmp:"\u0590-\u05ff"},{name:"InHigh_Private_Use_Surrogates",bmp:"\udb80-\udbff"},{name:"InHigh_Surrogates",bmp:"\ud800-\udb7f"},{name:"InHiragana",bmp:"\u3040-\u309f"},{name:"InIPA_Extensions",bmp:"\u0250-\u02af"},{name:"InIdeographic_Description_Characters",bmp:"\u2ff0-\u2fff"},{name:"InImperial_Aramaic",astral:"\ud802[\udc40-\udc5f]"},{name:"InInscriptional_Pahlavi",astral:"\ud802[\udf60-\udf7f]"},{name:"InInscriptional_Parthian",astral:"\ud802[\udf40-\udf5f]"},{name:"InJavanese",bmp:"\ua980-\ua9df"},{name:"InKaithi",astral:"\ud804[\udc80-\udccf]"},{name:"InKana_Supplement",astral:"\ud82c[\udc00-\udcff]"},{name:"InKanbun",bmp:"\u3190-\u319f"},{name:"InKangxi_Radicals",bmp:"\u2f00-\u2fdf"},{name:"InKannada",bmp:"\u0c80-\u0cff"},{name:"InKatakana",bmp:"\u30a0-\u30ff"},{name:"InKatakana_Phonetic_Extensions",bmp:"\u31f0-\u31ff"},{name:"InKayah_Li",bmp:"\ua900-\ua92f"},{name:"InKharoshthi",astral:"\ud802[\ude00-\ude5f]"},{name:"InKhmer",bmp:"\u1780-\u17ff"},{name:"InKhmer_Symbols",bmp:"\u19e0-\u19ff"},{name:"InLao",bmp:"\u0e80-\u0eff"},{name:"InLatin_Extended_Additional",bmp:"\u1e00-\u1eff"},{name:"InLatin_Extended_A",bmp:"\u0100-\u017f"},{name:"InLatin_Extended_B",bmp:"\u0180-\u024f"},{name:"InLatin_Extended_C",bmp:"\u2c60-\u2c7f"},{name:"InLatin_Extended_D",bmp:"\ua720-\ua7ff"},{name:"InLatin_1_Supplement",bmp:"\u0080-\u00ff"},{name:"InLepcha",bmp:"\u1c00-\u1c4f"},{name:"InLetterlike_Symbols",bmp:"\u2100-\u214f"},{name:"InLimbu",bmp:"\u1900-\u194f"},{name:"InLinear_B_Ideograms",astral:"\ud800[\udc80-\udcff]"},{name:"InLinear_B_Syllabary",astral:"\ud800[\udc00-\udc7f]"},{name:"InLisu",bmp:"\ua4d0-\ua4ff"},{name:"InLow_Surrogates",bmp:"\udc00-\udfff"},{name:"InLycian",astral:"\ud800[\ude80-\ude9f]"},{name:"InLydian",astral:"\ud802[\udd20-\udd3f]"},{name:"InMahjong_Tiles",astral:"\ud83c[\udc00-\udc2f]"},{name:"InMalayalam",bmp:"\u0d00-\u0d7f"},{name:"InMandaic",bmp:"\u0840-\u085f"},{name:"InMathematical_Alphanumeric_Symbols",astral:"\ud835[\udc00-\udfff]"},{name:"InMathematical_Operators",bmp:"\u2200-\u22ff"},{name:"InMeetei_Mayek",bmp:"\uabc0-\uabff"},{name:"InMeetei_Mayek_Extensions",bmp:"\uaae0-\uaaff"},{name:"InMeroitic_Cursive",astral:"\ud802[\udda0-\uddff]"},{name:"InMeroitic_Hieroglyphs",astral:"\ud802[\udd80-\udd9f]"},{name:"InMiao",astral:"\ud81b[\udf00-\udf9f]"},{name:"InMiscellaneous_Mathematical_Symbols_A",bmp:"\u27c0-\u27ef"},{name:"InMiscellaneous_Mathematical_Symbols_B",bmp:"\u2980-\u29ff"},{name:"InMiscellaneous_Symbols",bmp:"\u2600-\u26ff"},{name:"InMiscellaneous_Symbols_And_Pictographs",astral:"\ud83d[\udc00-\uddff]|\ud83c[\udf00-\udfff]"},{name:"InMiscellaneous_Symbols_and_Arrows",bmp:"\u2b00-\u2bff"},{name:"InMiscellaneous_Technical",bmp:"\u2300-\u23ff"},{name:"InModifier_Tone_Letters",bmp:"\ua700-\ua71f"},{name:"InMongolian",bmp:"\u1800-\u18af"},{name:"InMusical_Symbols",astral:"\ud834[\udd00-\uddff]"},{name:"InMyanmar",bmp:"\u1000-\u109f"},{name:"InMyanmar_Extended_A",bmp:"\uaa60-\uaa7f"},{name:"InNKo",bmp:"\u07c0-\u07ff"},{name:"InNew_Tai_Lue",bmp:"\u1980-\u19df"},{name:"InNumber_Forms",bmp:"\u2150-\u218f"},{name:"InOgham",bmp:"\u1680-\u169f"},{name:"InOl_Chiki",bmp:"\u1c50-\u1c7f"},{name:"InOld_Italic",astral:"\ud800[\udf00-\udf2f]"},{name:"InOld_Persian",astral:"\ud800[\udfa0-\udfdf]"},{name:"InOld_South_Arabian",astral:"\ud802[\ude60-\ude7f]"},{name:"InOld_Turkic",astral:"\ud803[\udc00-\udc4f]"},{name:"InOptical_Character_Recognition",bmp:"\u2440-\u245f"},{name:"InOriya",bmp:"\u0b00-\u0b7f"},{name:"InOsmanya",astral:"\ud801[\udc80-\udcaf]"},{name:"InPhags_pa",bmp:"\ua840-\ua87f"},{name:"InPhaistos_Disc",astral:"\ud800[\uddd0-\uddff]"},{name:"InPhoenician",astral:"\ud802[\udd00-\udd1f]"},{name:"InPhonetic_Extensions",bmp:"\u1d00-\u1d7f"},{name:"InPhonetic_Extensions_Supplement",bmp:"\u1d80-\u1dbf"},{name:"InPlaying_Cards",astral:"\ud83c[\udca0-\udcff]"},{name:"InPrivate_Use_Area",bmp:"\ue000-\uf8ff"},{name:"InRejang",bmp:"\ua930-\ua95f"},{name:"InRumi_Numeral_Symbols",astral:"\ud803[\ude60-\ude7f]"},{name:"InRunic",bmp:"\u16a0-\u16ff"},{name:"InSamaritan",bmp:"\u0800-\u083f"},{name:"InSaurashtra",bmp:"\ua880-\ua8df"},{name:"InSharada",astral:"\ud804[\udd80-\udddf]"},{name:"InShavian",astral:"\ud801[\udc50-\udc7f]"},{name:"InSinhala",bmp:"\u0d80-\u0dff"},{name:"InSmall_Form_Variants",bmp:"\ufe50-\ufe6f"},{name:"InSora_Sompeng",astral:"\ud804[\udcd0-\udcff]"},{name:"InSpacing_Modifier_Letters",bmp:"\u02b0-\u02ff"},{name:"InSpecials",bmp:"\ufff0-\uffff"},{name:"InSundanese",bmp:"\u1b80-\u1bbf"},{name:"InSundanese_Supplement",bmp:"\u1cc0-\u1ccf"},{name:"InSuperscripts_and_Subscripts",bmp:"\u2070-\u209f"},{name:"InSupplemental_Arrows_A",bmp:"\u27f0-\u27ff"},{name:"InSupplemental_Arrows_B",bmp:"\u2900-\u297f"},{name:"InSupplemental_Mathematical_Operators",bmp:"\u2a00-\u2aff"},{name:"InSupplemental_Punctuation",bmp:"\u2e00-\u2e7f"},{name:"InSupplementary_Private_Use_Area_A",astral:"[\udb80-\udbbf][\udc00-\udfff]"},{name:"InSupplementary_Private_Use_Area_B",astral:"[\udbc0-\udbff][\udc00-\udfff]"},{name:"InSyloti_Nagri",bmp:"\ua800-\ua82f"},{name:"InSyriac",bmp:"\u0700-\u074f"},{name:"InTagalog",bmp:"\u1700-\u171f"},{name:"InTagbanwa",bmp:"\u1760-\u177f"},{name:"InTags",astral:"\udb40[\udc00-\udc7f]"},{name:"InTai_Le",bmp:"\u1950-\u197f"},{name:"InTai_Tham",bmp:"\u1a20-\u1aaf"},{name:"InTai_Viet",bmp:"\uaa80-\uaadf"},{name:"InTai_Xuan_Jing_Symbols",astral:"\ud834[\udf00-\udf5f]"},{name:"InTakri",astral:"\ud805[\ude80-\udecf]"},{name:"InTamil",bmp:"\u0b80-\u0bff"},{name:"InTelugu",bmp:"\u0c00-\u0c7f"},{name:"InThaana",bmp:"\u0780-\u07bf"},{name:"InThai",bmp:"\u0e00-\u0e7f"},{name:"InTibetan",bmp:"\u0f00-\u0fff"},{name:"InTifinagh",bmp:"\u2d30-\u2d7f"},{name:"InTransport_And_Map_Symbols",astral:"\ud83d[\ude80-\udeff]"},{name:"InUgaritic",astral:"\ud800[\udf80-\udf9f]"},{name:"InUnified_Canadian_Aboriginal_Syllabics",bmp:"\u1400-\u167f"},{name:"InUnified_Canadian_Aboriginal_Syllabics_Extended",bmp:"\u18b0-\u18ff"},{name:"InVai",bmp:"\ua500-\ua63f"},{name:"InVariation_Selectors",bmp:"\ufe00-\ufe0f"},{name:"InVariation_Selectors_Supplement",astral:"\udb40[\udd00-\uddef]"},{name:"InVedic_Extensions",bmp:"\u1cd0-\u1cff"},{name:"InVertical_Forms",bmp:"\ufe10-\ufe1f"},{name:"InYi_Radicals",bmp:"\ua490-\ua4cf"},{name:"InYi_Syllables",bmp:"\ua000-\ua48f"},{name:"InYijing_Hexagram_Symbols",bmp:"\u4dc0-\u4dff"}]);if(!g.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Categories");g.addUnicodeData([{name:"C",alias:"Other",isBmpLast:!0,bmp:"\x00-\u001f\u007f-\u009f\u00ad\u0378\u0379\u037f-\u0383\u038b\u038d\u03a2\u0528-\u0530\u0557\u0558\u0560\u0588\u058b-\u058e\u0590\u05c8-\u05cf\u05eb-\u05ef\u05f5-\u0605\u061c\u061d\u06dd\u070e\u070f\u074b\u074c\u07b2-\u07bf\u07fb-\u07ff\u082e\u082f\u083f\u085c\u085d\u085f-\u089f\u08a1\u08ad-\u08e3\u08ff\u0978\u0980\u0984\u098d\u098e\u0991\u0992\u09a9\u09b1\u09b3-\u09b5\u09ba\u09bb\u09c5\u09c6\u09c9\u09ca\u09cf-\u09d6\u09d8-\u09db\u09de\u09e4\u09e5\u09fc-\u0a00\u0a04\u0a0b-\u0a0e\u0a11\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a\u0a3b\u0a3d\u0a43-\u0a46\u0a49\u0a4a\u0a4e-\u0a50\u0a52-\u0a58\u0a5d\u0a5f-\u0a65\u0a76-\u0a80\u0a84\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba\u0abb\u0ac6\u0aca\u0ace\u0acf\u0ad1-\u0adf\u0ae4\u0ae5\u0af2-\u0b00\u0b04\u0b0d\u0b0e\u0b11\u0b12\u0b29\u0b31\u0b34\u0b3a\u0b3b\u0b45\u0b46\u0b49\u0b4a\u0b4e-\u0b55\u0b58-\u0b5b\u0b5e\u0b64\u0b65\u0b78-\u0b81\u0b84\u0b8b-\u0b8d\u0b91\u0b96-\u0b98\u0b9b\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bba-\u0bbd\u0bc3-\u0bc5\u0bc9\u0bce\u0bcf\u0bd1-\u0bd6\u0bd8-\u0be5\u0bfb-\u0c00\u0c04\u0c0d\u0c11\u0c29\u0c34\u0c3a-\u0c3c\u0c45\u0c49\u0c4e-\u0c54\u0c57\u0c5a-\u0c5f\u0c64\u0c65\u0c70-\u0c77\u0c80\u0c81\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba\u0cbb\u0cc5\u0cc9\u0cce-\u0cd4\u0cd7-\u0cdd\u0cdf\u0ce4\u0ce5\u0cf0\u0cf3-\u0d01\u0d04\u0d0d\u0d11\u0d3b\u0d3c\u0d45\u0d49\u0d4f-\u0d56\u0d58-\u0d5f\u0d64\u0d65\u0d76-\u0d78\u0d80\u0d81\u0d84\u0d97-\u0d99\u0db2\u0dbc\u0dbe\u0dbf\u0dc7-\u0dc9\u0dcb-\u0dce\u0dd5\u0dd7\u0de0-\u0df1\u0df5-\u0e00\u0e3b-\u0e3e\u0e5c-\u0e80\u0e83\u0e85\u0e86\u0e89\u0e8b\u0e8c\u0e8e-\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8\u0ea9\u0eac\u0eba\u0ebe\u0ebf\u0ec5\u0ec7\u0ece\u0ecf\u0eda\u0edb\u0ee0-\u0eff\u0f48\u0f6d-\u0f70\u0f98\u0fbd\u0fcd\u0fdb-\u0fff\u10c6\u10c8-\u10cc\u10ce\u10cf\u1249\u124e\u124f\u1257\u1259\u125e\u125f\u1289\u128e\u128f\u12b1\u12b6\u12b7\u12bf\u12c1\u12c6\u12c7\u12d7\u1311\u1316\u1317\u135b\u135c\u137d-\u137f\u139a-\u139f\u13f5-\u13ff\u169d-\u169f\u16f1-\u16ff\u170d\u1715-\u171f\u1737-\u173f\u1754-\u175f\u176d\u1771\u1774-\u177f\u17de\u17df\u17ea-\u17ef\u17fa-\u17ff\u180f\u181a-\u181f\u1878-\u187f\u18ab-\u18af\u18f6-\u18ff\u191d-\u191f\u192c-\u192f\u193c-\u193f\u1941-\u1943\u196e\u196f\u1975-\u197f\u19ac-\u19af\u19ca-\u19cf\u19db-\u19dd\u1a1c\u1a1d\u1a5f\u1a7d\u1a7e\u1a8a-\u1a8f\u1a9a-\u1a9f\u1aae-\u1aff\u1b4c-\u1b4f\u1b7d-\u1b7f\u1bf4-\u1bfb\u1c38-\u1c3a\u1c4a-\u1c4c\u1c80-\u1cbf\u1cc8-\u1ccf\u1cf7-\u1cff\u1de7-\u1dfb\u1f16\u1f17\u1f1e\u1f1f\u1f46\u1f47\u1f4e\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e\u1f7f\u1fb5\u1fc5\u1fd4\u1fd5\u1fdc\u1ff0\u1ff1\u1ff5\u1fff\u200b-\u200f\u202a-\u202e\u2060-\u206f\u2072\u2073\u208f\u209d-\u209f\u20bb-\u20cf\u20f1-\u20ff\u218a-\u218f\u23f4-\u23ff\u2427-\u243f\u244b-\u245f\u2700\u2b4d-\u2b4f\u2b5a-\u2bff\u2c2f\u2c5f\u2cf4-\u2cf8\u2d26\u2d28-\u2d2c\u2d2e\u2d2f\u2d68-\u2d6e\u2d71-\u2d7e\u2d97-\u2d9f\u2da7\u2daf\u2db7\u2dbf\u2dc7\u2dcf\u2dd7\u2ddf\u2e3c-\u2e7f\u2e9a\u2ef4-\u2eff\u2fd6-\u2fef\u2ffc-\u2fff\u3040\u3097\u3098\u3100-\u3104\u312e-\u3130\u318f\u31bb-\u31bf\u31e4-\u31ef\u321f\u32ff\u4db6-\u4dbf\u9fcd-\u9fff\ua48d-\ua48f\ua4c7-\ua4cf\ua62c-\ua63f\ua698-\ua69e\ua6f8-\ua6ff\ua78f\ua794-\ua79f\ua7ab-\ua7f7\ua82c-\ua82f\ua83a-\ua83f\ua878-\ua87f\ua8c5-\ua8cd\ua8da-\ua8df\ua8fc-\ua8ff\ua954-\ua95e\ua97d-\ua97f\ua9ce\ua9da-\ua9dd\ua9e0-\ua9ff\uaa37-\uaa3f\uaa4e\uaa4f\uaa5a\uaa5b\uaa7c-\uaa7f\uaac3-\uaada\uaaf7-\uab00\uab07\uab08\uab0f\uab10\uab17-\uab1f\uab27\uab2f-\uabbf\uabee\uabef\uabfa-\uabff\ud7a4-\ud7af\ud7c7-\ud7ca\ud7fc-\uf8ff\ufa6e\ufa6f\ufada-\ufaff\ufb07-\ufb12\ufb18-\ufb1c\ufb37\ufb3d\ufb3f\ufb42\ufb45\ufbc2-\ufbd2\ufd40-\ufd4f\ufd90\ufd91\ufdc8-\ufdef\ufdfe\ufdff\ufe1a-\ufe1f\ufe27-\ufe2f\ufe53\ufe67\ufe6c-\ufe6f\ufe75\ufefd-\uff00\uffbf-\uffc1\uffc8\uffc9\uffd0\uffd1\uffd8\uffd9\uffdd-\uffdf\uffe7\uffef-\ufffb\ufffe\uffff",astral:"\ud808[\udf6f-\udfff]|\ud809[\udc63-\udc6f\udc74-\udfff]|\ud804[\udc4e-\udc51\udc70-\udc7f\udcbd\udcc2-\udccf\udce9-\udcef\udcfa-\udcff\udd35\udd44-\udd7f\uddc9-\uddcf\uddda-\udfff]|\ud802[\udc06\udc07\udc09\udc36\udc39-\udc3b\udc3d\udc3e\udc56\udc60-\udcff\udd1c-\udd1e\udd3a-\udd3e\udd40-\udd7f\uddb8-\uddbd\uddc0-\uddff\ude04\ude07-\ude0b\ude14\ude18\ude34-\ude37\ude3b-\ude3e\ude48-\ude4f\ude59-\ude5f\ude80-\udeff\udf36-\udf38\udf56\udf57\udf73-\udf77\udf80-\udfff]|\ud86d[\udf35-\udf3f]|\ud81b[\udc00-\udeff\udf45-\udf4f\udf7f-\udf8e\udfa0-\udfff]|\ud86e[\udc1e-\udfff]|\ud800[\udc0c\udc27\udc3b\udc3e\udc4e\udc4f\udc5e-\udc7f\udcfb-\udcff\udd03-\udd06\udd34-\udd36\udd8b-\udd8f\udd9c-\uddcf\uddfe-\ude7f\ude9d-\ude9f\uded1-\udeff\udf1f\udf24-\udf2f\udf4b-\udf7f\udf9e\udfc4-\udfc7\udfd6-\udfff]|\ud869[\uded7-\udeff]|\ud83b[\udc00-\uddff\ude04\ude20\ude23\ude25\ude26\ude28\ude33\ude38\ude3a\ude3c-\ude41\ude43-\ude46\ude48\ude4a\ude4c\ude50\ude53\ude55\ude56\ude58\ude5a\ude5c\ude5e\ude60\ude63\ude65\ude66\ude6b\ude73\ude78\ude7d\ude7f\ude8a\ude9c-\udea0\udea4\udeaa\udebc-\udeef\udef2-\udfff]|\ud87e[\ude1e-\udfff]|\udb40[\udc00-\udcff\uddf0-\udfff]|\ud803[\udc49-\ude5f\ude7f-\udfff]|\ud80d[\udc2f-\udfff]|[\ud806\ud807\ud80a\ud80b\ud80e-\ud819\ud81c-\ud82b\ud82d-\ud833\ud836-\ud83a\ud83e\ud83f\ud86f-\ud87d\ud87f-\udb3f\udb41-\udbff][\udc00-\udfff]|\ud83d[\udc3f\udc41\udcf8\udcfd-\udcff\udd3e\udd3f\udd44-\udd4f\udd68-\uddfa\ude41-\ude44\ude50-\ude7f\udec6-\udeff\udf74-\udfff]|\ud83c[\udc2c-\udc2f\udc94-\udc9f\udcaf\udcb0\udcbf\udcc0\udcd0\udce0-\udcff\udd0b-\udd0f\udd2f\udd6c-\udd6f\udd9b-\udde5\ude03-\ude0f\ude3b-\ude3f\ude49-\ude4f\ude52-\udeff\udf21-\udf2f\udf36\udf7d-\udf7f\udf94-\udf9f\udfc5\udfcb-\udfdf\udff1-\udfff]|\ud835[\udc55\udc9d\udca0\udca1\udca3\udca4\udca7\udca8\udcad\udcba\udcbc\udcc4\udd06\udd0b\udd0c\udd15\udd1d\udd3a\udd3f\udd45\udd47-\udd49\udd51\udea6\udea7\udfcc\udfcd]|\ud81a[\ude39-\udfff]|\ud834[\udcf6-\udcff\udd27\udd28\udd73-\udd7a\uddde-\uddff\ude46-\udeff\udf57-\udf5f\udf72-\udfff]|\ud801[\udc9e\udc9f\udcaa-\udfff]|\ud805[\udc00-\ude7f\udeb8-\udebf\udeca-\udfff]|\ud82c[\udc02-\udfff]"},{name:"Cc",alias:"Control",bmp:"\x00-\u001f\u007f-\u009f"},{name:"Cf",alias:"Format",bmp:"\u00ad\u0600-\u0604\u06dd\u070f\u200b-\u200f\u202a-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb",astral:"\udb40[\udc01\udc20-\udc7f]|\ud834[\udd73-\udd7a]|\ud804\udcbd"},{name:"Cn",alias:"Unassigned",bmp:"\u0378\u0379\u037f-\u0383\u038b\u038d\u03a2\u0528-\u0530\u0557\u0558\u0560\u0588\u058b-\u058e\u0590\u05c8-\u05cf\u05eb-\u05ef\u05f5-\u05ff\u0605\u061c\u061d\u070e\u074b\u074c\u07b2-\u07bf\u07fb-\u07ff\u082e\u082f\u083f\u085c\u085d\u085f-\u089f\u08a1\u08ad-\u08e3\u08ff\u0978\u0980\u0984\u098d\u098e\u0991\u0992\u09a9\u09b1\u09b3-\u09b5\u09ba\u09bb\u09c5\u09c6\u09c9\u09ca\u09cf-\u09d6\u09d8-\u09db\u09de\u09e4\u09e5\u09fc-\u0a00\u0a04\u0a0b-\u0a0e\u0a11\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a\u0a3b\u0a3d\u0a43-\u0a46\u0a49\u0a4a\u0a4e-\u0a50\u0a52-\u0a58\u0a5d\u0a5f-\u0a65\u0a76-\u0a80\u0a84\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba\u0abb\u0ac6\u0aca\u0ace\u0acf\u0ad1-\u0adf\u0ae4\u0ae5\u0af2-\u0b00\u0b04\u0b0d\u0b0e\u0b11\u0b12\u0b29\u0b31\u0b34\u0b3a\u0b3b\u0b45\u0b46\u0b49\u0b4a\u0b4e-\u0b55\u0b58-\u0b5b\u0b5e\u0b64\u0b65\u0b78-\u0b81\u0b84\u0b8b-\u0b8d\u0b91\u0b96-\u0b98\u0b9b\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bba-\u0bbd\u0bc3-\u0bc5\u0bc9\u0bce\u0bcf\u0bd1-\u0bd6\u0bd8-\u0be5\u0bfb-\u0c00\u0c04\u0c0d\u0c11\u0c29\u0c34\u0c3a-\u0c3c\u0c45\u0c49\u0c4e-\u0c54\u0c57\u0c5a-\u0c5f\u0c64\u0c65\u0c70-\u0c77\u0c80\u0c81\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba\u0cbb\u0cc5\u0cc9\u0cce-\u0cd4\u0cd7-\u0cdd\u0cdf\u0ce4\u0ce5\u0cf0\u0cf3-\u0d01\u0d04\u0d0d\u0d11\u0d3b\u0d3c\u0d45\u0d49\u0d4f-\u0d56\u0d58-\u0d5f\u0d64\u0d65\u0d76-\u0d78\u0d80\u0d81\u0d84\u0d97-\u0d99\u0db2\u0dbc\u0dbe\u0dbf\u0dc7-\u0dc9\u0dcb-\u0dce\u0dd5\u0dd7\u0de0-\u0df1\u0df5-\u0e00\u0e3b-\u0e3e\u0e5c-\u0e80\u0e83\u0e85\u0e86\u0e89\u0e8b\u0e8c\u0e8e-\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8\u0ea9\u0eac\u0eba\u0ebe\u0ebf\u0ec5\u0ec7\u0ece\u0ecf\u0eda\u0edb\u0ee0-\u0eff\u0f48\u0f6d-\u0f70\u0f98\u0fbd\u0fcd\u0fdb-\u0fff\u10c6\u10c8-\u10cc\u10ce\u10cf\u1249\u124e\u124f\u1257\u1259\u125e\u125f\u1289\u128e\u128f\u12b1\u12b6\u12b7\u12bf\u12c1\u12c6\u12c7\u12d7\u1311\u1316\u1317\u135b\u135c\u137d-\u137f\u139a-\u139f\u13f5-\u13ff\u169d-\u169f\u16f1-\u16ff\u170d\u1715-\u171f\u1737-\u173f\u1754-\u175f\u176d\u1771\u1774-\u177f\u17de\u17df\u17ea-\u17ef\u17fa-\u17ff\u180f\u181a-\u181f\u1878-\u187f\u18ab-\u18af\u18f6-\u18ff\u191d-\u191f\u192c-\u192f\u193c-\u193f\u1941-\u1943\u196e\u196f\u1975-\u197f\u19ac-\u19af\u19ca-\u19cf\u19db-\u19dd\u1a1c\u1a1d\u1a5f\u1a7d\u1a7e\u1a8a-\u1a8f\u1a9a-\u1a9f\u1aae-\u1aff\u1b4c-\u1b4f\u1b7d-\u1b7f\u1bf4-\u1bfb\u1c38-\u1c3a\u1c4a-\u1c4c\u1c80-\u1cbf\u1cc8-\u1ccf\u1cf7-\u1cff\u1de7-\u1dfb\u1f16\u1f17\u1f1e\u1f1f\u1f46\u1f47\u1f4e\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e\u1f7f\u1fb5\u1fc5\u1fd4\u1fd5\u1fdc\u1ff0\u1ff1\u1ff5\u1fff\u2065-\u2069\u2072\u2073\u208f\u209d-\u209f\u20bb-\u20cf\u20f1-\u20ff\u218a-\u218f\u23f4-\u23ff\u2427-\u243f\u244b-\u245f\u2700\u2b4d-\u2b4f\u2b5a-\u2bff\u2c2f\u2c5f\u2cf4-\u2cf8\u2d26\u2d28-\u2d2c\u2d2e\u2d2f\u2d68-\u2d6e\u2d71-\u2d7e\u2d97-\u2d9f\u2da7\u2daf\u2db7\u2dbf\u2dc7\u2dcf\u2dd7\u2ddf\u2e3c-\u2e7f\u2e9a\u2ef4-\u2eff\u2fd6-\u2fef\u2ffc-\u2fff\u3040\u3097\u3098\u3100-\u3104\u312e-\u3130\u318f\u31bb-\u31bf\u31e4-\u31ef\u321f\u32ff\u4db6-\u4dbf\u9fcd-\u9fff\ua48d-\ua48f\ua4c7-\ua4cf\ua62c-\ua63f\ua698-\ua69e\ua6f8-\ua6ff\ua78f\ua794-\ua79f\ua7ab-\ua7f7\ua82c-\ua82f\ua83a-\ua83f\ua878-\ua87f\ua8c5-\ua8cd\ua8da-\ua8df\ua8fc-\ua8ff\ua954-\ua95e\ua97d-\ua97f\ua9ce\ua9da-\ua9dd\ua9e0-\ua9ff\uaa37-\uaa3f\uaa4e\uaa4f\uaa5a\uaa5b\uaa7c-\uaa7f\uaac3-\uaada\uaaf7-\uab00\uab07\uab08\uab0f\uab10\uab17-\uab1f\uab27\uab2f-\uabbf\uabee\uabef\uabfa-\uabff\ud7a4-\ud7af\ud7c7-\ud7ca\ud7fc-\ud7ff\ufa6e\ufa6f\ufada-\ufaff\ufb07-\ufb12\ufb18-\ufb1c\ufb37\ufb3d\ufb3f\ufb42\ufb45\ufbc2-\ufbd2\ufd40-\ufd4f\ufd90\ufd91\ufdc8-\ufdef\ufdfe\ufdff\ufe1a-\ufe1f\ufe27-\ufe2f\ufe53\ufe67\ufe6c-\ufe6f\ufe75\ufefd\ufefe\uff00\uffbf-\uffc1\uffc8\uffc9\uffd0\uffd1\uffd8\uffd9\uffdd-\uffdf\uffe7\uffef-\ufff8\ufffe\uffff",astral:"\ud808[\udf6f-\udfff]|\udb40[\udc00\udc02-\udc1f\udc80-\udcff\uddf0-\udfff]|\ud834[\udcf6-\udcff\udd27\udd28\uddde-\uddff\ude46-\udeff\udf57-\udf5f\udf72-\udfff]|\ud802[\udc06\udc07\udc09\udc36\udc39-\udc3b\udc3d\udc3e\udc56\udc60-\udcff\udd1c-\udd1e\udd3a-\udd3e\udd40-\udd7f\uddb8-\uddbd\uddc0-\uddff\ude04\ude07-\ude0b\ude14\ude18\ude34-\ude37\ude3b-\ude3e\ude48-\ude4f\ude59-\ude5f\ude80-\udeff\udf36-\udf38\udf56\udf57\udf73-\udf77\udf80-\udfff]|\ud86d[\udf35-\udf3f]|\ud81b[\udc00-\udeff\udf45-\udf4f\udf7f-\udf8e\udfa0-\udfff]|\ud809[\udc63-\udc6f\udc74-\udfff]|\ud800[\udc0c\udc27\udc3b\udc3e\udc4e\udc4f\udc5e-\udc7f\udcfb-\udcff\udd03-\udd06\udd34-\udd36\udd8b-\udd8f\udd9c-\uddcf\uddfe-\ude7f\ude9d-\ude9f\uded1-\udeff\udf1f\udf24-\udf2f\udf4b-\udf7f\udf9e\udfc4-\udfc7\udfd6-\udfff]|\ud869[\uded7-\udeff]|\ud804[\udc4e-\udc51\udc70-\udc7f\udcc2-\udccf\udce9-\udcef\udcfa-\udcff\udd35\udd44-\udd7f\uddc9-\uddcf\uddda-\udfff]|\ud83b[\udc00-\uddff\ude04\ude20\ude23\ude25\ude26\ude28\ude33\ude38\ude3a\ude3c-\ude41\ude43-\ude46\ude48\ude4a\ude4c\ude50\ude53\ude55\ude56\ude58\ude5a\ude5c\ude5e\ude60\ude63\ude65\ude66\ude6b\ude73\ude78\ude7d\ude7f\ude8a\ude9c-\udea0\udea4\udeaa\udebc-\udeef\udef2-\udfff]|[\udbbf\udbff][\udffe\udfff]|\ud87e[\ude1e-\udfff]|\ud803[\udc49-\ude5f\ude7f-\udfff]|\ud80d[\udc2f-\udfff]|[\ud806\ud807\ud80a\ud80b\ud80e-\ud819\ud81c-\ud82b\ud82d-\ud833\ud836-\ud83a\ud83e\ud83f\ud86f-\ud87d\ud87f-\udb3f\udb41-\udb7f][\udc00-\udfff]|\ud83d[\udc3f\udc41\udcf8\udcfd-\udcff\udd3e\udd3f\udd44-\udd4f\udd68-\uddfa\ude41-\ude44\ude50-\ude7f\udec6-\udeff\udf74-\udfff]|\ud86e[\udc1e-\udfff]|\ud83c[\udc2c-\udc2f\udc94-\udc9f\udcaf\udcb0\udcbf\udcc0\udcd0\udce0-\udcff\udd0b-\udd0f\udd2f\udd6c-\udd6f\udd9b-\udde5\ude03-\ude0f\ude3b-\ude3f\ude49-\ude4f\ude52-\udeff\udf21-\udf2f\udf36\udf7d-\udf7f\udf94-\udf9f\udfc5\udfcb-\udfdf\udff1-\udfff]|\ud835[\udc55\udc9d\udca0\udca1\udca3\udca4\udca7\udca8\udcad\udcba\udcbc\udcc4\udd06\udd0b\udd0c\udd15\udd1d\udd3a\udd3f\udd45\udd47-\udd49\udd51\udea6\udea7\udfcc\udfcd]|\ud81a[\ude39-\udfff]|\ud801[\udc9e\udc9f\udcaa-\udfff]|\ud805[\udc00-\ude7f\udeb8-\udebf\udeca-\udfff]|\ud82c[\udc02-\udfff]"},{name:"Co",alias:"Private_Use",bmp:"\ue000-\uf8ff",astral:"[\udb80-\udbbe\udbc0-\udbfe][\udc00-\udfff]|[\udbbf\udbff][\udc00-\udffd]"},{name:"Cs",alias:"Surrogate",bmp:"\ud800-\udfff"},{name:"Ll",alias:"Lowercase_Letter",bmp:"a-z\u00b5\u00df-\u00f6\u00f8-\u00ff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e-\u0180\u0183\u0185\u0188\u018c\u018d\u0192\u0195\u0199-\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9\u01ba\u01bd-\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233-\u0239\u023c\u023f\u0240\u0242\u0247\u0249\u024b\u024d\u024f-\u0293\u0295-\u02af\u0371\u0373\u0377\u037b-\u037d\u0390\u03ac-\u03ce\u03d0\u03d1\u03d5-\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef-\u03f3\u03f5\u03f8\u03fb\u03fc\u0430-\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce\u04cf\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u04fb\u04fd\u04ff\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0511\u0513\u0515\u0517\u0519\u051b\u051d\u051f\u0521\u0523\u0525\u0527\u0561-\u0587\u1d00-\u1d2b\u1d6b-\u1d77\u1d79-\u1d9a\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95-\u1e9d\u1e9f\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1efb\u1efd\u1eff-\u1f07\u1f10-\u1f15\u1f20-\u1f27\u1f30-\u1f37\u1f40-\u1f45\u1f50-\u1f57\u1f60-\u1f67\u1f70-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6\u1fb7\u1fbe\u1fc2-\u1fc4\u1fc6\u1fc7\u1fd0-\u1fd3\u1fd6\u1fd7\u1fe0-\u1fe7\u1ff2-\u1ff4\u1ff6\u1ff7\u210a\u210e\u210f\u2113\u212f\u2134\u2139\u213c\u213d\u2146-\u2149\u214e\u2184\u2c30-\u2c5e\u2c61\u2c65\u2c66\u2c68\u2c6a\u2c6c\u2c71\u2c73\u2c74\u2c76-\u2c7b\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3\u2ce4\u2cec\u2cee\u2cf3\u2d00-\u2d25\u2d27\u2d2d\ua641\ua643\ua645\ua647\ua649\ua64b\ua64d\ua64f\ua651\ua653\ua655\ua657\ua659\ua65b\ua65d\ua65f\ua661\ua663\ua665\ua667\ua669\ua66b\ua66d\ua681\ua683\ua685\ua687\ua689\ua68b\ua68d\ua68f\ua691\ua693\ua695\ua697\ua723\ua725\ua727\ua729\ua72b\ua72d\ua72f-\ua731\ua733\ua735\ua737\ua739\ua73b\ua73d\ua73f\ua741\ua743\ua745\ua747\ua749\ua74b\ua74d\ua74f\ua751\ua753\ua755\ua757\ua759\ua75b\ua75d\ua75f\ua761\ua763\ua765\ua767\ua769\ua76b\ua76d\ua76f\ua771-\ua778\ua77a\ua77c\ua77f\ua781\ua783\ua785\ua787\ua78c\ua78e\ua791\ua793\ua7a1\ua7a3\ua7a5\ua7a7\ua7a9\ua7fa\ufb00-\ufb06\ufb13-\ufb17\uff41-\uff5a",astral:"\ud835[\udc1a-\udc33\udc4e-\udc54\udc56-\udc67\udc82-\udc9b\udcb6-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udccf\udcea-\udd03\udd1e-\udd37\udd52-\udd6b\udd86-\udd9f\uddba-\uddd3\uddee-\ude07\ude22-\ude3b\ude56-\ude6f\ude8a-\udea5\udec2-\udeda\udedc-\udee1\udefc-\udf14\udf16-\udf1b\udf36-\udf4e\udf50-\udf55\udf70-\udf88\udf8a-\udf8f\udfaa-\udfc2\udfc4-\udfc9\udfcb]|\ud801[\udc28-\udc4f]"},{name:"Lm",alias:"Modifier_Letter",bmp:"\u02b0-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0374\u037a\u0559\u0640\u06e5\u06e6\u07f4\u07f5\u07fa\u081a\u0824\u0828\u0971\u0e46\u0ec6\u10fc\u17d7\u1843\u1aa7\u1c78-\u1c7d\u1d2c-\u1d6a\u1d78\u1d9b-\u1dbf\u2071\u207f\u2090-\u209c\u2c7c\u2c7d\u2d6f\u2e2f\u3005\u3031-\u3035\u303b\u309d\u309e\u30fc-\u30fe\ua015\ua4f8-\ua4fd\ua60c\ua67f\ua717-\ua71f\ua770\ua788\ua7f8\ua7f9\ua9cf\uaa70\uaadd\uaaf3\uaaf4\uff70\uff9e\uff9f",astral:"\ud81b[\udf93-\udf9f]"},{name:"Lo",alias:"Other_Letter",bmp:"\u00aa\u00ba\u01bb\u01c0-\u01c3\u0294\u05d0-\u05ea\u05f0-\u05f2\u0620-\u063f\u0641-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u0800-\u0815\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0972-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e45\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10d0-\u10fa\u10fd-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17dc\u1820-\u1842\u1844-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c77\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u2135-\u2138\u2d30-\u2d67\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3006\u303c\u3041-\u3096\u309f\u30a1-\u30fa\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua014\ua016-\ua48c\ua4d0-\ua4f7\ua500-\ua60b\ua610-\ua61f\ua62a\ua62b\ua66e\ua6a0-\ua6e5\ua7fb-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa6f\uaa71-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb\uaadc\uaae0-\uaaea\uaaf2\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff66-\uff6f\uff71-\uff9d\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc",astral:"\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude33\ude60-\ude7c\udf00-\udf35\udf40-\udf55\udf60-\udf72]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1e\udf30-\udf40\udf42-\udf49\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud81a[\udc00-\ude38]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd83-\uddb2\uddc1-\uddc4]|\ud86e[\udc00-\udc1d]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud803[\udc00-\udc48]|\ud80d[\udc00-\udc2e]|\ud805[\ude80-\udeaa]|\ud87e[\udc00-\ude1d]|\ud81b[\udf00-\udf44\udf50]|\ud801[\udc50-\udc9d]|\ud82c[\udc00\udc01]|[\ud80c\ud840-\ud868\ud86a-\ud86c][\udc00-\udfff]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud808[\udc00-\udf6e]|\ud869[\udc00-\uded6\udf00-\udfff]"},{name:"Lt",alias:"Titlecase_Letter",bmp:"\u01c5\u01c8\u01cb\u01f2\u1f88-\u1f8f\u1f98-\u1f9f\u1fa8-\u1faf\u1fbc\u1fcc\u1ffc"},{name:"Lu",alias:"Uppercase_Letter",bmp:"A-Z\u00c0-\u00d6\u00d8-\u00de\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178\u0179\u017b\u017d\u0181\u0182\u0184\u0186\u0187\u0189-\u018b\u018e-\u0191\u0193\u0194\u0196-\u0198\u019c\u019d\u019f\u01a0\u01a2\u01a4\u01a6\u01a7\u01a9\u01ac\u01ae\u01af\u01b1-\u01b3\u01b5\u01b7\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6-\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a\u023b\u023d\u023e\u0241\u0243-\u0246\u0248\u024a\u024c\u024e\u0370\u0372\u0376\u0386\u0388-\u038a\u038c\u038e\u038f\u0391-\u03a1\u03a3-\u03ab\u03cf\u03d2-\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9\u03fa\u03fd-\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u04fa\u04fc\u04fe\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0510\u0512\u0514\u0516\u0518\u051a\u051c\u051e\u0520\u0522\u0524\u0526\u0531-\u0556\u10a0-\u10c5\u10c7\u10cd\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1e9e\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1efa\u1efc\u1efe\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102\u2107\u210b-\u210d\u2110-\u2112\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u2130-\u2133\u213e\u213f\u2145\u2183\u2c00-\u2c2e\u2c60\u2c62-\u2c64\u2c67\u2c69\u2c6b\u2c6d-\u2c70\u2c72\u2c75\u2c7e-\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\u2ceb\u2ced\u2cf2\ua640\ua642\ua644\ua646\ua648\ua64a\ua64c\ua64e\ua650\ua652\ua654\ua656\ua658\ua65a\ua65c\ua65e\ua660\ua662\ua664\ua666\ua668\ua66a\ua66c\ua680\ua682\ua684\ua686\ua688\ua68a\ua68c\ua68e\ua690\ua692\ua694\ua696\ua722\ua724\ua726\ua728\ua72a\ua72c\ua72e\ua732\ua734\ua736\ua738\ua73a\ua73c\ua73e\ua740\ua742\ua744\ua746\ua748\ua74a\ua74c\ua74e\ua750\ua752\ua754\ua756\ua758\ua75a\ua75c\ua75e\ua760\ua762\ua764\ua766\ua768\ua76a\ua76c\ua76e\ua779\ua77b\ua77d\ua77e\ua780\ua782\ua784\ua786\ua78b\ua78d\ua790\ua792\ua7a0\ua7a2\ua7a4\ua7a6\ua7a8\ua7aa\uff21-\uff3a",astral:"\ud835[\udc00-\udc19\udc34-\udc4d\udc68-\udc81\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb5\udcd0-\udce9\udd04\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd38\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd6c-\udd85\udda0-\uddb9\uddd4-\udded\ude08-\ude21\ude3c-\ude55\ude70-\ude89\udea8-\udec0\udee2-\udefa\udf1c-\udf34\udf56-\udf6e\udf90-\udfa8\udfca]|\ud801[\udc00-\udc27]"},{name:"M",alias:"Mark",bmp:"\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e4-\u08fe\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0c01-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d02\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f\u109a-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u192b\u1930-\u193b\u19b0-\u19c0\u19c8\u19c9\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f\u1b00-\u1b04\u1b34-\u1b44\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1be6-\u1bf3\u1c24-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2-\u1cf4\u1dc0-\u1de6\u1dfc-\u1dff\u20d0-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua674-\ua67d\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa7b\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe26",astral:"\ud834[\udd65-\udd69\udd6d-\udd72\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad\ude42-\ude44]|\ud802[\ude01-\ude03\ude05\ude06\ude0c-\ude0f\ude38-\ude3a\ude3f]|\ud81b[\udf51-\udf7e\udf8f-\udf92]|\ud804[\udc00-\udc02\udc38-\udc46\udc80-\udc82\udcb0-\udcba\udd00-\udd02\udd27-\udd34\udd80-\udd82\uddb3-\uddc0]|\ud805[\udeab-\udeb7]|\ud800\uddfd|\udb40[\udd00-\uddef]"},{name:"Mc",alias:"Spacing_Mark",bmp:"\u0903\u093b\u093e-\u0940\u0949-\u094c\u094e\u094f\u0982\u0983\u09be-\u09c0\u09c7\u09c8\u09cb\u09cc\u09d7\u0a03\u0a3e-\u0a40\u0a83\u0abe-\u0ac0\u0ac9\u0acb\u0acc\u0b02\u0b03\u0b3e\u0b40\u0b47\u0b48\u0b4b\u0b4c\u0b57\u0bbe\u0bbf\u0bc1\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcc\u0bd7\u0c01-\u0c03\u0c41-\u0c44\u0c82\u0c83\u0cbe\u0cc0-\u0cc4\u0cc7\u0cc8\u0cca\u0ccb\u0cd5\u0cd6\u0d02\u0d03\u0d3e-\u0d40\u0d46-\u0d48\u0d4a-\u0d4c\u0d57\u0d82\u0d83\u0dcf-\u0dd1\u0dd8-\u0ddf\u0df2\u0df3\u0f3e\u0f3f\u0f7f\u102b\u102c\u1031\u1038\u103b\u103c\u1056\u1057\u1062-\u1064\u1067-\u106d\u1083\u1084\u1087-\u108c\u108f\u109a-\u109c\u17b6\u17be-\u17c5\u17c7\u17c8\u1923-\u1926\u1929-\u192b\u1930\u1931\u1933-\u1938\u19b0-\u19c0\u19c8\u19c9\u1a19-\u1a1b\u1a55\u1a57\u1a61\u1a63\u1a64\u1a6d-\u1a72\u1b04\u1b35\u1b3b\u1b3d-\u1b41\u1b43\u1b44\u1b82\u1ba1\u1ba6\u1ba7\u1baa\u1bac\u1bad\u1be7\u1bea-\u1bec\u1bee\u1bf2\u1bf3\u1c24-\u1c2b\u1c34\u1c35\u1ce1\u1cf2\u1cf3\u302e\u302f\ua823\ua824\ua827\ua880\ua881\ua8b4-\ua8c3\ua952\ua953\ua983\ua9b4\ua9b5\ua9ba\ua9bb\ua9bd-\ua9c0\uaa2f\uaa30\uaa33\uaa34\uaa4d\uaa7b\uaaeb\uaaee\uaaef\uaaf5\uabe3\uabe4\uabe6\uabe7\uabe9\uabea\uabec",astral:"\ud834[\udd65\udd66\udd6d-\udd72]|\ud804[\udc00\udc02\udc82\udcb0-\udcb2\udcb7\udcb8\udd2c\udd82\uddb3-\uddb5\uddbf\uddc0]|\ud805[\udeac\udeae\udeaf\udeb6]|\ud81b[\udf51-\udf7e]"},{name:"Me",alias:"Enclosing_Mark",bmp:"\u0488\u0489\u20dd-\u20e0\u20e2-\u20e4\ua670-\ua672"},{name:"Mn",alias:"Nonspacing_Mark",bmp:"\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e4-\u08fe\u0900-\u0902\u093a\u093c\u0941-\u0948\u094d\u0951-\u0957\u0962\u0963\u0981\u09bc\u09c1-\u09c4\u09cd\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b62\u0b63\u0b82\u0bc0\u0bcd\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc6\u0ccc\u0ccd\u0ce2\u0ce3\u0d41-\u0d44\u0d4d\u0d62\u0d63\u0dca\u0dd2-\u0dd4\u0dd6\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4\u17b5\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1bab\u1be6\u1be8\u1be9\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1dc0-\u1de6\u1dfc-\u1dff\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302d\u3099\u309a\ua66f\ua674-\ua67d\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaec\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe26",astral:"\ud802[\ude01-\ude03\ude05\ude06\ude0c-\ude0f\ude38-\ude3a\ude3f]|\ud834[\udd67-\udd69\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad\ude42-\ude44]|\ud81b[\udf8f-\udf92]|\ud805[\udeab\udead\udeb0-\udeb5\udeb7]|\ud804[\udc01\udc38-\udc46\udc80\udc81\udcb3-\udcb6\udcb9\udcba\udd00-\udd02\udd27-\udd2b\udd2d-\udd34\udd80\udd81\uddb6-\uddbe]|\ud800\uddfd|\udb40[\udd00-\uddef]"},{name:"N",alias:"Number",bmp:"0-9\u00b2\u00b3\u00b9\u00bc-\u00be\u0660-\u0669\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u09f4-\u09f9\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0b72-\u0b77\u0be6-\u0bf2\u0c66-\u0c6f\u0c78-\u0c7e\u0ce6-\u0cef\u0d66-\u0d75\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f33\u1040-\u1049\u1090-\u1099\u1369-\u137c\u16ee-\u16f0\u17e0-\u17e9\u17f0-\u17f9\u1810-\u1819\u1946-\u194f\u19d0-\u19da\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59\u2070\u2074-\u2079\u2080-\u2089\u2150-\u2182\u2185-\u2189\u2460-\u249b\u24ea-\u24ff\u2776-\u2793\u2cfd\u3007\u3021-\u3029\u3038-\u303a\u3192-\u3195\u3220-\u3229\u3248-\u324f\u3251-\u325f\u3280-\u3289\u32b1-\u32bf\ua620-\ua629\ua6e6-\ua6ef\ua830-\ua835\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\uaa50-\uaa59\uabf0-\uabf9\uff10-\uff19",astral:"\ud802[\udc58-\udc5f\udd16-\udd1b\ude40-\ude47\ude7d\ude7e\udf58-\udf5f\udf78-\udf7f]|\ud801[\udca0-\udca9]|\ud809[\udc00-\udc62]|\ud835[\udfce-\udfff]|\ud800[\udd07-\udd33\udd40-\udd78\udd8a\udf20-\udf23\udf41\udf4a\udfd1-\udfd5]|\ud834[\udf60-\udf71]|\ud803[\ude60-\ude7e]|\ud83c[\udd00-\udd0a]|\ud805[\udec0-\udec9]|\ud804[\udc52-\udc6f\udcf0-\udcf9\udd36-\udd3f\uddd0-\uddd9]"},{name:"Nd",alias:"Decimal_Number",bmp:"0-9\u0660-\u0669\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be6-\u0bef\u0c66-\u0c6f\u0ce6-\u0cef\u0d66-\u0d6f\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f29\u1040-\u1049\u1090-\u1099\u17e0-\u17e9\u1810-\u1819\u1946-\u194f\u19d0-\u19d9\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59\ua620-\ua629\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\uaa50-\uaa59\uabf0-\uabf9\uff10-\uff19",astral:"\ud804[\udc66-\udc6f\udcf0-\udcf9\udd36-\udd3f\uddd0-\uddd9]|\ud805[\udec0-\udec9]|\ud801[\udca0-\udca9]|\ud835[\udfce-\udfff]"},{name:"Nl",alias:"Letter_Number",bmp:"\u16ee-\u16f0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303a\ua6e6-\ua6ef",astral:"\ud800[\udd40-\udd74\udf41\udf4a\udfd1-\udfd5]|\ud809[\udc00-\udc62]"},{name:"No",alias:"Other_Number",bmp:"\u00b2\u00b3\u00b9\u00bc-\u00be\u09f4-\u09f9\u0b72-\u0b77\u0bf0-\u0bf2\u0c78-\u0c7e\u0d70-\u0d75\u0f2a-\u0f33\u1369-\u137c\u17f0-\u17f9\u19da\u2070\u2074-\u2079\u2080-\u2089\u2150-\u215f\u2189\u2460-\u249b\u24ea-\u24ff\u2776-\u2793\u2cfd\u3192-\u3195\u3220-\u3229\u3248-\u324f\u3251-\u325f\u3280-\u3289\u32b1-\u32bf\ua830-\ua835",astral:"\ud802[\udc58-\udc5f\udd16-\udd1b\ude40-\ude47\ude7d\ude7e\udf58-\udf5f\udf78-\udf7f]|\ud834[\udf60-\udf71]|\ud803[\ude60-\ude7e]|\ud800[\udd07-\udd33\udd75-\udd78\udd8a\udf20-\udf23]|\ud83c[\udd00-\udd0a]|\ud804[\udc52-\udc65]"},{name:"P",alias:"Punctuation",bmp:"!-#%-\\x2A,-/:;\\x3F@\\x5B-\\x5D_\\x7B}\u00a1\u00a7\u00ab\u00b6\u00b7\u00bb\u00bf\u037e\u0387\u055a-\u055f\u0589\u058a\u05be\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0af0\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f14\u0f3a-\u0f3d\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1360-\u1368\u1400\u166d\u166e\u169b\u169c\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cc0-\u1cc7\u1cd3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205e\u207d\u207e\u208d\u208e\u2329\u232a\u2768-\u2775\u27c5\u27c6\u27e6-\u27ef\u2983-\u2998\u29d8-\u29db\u29fc\u29fd\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00-\u2e2e\u2e30-\u2e3b\u3001-\u3003\u3008-\u3011\u3014-\u301f\u3030\u303d\u30a0\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uaaf0\uaaf1\uabeb\ufd3e\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe61\ufe63\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff0a\uff0c-\uff0f\uff1a\uff1b\uff1f\uff20\uff3b-\uff3d\uff3f\uff5b\uff5d\uff5f-\uff65",astral:"\ud809[\udc70-\udc73]|\ud802[\udc57\udd1f\udd3f\ude50-\ude58\ude7f\udf39-\udf3f]|\ud800[\udd00-\udd02\udf9f\udfd0]|\ud804[\udc47-\udc4d\udcbb\udcbc\udcbe-\udcc1\udd40-\udd43\uddc5-\uddc8]"},{name:"Pc",alias:"Connector_Punctuation",bmp:"_\u203f\u2040\u2054\ufe33\ufe34\ufe4d-\ufe4f\uff3f"},{name:"Pd",alias:"Dash_Punctuation",bmp:"\\x2D\u058a\u05be\u1400\u1806\u2010-\u2015\u2e17\u2e1a\u2e3a\u2e3b\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d"},{name:"Pe",alias:"Close_Punctuation",bmp:"\\x29\\x5D}\u0f3b\u0f3d\u169c\u2046\u207e\u208e\u232a\u2769\u276b\u276d\u276f\u2771\u2773\u2775\u27c6\u27e7\u27e9\u27eb\u27ed\u27ef\u2984\u2986\u2988\u298a\u298c\u298e\u2990\u2992\u2994\u2996\u2998\u29d9\u29db\u29fd\u2e23\u2e25\u2e27\u2e29\u3009\u300b\u300d\u300f\u3011\u3015\u3017\u3019\u301b\u301e\u301f\ufd3f\ufe18\ufe36\ufe38\ufe3a\ufe3c\ufe3e\ufe40\ufe42\ufe44\ufe48\ufe5a\ufe5c\ufe5e\uff09\uff3d\uff5d\uff60\uff63"},{name:"Pf",alias:"Final_Punctuation",bmp:"\u00bb\u2019\u201d\u203a\u2e03\u2e05\u2e0a\u2e0d\u2e1d\u2e21"},{name:"Pi",alias:"Initial_Punctuation",bmp:"\u00ab\u2018\u201b\u201c\u201f\u2039\u2e02\u2e04\u2e09\u2e0c\u2e1c\u2e20"},{name:"Po",alias:"Other_Punctuation",bmp:"!-#%-'\\x2A,\\x2E/:;\\x3F@\\x5C\u00a1\u00a7\u00b6\u00b7\u00bf\u037e\u0387\u055a-\u055f\u0589\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0af0\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f14\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1360-\u1368\u166d\u166e\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u1805\u1807-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cc0-\u1cc7\u1cd3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203b-\u203e\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205e\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00\u2e01\u2e06-\u2e08\u2e0b\u2e0e-\u2e16\u2e18\u2e19\u2e1b\u2e1e\u2e1f\u2e2a-\u2e2e\u2e30-\u2e39\u3001-\u3003\u303d\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uaaf0\uaaf1\uabeb\ufe10-\ufe16\ufe19\ufe30\ufe45\ufe46\ufe49-\ufe4c\ufe50-\ufe52\ufe54-\ufe57\ufe5f-\ufe61\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff07\uff0a\uff0c\uff0e\uff0f\uff1a\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65",astral:"\ud809[\udc70-\udc73]|\ud802[\udc57\udd1f\udd3f\ude50-\ude58\ude7f\udf39-\udf3f]|\ud800[\udd00-\udd02\udf9f\udfd0]|\ud804[\udc47-\udc4d\udcbb\udcbc\udcbe-\udcc1\udd40-\udd43\uddc5-\uddc8]"},{name:"Ps",alias:"Open_Punctuation",bmp:"\\x28\\x5B\\x7B\u0f3a\u0f3c\u169b\u201a\u201e\u2045\u207d\u208d\u2329\u2768\u276a\u276c\u276e\u2770\u2772\u2774\u27c5\u27e6\u27e8\u27ea\u27ec\u27ee\u2983\u2985\u2987\u2989\u298b\u298d\u298f\u2991\u2993\u2995\u2997\u29d8\u29da\u29fc\u2e22\u2e24\u2e26\u2e28\u3008\u300a\u300c\u300e\u3010\u3014\u3016\u3018\u301a\u301d\ufd3e\ufe17\ufe35\ufe37\ufe39\ufe3b\ufe3d\ufe3f\ufe41\ufe43\ufe47\ufe59\ufe5b\ufe5d\uff08\uff3b\uff5b\uff5f\uff62"},{name:"S",alias:"Symbol",bmp:"\\x24\\x2B<->\\x5E`\\x7C~\u00a2-\u00a6\u00a8\u00a9\u00ac\u00ae-\u00b1\u00b4\u00b8\u00d7\u00f7\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u03f6\u0482\u058f\u0606-\u0608\u060b\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u09f2\u09f3\u09fa\u09fb\u0af1\u0b70\u0bf3-\u0bfa\u0c7f\u0d79\u0e3f\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u17db\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u2044\u2052\u207a-\u207c\u208a-\u208c\u20a0-\u20ba\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u2140-\u2144\u214a-\u214d\u214f\u2190-\u2328\u232b-\u23f3\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u26ff\u2701-\u2767\u2794-\u27c4\u27c7-\u27e5\u27f0-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2b4c\u2b50-\u2b59\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u309b\u309c\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua700-\ua716\ua720\ua721\ua789\ua78a\ua828-\ua82b\ua836-\ua839\uaa77-\uaa79\ufb29\ufbb2-\ufbc1\ufdfc\ufdfd\ufe62\ufe64-\ufe66\ufe69\uff04\uff0b\uff1c-\uff1e\uff3e\uff40\uff5c\uff5e\uffe0-\uffe6\uffe8-\uffee\ufffc\ufffd",astral:"\ud83d[\udc00-\udc3e\udc40\udc42-\udcf7\udcf9-\udcfc\udd00-\udd3d\udd40-\udd43\udd50-\udd67\uddfb-\ude40\ude45-\ude4f\ude80-\udec5\udf00-\udf73]|\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbe\udcc1-\udccf\udcd1-\udcdf\udd10-\udd2e\udd30-\udd6b\udd70-\udd9a\udde6-\ude02\ude10-\ude3a\ude40-\ude48\ude50\ude51\udf00-\udf20\udf30-\udf35\udf37-\udf7c\udf80-\udf93\udfa0-\udfc4\udfc6-\udfca\udfe0-\udff0]|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83\udd84\udd8c-\udda9\uddae-\udddd\ude00-\ude41\ude45\udf00-\udf56]|\ud800[\udd37-\udd3f\udd79-\udd89\udd90-\udd9b\uddd0-\uddfc]|\ud83b[\udef0\udef1]"},{name:"Sc",alias:"Currency_Symbol",bmp:"\\x24\u00a2-\u00a5\u058f\u060b\u09f2\u09f3\u09fb\u0af1\u0bf9\u0e3f\u17db\u20a0-\u20ba\ua838\ufdfc\ufe69\uff04\uffe0\uffe1\uffe5\uffe6"},{name:"Sk",alias:"Modifier_Symbol",bmp:"\\x5E`\u00a8\u00af\u00b4\u00b8\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u309b\u309c\ua700-\ua716\ua720\ua721\ua789\ua78a\ufbb2-\ufbc1\uff3e\uff40\uffe3"},{name:"Sm",alias:"Math_Symbol",bmp:"\\x2B<->\\x7C~\u00ac\u00b1\u00d7\u00f7\u03f6\u0606-\u0608\u2044\u2052\u207a-\u207c\u208a-\u208c\u2118\u2140-\u2144\u214b\u2190-\u2194\u219a\u219b\u21a0\u21a3\u21a6\u21ae\u21ce\u21cf\u21d2\u21d4\u21f4-\u22ff\u2308-\u230b\u2320\u2321\u237c\u239b-\u23b3\u23dc-\u23e1\u25b7\u25c1\u25f8-\u25ff\u266f\u27c0-\u27c4\u27c7-\u27e5\u27f0-\u27ff\u2900-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2aff\u2b30-\u2b44\u2b47-\u2b4c\ufb29\ufe62\ufe64-\ufe66\uff0b\uff1c-\uff1e\uff5c\uff5e\uffe2\uffe9-\uffec",astral:"\ud83b[\udef0\udef1]|\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]"},{name:"So",alias:"Other_Symbol",bmp:"\u00a6\u00a9\u00ae\u00b0\u0482\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u09fa\u0b70\u0bf3-\u0bf8\u0bfa\u0c7f\u0d79\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u214a\u214c\u214d\u214f\u2195-\u2199\u219c-\u219f\u21a1\u21a2\u21a4\u21a5\u21a7-\u21ad\u21af-\u21cd\u21d0\u21d1\u21d3\u21d5-\u21f3\u2300-\u2307\u230c-\u231f\u2322-\u2328\u232b-\u237b\u237d-\u239a\u23b4-\u23db\u23e2-\u23f3\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u25b6\u25b8-\u25c0\u25c2-\u25f7\u2600-\u266e\u2670-\u26ff\u2701-\u2767\u2794-\u27bf\u2800-\u28ff\u2b00-\u2b2f\u2b45\u2b46\u2b50-\u2b59\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua828-\ua82b\ua836\ua837\ua839\uaa77-\uaa79\ufdfd\uffe4\uffe8\uffed\uffee\ufffc\ufffd",astral:"\ud83d[\udc00-\udc3e\udc40\udc42-\udcf7\udcf9-\udcfc\udd00-\udd3d\udd40-\udd43\udd50-\udd67\uddfb-\ude40\ude45-\ude4f\ude80-\udec5\udf00-\udf73]|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83\udd84\udd8c-\udda9\uddae-\udddd\ude00-\ude41\ude45\udf00-\udf56]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbe\udcc1-\udccf\udcd1-\udcdf\udd10-\udd2e\udd30-\udd6b\udd70-\udd9a\udde6-\ude02\ude10-\ude3a\ude40-\ude48\ude50\ude51\udf00-\udf20\udf30-\udf35\udf37-\udf7c\udf80-\udf93\udfa0-\udfc4\udfc6-\udfca\udfe0-\udff0]|\ud800[\udd37-\udd3f\udd79-\udd89\udd90-\udd9b\uddd0-\uddfc]"},{name:"Z",alias:"Separator",bmp:" \u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000"},{name:"Zl",alias:"Line_Separator",bmp:"\u2028"},{name:"Zp",alias:"Paragraph_Separator",bmp:"\u2029"},{name:"Zs",alias:"Space_Separator",bmp:" \u00a0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000"}]);if(!g.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Properties");g.addUnicodeData([{name:"ASCII",bmp:"\x00-\u007f"},{name:"Alphabetic",bmp:"A-Za-z\u00aa\u00b5\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0345\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05b0-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u05d0-\u05ea\u05f0-\u05f2\u0610-\u061a\u0620-\u0657\u0659-\u065f\u066e-\u06d3\u06d5-\u06dc\u06e1-\u06e8\u06ed-\u06ef\u06fa-\u06fc\u06ff\u0710-\u073f\u074d-\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0817\u081a-\u082c\u0840-\u0858\u08a0\u08a2-\u08ac\u08e4-\u08e9\u08f0-\u08fe\u0900-\u093b\u093d-\u094c\u094e-\u0950\u0955-\u0963\u0971-\u0977\u0979-\u097f\u0981-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd-\u09c4\u09c7\u09c8\u09cb\u09cc\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09f0\u09f1\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3e-\u0a42\u0a47\u0a48\u0a4b\u0a4c\u0a51\u0a59-\u0a5c\u0a5e\u0a70-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd-\u0ac5\u0ac7-\u0ac9\u0acb\u0acc\u0ad0\u0ae0-\u0ae3\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d-\u0b44\u0b47\u0b48\u0b4b\u0b4c\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b71\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcc\u0bd0\u0bd7\u0c01-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4c\u0c55\u0c56\u0c58\u0c59\u0c60-\u0c63\u0c82\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccc\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0cf1\u0cf2\u0d02\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4c\u0d4e\u0d57\u0d60-\u0d63\u0d7a-\u0d7f\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e01-\u0e3a\u0e40-\u0e46\u0e4d\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ecd\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f71-\u0f81\u0f88-\u0f97\u0f99-\u0fbc\u1000-\u1036\u1038\u103b-\u103f\u1050-\u1062\u1065-\u1068\u106e-\u1086\u108e\u109c\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135f\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1713\u1720-\u1733\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772\u1773\u1780-\u17b3\u17b6-\u17c8\u17d7\u17dc\u1820-\u1877\u1880-\u18aa\u18b0-\u18f5\u1900-\u191c\u1920-\u192b\u1930-\u1938\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a1b\u1a20-\u1a5e\u1a61-\u1a74\u1aa7\u1b00-\u1b33\u1b35-\u1b43\u1b45-\u1b4b\u1b80-\u1ba9\u1bac-\u1baf\u1bba-\u1be5\u1be7-\u1bf1\u1c00-\u1c35\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u24b6-\u24e9\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua674-\ua67b\ua67f-\ua697\ua69f-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua827\ua840-\ua873\ua880-\ua8c3\ua8f2-\ua8f7\ua8fb\ua90a-\ua92a\ua930-\ua952\ua960-\ua97c\ua980-\ua9b2\ua9b4-\ua9bf\ua9cf\uaa00-\uaa36\uaa40-\uaa4d\uaa60-\uaa76\uaa7a\uaa80-\uaabe\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf5\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabea\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc",astral:"\ud803[\udc00-\udc48]|\ud801[\udc00-\udc9d]|\ud809[\udc00-\udc62]|\ud81a[\udc00-\ude38]|\ud804[\udc00-\udc45\udc82-\udcb8\udcd0-\udce8\udd00-\udd32\udd80-\uddbf\uddc1-\uddc4]|[\ud80c\ud840-\ud868\ud86a-\ud86c][\udc00-\udfff]|\ud86e[\udc00-\udc1d]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud80d[\udc00-\udc2e]|\ud87e[\udc00-\ude1d]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00-\ude03\ude05\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude33\ude60-\ude7c\udf00-\udf35\udf40-\udf55\udf60-\udf72]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\udd40-\udd74\ude80-\ude9c\udea0-\uded0\udf00-\udf1e\udf30-\udf4a\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf\udfd1-\udfd5]|\ud81b[\udf00-\udf44\udf50-\udf7e\udf93-\udf9f]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud82c[\udc00\udc01]|\ud808[\udc00-\udf6e]|\ud805[\ude80-\udeb5]"},{name:"Any",isBmpLast:!0,bmp:"\x00-\uffff",astral:"[\ud800-\udbff][\udc00-\udfff]"},{name:"Assigned",inverseOf:"Cn"},{name:"Default_Ignorable_Code_Point",bmp:"\u00ad\u034f\u115f\u1160\u17b4\u17b5\u180b-\u180d\u200b-\u200f\u202a-\u202e\u2060-\u206f\u3164\ufe00-\ufe0f\ufeff\uffa0\ufff0-\ufff8",astral:"[\udb40-\udb43][\udc00-\udfff]|\ud834[\udd73-\udd7a]"},{name:"Lowercase",bmp:"a-z\u00aa\u00b5\u00ba\u00df-\u00f6\u00f8-\u00ff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e-\u0180\u0183\u0185\u0188\u018c\u018d\u0192\u0195\u0199-\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9\u01ba\u01bd-\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233-\u0239\u023c\u023f\u0240\u0242\u0247\u0249\u024b\u024d\u024f-\u0293\u0295-\u02b8\u02c0\u02c1\u02e0-\u02e4\u0345\u0371\u0373\u0377\u037a-\u037d\u0390\u03ac-\u03ce\u03d0\u03d1\u03d5-\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef-\u03f3\u03f5\u03f8\u03fb\u03fc\u0430-\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce\u04cf\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u04fb\u04fd\u04ff\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0511\u0513\u0515\u0517\u0519\u051b\u051d\u051f\u0521\u0523\u0525\u0527\u0561-\u0587\u1d00-\u1dbf\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95-\u1e9d\u1e9f\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1efb\u1efd\u1eff-\u1f07\u1f10-\u1f15\u1f20-\u1f27\u1f30-\u1f37\u1f40-\u1f45\u1f50-\u1f57\u1f60-\u1f67\u1f70-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6\u1fb7\u1fbe\u1fc2-\u1fc4\u1fc6\u1fc7\u1fd0-\u1fd3\u1fd6\u1fd7\u1fe0-\u1fe7\u1ff2-\u1ff4\u1ff6\u1ff7\u2071\u207f\u2090-\u209c\u210a\u210e\u210f\u2113\u212f\u2134\u2139\u213c\u213d\u2146-\u2149\u214e\u2170-\u217f\u2184\u24d0-\u24e9\u2c30-\u2c5e\u2c61\u2c65\u2c66\u2c68\u2c6a\u2c6c\u2c71\u2c73\u2c74\u2c76-\u2c7d\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3\u2ce4\u2cec\u2cee\u2cf3\u2d00-\u2d25\u2d27\u2d2d\ua641\ua643\ua645\ua647\ua649\ua64b\ua64d\ua64f\ua651\ua653\ua655\ua657\ua659\ua65b\ua65d\ua65f\ua661\ua663\ua665\ua667\ua669\ua66b\ua66d\ua681\ua683\ua685\ua687\ua689\ua68b\ua68d\ua68f\ua691\ua693\ua695\ua697\ua723\ua725\ua727\ua729\ua72b\ua72d\ua72f-\ua731\ua733\ua735\ua737\ua739\ua73b\ua73d\ua73f\ua741\ua743\ua745\ua747\ua749\ua74b\ua74d\ua74f\ua751\ua753\ua755\ua757\ua759\ua75b\ua75d\ua75f\ua761\ua763\ua765\ua767\ua769\ua76b\ua76d\ua76f-\ua778\ua77a\ua77c\ua77f\ua781\ua783\ua785\ua787\ua78c\ua78e\ua791\ua793\ua7a1\ua7a3\ua7a5\ua7a7\ua7a9\ua7f8-\ua7fa\ufb00-\ufb06\ufb13-\ufb17\uff41-\uff5a",astral:"\ud835[\udc1a-\udc33\udc4e-\udc54\udc56-\udc67\udc82-\udc9b\udcb6-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udccf\udcea-\udd03\udd1e-\udd37\udd52-\udd6b\udd86-\udd9f\uddba-\uddd3\uddee-\ude07\ude22-\ude3b\ude56-\ude6f\ude8a-\udea5\udec2-\udeda\udedc-\udee1\udefc-\udf14\udf16-\udf1b\udf36-\udf4e\udf50-\udf55\udf70-\udf88\udf8a-\udf8f\udfaa-\udfc2\udfc4-\udfc9\udfcb]|\ud801[\udc28-\udc4f]"},{name:"Noncharacter_Code_Point",bmp:"\ufdd0-\ufdef\ufffe\uffff",astral:"[\udb3f\udb7f\udbbf\udbff\ud83f\ud87f\ud8bf\udaff\ud97f\ud9bf\ud9ff\uda3f\ud8ff\udabf\uda7f\ud93f][\udffe\udfff]"},{name:"Uppercase",bmp:"A-Z\u00c0-\u00d6\u00d8-\u00de\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178\u0179\u017b\u017d\u0181\u0182\u0184\u0186\u0187\u0189-\u018b\u018e-\u0191\u0193\u0194\u0196-\u0198\u019c\u019d\u019f\u01a0\u01a2\u01a4\u01a6\u01a7\u01a9\u01ac\u01ae\u01af\u01b1-\u01b3\u01b5\u01b7\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6-\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a\u023b\u023d\u023e\u0241\u0243-\u0246\u0248\u024a\u024c\u024e\u0370\u0372\u0376\u0386\u0388-\u038a\u038c\u038e\u038f\u0391-\u03a1\u03a3-\u03ab\u03cf\u03d2-\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9\u03fa\u03fd-\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u04fa\u04fc\u04fe\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0510\u0512\u0514\u0516\u0518\u051a\u051c\u051e\u0520\u0522\u0524\u0526\u0531-\u0556\u10a0-\u10c5\u10c7\u10cd\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1e9e\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1efa\u1efc\u1efe\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102\u2107\u210b-\u210d\u2110-\u2112\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u2130-\u2133\u213e\u213f\u2145\u2160-\u216f\u2183\u24b6-\u24cf\u2c00-\u2c2e\u2c60\u2c62-\u2c64\u2c67\u2c69\u2c6b\u2c6d-\u2c70\u2c72\u2c75\u2c7e-\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\u2ceb\u2ced\u2cf2\ua640\ua642\ua644\ua646\ua648\ua64a\ua64c\ua64e\ua650\ua652\ua654\ua656\ua658\ua65a\ua65c\ua65e\ua660\ua662\ua664\ua666\ua668\ua66a\ua66c\ua680\ua682\ua684\ua686\ua688\ua68a\ua68c\ua68e\ua690\ua692\ua694\ua696\ua722\ua724\ua726\ua728\ua72a\ua72c\ua72e\ua732\ua734\ua736\ua738\ua73a\ua73c\ua73e\ua740\ua742\ua744\ua746\ua748\ua74a\ua74c\ua74e\ua750\ua752\ua754\ua756\ua758\ua75a\ua75c\ua75e\ua760\ua762\ua764\ua766\ua768\ua76a\ua76c\ua76e\ua779\ua77b\ua77d\ua77e\ua780\ua782\ua784\ua786\ua78b\ua78d\ua790\ua792\ua7a0\ua7a2\ua7a4\ua7a6\ua7a8\ua7aa\uff21-\uff3a",astral:"\ud835[\udc00-\udc19\udc34-\udc4d\udc68-\udc81\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb5\udcd0-\udce9\udd04\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd38\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd6c-\udd85\udda0-\uddb9\uddd4-\udded\ude08-\ude21\ude3c-\ude55\ude70-\ude89\udea8-\udec0\udee2-\udefa\udf1c-\udf34\udf56-\udf6e\udf90-\udfa8\udfca]|\ud801[\udc00-\udc27]"},{name:"White_Space",bmp:"\t-\r \u0085\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000"}]);if(!g.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Scripts");g.addUnicodeData([{name:"Arabic",bmp:"\u0600-\u0604\u0606-\u060b\u060d-\u061a\u061e\u0620-\u063f\u0641-\u064a\u0656-\u065f\u066a-\u066f\u0671-\u06dc\u06de-\u06ff\u0750-\u077f\u08a0\u08a2-\u08ac\u08e4-\u08fe\ufb50-\ufbc1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfc\ufe70-\ufe74\ufe76-\ufefc",astral:"\ud803[\ude60-\ude7e]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb\udef0\udef1]"},{name:"Armenian",bmp:"\u0531-\u0556\u0559-\u055f\u0561-\u0587\u058a\u058f\ufb13-\ufb17"},{name:"Avestan",astral:"\ud802[\udf00-\udf35\udf39-\udf3f]"},{name:"Balinese",bmp:"\u1b00-\u1b4b\u1b50-\u1b7c"},{name:"Bamum",bmp:"\ua6a0-\ua6f7",astral:"\ud81a[\udc00-\ude38]"},{name:"Batak",bmp:"\u1bc0-\u1bf3\u1bfc-\u1bff"},{name:"Bengali",bmp:"\u0981-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7\u09c8\u09cb-\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09e6-\u09fb"},{name:"Bopomofo",bmp:"\u02ea\u02eb\u3105-\u312d\u31a0-\u31ba"},{name:"Brahmi",astral:"\ud804[\udc00-\udc4d\udc52-\udc6f]"},{name:"Braille",bmp:"\u2800-\u28ff"},{name:"Buginese",bmp:"\u1a00-\u1a1b\u1a1e\u1a1f"},{name:"Buhid",bmp:"\u1740-\u1753"},{name:"Canadian_Aboriginal",bmp:"\u1400-\u167f\u18b0-\u18f5"},{name:"Carian",astral:"\ud800[\udea0-\uded0]"},{name:"Chakma",astral:"\ud804[\udd00-\udd34\udd36-\udd43]"},{name:"Cham",bmp:"\uaa00-\uaa36\uaa40-\uaa4d\uaa50-\uaa59\uaa5c-\uaa5f"},{name:"Cherokee",bmp:"\u13a0-\u13f4"},{name:"Common",bmp:"\x00-@\\x5B-`\\x7B-\u00a9\u00ab-\u00b9\u00bb-\u00bf\u00d7\u00f7\u02b9-\u02df\u02e5-\u02e9\u02ec-\u02ff\u0374\u037e\u0385\u0387\u0589\u060c\u061b\u061f\u0640\u0660-\u0669\u06dd\u0964\u0965\u0e3f\u0fd5-\u0fd8\u10fb\u16eb-\u16ed\u1735\u1736\u1802\u1803\u1805\u1cd3\u1ce1\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u2000-\u200b\u200e-\u2064\u206a-\u2070\u2074-\u207e\u2080-\u208e\u20a0-\u20ba\u2100-\u2125\u2127-\u2129\u212c-\u2131\u2133-\u214d\u214f-\u215f\u2189\u2190-\u23f3\u2400-\u2426\u2440-\u244a\u2460-\u26ff\u2701-\u27ff\u2900-\u2b4c\u2b50-\u2b59\u2e00-\u2e3b\u2ff0-\u2ffb\u3000-\u3004\u3006\u3008-\u3020\u3030-\u3037\u303c-\u303f\u309b\u309c\u30a0\u30fb\u30fc\u3190-\u319f\u31c0-\u31e3\u3220-\u325f\u327f-\u32cf\u3358-\u33ff\u4dc0-\u4dff\ua700-\ua721\ua788-\ua78a\ua830-\ua839\ufd3e\ufd3f\ufdfd\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe66\ufe68-\ufe6b\ufeff\uff01-\uff20\uff3b-\uff40\uff5b-\uff65\uff70\uff9e\uff9f\uffe0-\uffe6\uffe8-\uffee\ufff9-\ufffd",astral:"\ud800[\udd00-\udd02\udd07-\udd33\udd37-\udd3f\udd90-\udd9b\uddd0-\uddfc]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbe\udcc1-\udccf\udcd1-\udcdf\udd00-\udd0a\udd10-\udd2e\udd30-\udd6b\udd70-\udd9a\udde6-\uddff\ude01\ude02\ude10-\ude3a\ude40-\ude48\ude50\ude51\udf00-\udf20\udf30-\udf35\udf37-\udf7c\udf80-\udf93\udfa0-\udfc4\udfc6-\udfca\udfe0-\udff0]|\udb40[\udc01\udc20-\udc7f]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udfcb\udfce-\udfff]|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd66\udd6a-\udd7a\udd83\udd84\udd8c-\udda9\uddae-\udddd\udf00-\udf56\udf60-\udf71]|\ud83d[\udc00-\udc3e\udc40\udc42-\udcf7\udcf9-\udcfc\udd00-\udd3d\udd40-\udd43\udd50-\udd67\uddfb-\ude40\ude45-\ude4f\ude80-\udec5\udf00-\udf73]"},{name:"Coptic",bmp:"\u03e2-\u03ef\u2c80-\u2cf3\u2cf9-\u2cff"},{name:"Cuneiform",astral:"\ud809[\udc00-\udc62\udc70-\udc73]|\ud808[\udc00-\udf6e]"},{name:"Cypriot",astral:"\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f]"},{name:"Cyrillic",bmp:"\u0400-\u0484\u0487-\u0527\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua697\ua69f"},{name:"Deseret",astral:"\ud801[\udc00-\udc4f]"},{name:"Devanagari",bmp:"\u0900-\u0950\u0953-\u0963\u0966-\u0977\u0979-\u097f\ua8e0-\ua8fb"},{name:"Egyptian_Hieroglyphs",astral:"\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]"},{name:"Ethiopic",bmp:"\u1200-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u137c\u1380-\u1399\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e"},{name:"Georgian",bmp:"\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u10ff\u2d00-\u2d25\u2d27\u2d2d"},{name:"Glagolitic",bmp:"\u2c00-\u2c2e\u2c30-\u2c5e"},{name:"Gothic",astral:"\ud800[\udf30-\udf4a]"},{name:"Greek",bmp:"\u0370-\u0373\u0375-\u0377\u037a-\u037d\u0384\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03e1\u03f0-\u03ff\u1d26-\u1d2a\u1d5d-\u1d61\u1d66-\u1d6a\u1dbf\u1f00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fc4\u1fc6-\u1fd3\u1fd6-\u1fdb\u1fdd-\u1fef\u1ff2-\u1ff4\u1ff6-\u1ffe\u2126",astral:"\ud834[\ude00-\ude45]|\ud800[\udd40-\udd8a]"},{name:"Gujarati",bmp:"\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0ae6-\u0af1"},{name:"Gurmukhi",bmp:"\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a66-\u0a75"},{name:"Han",bmp:"\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u3005\u3007\u3021-\u3029\u3038-\u303b\u3400-\u4db5\u4e00-\u9fcc\uf900-\ufa6d\ufa70-\ufad9",astral:"[\ud840-\ud868\ud86a-\ud86c][\udc00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud87e[\udc00-\ude1d]"},{name:"Hangul",bmp:"\u1100-\u11ff\u302e\u302f\u3131-\u318e\u3200-\u321e\u3260-\u327e\ua960-\ua97c\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"},{name:"Hanunoo",bmp:"\u1720-\u1734"},{name:"Hebrew",bmp:"\u0591-\u05c7\u05d0-\u05ea\u05f0-\u05f4\ufb1d-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufb4f"},{name:"Hiragana",bmp:"\u3041-\u3096\u309d-\u309f",astral:"\ud82c\udc01|\ud83c\ude00"},{name:"Imperial_Aramaic",astral:"\ud802[\udc40-\udc55\udc57-\udc5f]"},{name:"Inherited",bmp:"\u0300-\u036f\u0485\u0486\u064b-\u0655\u0670\u0951\u0952\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1dc0-\u1de6\u1dfc-\u1dff\u200c\u200d\u20d0-\u20f0\u302a-\u302d\u3099\u309a\ufe00-\ufe0f\ufe20-\ufe26",astral:"\ud834[\udd67-\udd69\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad]|\ud800\uddfd|\udb40[\udd00-\uddef]"},{name:"Inscriptional_Pahlavi",astral:"\ud802[\udf60-\udf72\udf78-\udf7f]"},{name:"Inscriptional_Parthian",astral:"\ud802[\udf40-\udf55\udf58-\udf5f]"},{name:"Javanese",bmp:"\ua980-\ua9cd\ua9cf-\ua9d9\ua9de\ua9df"},{name:"Kaithi",astral:"\ud804[\udc80-\udcc1]"},{name:"Kannada",bmp:"\u0c82\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0ce6-\u0cef\u0cf1\u0cf2"},{name:"Katakana",bmp:"\u30a1-\u30fa\u30fd-\u30ff\u31f0-\u31ff\u32d0-\u32fe\u3300-\u3357\uff66-\uff6f\uff71-\uff9d",astral:"\ud82c\udc00"},{name:"Kayah_Li",bmp:"\ua900-\ua92f"},{name:"Kharoshthi",astral:"\ud802[\ude00-\ude03\ude05\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude33\ude38-\ude3a\ude3f-\ude47\ude50-\ude58]"},{name:"Khmer",bmp:"\u1780-\u17dd\u17e0-\u17e9\u17f0-\u17f9\u19e0-\u19ff"},{name:"Lao",bmp:"\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0ed0-\u0ed9\u0edc-\u0edf"},{name:"Latin",bmp:"A-Za-z\u00aa\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u02e0-\u02e4\u1d00-\u1d25\u1d2c-\u1d5c\u1d62-\u1d65\u1d6b-\u1d77\u1d79-\u1dbe\u1e00-\u1eff\u2071\u207f\u2090-\u209c\u212a\u212b\u2132\u214e\u2160-\u2188\u2c60-\u2c7f\ua722-\ua787\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua7ff\ufb00-\ufb06\uff21-\uff3a\uff41-\uff5a"},{name:"Lepcha",bmp:"\u1c00-\u1c37\u1c3b-\u1c49\u1c4d-\u1c4f"},{name:"Limbu",bmp:"\u1900-\u191c\u1920-\u192b\u1930-\u193b\u1940\u1944-\u194f"},{name:"Linear_B",astral:"\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa]"},{name:"Lisu",bmp:"\ua4d0-\ua4ff"},{name:"Lycian",astral:"\ud800[\ude80-\ude9c]"},{name:"Lydian",astral:"\ud802[\udd20-\udd39\udd3f]"},{name:"Malayalam",bmp:"\u0d02\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4e\u0d57\u0d60-\u0d63\u0d66-\u0d75\u0d79-\u0d7f"},{name:"Mandaic",bmp:"\u0840-\u085b\u085e"},{name:"Meetei_Mayek",bmp:"\uaae0-\uaaf6\uabc0-\uabed\uabf0-\uabf9"},{name:"Meroitic_Cursive",astral:"\ud802[\udda0-\uddb7\uddbe\uddbf]"},{name:"Meroitic_Hieroglyphs",astral:"\ud802[\udd80-\udd9f]"},{name:"Miao",astral:"\ud81b[\udf00-\udf44\udf50-\udf7e\udf8f-\udf9f]"},{name:"Mongolian",bmp:"\u1800\u1801\u1804\u1806-\u180e\u1810-\u1819\u1820-\u1877\u1880-\u18aa"},{name:"Myanmar",bmp:"\u1000-\u109f\uaa60-\uaa7b"},{name:"New_Tai_Lue",bmp:"\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19da\u19de\u19df"},{name:"Nko",bmp:"\u07c0-\u07fa"},{name:"Ogham",bmp:"\u1680-\u169c"},{name:"Ol_Chiki",bmp:"\u1c50-\u1c7f"},{name:"Old_Italic",astral:"\ud800[\udf00-\udf1e\udf20-\udf23]"},{name:"Old_Persian",astral:"\ud800[\udfa0-\udfc3\udfc8-\udfd5]"},{name:"Old_South_Arabian",astral:"\ud802[\ude60-\ude7f]"},{name:"Old_Turkic",astral:"\ud803[\udc00-\udc48]"},{name:"Oriya",bmp:"\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b66-\u0b77"},{name:"Osmanya",astral:"\ud801[\udc80-\udc9d\udca0-\udca9]"},{name:"Phags_Pa",bmp:"\ua840-\ua877"},{name:"Phoenician",astral:"\ud802[\udd00-\udd1b\udd1f]"},{name:"Rejang",bmp:"\ua930-\ua953\ua95f"},{name:"Runic",bmp:"\u16a0-\u16ea\u16ee-\u16f0"},{name:"Samaritan",bmp:"\u0800-\u082d\u0830-\u083e"},{name:"Saurashtra",bmp:"\ua880-\ua8c4\ua8ce-\ua8d9"},{name:"Sharada",astral:"\ud804[\udd80-\uddc8\uddd0-\uddd9]"},{name:"Shavian",astral:"\ud801[\udc50-\udc7f]"},{name:"Sinhala",bmp:"\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2-\u0df4"},{name:"Sora_Sompeng",astral:"\ud804[\udcd0-\udce8\udcf0-\udcf9]"},{name:"Sundanese",bmp:"\u1b80-\u1bbf\u1cc0-\u1cc7"},{name:"Syloti_Nagri",bmp:"\ua800-\ua82b"},{name:"Syriac",bmp:"\u0700-\u070d\u070f-\u074a\u074d-\u074f"},{name:"Tagalog",bmp:"\u1700-\u170c\u170e-\u1714"},{name:"Tagbanwa",bmp:"\u1760-\u176c\u176e-\u1770\u1772\u1773"},{name:"Tai_Le",bmp:"\u1950-\u196d\u1970-\u1974"},{name:"Tai_Tham",bmp:"\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1aa0-\u1aad"},{name:"Tai_Viet",bmp:"\uaa80-\uaac2\uaadb-\uaadf"},{name:"Takri",astral:"\ud805[\ude80-\udeb7\udec0-\udec9]"},{name:"Tamil",bmp:"\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0be6-\u0bfa"},{name:"Telugu",bmp:"\u0c01-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c58\u0c59\u0c60-\u0c63\u0c66-\u0c6f\u0c78-\u0c7f"},{name:"Thaana",bmp:"\u0780-\u07b1"},{name:"Thai",bmp:"\u0e01-\u0e3a\u0e40-\u0e5b"},{name:"Tibetan",bmp:"\u0f00-\u0f47\u0f49-\u0f6c\u0f71-\u0f97\u0f99-\u0fbc\u0fbe-\u0fcc\u0fce-\u0fd4\u0fd9\u0fda"},{name:"Tifinagh",bmp:"\u2d30-\u2d67\u2d6f\u2d70\u2d7f"},{name:"Ugaritic",astral:"\ud800[\udf80-\udf9d\udf9f]"},{name:"Vai",bmp:"\ua500-\ua62b"},{name:"Yi",bmp:"\ua000-\ua48c\ua490-\ua4c6"}]);return g});
|
uninstall.php
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Called on plugin uninstall
|
5 |
+
*/
|
6 |
+
if (!defined('ABSPATH') && !defined('WP_UNINSTALL_PLUGIN'))
|
7 |
+
exit();
|
8 |
+
|
9 |
+
/* Call config files */
|
10 |
+
require(dirname(__FILE__) . '/config/config.php');
|
11 |
+
|
12 |
+
/* Delete the record from database */
|
13 |
+
delete_option(SQ_OPTION);
|
14 |
+
delete_user_option(SQ_META);
|
15 |
+
|