Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Disable the mouse-motion anti-robot requirement for devices that self-identify as a tablet or mobile device, and hence might never send mouse-motion events. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | tablet-antirobot-fix |
| Files: | files | file ages | folders |
| SHA3-256: |
60d25189d2718a5a6c771046ca22d25d |
| User & Date: | drh 2019-06-10 04:48:50.510 |
Context
|
2019-06-10
| ||
| 04:48 | Disable the mouse-motion anti-robot requirement for devices that self-identify as a tablet or mobile device, and hence might never send mouse-motion events. ... (Closed-Leaf check-in: 60d25189d2 user: drh tags: tablet-antirobot-fix) | |
| 01:53 | Simplifications to the copybtn.js script. ... (check-in: 5f0479d097 user: drh tags: trunk) | |
Changes
Changes to src/href.js.
| ︙ | ︙ | |||
29 30 31 32 33 34 35 |
if(j.hasAttribute("data-action")) j.action=j.getAttribute("data-action");
}
}
function antiRobotDefense(){
var x = document.getElementById("href-data");
var jx = x.textContent || x.innerText;
var g = JSON.parse(jx);
| < < | | 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
if(j.hasAttribute("data-action")) j.action=j.getAttribute("data-action");
}
}
function antiRobotDefense(){
var x = document.getElementById("href-data");
var jx = x.textContent || x.innerText;
var g = JSON.parse(jx);
if(g.mouseover){
document.getElementsByTagName("body")[0].onmousemove=function(){
setTimeout(setAllHrefs, g.delay);
}
}else{
setTimeout(setAllHrefs, g.delay);
}
}
|
| ︙ | ︙ |
Changes to src/login.c.
| ︙ | ︙ | |||
442 443 444 445 446 447 448 449 450 451 452 453 454 455 | } if( strncmp(zAgent, "Opera/", 6)==0 ) return 1; if( strncmp(zAgent, "Safari/", 7)==0 ) return 1; if( strncmp(zAgent, "Lynx/", 5)==0 ) return 1; if( strncmp(zAgent, "NetSurf/", 8)==0 ) return 1; return 0; } /* ** COMMAND: test-ishuman ** ** Read lines of text from standard input. Interpret each line of text ** as a User-Agent string from an HTTP header. Label each line as HUMAN ** or ROBOT. | > > > > > > > > > > > | 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 |
}
if( strncmp(zAgent, "Opera/", 6)==0 ) return 1;
if( strncmp(zAgent, "Safari/", 7)==0 ) return 1;
if( strncmp(zAgent, "Lynx/", 5)==0 ) return 1;
if( strncmp(zAgent, "NetSurf/", 8)==0 ) return 1;
return 0;
}
/*
** Look at the HTTP_USER_AGENT parameter and try to determine if the user agent
** is a mobile device that does not normally have a mouse.
*/
static int isMobile(const char *zAgent){
if( sqlite3_strglob("*Mobile/*", zAgent)==0 ) return 1;
if( sqlite3_strglob("*Tablet;*", zAgent)==0 ) return 1;
return 0;
}
/*
** COMMAND: test-ishuman
**
** Read lines of text from standard input. Interpret each line of text
** as a User-Agent string from an HTTP header. Label each line as HUMAN
** or ROBOT.
|
| ︙ | ︙ | |||
1110 1111 1112 1113 1114 1115 1116 |
*/
g.userUid = uid;
if( fossil_strcmp(g.zLogin,"nobody")==0 ){
g.zLogin = 0;
}
if( PB("isrobot") ){
g.isHuman = 0;
| > > > | | | | > > | 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 |
*/
g.userUid = uid;
if( fossil_strcmp(g.zLogin,"nobody")==0 ){
g.zLogin = 0;
}
if( PB("isrobot") ){
g.isHuman = 0;
g.isMobile = 0;
}else{
const char *zAgent = P("HTTP_USER_AGENT");
if( g.zLogin==0 ){
g.isHuman = isHuman(zAgent);
}else{
g.isHuman = 1;
}
g.isMobile = isMobile(zAgent);
}
/* Set the capabilities */
login_replace_capabilities(zCap, 0);
/* The auto-hyperlink setting allows hyperlinks to be displayed for users
** who do not have the "h" permission as long as their UserAgent string
|
| ︙ | ︙ |
Changes to src/main.c.
| ︙ | ︙ | |||
201 202 203 204 205 206 207 208 209 210 211 212 213 214 |
const char *zLogin; /* Login name. NULL or "" if not logged in. */
const char *zSSLIdentity; /* Value of --ssl-identity option, filename of
** SSL client identity */
int useLocalauth; /* No login required if from 127.0.0.1 */
int noPswd; /* Logged in without password (on 127.0.0.1) */
int userUid; /* Integer user id */
int isHuman; /* True if access by a human, not a spider or bot */
int comFmtFlags; /* Zero or more "COMMENT_PRINT_*" bit flags, should be
** accessed through get_comment_format(). */
/* Information used to populate the RCVFROM table */
int rcvid; /* The rcvid. 0 if not yet defined. */
char *zIpAddr; /* The remote IP address */
char *zNonce; /* The nonce used for login */
| > | 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 |
const char *zLogin; /* Login name. NULL or "" if not logged in. */
const char *zSSLIdentity; /* Value of --ssl-identity option, filename of
** SSL client identity */
int useLocalauth; /* No login required if from 127.0.0.1 */
int noPswd; /* Logged in without password (on 127.0.0.1) */
int userUid; /* Integer user id */
int isHuman; /* True if access by a human, not a spider or bot */
int isMobile; /* Human user on a mobile device w/o a mouse */
int comFmtFlags; /* Zero or more "COMMENT_PRINT_*" bit flags, should be
** accessed through get_comment_format(). */
/* Information used to populate the RCVFROM table */
int rcvid; /* The rcvid. 0 if not yet defined. */
char *zIpAddr; /* The remote IP address */
char *zNonce; /* The nonce used for login */
|
| ︙ | ︙ |
Changes to src/style.c.
| ︙ | ︙ | |||
663 664 665 666 667 668 669 |
/*
** Generate code to load all required javascript files.
*/
static void style_load_all_js_files(void){
int i;
if( needHrefJs ){
int nDelay = db_get_int("auto-hyperlink-delay",0);
| > | | 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 |
/*
** Generate code to load all required javascript files.
*/
static void style_load_all_js_files(void){
int i;
if( needHrefJs ){
int nDelay = db_get_int("auto-hyperlink-delay",0);
int bMouseover =
!g.isMobile && db_get_boolean("auto-hyperlink-mouseover",0);
@ <script id='href-data' type='application/json'>\
@ {"delay":%d(nDelay),"mouseover":%d(bMouseover)}</script>
}
@ <script nonce="%h(style_nonce())">
@ function debugMsg(msg){
@ var n = document.getElementById("debugMsg");
@ if(n){n.textContent=msg;}
|
| ︙ | ︙ |