iD.util = {}; iD.util.trueObj = function(arr) { var o = {}; for (var i = 0, l = arr.length; i < l; i++) o[arr[i]] = true; return o; }; iD.util.tagText = function(entity) { return d3.entries(entity.tags).map(function(e) { return e.key + '=' + e.value; }).join(', '); }; iD.util.stringQs = function(str) { return str.split('&').reduce(function(obj, pair){ var parts = pair.split('='); if (parts.length === 2) { obj[parts[0]] = (null === parts[1]) ? '' : decodeURIComponent(parts[1]); } return obj; }, {}); }; iD.util.qsString = function(obj, noencode) { return Object.keys(obj).sort().map(function(key) { return encodeURIComponent(key) + '=' + ( noencode ? obj[key] : encodeURIComponent(obj[key])); }).join('&'); }; iD.util.prefixDOMProperty = function(property) { var prefixes = ['webkit', 'ms', 'moz', 'o'], i = -1, n = prefixes.length, s = document.body; if (property in s) return property; property = property.substr(0, 1).toUpperCase() + property.substr(1); while (++i < n) if (prefixes[i] + property in s) return prefixes[i] + property; return false; }; iD.util.prefixCSSProperty = function(property) { var prefixes = ['webkit', 'ms', 'Moz', 'O'], i = -1, n = prefixes.length, s = document.body.style; if (property.toLowerCase() in s) return property.toLowerCase(); while (++i < n) if (prefixes[i] + property in s) return '-' + prefixes[i].toLowerCase() + '-' + property.toLowerCase(); return false; }; iD.util.getStyle = function(selector) { for (var i = 0; i < document.styleSheets.length; i++) { var rules = document.styleSheets[i].rules || document.styleSheets[i].cssRules; for (var k = 0; k < rules.length; k++) { var selectorText = rules[k].selectorText && rules[k].selectorText.split(', '); if (_.contains(selectorText, selector)) { return rules[k]; } } } }; iD.util.getPrototypeOf = Object.getPrototypeOf || function(obj) { return obj.__proto__; };