[Sie-announce] SIEコード [1847] getFloatValueメソッドの修正

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2010年 5月 27日 (木) 23:31:33 JST


Revision: 1847
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1847
Author:   dhrname
Date:     2010-05-27 23:31:33 +0900 (Thu, 27 May 2010)

Log Message:
-----------
getFloatValueメソッドの修正

Modified Paths:
--------------
    branches/ufltima/dom/css.js

Modified: branches/ufltima/dom/css.js
===================================================================
--- branches/ufltima/dom/css.js	2010-05-25 11:13:16 UTC (rev 1846)
+++ branches/ufltima/dom/css.js	2010-05-27 14:31:33 UTC (rev 1847)
@@ -316,7 +316,8 @@
   this.cssValueType = 1;//CSSValue.CSS_PRIMITIVE_VALUE;
   this.primitiveType = 0;//CSSPrimitiveValue.CSS_UNKNOWN;
   this._value = 1;
-  this._percent = 0.01; //単位に%が使われていた場合、このプロパティの数値を1%として使う
+  this._percent = 0; //単位に%が使われていた場合、このプロパティの数値を1%として使う
+  this._empercent = 0;
   return this;
 };
 
@@ -364,6 +365,34 @@
   if (CSSPrimitiveValue.CSS_UNKNOWN >= unitType && unitType >= CSSPrimitiveValue.CSS_STRING) { //浮動小数点数単位型をサポートしないCSS単位である場合
     throw new DOMException(DOMException.INVALID_ACCESS_ERR);
   }
+  var n = this.cssText.match(/\D+$/), type = 0, _parseFloat = parseFloat;
+  var s = _parseFloat(this.cssText.match(/[\d\.]+/));
+  s = isNaN(s) ? 0 : s;
+  if (!n) {
+    type = SVGLength.SVG_LENGTHTYPE_NUMBER;
+  } else if (n === "%") {
+    var tod = this._document.documentElement;
+    s *= this._percent;
+    type = CSSPrimitiveValue.CSS_PERCENTAGE;
+  } else if (n === "em") {
+    s *= this._empercent;
+    type = CSSPrimitiveValue.CSS_EMS;
+  } else if (n === "ex") {
+    type = CSSPrimitiveValue.CSS_EXS;
+  } else if (n === "px") {
+    type = CSSPrimitiveValue.CSS_PX;
+  } else if (n === "cm") {
+    type = CSSPrimitiveValue.CSS_CM;
+  } else if (n === "mm") {
+    type = CSSPrimitiveValue.CSS_MM;
+  } else if (n === "in") {
+    type = CSSPrimitiveValue.CSS_IN;
+  } else if (n === "pt") {
+    type = CSSPrimitiveValue.CSS_PT;
+  } else if (n === "pc") {
+    type = CSSPrimitiveValue.CSS_PC;
+  }
+  this.setFloatValue(type, s);
   return (this._value / this._n[unitType-1]);
 };
 /*void*/ CSSPrimitiveValue.prototype.setStringValue = function(/*short*/ stringType, /*string*/ stringValue) {
@@ -708,7 +737,7 @@
   //リストを連結することによって、カスケーディングを実現する
   s._list = s._list.concat(elt.style._list);
   s._list = s._list.concat(elt._attributeStyle._list);  //プレゼンテーション属性を結びつける
-  var doc = elt.ownerDocument, pelt = elt.parentNode;
+  var pelt = elt.parentNode;
   if (pelt) {
     if (this._cache_ele !== pelt) {                     //キャッシュを更新する
       this._cache = this.getComputedStyle(pelt, pseudoElt);
@@ -718,6 +747,7 @@
   } else {
     s._list = s._list.concat(CSS2Properties._list);     //デフォルト値の設定
   }
+  s._document = elt.ownerDocument;
   return s;
 };
 




Sie-announce メーリングリストの案内
Back to archive index