1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- /*globals $, jQuery */
- /*jslint vars: true */
- /**
- * jQuery module to work with SVG.
- *
- * Licensed under the MIT License
- *
- */
- // Dependencies:
- // 1) jquery
- (function() {'use strict';
- // This fixes $(...).attr() to work as expected with SVG elements.
- // Does not currently use *AttributeNS() since we rarely need that.
- // See http://api.jquery.com/attr/ for basic documentation of .attr()
- // Additional functionality:
- // - When getting attributes, a string that's a number is return as type number.
- // - If an array is supplied as first parameter, multiple values are returned
- // as an object with values for each given attributes
- var proxied = jQuery.fn.attr,
- // TODO use NS.SVG instead
- svgns = "http://www.w3.org/2000/svg";
- jQuery.fn.attr = function(key, value) {
- var i, attr;
- var len = this.length;
- if (!len) {return proxied.apply(this, arguments);}
- for (i = 0; i < len; ++i) {
- var elem = this[i];
- // set/get SVG attribute
- if (elem.namespaceURI === svgns) {
- // Setting attribute
- if (value !== undefined) {
- elem.setAttribute(key, value);
- } else if ($.isArray(key)) {
- // Getting attributes from array
- var j = key.length, obj = {};
- while (j--) {
- var aname = key[j];
- attr = elem.getAttribute(aname);
- // This returns a number when appropriate
- if (attr || attr === "0") {
- attr = isNaN(attr) ? attr : (attr - 0);
- }
- obj[aname] = attr;
- }
- return obj;
- }
- if (typeof key === "object") {
- // Setting attributes form object
- var v;
- for (v in key) {
- elem.setAttribute(v, key[v]);
- }
- // Getting attribute
- } else {
- attr = elem.getAttribute(key);
- if (attr || attr === "0") {
- attr = isNaN(attr) ? attr : (attr - 0);
- }
- return attr;
- }
- } else {
- return proxied.apply(this, arguments);
- }
- }
- return this;
- };
- }());
|