OSDN Git Service

1, displayプロパティのバグを修正
authordhrname <dhrname@users.sourceforge.jp>
Mon, 28 May 2012 13:25:27 +0000 (22:25 +0900)
committerdhrname <dhrname@users.sourceforge.jp>
Mon, 28 May 2012 13:25:27 +0000 (22:25 +0900)
2, marker要素のスタイル継承のバグを修正

org/w3c/dom/css.js
org/w3c/dom/svg.js

index 2534547..b520012 100644 (file)
@@ -780,13 +780,16 @@ function ViewCSS(){
   s.setProperty = (function(setProp, s){
     return function(propertyName, value, priority) {
       setProp.call(s, propertyName, value, priority);
-      var tar = elt, el = tar._tar, isFill = isStroke = false;
+      var tar = elt,
+          el = tar._tar,
+          isFill = false,
+          isStroke = false;
       if ((tar.localName === "g") || (tar.localName === "a")) {
         var sl = tar.getElementsByTagNameNS("http://www.w3.org/2000/svg", "*");
         if (sl) {
           for (var i=0,sli=sl.length;i<sli;++i) {
             var di = sl[i];
-            NAIBU._setPaint(di, di.getScreenCTM());
+            di.getScreenCTM && NAIBU._setPaint(di, di.getScreenCTM());
             di = void 0;
           }
           sl = void 0;
@@ -796,7 +799,7 @@ function ViewCSS(){
       if (!el) {
         return;
       }
-      NAIBU._setPaint(tar, tar.getScreenCTM());
+      tar.getScreenCTM && NAIBU._setPaint(tar, tar.getScreenCTM());
       el = tar = value = void 0;
     };
   })(setProp, s);
index 4b5bb7e..c2aac87 100644 (file)
@@ -2665,19 +2665,21 @@ NAIBU._setPaint = function(tar, matrix) {
   } else {
     el.stroked = "false";
   }
-  cursor = style.getPropertyCSSValue("cursor");
-  if (cursor && !cursor._isDefault) { //初期値でないならば
-    el.style.cursor = cursor.cssText.split(":")[1];
-  }
-  vis = style.getPropertyCSSValue("visibility");
-  if (vis && !vis._isDefault) {
-    el.style.visibility = vis.cssText.split(":")[1];
-  }
-  disp = style.getPropertyCSSValue("display");
-  if (disp && !disp._isDefault && (disp.cssText.indexOf("none") > -1)) {
-    el.style.display = "none";
-   } else if (disp && !disp._isDefault && (disp.indexOf("inline-block") === -1)) {
-    el.style.display = "inline-block";
+  if (el.style) {
+    cursor = style.getPropertyCSSValue("cursor");
+    if (cursor && !cursor._isDefault) { //初期値でないならば
+      el.style.cursor = cursor.cssText.split(":")[1];
+    }
+    vis = style.getPropertyCSSValue("visibility");
+    if (vis && !vis._isDefault) {
+      el.style.visibility = vis.cssText.split(":")[1];
+    }
+    disp = style.getPropertyCSSValue("display");
+    if (disp && !disp._isDefault && (disp.cssText.indexOf("none") > -1)) {
+      el.style.display = "none";
+     } else if (disp && !disp._isDefault && (disp.cssText.indexOf("inline-block") === -1)) {
+      el.style.display = "inline-block";
+    }
   }
   tod = _doc = el = fill = stroke = sp = fp = style = cursor = tar = matrix = vis = disp = num = void 0;
 };
@@ -4597,7 +4599,12 @@ function SVGMarkerElement(){
             ttr,
             sth,
             ctm,
-            plist;
+            sstyle,
+            nstyle,
+            plist,
+            regAZ,
+            regm,
+            u, t;
         /*url(#id)で一致する文字列があるかどうか*/
         if (ms === id) {
           marker = td.getElementById(ms);
@@ -4639,8 +4646,22 @@ function SVGMarkerElement(){
               .scale(sth)
               .multiply(ctm)
               .translate(-marker.refX.baseVal.value, -marker.refY.baseVal.value)));
-          marker.parentNode.insertBefore(gmarker, marker.nextSibling);
-          tar._tar && tar._tar.parentNode.insertBefore(gmarker._tar, tar._tar.nextSibling);
+          tar.parentNode.insertBefore(gmarker, tar.nextSibling);
+          sstyle = td.defaultView.getComputedStyle(marker, "");
+          nstyle = td.getOverrideStyle(gmarker, "");
+          regAZ = /([A-Z])/;
+          regm = /\-/;
+          for (var i in CSS2Properties) {
+            if (CSS2Properties.hasOwnProperty(i)) {
+              i = i.replace(regAZ, "-");
+              if (RegExp.$1) {
+                u = "-" +RegExp.$1.toLowerCase();
+              } else {
+                u = "-";
+              }
+              nstyle.setProperty(i, sstyle.getPropertyValue(i), "");
+            }
+          }
         }
         if (me === id) {
           marker = td.getElementById(me);
@@ -4681,13 +4702,27 @@ function SVGMarkerElement(){
               .scale(sth)
               .multiply(ctm)
               .translate(-marker.refX.baseVal.value, -marker.refY.baseVal.value)));
-          marker.parentNode.insertBefore(gmarker, marker.nextSibling);
-          tar._tar && tar._tar.parentNode.insertBefore(gmarker._tar, tar._tar.nextSibling);
+          tar.parentNode.insertBefore(gmarker, tar.nextSibling);
+          sstyle = td.defaultView.getComputedStyle(marker, "");
+          nstyle = td.getOverrideStyle(gmarker, "");
+          regAZ = /([A-Z])/;
+          regm = /\-/;
+          for (var i in CSS2Properties) {
+            if (CSS2Properties.hasOwnProperty(i)) {
+              i = i.replace(regAZ, "-");
+              if (RegExp.$1) {
+                u = "-" +RegExp.$1.toLowerCase();
+              } else {
+                u = "-";
+              }
+              nstyle.setProperty(i, sstyle.getPropertyValue(i), "");
+            }
+          }
         }
         if (mid === id) {
           marker = td.getElementById(mid);
         }
-        td = tde = style = ms = me = mid = marker = cmarker = gmarker = ctm = sth = tr = tn = ttr = plist = void 0;
+        td = tde = style = sstyle = nstyle = ms = me = mid = marker = cmarker = gmarker = ctm = sth = tr = tn = ttr = plist = regAZ = regm = u = t = void 0;
      };
     })(ns, id);
   }, false);