Mercurial > hg > digilib-old
diff webapp/src/main/webapp/jquery/svg/jquery.svgdom.js @ 1050:301ef9bf1965
update jquery.svg.js
author | hertzhaft |
---|---|
date | Mon, 26 Mar 2012 08:18:40 +0200 |
parents | 7779b37d1d05 |
children | 139ad480333b |
line wrap: on
line diff
--- a/webapp/src/main/webapp/jquery/svg/jquery.svgdom.js Mon Mar 26 01:01:09 2012 +0200 +++ b/webapp/src/main/webapp/jquery/svg/jquery.svgdom.js Mon Mar 26 08:18:40 2012 +0200 @@ -1,5 +1,5 @@ -/* http://keith-wood.name/svg.html - SVG/jQuery DOM compatibility for jQuery v1.4.3. +/* http://keith-wood.name/svg.html + jQuery DOM compatibility for jQuery SVG v1.4.4. Written by Keith Wood (kbwood{at}iinet.com.au) April 2009. Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. @@ -12,7 +12,7 @@ return function(classNames) { classNames = classNames || ''; return this.each(function() { - if (isSVGElem(this)) { + if ($.svg.isSVGElem(this)) { var node = this; $.each(classNames.split(/\s+/), function(i, className) { var classes = (node.className ? node.className.baseVal : node.getAttribute('class')); @@ -35,7 +35,7 @@ return function(classNames) { classNames = classNames || ''; return this.each(function() { - if (isSVGElem(this)) { + if ($.svg.isSVGElem(this)) { var node = this; $.each(classNames.split(/\s+/), function(i, className) { var classes = (node.className ? node.className.baseVal : node.getAttribute('class')); @@ -56,7 +56,7 @@ $.fn.toggleClass = function(origToggleClass) { return function(className, state) { return this.each(function() { - if (isSVGElem(this)) { + if ($.svg.isSVGElem(this)) { if (typeof state !== 'boolean') { state = !$(this).hasClass(className); } @@ -75,7 +75,7 @@ className = className || ''; var found = false; this.each(function() { - if (isSVGElem(this)) { + if ($.svg.isSVGElem(this)) { var classes = (this.className ? this.className.baseVal : this.getAttribute('class')).split(/\s+/); found = ($.inArray(className, classes) > -1); @@ -94,34 +94,40 @@ return function(name, value, type) { if (typeof name === 'string' && value === undefined) { var val = origAttr.apply(this, [name, value, type]); - if (val && val.baseVal && val.baseVal.numberOfItems != null) { // Transform + if (val && val.baseVal && val.baseVal.numberOfItems != null) { // Multiple values value = ''; val = val.baseVal; - for (var i = 0; i < val.numberOfItems; i++) { - var item = val.getItem(i); - switch (item.type) { - case 1: value += ' matrix(' + item.matrix.a + ',' + item.matrix.b + ',' + - item.matrix.c + ',' + item.matrix.d + ',' + - item.matrix.e + ',' + item.matrix.f + ')'; - break; - case 2: value += ' translate(' + item.matrix.e + ',' + item.matrix.f + ')'; break; - case 3: value += ' scale(' + item.matrix.a + ',' + item.matrix.d + ')'; break; - case 4: value += ' rotate(' + item.angle + ')'; break; // Doesn't handle new origin - case 5: value += ' skewX(' + item.angle + ')'; break; - case 6: value += ' skewY(' + item.angle + ')'; break; + if (name == 'transform') { + for (var i = 0; i < val.numberOfItems; i++) { + var item = val.getItem(i); + switch (item.type) { + case 1: value += ' matrix(' + item.matrix.a + ',' + item.matrix.b + ',' + + item.matrix.c + ',' + item.matrix.d + ',' + + item.matrix.e + ',' + item.matrix.f + ')'; + break; + case 2: value += ' translate(' + item.matrix.e + ',' + item.matrix.f + ')'; break; + case 3: value += ' scale(' + item.matrix.a + ',' + item.matrix.d + ')'; break; + case 4: value += ' rotate(' + item.angle + ')'; break; // Doesn't handle new origin + case 5: value += ' skewX(' + item.angle + ')'; break; + case 6: value += ' skewY(' + item.angle + ')'; break; + } } + val = value.substring(1); } - val = value.substring(1); + else { + val = val.getItem(0).valueAsString; + } } return (val && val.baseVal ? val.baseVal.valueAsString : val); } + var options = name; if (typeof name === 'string') { options = {}; options[name] = value; } return this.each(function() { - if (isSVGElem(this)) { + if ($.svg.isSVGElem(this)) { for (var n in options) { var val = ($.isFunction(options[n]) ? options[n]() : options[n]); (type ? this.style[n] = val : this.setAttribute(n, val)); @@ -138,7 +144,7 @@ $.fn.removeAttr = function(origRemoveAttr) { return function(name) { return this.each(function() { - if (isSVGElem(this)) { + if ($.svg.isSVGElem(this)) { (this[name] && this[name].baseVal ? this[name].baseVal.value = '' : this.setAttribute(name, '')); } @@ -149,6 +155,23 @@ }; }($.fn.removeAttr); +/* Add numeric only properties. */ +$.extend($.cssNumber, { + 'stopOpacity': true, + 'strokeMitrelimit': true, + 'strokeOpacity': true +}); + +/* Support retrieving CSS/attribute values on SVG nodes. */ +if ($.cssProps) { + $.css = function(origCSS) { + return function(elem, name) { + var value = (name.match(/^svg.*/) ? $(elem).attr($.cssProps[name] || name) : ''); + return value || origCSS(elem, name); + }; + }($.css); +} + /* Determine if any nodes are SVG nodes. */ function anySVG(checkSet) { for (var i = 0; i < checkSet.length; i++) { @@ -187,7 +210,7 @@ $.expr.find.ID = function(origFindId) { return function(match, context, isXML) { - return (isSVGElem(context) ? + return ($.svg.isSVGElem(context) ? [context.ownerDocument.getElementById(match[1])] : origFindId(match, context, isXML)); }; @@ -227,7 +250,7 @@ } } if (elem) { - var className = (!isSVGElem(elem) ? elem.className : + var className = (!$.svg.isSVGElem(elem) ? elem.className : (elem.className ? elem.className.baseVal : '') || elem.getAttribute('class')); if (not ^ (className && (' ' + className + ' ').indexOf(match) > -1)) { if (!inplace) @@ -242,7 +265,7 @@ }; $.expr.filter.CLASS = function(elem, match) { - var className = (!isSVGElem(elem) ? elem.className : + var className = (!$.svg.isSVGElem(elem) ? elem.className : (elem.className ? elem.className.baseVal : elem.getAttribute('class'))); return (' ' + className + ' ').indexOf(match) > -1; }; @@ -250,7 +273,7 @@ $.expr.filter.ATTR = function(origFilterAttr) { return function(elem, match) { var handler = null; - if (isSVGElem(elem)) { + if ($.svg.isSVGElem(elem)) { handler = match[1]; $.expr.attrHandle[handler] = function(elem){ var attr = elem.getAttribute(handler); @@ -266,67 +289,104 @@ }($.expr.filter.ATTR); /* - Change Sizzle initialisation (line 1425) in jQuery v1.3.2 base code... - + In the event.add function (line 2646, v1.6.2): + + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + try { // SVG + elem.addEventListener( type, eventHandle, false ); + + } catch(e) { + if (elem.attachEvent) + elem.attachEvent( "on" + type, eventHandle ); + } + } + + In the event.remove function (line 2776, v1.6.2): + + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + try { // SVG + elem.removeEventListener(type, elemData.handle, false); + } + catch (e) { + if (elem.detachEvent) + elem.detachEvent("on" + type, elemData.handle); + } + } + + In the event.fix function (line 3036, v.1.6.2) + + if (event.target.namespaceURI == 'http://www.w3.org/2000/svg') { // SVG + event.button = [1, 4, 2][event.button]; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && event.button !== undefined ) { + event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); + } + + In the Sizzle function (line 3873, v1.6.2): + if ( toString.call(checkSet) === "[object Array]" ) { if ( !prune ) { results.push.apply( results, checkSet ); - } else if ( context.nodeType === 1 ) { - for ( var i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { - results.push( set[i] || set.item(i) ); // Here + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] || set.item(i) ); // SVG } } + } else { - for ( var i = 0; checkSet[i] != null; i++ ) { + for ( i = 0; checkSet[i] != null; i++ ) { if ( checkSet[i] && checkSet[i].nodeType === 1 ) { - results.push( set[i] || set.item(i) ); // Here + results.push( set[i] || set.item(i) ); // SVG } } } - } - - Change fallback makeArray (line 2076) implementation in jQuery Sizzle... - + + } else { + + In the fallback for the Sizzle makeArray function (line 4617, v1.6.2): + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { if ( typeof array.length === "number" ) { - for ( var i = 0, l = array.length; i < l; i++ ) { - ret.push( array[i] || array.item(i) ); // Here + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] || array.item(i) ); // SVG + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); } } -*/ + } -/* - Events management requires changes to jQuery v1.3.2 base code... + In the jQuery.cleanData function (line 6220, v1.6.2) - In $.event.add (line 2437)... - - if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem, data, namespaces) === false ) { - // Bind the global event handler to the element - try { // Here - elem.addEventListener(type, handle, false); - } - catch(e) { - if (elem.attachEvent) - elem.attachEvent("on" + type, handle); + if ( deleteExpando ) { + delete elem[ jQuery.expando ]; + + } else { + try { // SVG + elem.removeAttribute( jQuery.expando ); + } catch (e) { + // Ignore } } - In $.event.remove (line 2521)... - - if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem, namespaces) === false ) { - try { // Here - elem.removeEventListener(type, jQuery.data(elem, "handle"), false); - } - catch (e) { - if (elem.detachEvent) - elem.detachEvent("on" + type, jQuery.data(elem, "handle")); - } - } + In the fallback getComputedStyle function (line 6509, v.1.6.2) + + defaultView = (elem.ownerDocument ? elem.ownerDocument.defaultView : elem.defaultView); // SVG + if ( !defaultView ) { + return undefined; + } + */ -/* Does this node belong to SVG? */ -function isSVGElem(node) { - return (node.nodeType == 1 && node.namespaceURI == $.svg.svgNS); -} - })(jQuery);