]> sipb.mit.edu Git - ikiwiki.git/blobdiff - doc/bugs/toggle_fails_on_Safari.mdwn
hint
[ikiwiki.git] / doc / bugs / toggle_fails_on_Safari.mdwn
index e53292f08fbb766ca6719450ddf89473bbc5fcf1..25f62e0888e424f47fcc8c019c1776f50a7dd24b 100644 (file)
@@ -2,11 +2,11 @@ The [[plugins/toggle]] plugin has no effect when viewed on the Safari web browse
 
 All toggles appear open all the time.
 
-I don't know if this is true for other webkit browsers (the new Konqeror, the iPhone, etc).
+I don't know if this is true for other webkit browsers (the new Konqueror, the iPhone, etc).
 I'm currently testing in the Safari nightly builds, but I've seen the bug in the current release
 of Safari too.
 
-Looking at the Safari Wed Inspector, it believes there is a parse error on line 47 of the
+Looking at the Safari Web Inspector, it believes there is a parse error on line 47 of the
 [[news]] page.  This is the definition of the getElementsByClass(class) function.
 
     45 }
@@ -14,3 +14,45 @@ Looking at the Safari Wed Inspector, it believes there is a parse error on line
     47 function getElementsByClass(class) {
        SyntaxError: Parse error
     48         var ret = new Array();
+
+> Reproduced in epiphany-webkit on debian.
+> 
+> Also noticed something interesting when I opened the page in vim. It
+> highlighted the "class" like a type definition, not a variable. Sure
+> enough, replacing with "c" fixed it.
+> 
+> I wonder if webkit is actually in the right here, and using a reseved
+> word like, presumably, "class" as a variable name is not legal. As I try
+> to ignore javascript as much as possible, I can't say. [[done]] --[[Joey]]
+
+>> I also started having a look at this.  I found the same issue with the
+>> the variable 'class'.  I'm not a javascript guru so I looked on the web
+>> at other implementations of getElementsByClass() and noticed some
+>> things that we might use.  I took a bunch of different ideas and came
+>> up with this:
+
+    function getElementsByClass(cls, node, tag) {
+       if (document.getElementsByClass)
+               return document.getElementsByClass(cls, node, tag);
+       if (! node) node = document;
+       if (! tag) tag = '*';
+       var ret = new Array();
+       var pattern = new RegExp("(^|\\s)"+cls+"(\\s|$)");
+       var els = node.getElementsByTagName(tag);
+       for (i = 0; i < els.length; i++) {
+               if ( pattern.test(els[i].className) ) {
+                       ret.push(els[i]);
+               }
+       }
+       return ret;
+    }
+
+>> Most of the changes are minor, except that this one will use the
+>> built in function if it is available.  That is likely to be significantly
+>> faster.  Adding the extra parameters doesn't cause a problem --
+>> they're filled in with useful defaults.
+
+>> I don't know if it is worth making this change, but it is there if you want it.
+
+>>> Well, it seems to work. Although god only knows about IE. Suppose I
+>>> might as well.. --[[Joey]]