|
@@ -1,53 +1,99 @@
|
|
|
/* 多说UserAgent插件
|
|
|
* 作者:Gerald <gera2ld@163.com>
|
|
|
*/
|
|
|
-duoshuoQuery.pluginUA=function(duoshuo_id){
|
|
|
+duoshuoQuery.pluginUA=function(duoshuo_id, getUAString){
|
|
|
+ function getRule(str,rules){
|
|
|
+ var res=null,cls=null;
|
|
|
+ rules.some(function(rule){
|
|
|
+ return rule[1].some(function(r){
|
|
|
+ var m;
|
|
|
+ if(r[0].slice) r[0].some(function(r){
|
|
|
+ m=str.match(r);
|
|
|
+ return !!m;
|
|
|
+ }); else m=str.match(r[0]);
|
|
|
+ if(m) {
|
|
|
+ if(r[1]) res=r[1](m);
|
|
|
+ else res=m[0];
|
|
|
+ cls=rule[0];
|
|
|
+ return true;
|
|
|
+ } else return false;
|
|
|
+ });
|
|
|
+ });
|
|
|
+ return [res,cls];
|
|
|
+ }
|
|
|
function parseAgent(a){
|
|
|
- var r={os:'山寨系统',br:'山寨浏览器',src:a},m;
|
|
|
- // 系统
|
|
|
- // Windows
|
|
|
- if(m=a.match(/Windows ?([^;)]*)/i)) {
|
|
|
- r.os='Windows';
|
|
|
- m[1]={
|
|
|
- '4.90':'ME',
|
|
|
- 'NT3.51':'NT 3.11',
|
|
|
- 'NT4.0':'NT 4.0',
|
|
|
- 'NT 5.0':'2000',
|
|
|
- 'NT 5.1':'XP',
|
|
|
- 'NT 5.2':'XP',
|
|
|
- 'NT 6.0':'Vista',
|
|
|
- 'NT 6.1':'7',
|
|
|
- 'NT 6.2':'8',
|
|
|
- 'NT 6.3':'8.1',
|
|
|
- 'NT 6.4':'10',
|
|
|
- 'ARM':'RT',
|
|
|
- }[m[1]];
|
|
|
- r.os+=m[1]?' '+m[1]:'山寨版';
|
|
|
- } else if(m=a.match(/Windows Phone(?: OS)? ?([^; )]*)/i)) r.os=m[0];
|
|
|
- // Mac OS
|
|
|
- else if(m=a.match(/iPhone|iPod|iPad/i)) r.os=m[0];
|
|
|
- else if(m=a.match(/Mac OS X/i)) r.os=m[0];
|
|
|
- // Android
|
|
|
- else if(m=a.match(/Android ?([^; )]*)/i)) r.os=m[0];
|
|
|
- // Linux
|
|
|
- else if(m=a.match(/Linux/i)) r.os=m[0];
|
|
|
- // 浏览器
|
|
|
- // Opera
|
|
|
- if(m=a.match(/Opera Mini\/(\d+)/i)) r.br='Opera Mini '+m[1];
|
|
|
- else if(m=a.match(/OPR\/(\S+)/i)||a.match(/Presto\/.*?Version\/(\S+)/i))
|
|
|
- r.br='Opera '+m[1];
|
|
|
- // Maxthon
|
|
|
- else if(m=a.match(/Maxthon\/(\S+)/i)) r.br='Maxthon '+m[1];
|
|
|
- // Chrome
|
|
|
- else if(m=a.match(/Chrome\/(\S+)/i)) r.br='Chrome '+m[1];
|
|
|
- // Safari
|
|
|
- else if(m=a.match(/Version\/(\S+) .*?Safari\//i)) r.br='Safari '+m[1];
|
|
|
- // Firefox
|
|
|
- else if(m=a.match(/Firefox\/(\S+)/i)) r.br='Firefox '+m[1];
|
|
|
- // IE
|
|
|
- else if(m=a.match(/MSIE (\d+)\.0/i)) r.br='Internet Explorer '+m[1];
|
|
|
- else if(m=a.match(/Trident\/(\d+)\.0/i)) r.br='Internet Explorer '+(m[1]+4);
|
|
|
- return r;
|
|
|
+ var rules_os=[
|
|
|
+ ['windows',[
|
|
|
+ [/Windows ?([^;)]*)/i,function(m){
|
|
|
+ var ver={
|
|
|
+ '4.90':'ME',
|
|
|
+ 'NT3.51':'NT 3.11',
|
|
|
+ 'NT4.0':'NT 4.0',
|
|
|
+ 'NT 5.0':'2000',
|
|
|
+ 'NT 5.1':'XP',
|
|
|
+ 'NT 5.2':'XP',
|
|
|
+ 'NT 6.0':'Vista',
|
|
|
+ 'NT 6.1':'7',
|
|
|
+ 'NT 6.2':'8',
|
|
|
+ 'NT 6.3':'8.1',
|
|
|
+ 'NT 6.4':'10',
|
|
|
+ 'ARM':'RT',
|
|
|
+ }[m[1]];
|
|
|
+ return 'Windows'+(ver?' '+ver:'山寨版');
|
|
|
+ }],
|
|
|
+ [/Windows Phone(?: OS)? ?([^; )]*)/i],
|
|
|
+ ]],
|
|
|
+ ['mac',[
|
|
|
+ [/iPhone|iPod|iPad/i],
|
|
|
+ [/Mac OS X/i],
|
|
|
+ ]],
|
|
|
+ ['android',[
|
|
|
+ [/Android ?([^; )]*)/i],
|
|
|
+ ]],
|
|
|
+ ['linux',[
|
|
|
+ [/Linux/i],
|
|
|
+ ]],
|
|
|
+ ],rules_br=[
|
|
|
+ ['opera',[
|
|
|
+ [/Opera Mini\/\d+/i,function(m){
|
|
|
+ return m[0].replace('/',' ');
|
|
|
+ }],
|
|
|
+ [[/OPR\/(\S+)/i,/Presto\/.*?Version\/(\S+)/i],function(m){
|
|
|
+ return 'Opera '+m[1];
|
|
|
+ }],
|
|
|
+ ]],
|
|
|
+ ['maxthon',[
|
|
|
+ [/Maxthon\/(\S+)/i,function(m){
|
|
|
+ return m[0].replace('/',' ');
|
|
|
+ }],
|
|
|
+ ]],
|
|
|
+ ['chrome',[
|
|
|
+ [/Chrome\/(\S+)/i,function(m){
|
|
|
+ return m[0].replace('/',' ');
|
|
|
+ }],
|
|
|
+ ]],
|
|
|
+ ['safari',[
|
|
|
+ [/Version\/(\S+) .*?Safari\//i,function(m){
|
|
|
+ return 'Safari '+m[1];
|
|
|
+ }],
|
|
|
+ ]],
|
|
|
+ ['firefox',[
|
|
|
+ [/Firefox\/(\S+)/i,function(m){
|
|
|
+ return m[0].replace('/',' ');
|
|
|
+ }],
|
|
|
+ ]],
|
|
|
+ ['ie',[
|
|
|
+ [/MSIE (\d+)\.0/i,function(m){
|
|
|
+ return 'Internet Explorer '+m[1];
|
|
|
+ }],
|
|
|
+ [/Trident\/(\d+)\.0/i,function(m){
|
|
|
+ return 'Internet Explorer '+(m[1]+4);
|
|
|
+ }],
|
|
|
+ ]],
|
|
|
+ ],result={os:'山寨系统',os_cls:'other',br:'山寨浏览器',br_cls:'other'},r;
|
|
|
+ r=getRule(a,rules_os);if(r[0]) {result.os=r[0];result.os_cls=r[1];}
|
|
|
+ r=getRule(a,rules_br);if(r[0]) {result.br=r[0];result.br_cls=r[1];}
|
|
|
+ return result;
|
|
|
}
|
|
|
function callBefore(local,e){
|
|
|
local.agent=parseAgent(e.post.agent);
|
|
@@ -57,12 +103,14 @@ duoshuoQuery.pluginUA=function(duoshuo_id){
|
|
|
var r=local.result,a=local.agent,
|
|
|
i=r.indexOf('<div class="ds-comment-header">'),
|
|
|
j=r.indexOf('</div>',i);
|
|
|
- local.result=r.slice(0,j)+
|
|
|
- '<div class=ds-os>'+a.os+'</div>'+
|
|
|
- '<div class=ds-browser>'+a.br+'</div>'+
|
|
|
- (local.webmaster?'<div class=ds-webmaster>天下第一帅的站长</div>':'')+
|
|
|
- r.slice(j);
|
|
|
+ local.result=r.slice(0,j)+getUAString(local)+r.slice(j);
|
|
|
}
|
|
|
+ if(!getUAString) getUAString=function(local){
|
|
|
+ var a=local.agent;
|
|
|
+ return '<div class="ds-os ds-os-'+a.os_cls+'">'+a.os+'</div>'+
|
|
|
+ '<div class="ds-br ds-br-'+a.br_cls+'">'+a.br+'</div>'+
|
|
|
+ (local.webmaster?'<div class=ds-webmaster>天下第一帅的站长</div>':'');
|
|
|
+ };
|
|
|
return function(){
|
|
|
var post=DUOSHUO.templates.post;
|
|
|
DUOSHUO.templates.post=function(e){
|