]> spindle.queued.net Git - midori/commitdiff
Recognize more characters as next page and be more tolerant
authorChristian Dywan <christian@twotoasts.de>
Wed, 26 May 2010 20:41:13 +0000 (22:41 +0200)
committerChristian Dywan <christian@twotoasts.de>
Wed, 26 May 2010 20:48:33 +0000 (22:48 +0200)
midori/midori-view.c

index aefaa23bc4d0f6b55f0f241da940ba6312e256ba..655b1df5886e30ff3976809ae55df56aff0ddd5a 100644 (file)
@@ -4657,12 +4657,38 @@ midori_view_get_previous_page (MidoriView* view)
     web_frame = webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (view->web_view));
     js_context = webkit_web_frame_get_global_context (web_frame);
     katze_assign (uri, sokoke_js_script_eval (js_context,
-        "(function (l) { for (i in l) "
-        "if ((l[i].rel && l[i].rel == 'prev') "
-        " || (l[i].innerHTML"
-        "  && l[i].innerHTML.toLowerCase ().indexOf ('prev') != -1)) "
-        "{ return l[i].href; } return 0; })("
-        "document.getElementsByTagName ('a'));", NULL));
+        "(function (l) {"
+        "var ind = ['prev','←','«','&lt;'];"
+        "var nind = ['next','→','»','&gt;'];"
+        "for (i in l)"
+        "if (l[i].rel && (l[i].rel == ind[0]))"
+        "return l[i].href;"
+        "for (j in ind)"
+        "for (i in l)"
+        "if (l[i].innerHTML"
+        "&& (l[i].innerHTML.toLowerCase ().indexOf (ind[j]) != -1)"
+        "&& (l[i].innerHTML.toLowerCase ().indexOf (nind[j]) == -1))"
+        "return l[i].href;"
+        "var wa = window.location.href.split (/\\d+/);"
+        "var wn = window.location.href.split (/[^\\d]+/);"
+        "wn = wn.slice (1,wn.length - 1);"
+        "var cand = [];"
+        "for (i in wn)"
+        "{"
+        "cand[i] = '';"
+        "for (j = 0; j <= i; j++)"
+        "{"
+        "cand[i] += wa[j];"
+        "if (wn[j])"
+        "cand[i] += parseInt (wn[j]) - ((i == j) ? 1 : 0);"
+        "}"
+        "}"
+        "for (j in cand)"
+        "for (i in l)"
+        "if (l[i].href && (l[i].href.indexOf (cand[j]) == 0))"
+        "return l[i].href;"
+        "return 0;"
+        "}) (document.getElementsByTagName ('a'));", NULL));
     return uri && uri[0] != '0' ? uri : NULL;
 }
 
@@ -4688,15 +4714,40 @@ midori_view_get_next_page (MidoriView* view)
     web_frame = webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (view->web_view));
     js_context = webkit_web_frame_get_global_context (web_frame);
     katze_assign (uri, sokoke_js_script_eval (js_context,
-        "(function (l) { for (i in l) "
-        "if ((l[i].rel && l[i].rel == 'next') "
-        " || (l[i].innerHTML"
-        "  && l[i].innerHTML.toLowerCase ().indexOf ('next') != -1)) "
-        "{ return l[i].href; } return 0; })("
-        "document.getElementsByTagName ('a'));", NULL));
+        "(function (l) {"
+        "var ind = ['next','→','»','&gt;'];"
+        "var nind = ['prev','←','«','&lt;'];"
+        "for (i in l)"
+        "if (l[i].rel && (l[i].rel == ind[0]))"
+        "return l[i].href;"
+        "for (j in ind)"
+        "for (i in l)"
+        "if (l[i].innerHTML"
+        "&& (l[i].innerHTML.toLowerCase ().indexOf (ind[j]) != -1)"
+        "&& (l[i].innerHTML.toLowerCase ().indexOf (nind[j]) == -1))"
+        "return l[i].href;"
+        "var wa = window.location.href.split (/\\d+/);"
+        "var wn = window.location.href.split (/[^\\d]+/);"
+        "wn = wn.slice (1,wn.length - 1);"
+        "var cand = [];"
+        "for (i in wn)"
+        "{"
+        "cand[i] = '';"
+        "for (j = 0; j <= i; j++)"
+        "{"
+        "cand[i] += wa[j];"
+        "if (wn[j])"
+        "cand[i] += parseInt (wn[j]) + ((i == j) ? 1 : 0);"
+        "}"
+        "}"
+        "for (j in cand)"
+        "for (i in l)"
+        "if (l[i].href && (l[i].href.indexOf (cand[j]) == 0))"
+        "return l[i].href;"
+        "return 0;"
+        "}) (document.getElementsByTagName ('a'));", NULL));
     return uri && uri[0] != '0' ? uri : NULL;
 }
-
 #if WEBKIT_CHECK_VERSION (1, 1, 5)
 static GtkWidget*
 midori_view_print_create_custom_widget_cb (GtkPrintOperation* operation,