Version Description
- Now the plugin is able to reflect dynamic page content changes (infinite scroll, ajax basket and other javascript stuff)!!!
- Added new option to plugin settings: Refresh interval. Recommended values between 250 - 1500 milliseconds. Note: setting have impact on the site performance (client side). If you don't have dynamic content, set Refresh interval
Download this release
Release Info
Developer | Max Bond |
Plugin | Q2W3 Fixed Widget |
Version | 2.2 |
Comparing to | |
See all releases |
Code changes from version 2.1 to 2.2
- js/q2w3-fixed-widget.js +120 -67
- lang/q2w3-fixed-widget.pot +0 -15
- lang/ru_RU.mo +0 -0
- lang/ru_RU.po +30 -15
- q2w3-fixed-widget.php +33 -15
- q2w3-mobile-detect.php +39 -16
- readme.txt +14 -3
- screenshot-2.jpg +0 -0
js/q2w3-fixed-widget.js
CHANGED
@@ -1,75 +1,128 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
|
|
|
|
|
|
|
|
|
|
12 |
}
|
13 |
}
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
}
|
20 |
}
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
|
|
|
|
|
|
|
|
|
|
25 |
}
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
var
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
}
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
|
|
41 |
}
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
}
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
widget.css('padding', widget_padding);
|
67 |
-
} else { // normal
|
68 |
-
if ( update_parent_height ) {
|
69 |
-
widget.parent().removeAttr('style');
|
70 |
-
update_parent_height = false;
|
71 |
-
}
|
72 |
-
widget.css('position', '');
|
73 |
-
}
|
74 |
-
});
|
75 |
-
}
|
1 |
+
function q2w3_sidebar(options) {
|
2 |
+
|
3 |
+
if ( !options.widgets) return false;
|
4 |
+
|
5 |
+
if ( !options.sidebar) options.sidebar = 'q2w3_default';
|
6 |
+
|
7 |
+
var widgets = new Array();
|
8 |
+
|
9 |
+
var window_height = jQuery(window).height();
|
10 |
+
var document_height = jQuery(document).height();
|
11 |
+
|
12 |
+
if ( jQuery.browser.mozilla || jQuery.browser.webkit ) { // fixes Mozilla & Webkit page refresh problem. Not working for IE and Opera
|
13 |
+
var sc = jQuery(document).scrollTop()
|
14 |
+
if ( sc > 0 ) {
|
15 |
+
jQuery(document).scrollTop(0);
|
16 |
+
jQuery(document).scrollTop(sc);
|
17 |
}
|
18 |
}
|
19 |
+
|
20 |
+
function widget(obj, position, offset_top, fixed_margin_top, fixed_margin_bottom, height, next_widgets_height) {
|
21 |
+
this.obj = obj;
|
22 |
+
this.position = position;
|
23 |
+
this.fixed_margin_top = fixed_margin_top;
|
24 |
+
this.fixed_margin_bottom = fixed_margin_bottom;
|
25 |
+
this.offset_top = offset_top;
|
26 |
+
this.height = height;
|
27 |
+
this.next_widgets_height = next_widgets_height;
|
28 |
+
}
|
29 |
+
|
30 |
+
var fixed_margin_top = options.margin_top;
|
31 |
+
|
32 |
+
for ( var i = 0; i < options.widgets.length; i++ ) {
|
33 |
+
widget_obj = jQuery('#' + options.widgets[i]);
|
34 |
+
if ( widget_obj.attr('id') ) { // element exists
|
35 |
+
widgets[i] = new widget();
|
36 |
+
widgets[i].obj = widget_obj;
|
37 |
+
widgets[i].position = widget_obj.css('position');
|
38 |
+
widgets[i].offset_top = widget_obj.offset().top;
|
39 |
+
widgets[i].fixed_margin_top = fixed_margin_top;
|
40 |
+
widgets[i].height = widget_obj.outerHeight(true);
|
41 |
+
widgets[i].fixed_margin_bottom = fixed_margin_top + widgets[i].height;
|
42 |
+
fixed_margin_top += widgets[i].height;
|
43 |
+
} else {
|
44 |
+
widgets[i] = false;
|
45 |
}
|
46 |
}
|
47 |
+
|
48 |
+
if ( widgets.length < 1 ) return false;
|
49 |
+
|
50 |
+
for ( var i = 0; i < widgets.length ; i++ ) {
|
51 |
+
if (widgets[i]) widgets[i].obj.css('position', '');
|
52 |
+
}
|
53 |
+
|
54 |
+
for ( var i = 0; i < widgets.length ; i++ ) {
|
55 |
+
if (widgets[i]) widgets[i].offset_top = widgets[i].obj.offset().top;
|
56 |
}
|
57 |
+
|
58 |
+
var next_widgets_height = 0;
|
59 |
+
|
60 |
+
for ( var i = widgets.length - 1; i >= 0; i-- ) {
|
61 |
+
if (widgets[i]) {
|
62 |
+
widgets[i].next_widgets_height = next_widgets_height;
|
63 |
+
widgets[i].fixed_margin_bottom += next_widgets_height;
|
64 |
+
next_widgets_height += widgets[i].height;
|
65 |
+
if ( widgets[i].position != widgets[i].obj.css('position') ) widgets[i].obj.css('position', widgets[i].position);
|
66 |
+
}
|
67 |
}
|
68 |
+
|
69 |
+
jQuery(window).off('scroll.' + options.sidebar);
|
70 |
+
|
71 |
+
for ( var i = 0; i < widgets.length; i++ ) {
|
72 |
+
if (widgets[i]) fixed_widget(widgets[i]);
|
73 |
}
|
74 |
+
|
75 |
+
function fixed_widget(widget) {
|
76 |
+
|
77 |
+
var scroll_position_trigger_top = widget.offset_top - widget.fixed_margin_top;
|
78 |
+
var scroll_position_trigger_bottom = document_height - options.margin_bottom;
|
79 |
+
|
80 |
+
var widget_width = widget.obj.css('width');
|
81 |
+
var widget_margin = widget.obj.css('margin');
|
82 |
+
var widget_padding = widget.obj.css('padding');
|
83 |
+
|
84 |
+
var style_applied_top = false;
|
85 |
+
var style_applied_bottom = false;
|
86 |
+
var style_applied_normal = false;
|
87 |
+
|
88 |
+
jQuery(window).on('scroll.' + options.sidebar, function (event) {
|
89 |
+
var scroll = jQuery(this).scrollTop();
|
90 |
+
widget.obj.attr('offset_top', widget.offset_top);
|
91 |
+
widget.obj.attr('fixed_margin_top', widget.fixed_margin_top);
|
92 |
+
if ( scroll + widget.fixed_margin_bottom >= scroll_position_trigger_bottom ) { // fixed bottom
|
93 |
+
if ( !style_applied_bottom ) {
|
94 |
+
widget.obj.css('position', 'fixed');
|
95 |
+
widget.obj.css('top', '');
|
96 |
+
widget.obj.css('width', widget_width);
|
97 |
+
widget.obj.css('margin', widget_margin);
|
98 |
+
widget.obj.css('padding', widget_padding);
|
99 |
+
style_applied_bottom = true;
|
100 |
+
style_applied_top = false;
|
101 |
+
style_applied_normal = false;
|
102 |
+
}
|
103 |
+
widget.obj.css('bottom', scroll + window_height + widget.next_widgets_height - scroll_position_trigger_bottom);
|
104 |
+
} else if ( scroll >= scroll_position_trigger_top ) { // fixed top
|
105 |
+
if ( !style_applied_top ) {
|
106 |
+
widget.obj.css('position', 'fixed');
|
107 |
+
widget.obj.css('top', widget.fixed_margin_top);
|
108 |
+
widget.obj.css('bottom', '');
|
109 |
+
widget.obj.css('width', widget_width);
|
110 |
+
widget.obj.css('margin', widget_margin);
|
111 |
+
widget.obj.css('padding', widget_padding);
|
112 |
+
style_applied_top = true;
|
113 |
+
style_applied_bottom = false;
|
114 |
+
style_applied_normal = false;
|
115 |
+
}
|
116 |
+
} else { // normal
|
117 |
+
if ( !style_applied_normal ) {
|
118 |
+
widget.obj.css('position', '');
|
119 |
+
style_applied_normal = true;
|
120 |
+
style_applied_top = false;
|
121 |
+
style_applied_bottom = false;
|
122 |
+
}
|
123 |
}
|
124 |
+
});
|
125 |
+
|
126 |
+
}
|
127 |
+
|
128 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lang/q2w3-fixed-widget.pot
DELETED
@@ -1,15 +0,0 @@
|
|
1 |
-
msgid ""
|
2 |
-
msgstr ""
|
3 |
-
"Project-Id-Version: Q2W3 Fixed Widget\n"
|
4 |
-
"POT-Creation-Date: 2012-12-12 12:20+0400\n"
|
5 |
-
"PO-Revision-Date: 2012-12-12 12:21+0400\n"
|
6 |
-
"Last-Translator: \n"
|
7 |
-
"Language-Team: \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.4\n"
|
12 |
-
"X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
|
13 |
-
"X-Poedit-Basepath: .\n"
|
14 |
-
"X-Poedit-SearchPath-0: c:\\Program Files (x86)\\Zend\\Apache2\\htdocs\\q2w3."
|
15 |
-
"ru-dev\\wp-content\\plugins\\q2w3-fixed-widget\n"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lang/ru_RU.mo
CHANGED
Binary file
|
lang/ru_RU.po
CHANGED
@@ -1,70 +1,85 @@
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: Q2W3 Fixed Widget\n"
|
4 |
-
"POT-Creation-Date: 2013-
|
5 |
-
"PO-Revision-Date: 2013-
|
6 |
"Last-Translator: \n"
|
7 |
"Language-Team: \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.
|
12 |
"X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n"
|
13 |
"X-Poedit-Basepath: .\n"
|
14 |
"X-Poedit-SearchPath-0: c:\\Program Files (x86)\\Zend\\Apache2\\htdocs\\q2w3."
|
15 |
"ru-dev\\wp-content\\plugins\\q2w3-fixed-widget\n"
|
16 |
|
17 |
#: c:\Program Files
|
18 |
-
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:
|
19 |
msgid "Fixed widget"
|
20 |
msgstr "Зафиксировать виджет"
|
21 |
|
22 |
#: c:\Program Files
|
23 |
-
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:
|
24 |
-
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:
|
25 |
msgid "Fixed Widget Options"
|
26 |
msgstr "Фикс. Виджеты"
|
27 |
|
28 |
#: c:\Program Files
|
29 |
-
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:
|
30 |
msgid "Settings saved."
|
31 |
msgstr ""
|
32 |
|
33 |
#: c:\Program Files
|
34 |
-
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:
|
35 |
msgid "Margin Top:"
|
36 |
msgstr "Верхний отступ:"
|
37 |
|
38 |
#: c:\Program Files
|
39 |
-
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:
|
40 |
-
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:
|
41 |
msgid "px"
|
42 |
msgstr "пикс."
|
43 |
|
44 |
#: c:\Program Files
|
45 |
-
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:
|
46 |
msgid "Margin Bottom:"
|
47 |
msgstr "Нижний отступ:"
|
48 |
|
49 |
#: c:\Program Files
|
50 |
-
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
msgid "Custom HTML IDs (each one on a new line):"
|
52 |
msgstr ""
|
53 |
"HTML-идентификаторы статических виджетов и прочих<br/> нестандартных "
|
54 |
"элементов (каждый на новой строке):"
|
55 |
|
56 |
#: c:\Program Files
|
57 |
-
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:
|
58 |
msgid "Disable plugin on phone devices:"
|
59 |
msgstr "Отключить плагин на мобильных:"
|
60 |
|
61 |
#: c:\Program Files
|
62 |
-
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:
|
63 |
msgid "Disable plugin on tablet devices:"
|
64 |
msgstr "Отключить плагин на планшетах:"
|
65 |
|
66 |
#: c:\Program Files
|
67 |
-
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:
|
68 |
msgid "Save Changes"
|
69 |
msgstr ""
|
70 |
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: Q2W3 Fixed Widget\n"
|
4 |
+
"POT-Creation-Date: 2013-03-12 11:47+0400\n"
|
5 |
+
"PO-Revision-Date: 2013-03-12 11:49+0400\n"
|
6 |
"Last-Translator: \n"
|
7 |
"Language-Team: \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: _;gettext;gettext_noop;__;_e\n"
|
13 |
"X-Poedit-Basepath: .\n"
|
14 |
"X-Poedit-SearchPath-0: c:\\Program Files (x86)\\Zend\\Apache2\\htdocs\\q2w3."
|
15 |
"ru-dev\\wp-content\\plugins\\q2w3-fixed-widget\n"
|
16 |
|
17 |
#: c:\Program Files
|
18 |
+
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:135
|
19 |
msgid "Fixed widget"
|
20 |
msgstr "Зафиксировать виджет"
|
21 |
|
22 |
#: c:\Program Files
|
23 |
+
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:175
|
24 |
+
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:221
|
25 |
msgid "Fixed Widget Options"
|
26 |
msgstr "Фикс. Виджеты"
|
27 |
|
28 |
#: c:\Program Files
|
29 |
+
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:225
|
30 |
msgid "Settings saved."
|
31 |
msgstr ""
|
32 |
|
33 |
#: c:\Program Files
|
34 |
+
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:237
|
35 |
msgid "Margin Top:"
|
36 |
msgstr "Верхний отступ:"
|
37 |
|
38 |
#: c:\Program Files
|
39 |
+
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:237
|
40 |
+
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:239
|
41 |
msgid "px"
|
42 |
msgstr "пикс."
|
43 |
|
44 |
#: c:\Program Files
|
45 |
+
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:239
|
46 |
msgid "Margin Bottom:"
|
47 |
msgstr "Нижний отступ:"
|
48 |
|
49 |
#: c:\Program Files
|
50 |
+
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:241
|
51 |
+
msgid "Refresh interval:"
|
52 |
+
msgstr "Интервал обновления:"
|
53 |
+
|
54 |
+
#: c:\Program Files
|
55 |
+
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:241
|
56 |
+
msgid "milliseconds"
|
57 |
+
msgstr "миллисекунды"
|
58 |
+
|
59 |
+
#: c:\Program Files
|
60 |
+
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:241
|
61 |
+
msgid "Set 0 to disable."
|
62 |
+
msgstr "Установите 0, чтобы отключить пересчет параметров"
|
63 |
+
|
64 |
+
#: c:\Program Files
|
65 |
+
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:243
|
66 |
msgid "Custom HTML IDs (each one on a new line):"
|
67 |
msgstr ""
|
68 |
"HTML-идентификаторы статических виджетов и прочих<br/> нестандартных "
|
69 |
"элементов (каждый на новой строке):"
|
70 |
|
71 |
#: c:\Program Files
|
72 |
+
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:245
|
73 |
msgid "Disable plugin on phone devices:"
|
74 |
msgstr "Отключить плагин на мобильных:"
|
75 |
|
76 |
#: c:\Program Files
|
77 |
+
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:247
|
78 |
msgid "Disable plugin on tablet devices:"
|
79 |
msgstr "Отключить плагин на планшетах:"
|
80 |
|
81 |
#: c:\Program Files
|
82 |
+
#: (x86)\Zend\Apache2\htdocs\q2w3.ru-dev\wp-content\plugins\q2w3-fixed-widget/q2w3-fixed-widget.php:249
|
83 |
msgid "Save Changes"
|
84 |
msgstr ""
|
85 |
|
q2w3-fixed-widget.php
CHANGED
@@ -4,7 +4,7 @@ Plugin Name: Q2W3 Fixed Widget
|
|
4 |
Plugin URI: http://www.q2w3.ru/q2w3-fixed-widget-wordpress-plugin/
|
5 |
Description: Fixes positioning of the selected widgets, when the page is scrolled down.
|
6 |
Author: Max Bond
|
7 |
-
Version: 2.
|
8 |
Author URI: http://www.q2w3.ru/
|
9 |
*/
|
10 |
|
@@ -20,7 +20,7 @@ if ( is_admin() ) {
|
|
20 |
|
21 |
add_action('admin_menu', array( 'q2w3_fixed_widget', 'admin_init' ));
|
22 |
|
23 |
-
} else {
|
24 |
|
25 |
add_action('template_redirect', array( 'q2w3_fixed_widget', 'init' ));
|
26 |
|
@@ -46,7 +46,7 @@ class q2w3_fixed_widget {
|
|
46 |
|
47 |
public static function init() {
|
48 |
|
49 |
-
wp_enqueue_script('q2w3-fixed-widget', plugin_dir_url( __FILE__ ) . 'js/q2w3-fixed-widget.js', array('jquery'), '2.
|
50 |
|
51 |
self::check_custom_ids();
|
52 |
|
@@ -102,13 +102,27 @@ class q2w3_fixed_widget {
|
|
102 |
|
103 |
$array = implode(',', self::$fixed_widgets);
|
104 |
|
105 |
-
echo '<script type="text/javascript">
|
106 |
-
|
107 |
-
|
108 |
|
109 |
-
echo '
|
|
|
|
|
|
|
|
|
|
|
|
|
110 |
|
111 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
|
113 |
}
|
114 |
|
@@ -168,6 +182,8 @@ class q2w3_fixed_widget {
|
|
168 |
|
169 |
$d['margin-bottom'] = 0;
|
170 |
|
|
|
|
|
171 |
return $d;
|
172 |
|
173 |
}
|
@@ -176,9 +192,7 @@ class q2w3_fixed_widget {
|
|
176 |
|
177 |
$options = get_option(self::ID);
|
178 |
|
179 |
-
|
180 |
-
|
181 |
-
return $options;
|
182 |
|
183 |
}
|
184 |
|
@@ -224,17 +238,21 @@ class q2w3_fixed_widget {
|
|
224 |
|
225 |
echo '<p><span style="display: inline-block; width: 100px;">'. __('Margin Bottom:', 'q2w3_fixed_widget') .'</span><input type="text" name="'. self::ID .'[margin-bottom]" value="'. $options['margin-bottom'] .'" style="width: 50px; text-align: center;" /> '. __('px', 'q2w3_fixed_widget') .'</p>'.PHP_EOL;
|
226 |
|
|
|
|
|
227 |
echo '<p><span >'. __('Custom HTML IDs (each one on a new line):', 'q2w3_fixed_widget') .'</span><br/><textarea name="'. self::ID .'[custom-ids]" style="width: 320px; height: 120px;">'. $options['custom-ids'] .'</textarea>'.PHP_EOL;
|
228 |
|
229 |
-
echo '<p><span style="display: inline-block; width: 195px;">'. __('Disable plugin on phone devices:', 'q2w3_fixed_widget') .'</span><input type="checkbox" name="'. self::ID .'[disable-phone]" value="yes" '. checked('yes', $options['disable-phone'], false) .'
|
230 |
|
231 |
-
echo '<p><span style="display: inline-block; width: 195px;">'. __('Disable plugin on tablet devices:', 'q2w3_fixed_widget') .'</span><input type="checkbox" name="'. self::ID .'[disable-tablet]" value="yes" '. checked('yes', $options['disable-tablet'], false) .'
|
232 |
-
|
233 |
echo '<p class="submit"><input type="submit" class="button-primary" value="'. __('Save Changes') .'" /></p>'.PHP_EOL;
|
234 |
|
235 |
echo '</form>'.PHP_EOL;
|
|
|
|
|
236 |
|
237 |
-
echo '<
|
238 |
|
239 |
echo '</div><!-- .wrap -->'.PHP_EOL;
|
240 |
|
4 |
Plugin URI: http://www.q2w3.ru/q2w3-fixed-widget-wordpress-plugin/
|
5 |
Description: Fixes positioning of the selected widgets, when the page is scrolled down.
|
6 |
Author: Max Bond
|
7 |
+
Version: 2.2
|
8 |
Author URI: http://www.q2w3.ru/
|
9 |
*/
|
10 |
|
20 |
|
21 |
add_action('admin_menu', array( 'q2w3_fixed_widget', 'admin_init' ));
|
22 |
|
23 |
+
} else {
|
24 |
|
25 |
add_action('template_redirect', array( 'q2w3_fixed_widget', 'init' ));
|
26 |
|
46 |
|
47 |
public static function init() {
|
48 |
|
49 |
+
wp_enqueue_script('q2w3-fixed-widget', plugin_dir_url( __FILE__ ) . 'js/q2w3-fixed-widget.js', array('jquery'), '2.2');
|
50 |
|
51 |
self::check_custom_ids();
|
52 |
|
102 |
|
103 |
$array = implode(',', self::$fixed_widgets);
|
104 |
|
105 |
+
echo '<script type="text/javascript">'.PHP_EOL;
|
106 |
+
|
107 |
+
echo 'jQuery(document).ready(function(){'.PHP_EOL;
|
108 |
|
109 |
+
echo ' var q2w3_sidebar_options = { "sidebar" : "q2w3_default", "margin_top" : '. $options['margin-top'] .', "margin_bottom" : '. $options['margin-bottom'] .', "widgets" : ['. $array .'] }'.PHP_EOL;
|
110 |
+
|
111 |
+
if ( $options['refresh-interval'] > 0 ) {
|
112 |
+
|
113 |
+
echo ' setInterval(function () { q2w3_sidebar(q2w3_sidebar_options); }, '. $options['refresh-interval'] .');'.PHP_EOL;
|
114 |
+
|
115 |
+
} else {
|
116 |
|
117 |
+
echo ' q2w3_sidebar(q2w3_sidebar_options);'.PHP_EOL;
|
118 |
+
|
119 |
+
}
|
120 |
+
|
121 |
+
echo '});'.PHP_EOL;
|
122 |
+
|
123 |
+
echo '</script>'.PHP_EOL;
|
124 |
+
|
125 |
+
}
|
126 |
|
127 |
}
|
128 |
|
182 |
|
183 |
$d['margin-bottom'] = 0;
|
184 |
|
185 |
+
$d['refresh-interval'] = 1000;
|
186 |
+
|
187 |
return $d;
|
188 |
|
189 |
}
|
192 |
|
193 |
$options = get_option(self::ID);
|
194 |
|
195 |
+
return array_merge(self::defaults(), $options);
|
|
|
|
|
196 |
|
197 |
}
|
198 |
|
238 |
|
239 |
echo '<p><span style="display: inline-block; width: 100px;">'. __('Margin Bottom:', 'q2w3_fixed_widget') .'</span><input type="text" name="'. self::ID .'[margin-bottom]" value="'. $options['margin-bottom'] .'" style="width: 50px; text-align: center;" /> '. __('px', 'q2w3_fixed_widget') .'</p>'.PHP_EOL;
|
240 |
|
241 |
+
echo '<p><span style="display: inline-block; width: 100px;">'. __('Refresh interval:', 'q2w3_fixed_widget') .'</span><input type="text" name="'. self::ID .'[refresh-interval]" value="'. $options['refresh-interval'] .'" style="width: 50px; text-align: center;" /> '. __('milliseconds', 'q2w3_fixed_widget') .' / '. __('Set 0 to disable.', 'q2w3_fixed_widget') .'</p>'.PHP_EOL;
|
242 |
+
|
243 |
echo '<p><span >'. __('Custom HTML IDs (each one on a new line):', 'q2w3_fixed_widget') .'</span><br/><textarea name="'. self::ID .'[custom-ids]" style="width: 320px; height: 120px;">'. $options['custom-ids'] .'</textarea>'.PHP_EOL;
|
244 |
|
245 |
+
echo '<p><span style="display: inline-block; width: 195px;">'. __('Disable plugin on phone devices:', 'q2w3_fixed_widget') .'</span><input type="checkbox" name="'. self::ID .'[disable-phone]" value="yes" '. checked('yes', $options['disable-phone'], false) .' /></p>'.PHP_EOL;
|
246 |
|
247 |
+
echo '<p><span style="display: inline-block; width: 195px;">'. __('Disable plugin on tablet devices:', 'q2w3_fixed_widget') .'</span><input type="checkbox" name="'. self::ID .'[disable-tablet]" value="yes" '. checked('yes', $options['disable-tablet'], false) .' /></p>'.PHP_EOL;
|
248 |
+
|
249 |
echo '<p class="submit"><input type="submit" class="button-primary" value="'. __('Save Changes') .'" /></p>'.PHP_EOL;
|
250 |
|
251 |
echo '</form>'.PHP_EOL;
|
252 |
+
|
253 |
+
echo '<br/>'.PHP_EOL;
|
254 |
|
255 |
+
echo '<p><form action="https://www.paypal.com/cgi-bin/webscr" method="post"><input type="hidden" name="cmd" value="_s-xclick"><input type="hidden" name="hosted_button_id" value="Q36H2MHNVVP7U"><input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"></form></p>'.PHP_EOL;
|
256 |
|
257 |
echo '</div><!-- .wrap -->'.PHP_EOL;
|
258 |
|
q2w3-mobile-detect.php
CHANGED
@@ -29,11 +29,12 @@
|
|
29 |
* @link Official page: http://mobiledetect.net
|
30 |
* GitHub Repository: https://github.com/serbanghita/Mobile-Detect
|
31 |
* Google Code Old Page: http://code.google.com/p/php-mobile-detect/
|
|
|
32 |
*/
|
33 |
|
34 |
class Q2W3_Mobile_Detect {
|
35 |
|
36 |
-
protected $scriptVersion = '2.5.
|
37 |
|
38 |
// External info.
|
39 |
protected $userAgent = null;
|
@@ -47,14 +48,14 @@ class Q2W3_Mobile_Detect {
|
|
47 |
|
48 |
// List of mobile devices (phones)
|
49 |
protected $phoneDevices = array(
|
50 |
-
'iPhone' => '
|
51 |
-
'BlackBerry' => 'BlackBerry|rim[0-9]+',
|
52 |
'HTC' => 'HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6425|001HT|Inspire 4G',
|
53 |
'Nexus' => 'Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile',
|
54 |
// @todo: Is 'Dell Streak' a tablet or a phone? ;)
|
55 |
'Dell' => 'Dell.*Streak|Dell.*Aero|Dell.*Venue|DELL.*Venue Pro|Dell Flash|Dell Smoke|Dell Mini 3iX|XCD28|XCD35|\b001DL\b|\b101DL\b|\bGS01\b',
|
56 |
'Motorola' => 'Motorola|\bDroid\b.*Build|DROIDX|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT909|XT910|XT912|XT928',
|
57 |
-
'Samsung' => 'Samsung|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9300 |GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-P6810|GT-P7100|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N8010',
|
58 |
'Sony' => 'sony|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i',
|
59 |
'Asus' => 'Asus.*Galaxy',
|
60 |
'Palm' => 'PalmSource|Palm', // avantgo|blazer|elaine|hiptop|plucker|xiino ; @todo - complete the regex.
|
@@ -64,27 +65,33 @@ class Q2W3_Mobile_Detect {
|
|
64 |
'Pantech' => 'PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790',
|
65 |
// @ref: http://www.fly-phone.com/devices/smartphones/ ; Included only smartphones.
|
66 |
'Fly' => 'IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250',
|
67 |
-
|
|
|
|
|
|
|
|
|
68 |
);
|
69 |
// List of tablet devices.
|
70 |
protected $tabletDevices = array(
|
71 |
-
'BlackBerryTablet' => 'PlayBook|RIM Tablet',
|
72 |
'iPad' => 'iPad|iPad.*Mobile', // @todo: check for mobile friendly emails topic.
|
73 |
'NexusTablet' => '^.*Android.*Nexus(((?:(?!Mobile))|(?:(\s(7|10).+))).)*$',
|
|
|
74 |
// @reference: http://www.labnol.org/software/kindle-user-agent-string/20378/
|
75 |
'Kindle' => 'Kindle|Silk.*Accelerated',
|
76 |
-
'
|
|
|
77 |
'HTCtablet' => 'HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200',
|
78 |
'MotorolaTablet' => 'xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617',
|
79 |
-
'AsusTablet' => 'Transformer|TF101',
|
80 |
'NookTablet' => 'Android.*Nook|NookColor|nook browser|BNTV250A|LogicPD Zoom2',
|
81 |
// @ref: http://www.acer.ro/ac/ro/RO/content/drivers
|
82 |
// @ref: http://www.packardbell.co.uk/pb/en/GB/content/download (Packard Bell is part of Acer)
|
83 |
-
'AcerTablet' => 'Android.*\b(A100|A101|A200|A500|A501|A510|A700|A701|W500|W500P|W501|W501P|G100|G100W)\b',
|
84 |
// @ref: http://eu.computers.toshiba-europe.com/innovation/family/Tablets/1098744/banner_id/tablet_footerlink/
|
85 |
// @ref: http://us.toshiba.com/tablets/tablet-finder
|
86 |
// @ref: http://www.toshiba.co.jp/regza/tablet/
|
87 |
'ToshibaTablet' => 'Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)',
|
|
|
|
|
88 |
'YarvikTablet' => 'Android.*(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468)',
|
89 |
'MedionTablet' => 'Android.*\bOYO\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB',
|
90 |
'ArnovaTablet' => 'AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT',
|
@@ -93,9 +100,11 @@ class Q2W3_Mobile_Detect {
|
|
93 |
// @reference: http://en.wikipedia.org/wiki/NOVO7
|
94 |
'AinolTablet' => 'NOVO7|Novo7Aurora|Novo7Basic|NOVO7PALADIN',
|
95 |
// @todo: inspect http://esupport.sony.com/US/p/select-system.pl?DIRECTOR=DRIVER
|
96 |
-
|
|
|
|
|
97 |
// @ref: db + http://www.cube-tablet.com/buy-products.html
|
98 |
-
'CubeTablet' => 'Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)',
|
99 |
// @ref: http://www.cobyusa.com/?p=pcat&pcat_id=3001
|
100 |
'CobyTablet' => 'MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010',
|
101 |
// @ref: http://pdadb.net/index.php?m=pdalist&list=SMiT (NoName Chinese Tablets)
|
@@ -112,12 +121,24 @@ class Q2W3_Mobile_Detect {
|
|
112 |
// @ref: http://www.huaweidevice.com/worldwide/productFamily.do?method=index&directoryId=5011&treeId=3290
|
113 |
// @ref: http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index&directoryId=3372&treeId=0&tb=1&type=software (including legacy tablets)
|
114 |
'HuaweiTablet' => 'MediaPad|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim',
|
115 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
116 |
);
|
117 |
// List of mobile Operating Systems.
|
118 |
protected $operatingSystems = array(
|
119 |
'AndroidOS' => 'Android',
|
120 |
-
'BlackBerryOS' => 'blackberry|rim tablet os',
|
121 |
'PalmOS' => 'PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino',
|
122 |
'SymbianOS' => 'Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\bS60\b',
|
123 |
// @reference: http://en.wikipedia.org/wiki/Windows_Mobile
|
@@ -126,8 +147,7 @@ class Q2W3_Mobile_Detect {
|
|
126 |
// http://wifeng.cn/?r=blog&a=view&id=106
|
127 |
// http://nicksnettravels.builttoroam.com/post/2011/01/10/Bogus-Windows-Phone-7-User-Agent-String.aspx
|
128 |
'WindowsPhoneOS' => 'Windows Phone OS|XBLWP7|ZuneWP7',
|
129 |
-
'iOS' => '
|
130 |
-
'FlashLiteOS' => '',
|
131 |
// http://en.wikipedia.org/wiki/MeeGo
|
132 |
// @todo: research MeeGo in UAs
|
133 |
'MeeGoOS' => 'MeeGo',
|
@@ -161,12 +181,15 @@ class Q2W3_Mobile_Detect {
|
|
161 |
'DiigoBrowser' => 'DiigoBrowser',
|
162 |
// http://www.puffinbrowser.com/index.php
|
163 |
'Puffin' => 'Puffin',
|
|
|
|
|
164 |
// @reference: http://en.wikipedia.org/wiki/Minimo
|
165 |
// http://en.wikipedia.org/wiki/Vision_Mobile_Browser
|
166 |
'GenericBrowser' => 'NokiaBrowser|OviBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision'
|
167 |
);
|
168 |
// Utilities.
|
169 |
protected $utilities = array(
|
|
|
170 |
'WebKit' => '(webkit)[ /]([\w.]+)',
|
171 |
'Bot' => 'Googlebot|DoCoMo|YandexBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|facebookexternalhit',
|
172 |
'MobileBot' => 'Googlebot-Mobile|DoCoMo|YahooSeeker/M1A1-R2D2',
|
@@ -764,4 +787,4 @@ class Q2W3_Mobile_Detect {
|
|
764 |
}
|
765 |
|
766 |
|
767 |
-
}
|
29 |
* @link Official page: http://mobiledetect.net
|
30 |
* GitHub Repository: https://github.com/serbanghita/Mobile-Detect
|
31 |
* Google Code Old Page: http://code.google.com/p/php-mobile-detect/
|
32 |
+
* @version 2.5.7
|
33 |
*/
|
34 |
|
35 |
class Q2W3_Mobile_Detect {
|
36 |
|
37 |
+
protected $scriptVersion = '2.5.7';
|
38 |
|
39 |
// External info.
|
40 |
protected $userAgent = null;
|
48 |
|
49 |
// List of mobile devices (phones)
|
50 |
protected $phoneDevices = array(
|
51 |
+
'iPhone' => '\biPhone.*Mobile|\biPod|\biTunes',
|
52 |
+
'BlackBerry' => 'BlackBerry|\bBB10\b|rim[0-9]+',
|
53 |
'HTC' => 'HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6425|001HT|Inspire 4G',
|
54 |
'Nexus' => 'Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile',
|
55 |
// @todo: Is 'Dell Streak' a tablet or a phone? ;)
|
56 |
'Dell' => 'Dell.*Streak|Dell.*Aero|Dell.*Venue|DELL.*Venue Pro|Dell Flash|Dell Smoke|Dell Mini 3iX|XCD28|XCD35|\b001DL\b|\b101DL\b|\bGS01\b',
|
57 |
'Motorola' => 'Motorola|\bDroid\b.*Build|DROIDX|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT909|XT910|XT912|XT928',
|
58 |
+
'Samsung' => 'Samsung|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9300 |GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-P6810|GT-P7100|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N8010',
|
59 |
'Sony' => 'sony|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i',
|
60 |
'Asus' => 'Asus.*Galaxy',
|
61 |
'Palm' => 'PalmSource|Palm', // avantgo|blazer|elaine|hiptop|plucker|xiino ; @todo - complete the regex.
|
65 |
'Pantech' => 'PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790',
|
66 |
// @ref: http://www.fly-phone.com/devices/smartphones/ ; Included only smartphones.
|
67 |
'Fly' => 'IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250',
|
68 |
+
// Added simvalley mobile just for fun. They have some interesting devices.
|
69 |
+
// @ref: http://www.simvalley.fr/telephonie---gps-_22_telephonie-mobile_telephones_.html
|
70 |
+
'SimValley' => '\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\b',
|
71 |
+
// @Tapatalk is a mobile app; @ref: http://support.tapatalk.com/threads/smf-2-0-2-os-and-browser-detection-plugin-and-tapatalk.15565/#post-79039
|
72 |
+
'GenericPhone' => 'Tapatalk|PDA;|PPC;|SAGEM|mmp|pocket|psp|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|wap|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser|LG-P500'
|
73 |
);
|
74 |
// List of tablet devices.
|
75 |
protected $tabletDevices = array(
|
|
|
76 |
'iPad' => 'iPad|iPad.*Mobile', // @todo: check for mobile friendly emails topic.
|
77 |
'NexusTablet' => '^.*Android.*Nexus(((?:(?!Mobile))|(?:(\s(7|10).+))).)*$',
|
78 |
+
'SamsungTablet' => 'SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1010|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P6810|GT-P7501',
|
79 |
// @reference: http://www.labnol.org/software/kindle-user-agent-string/20378/
|
80 |
'Kindle' => 'Kindle|Silk.*Accelerated',
|
81 |
+
'AsusTablet' => 'Transformer|TF101',
|
82 |
+
'BlackBerryTablet' => 'PlayBook|RIM Tablet',
|
83 |
'HTCtablet' => 'HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200',
|
84 |
'MotorolaTablet' => 'xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617',
|
|
|
85 |
'NookTablet' => 'Android.*Nook|NookColor|nook browser|BNTV250A|LogicPD Zoom2',
|
86 |
// @ref: http://www.acer.ro/ac/ro/RO/content/drivers
|
87 |
// @ref: http://www.packardbell.co.uk/pb/en/GB/content/download (Packard Bell is part of Acer)
|
88 |
+
'AcerTablet' => 'Android.*\b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71)\b',
|
89 |
// @ref: http://eu.computers.toshiba-europe.com/innovation/family/Tablets/1098744/banner_id/tablet_footerlink/
|
90 |
// @ref: http://us.toshiba.com/tablets/tablet-finder
|
91 |
// @ref: http://www.toshiba.co.jp/regza/tablet/
|
92 |
'ToshibaTablet' => 'Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)',
|
93 |
+
// @ref: http://www.nttdocomo.co.jp/english/service/developer/smart_phone/technical_info/spec/index.html
|
94 |
+
'LGTablet' => '\bL-06C|LG-V900|LG-V909',
|
95 |
'YarvikTablet' => 'Android.*(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468)',
|
96 |
'MedionTablet' => 'Android.*\bOYO\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB',
|
97 |
'ArnovaTablet' => 'AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT',
|
100 |
// @reference: http://en.wikipedia.org/wiki/NOVO7
|
101 |
'AinolTablet' => 'NOVO7|Novo7Aurora|Novo7Basic|NOVO7PALADIN',
|
102 |
// @todo: inspect http://esupport.sony.com/US/p/select-system.pl?DIRECTOR=DRIVER
|
103 |
+
// @ref: Readers http://www.atsuhiro-me.net/ebook/sony-reader/sony-reader-web-browser
|
104 |
+
// @ref: http://www.sony.jp/support/tablet/
|
105 |
+
'SonyTablet' => 'Sony Tablet|Sony Tablet S|SGPT12|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT211|SGPT213|EBRD1101|EBRD1102|EBRD1201',
|
106 |
// @ref: db + http://www.cube-tablet.com/buy-products.html
|
107 |
+
'CubeTablet' => 'Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT',
|
108 |
// @ref: http://www.cobyusa.com/?p=pcat&pcat_id=3001
|
109 |
'CobyTablet' => 'MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010',
|
110 |
// @ref: http://pdadb.net/index.php?m=pdalist&list=SMiT (NoName Chinese Tablets)
|
121 |
// @ref: http://www.huaweidevice.com/worldwide/productFamily.do?method=index&directoryId=5011&treeId=3290
|
122 |
// @ref: http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index&directoryId=3372&treeId=0&tb=1&type=software (including legacy tablets)
|
123 |
'HuaweiTablet' => 'MediaPad|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim',
|
124 |
+
// Nec or Medias Tab
|
125 |
+
'NecTablet' => '\bN-06D|\bN-08D',
|
126 |
+
// Broncho Tablets: http://www.broncho.cn/ (hard to find)
|
127 |
+
'BronchoTablet' => 'Broncho.*(N701|N708|N802|a710)',
|
128 |
+
// @ref: http://versusuk.com/support.html
|
129 |
+
'VersusTablet' => 'TOUCHPAD.*[78910]',
|
130 |
+
// @ref: http://www.zync.in/index.php/our-products/tablet-phablets
|
131 |
+
'ZyncTablet' => 'z1000|Z99 2G|z99|z930|z999|z990|z909|Z919|z900',
|
132 |
+
// @ref: https://www.nabitablet.com/
|
133 |
+
'NabiTablet' => 'Android.*\bNabi',
|
134 |
+
// @note: Avoid detecting 'PLAYSTATION 3' as mobile.
|
135 |
+
'PlaystationTablet' => 'Playstation.*(Portable|Vita)',
|
136 |
+
'GenericTablet' => 'Android.*\b97D\b|Tablet(?!.*PC)|ViewPad7|MID7015|BNTV250A|LogicPD Zoom2|\bA7EB\b|CatNova8|A1_07|CT704|CT1002|\bM721\b|hp-tablet',
|
137 |
);
|
138 |
// List of mobile Operating Systems.
|
139 |
protected $operatingSystems = array(
|
140 |
'AndroidOS' => 'Android',
|
141 |
+
'BlackBerryOS' => 'blackberry|\bBB10\b|rim tablet os',
|
142 |
'PalmOS' => 'PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino',
|
143 |
'SymbianOS' => 'Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\bS60\b',
|
144 |
// @reference: http://en.wikipedia.org/wiki/Windows_Mobile
|
147 |
// http://wifeng.cn/?r=blog&a=view&id=106
|
148 |
// http://nicksnettravels.builttoroam.com/post/2011/01/10/Bogus-Windows-Phone-7-User-Agent-String.aspx
|
149 |
'WindowsPhoneOS' => 'Windows Phone OS|XBLWP7|ZuneWP7',
|
150 |
+
'iOS' => '\biPhone.*Mobile|\biPod|\biPad',
|
|
|
151 |
// http://en.wikipedia.org/wiki/MeeGo
|
152 |
// @todo: research MeeGo in UAs
|
153 |
'MeeGoOS' => 'MeeGo',
|
181 |
'DiigoBrowser' => 'DiigoBrowser',
|
182 |
// http://www.puffinbrowser.com/index.php
|
183 |
'Puffin' => 'Puffin',
|
184 |
+
// @ref: http://mercury-browser.com/index.html
|
185 |
+
'Mercury' => '\bMercury\b',
|
186 |
// @reference: http://en.wikipedia.org/wiki/Minimo
|
187 |
// http://en.wikipedia.org/wiki/Vision_Mobile_Browser
|
188 |
'GenericBrowser' => 'NokiaBrowser|OviBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision'
|
189 |
);
|
190 |
// Utilities.
|
191 |
protected $utilities = array(
|
192 |
+
'TV' => 'SonyDTV115', // experimental
|
193 |
'WebKit' => '(webkit)[ /]([\w.]+)',
|
194 |
'Bot' => 'Googlebot|DoCoMo|YandexBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|facebookexternalhit',
|
195 |
'MobileBot' => 'Googlebot-Mobile|DoCoMo|YahooSeeker/M1A1-R2D2',
|
787 |
}
|
788 |
|
789 |
|
790 |
+
}
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_i
|
|
4 |
Tags: sidebar, widget, scroll, fixed, floating, sticky, russian, q2w3
|
5 |
Requires at least: 3.0
|
6 |
Tested up to: 3.5.1
|
7 |
-
Stable tag: 2.
|
8 |
|
9 |
Fixes positioning of the selected widgets, when the page is scrolled down.
|
10 |
|
@@ -14,9 +14,9 @@ Enable "Fixed widget" option in widget settings (see [screenshot](http://wordpre
|
|
14 |
|
15 |
There is no problem to "Fix" (or "Stick") more than one widget in a single sidebar.
|
16 |
|
17 |
-
|
18 |
|
19 |
-
|
20 |
Mobile detection is based on [Mobile-Detect project](https://github.com/serbanghita/Mobile-Detect/).
|
21 |
|
22 |
[Watch the demo](http://store.places-finder.com/cp-ajax-post-load).
|
@@ -32,6 +32,8 @@ Note two. The plugin is not working with all themes. Theme requirements:
|
|
32 |
* Widgets must have unique IDs (see FAQ).
|
33 |
* No JavaScript errors
|
34 |
|
|
|
|
|
35 |
== Installation ==
|
36 |
|
37 |
1. Follow standard WordPress plugin installation procedure
|
@@ -53,6 +55,10 @@ There are several reasons:
|
|
53 |
|
54 |
Make sure you have updated plugin to version 2.x. Go to WP admin area, Appearance -> Fixed Widget Options. Here you can define top and bottom margins. Set bottom margin value >= footer height. Check the result.
|
55 |
|
|
|
|
|
|
|
|
|
56 |
== Screenshots ==
|
57 |
|
58 |
1. Widget with enabled "Fixed widget" option
|
@@ -67,6 +73,11 @@ Make sure you have updated plugin to version 2.x. Go to WP admin area, Appearanc
|
|
67 |
|
68 |
== Changelog ==
|
69 |
|
|
|
|
|
|
|
|
|
|
|
70 |
= 2.1 =
|
71 |
* New option to define custom widget IDs for static sidebars and etc.
|
72 |
* New option to disable plugin on mobile devices.
|
4 |
Tags: sidebar, widget, scroll, fixed, floating, sticky, russian, q2w3
|
5 |
Requires at least: 3.0
|
6 |
Tested up to: 3.5.1
|
7 |
+
Stable tag: 2.2
|
8 |
|
9 |
Fixes positioning of the selected widgets, when the page is scrolled down.
|
10 |
|
14 |
|
15 |
There is no problem to "Fix" (or "Stick") more than one widget in a single sidebar.
|
16 |
|
17 |
+
New in version 2.2. Now the plugin is able to reflect dynamic page content changes (infinite scroll, ajax basket and other javascript stuff)!!!
|
18 |
|
19 |
+
New in version 2.1. Added option to disable plugin on mobile devices.
|
20 |
Mobile detection is based on [Mobile-Detect project](https://github.com/serbanghita/Mobile-Detect/).
|
21 |
|
22 |
[Watch the demo](http://store.places-finder.com/cp-ajax-post-load).
|
32 |
* Widgets must have unique IDs (see FAQ).
|
33 |
* No JavaScript errors
|
34 |
|
35 |
+
In some cases theme CSS changes required.
|
36 |
+
|
37 |
== Installation ==
|
38 |
|
39 |
1. Follow standard WordPress plugin installation procedure
|
55 |
|
56 |
Make sure you have updated plugin to version 2.x. Go to WP admin area, Appearance -> Fixed Widget Options. Here you can define top and bottom margins. Set bottom margin value >= footer height. Check the result.
|
57 |
|
58 |
+
= What does Refresh Interval option? =
|
59 |
+
|
60 |
+
This option defines (in milliseconds, 1 sec = 1000 ms) how often plugin recalculates sticky widgets parameters. Required by sites with dynamic content (infinite scroll, image lazy load and other javascript stuff). The option have impact on the site performance (client side). Recommended values: 250 - 1500 milliseconds. If you don't have dynamic content, set Refresh interval = 0.
|
61 |
+
|
62 |
== Screenshots ==
|
63 |
|
64 |
1. Widget with enabled "Fixed widget" option
|
73 |
|
74 |
== Changelog ==
|
75 |
|
76 |
+
= 2.2 =
|
77 |
+
* Now the plugin is able to reflect dynamic page content changes (infinite scroll, ajax basket and other javascript stuff)!!!
|
78 |
+
* Added new option to plugin settings: Refresh interval. Recommended values between 250 - 1500 milliseconds. Note: setting have impact on the site performance (client side). If you don't have dynamic content, set Refresh interval = 0.
|
79 |
+
* Mobile Detect class updated to version 2.5.7
|
80 |
+
|
81 |
= 2.1 =
|
82 |
* New option to define custom widget IDs for static sidebars and etc.
|
83 |
* New option to disable plugin on mobile devices.
|
screenshot-2.jpg
CHANGED
Binary file
|