-
Notifications
You must be signed in to change notification settings - Fork 90
/
Copy pathsvgeezy.js
69 lines (57 loc) · 1.51 KB
/
svgeezy.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*
* SVGeezy.js
*
* Copyright 2016, Ben Howdle http://benhowdle.im
*
* Date: Sun Aug 26 20:38 2012 GMT
*/
/*
//call like so, pass in a class name that you don't want it to check and a filetype to replace .svg with
svgeezy.init('nocheck', 'png');
*/
window.svgeezy = function() {
return {
init: function(avoid, filetype, forceFallbackAlways) {
this.avoid = avoid || false;
this.filetype = filetype || 'png';
this.svgSupport = false;
if (!forceFallbackAlways) {
this.svgSupport = this.supportsSvg();
}
if(!this.svgSupport) {
this.images = document.getElementsByTagName('img');
this.imgL = this.images.length;
this.fallbacks();
}
},
fallbacks: function() {
if (this.imgL == 0) {
return;
}
while(--this.imgL) {
if(this.avoid && this.hasClass(this.images[this.imgL], this.avoid)) {
continue;
}
var src = this.images[this.imgL].getAttribute('src');
if(src === null || this.getFileExt(src) != 'svg') {
continue;
}
var newSrc = src.replace('.svg', '.' + this.filetype);
this.images[this.imgL].setAttribute('src', newSrc);
}
},
getFileExt: function(src) {
var ext = src.split('.').pop();
if(ext.indexOf("?") !== -1) {
ext = ext.split('?')[0];
}
return ext;
},
hasClass: function(element, cls) {
return(' ' + element.className + ' ').indexOf(' ' + cls + ' ') > -1;
},
supportsSvg: function() {
return document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image", "1.1");
}
};
}();