SEO SQUIRRLY™ - Version 3.1.1

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 Icon 128x128 SEO SQUIRRLY™
Version 3.1.1
Comparing to
See all releases

Version 3.1.1

Files changed (115) hide show
  1. classes/SQ_Action.php +182 -0
  2. classes/SQ_BlockController.php +83 -0
  3. classes/SQ_DisplayController.php +108 -0
  4. classes/SQ_Error.php +88 -0
  5. classes/SQ_FrontController.php +129 -0
  6. classes/SQ_HookController.php +82 -0
  7. classes/SQ_ObjController.php +160 -0
  8. classes/SQ_Ranking.php +209 -0
  9. classes/SQ_Sitemap.php +381 -0
  10. classes/SQ_Tools.php +774 -0
  11. classes/SQ_Traffic.php +28 -0
  12. config/config.php +31 -0
  13. config/paths.php +35 -0
  14. controllers/SQ_Frontend.php +110 -0
  15. controllers/SQ_Menu.php +304 -0
  16. controllers/SQ_Post.php +262 -0
  17. controllers/SQ_PostsList.php +351 -0
  18. core/SQ_BlockAccount/SQ_BlockAccount.php +18 -0
  19. core/SQ_BlockAffiliate/SQ_BlockAffiliate.php +47 -0
  20. core/SQ_BlockAnalytics/SQ_BlockAnalytics.php +9 -0
  21. core/SQ_BlockAudit/SQ_BlockAudit.php +9 -0
  22. core/SQ_BlockDashboard/SQ_BlockDashboard.php +8 -0
  23. core/SQ_BlockHelp/SQ_BlockHelp.php +8 -0
  24. core/SQ_BlockPostsAnalytics/SQ_BlockPostsAnalytics.php +40 -0
  25. core/SQ_BlockStatus/SQ_BlockStatus.php +11 -0
  26. core/SQ_BlockSupport/SQ_BlockSupport.php +114 -0
  27. core/SQ_Blocklogin/SQ_Blocklogin.php +148 -0
  28. core/SQ_Blockresearch/SQ_Blockresearch.php +17 -0
  29. core/SQ_Blocksearch/SQ_Blocksearch.php +54 -0
  30. core/SQ_Blockseo/SQ_Blockseo.php +39 -0
  31. core/SQ_Loading/SQ_Loading.php +45 -0
  32. core/config.xml +133 -0
  33. languages/squirrly-seo-de_DE.mo +0 -0
  34. languages/squirrly-seo-de_DE.po +856 -0
  35. languages/squirrly-seo-ro_RO.mo +0 -0
  36. languages/squirrly-seo-ro_RO.po +1277 -0
  37. languages/squirrly-seo-ru_RU.mo +0 -0
  38. languages/squirrly-seo-ru_RU.po +1193 -0
  39. models/SQ_BlockPostsAnalytics.php +466 -0
  40. models/SQ_BlockStatus.php +158 -0
  41. models/SQ_Blocksearch.php +72 -0
  42. models/SQ_Blockseo.php +40 -0
  43. models/SQ_Frontend.php +1492 -0
  44. models/SQ_Ico.php +229 -0
  45. models/SQ_Menu.php +346 -0
  46. models/SQ_Post.php +226 -0
  47. models/SQ_PostsList.php +117 -0
  48. readme.txt +384 -0
  49. screenshot-1.png +0 -0
  50. screenshot-2.png +0 -0
  51. screenshot-3.png +0 -0
  52. screenshot-4.png +0 -0
  53. screenshot-5.png +0 -0
  54. screenshot-6.png +0 -0
  55. screenshot-7.png +0 -0
  56. squirrly.php +62 -0
  57. themes/default/SQ_BlocStatus.php +1 -0
  58. themes/default/SQ_BlockAccount.php +41 -0
  59. themes/default/SQ_BlockAffiliate.php +105 -0
  60. themes/default/SQ_BlockAnalytics.php +281 -0
  61. themes/default/SQ_BlockAudit.php +9 -0
  62. themes/default/SQ_BlockDashboard.php +50 -0
  63. themes/default/SQ_BlockHelp.php +15 -0
  64. themes/default/SQ_BlockPostsAnalytics.php +27 -0
  65. themes/default/SQ_BlockSupport.php +79 -0
  66. themes/default/SQ_Blocklogin.php +49 -0
  67. themes/default/SQ_Blockresearch.php +33 -0
  68. themes/default/SQ_Blocksearch.php +50 -0
  69. themes/default/SQ_Blockseo.php +6 -0
  70. themes/default/SQ_Menu.php +496 -0
  71. themes/default/SQ_notices.php +16 -0
  72. themes/default/css/sq_blockaudit.css +1 -0
  73. themes/default/css/sq_blockresearch.css +1 -0
  74. themes/default/css/sq_blocksearch.css +1 -0
  75. themes/default/css/sq_blockseo.css +1 -0
  76. themes/default/css/sq_frontend.css +1 -0
  77. themes/default/css/sq_global.css +1 -0
  78. themes/default/css/sq_menu.css +1 -0
  79. themes/default/css/sq_post.css +1 -0
  80. themes/default/css/sq_postslist.css +1 -0
  81. themes/default/img/avatar-margin.png +0 -0
  82. themes/default/img/banners/banner1.jpg +0 -0
  83. themes/default/img/banners/banner1.png +0 -0
  84. themes/default/img/banners/banner2.jpg +0 -0
  85. themes/default/img/banners/banner2.png +0 -0
  86. themes/default/img/banners/banner3.png +0 -0
  87. themes/default/img/complete.png +0 -0
  88. themes/default/img/dashboard_analytics.png +0 -0
  89. themes/default/img/dashboard_assistant.png +0 -0
  90. themes/default/img/dashboard_audit.png +0 -0
  91. themes/default/img/dashboard_research.png +0 -0
  92. themes/default/img/header_back.png +0 -0
  93. themes/default/img/header_stars.png +0 -0
  94. themes/default/img/heading.png +0 -0
  95. themes/default/img/loading.gif +0 -0
  96. themes/default/img/menu_icon_16.png +0 -0
  97. themes/default/img/minloading.gif +0 -0
  98. themes/default/img/settings_edit.png +0 -0
  99. themes/default/img/settings_howto.jpg +0 -0
  100. themes/default/img/settings_login.jpg +0 -0
  101. themes/default/img/settings_login_done.jpg +0 -0
  102. themes/default/img/sprite.png +0 -0
  103. themes/default/img/sq_searching.gif +0 -0
  104. themes/default/img/status/backgroundv2.jpg +0 -0
  105. themes/default/img/status/squirrly_cheers.png +0 -0
  106. themes/default/js/jcache.js +21 -0
  107. themes/default/js/jquery.progressbar.js +20 -0
  108. themes/default/js/sq_blockaudit.js +3 -0
  109. themes/default/js/sq_blocklogin.js +22 -0
  110. themes/default/js/sq_blocksupport.js +18 -0
  111. themes/default/js/sq_menu.js +36 -0
  112. themes/default/js/sq_rank.js +33 -0
  113. themes/default/js/tinymce.js +2 -0
  114. themes/default/js/xregexp.js +4 -0
  115. 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=(.*?)&amp;sa=U&amp;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 . '&amp;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 . '&amp;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 &#8220;%s&#8221;'), $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 &#8220;%s&#8221;'), $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 &#8220;%s&#8221;'), $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('"', "&nbsp;", " "), 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("&nbsp;", " ", "\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(']]>', ']]&gt;', $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(']]>', ']]&gt;', $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(']]>', ']]&gt;', $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_) ?> &raquo;" />
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_) ?> &raquo;" /><?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_) ?> &raquo;" /><?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&amp;hl=en_US&amp;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&amp;hl=en_US&amp;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 '&nbsp;';
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_) ?> &raquo;" />
7
+ <input id="sq_goto_dashboard" type="button" value="<?php _e('Go to dashboard', _SQ_PLUGIN_NAME_) ?> &raquo;" />
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>&lt;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" /> " /&gt;</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>&lt;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" /> " /&gt;</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>&lt;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" /> " /&gt;</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>&lt;meta name="alexaVerifyID" content=" <input type="text" name="sq_alexa" value="<?php echo (($view->options['sq_alexa'] <> '') ? $view->options['sq_alexa'] : '') ?>" size="15" /> /&gt;</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_) ?> &raquo;" />
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&amp;send=false&amp;layout=button_count&amp;width=90&amp;show_faces=false&amp;font=arial&amp;colorscheme=light&amp;action=like&amp;height=21&amp;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
+