Blame view

sources/apps/files_videoviewer/mediaelement/src/js/me-plugindetector.js 3.21 KB
42e4f8d60   Kload   add all apps
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
  
  // Core detector, plugins are added below
  mejs.PluginDetector = {
  
  	// main public function to test a plug version number PluginDetector.hasPluginVersion('flash',[9,0,125]);
  	hasPluginVersion: function(plugin, v) {
  		var pv = this.plugins[plugin];
  		v[1] = v[1] || 0;
  		v[2] = v[2] || 0;
  		return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;
  	},
  
  	// cached values
  	nav: window.navigator,
  	ua: window.navigator.userAgent.toLowerCase(),
  
  	// stored version numbers
  	plugins: [],
  
  	// runs detectPlugin() and stores the version number
  	addPlugin: function(p, pluginName, mimeType, activeX, axDetect) {
  		this.plugins[p] = this.detectPlugin(pluginName, mimeType, activeX, axDetect);
  	},
  
  	// get the version number from the mimetype (all but IE) or ActiveX (IE)
  	detectPlugin: function(pluginName, mimeType, activeX, axDetect) {
  
  		var version = [0,0,0],
  			description,
  			i,
  			ax;
  
  		// Firefox, Webkit, Opera
  		if (typeof(this.nav.plugins) != 'undefined' && typeof this.nav.plugins[pluginName] == 'object') {
  			description = this.nav.plugins[pluginName].description;
  			if (description && !(typeof this.nav.mimeTypes != 'undefined' && this.nav.mimeTypes[mimeType] && !this.nav.mimeTypes[mimeType].enabledPlugin)) {
  				version = description.replace(pluginName, '').replace(/^\s+/,'').replace(/\sr/gi,'.').split('.');
  				for (i=0; i<version.length; i++) {
  					version[i] = parseInt(version[i].match(/\d+/), 10);
  				}
  			}
  		// Internet Explorer / ActiveX
  		} else if (typeof(window.ActiveXObject) != 'undefined') {
  			try {
  				ax = new ActiveXObject(activeX);
  				if (ax) {
  					version = axDetect(ax);
  				}
  			}
  			catch (e) { }
  		}
  		return version;
  	}
  };
  
  // Add Flash detection
  mejs.PluginDetector.addPlugin('flash','Shockwave Flash','application/x-shockwave-flash','ShockwaveFlash.ShockwaveFlash', function(ax) {
  	// adapted from SWFObject
  	var version = [],
  		d = ax.GetVariable("$version");
  	if (d) {
  		d = d.split(" ")[1].split(",");
  		version = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
  	}
  	return version;
  });
  
  // Add Silverlight detection
  mejs.PluginDetector.addPlugin('silverlight','Silverlight Plug-In','application/x-silverlight-2','AgControl.AgControl', function (ax) {
  	// Silverlight cannot report its version number to IE
  	// but it does have a isVersionSupported function, so we have to loop through it to get a version number.
  	// adapted from http://www.silverlightversion.com/
  	var v = [0,0,0,0],
  		loopMatch = function(ax, v, i, n) {
  			while(ax.isVersionSupported(v[0]+ "."+ v[1] + "." + v[2] + "." + v[3])){
  				v[i]+=n;
  			}
  			v[i] -= n;
  		};
  	loopMatch(ax, v, 0, 1);
  	loopMatch(ax, v, 1, 1);
  	loopMatch(ax, v, 2, 10000); // the third place in the version number is usually 5 digits (4.0.xxxxx)
  	loopMatch(ax, v, 2, 1000);
  	loopMatch(ax, v, 2, 100);
  	loopMatch(ax, v, 2, 10);
  	loopMatch(ax, v, 2, 1);
  	loopMatch(ax, v, 3, 1);
  
  	return v;
  });
  // add adobe acrobat
  /*
  PluginDetector.addPlugin('acrobat','Adobe Acrobat','application/pdf','AcroPDF.PDF', function (ax) {
  	var version = [],
  		d = ax.GetVersions().split(',')[0].split('=')[1].split('.');
  
  	if (d) {
  		version = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
  	}
  	return version;
  });
  */