plugin detection created as a widget; can't tell yet if swarmplayer is installed
[living-lab-site.git] / js / jquery.ui.nsinstall.js
1 /*
2  * jQuery UI Install NextShare Video Plugins 1.0.0 beta
3  *
4  * Copyright 2011, Călin-Andrei Burloiu
5  * Dual licensed under the MIT or GPL Version 2 licenses.
6  * http://jquery.org/license
7  * 
8  * This file constains code created by Riccardo Petrocco and Arno Bakker
9  * from http://swarmplayer.p2p-next.org.
10  *
11  * Depends:
12  *   jquery.ui.core.js
13  *   jquery.ui.widget.js
14  */
15 (function( $, undefined ) {
16
17 $.widget( "ui.nsinstall", {
18         version: "1.0.0 beta",
19         options: {
20                 type: "ns-html5",       // "ns-html5" or "ns-vlc",
21                 installLink: "",
22                 hideIfAlreadyInstalled: true,
23                 
24                 error: "none",
25                 msg: {
26                         "none": "Install ",
27                         "os not supported": " is not supported for your operating system",
28                         "browser not supported": " is not supported for your browser",
29                         "browser version not supported": " is not supported for your browser version",
30                         "already installed": " is installed"
31                 }
32         },
33         
34         _create: function() {
35                 var widget = this;
36                 var platform = widget.platform();
37                 
38                 // Check platform support conditions and create content.
39                 // NextSharePC
40                 if (widget.options.type == "ns-vlc")
41                 {
42                         if (platform.osName !== 'MacOS' && platform.osName !== 'Windows')
43                         {
44                                 widget.options.error = "os not supported";
45                         }
46                         else
47                         {
48                                 if (platform.browserName == 'Firefox')
49                                 {
50                                         if (platform.browserVersion < 3.5)
51                                                 widget.options.error = "browser version not supported";
52                                 }
53                                 else if (platform.browserName == 'Internet Explorer')
54                                 {
55                                         if (platform.browserVersion < 7.0)
56                                         {
57                                                 widget.options.error = "browser version not supported"; 
58                                         }
59                                 }
60                                 else
61                                         widget.options.error = "browser not supported";
62                         }
63                         
64                         if (widget.isNextSharePCAlreadyInstalled())
65                                 widget.options.error = "already installed";
66                         
67                         if (widget.options.error !== "already installed"
68                                         || (widget.options.error === "already installed"
69                                         && ! widget.options.hideIfAlreadyInstalled) )
70                                 widget._createNextSharePCInstall();
71                 }
72                 // SwarmPlayer
73                 else if (widget.options.type == "ns-html5")
74                 {
75                         if (platform.osName !== 'MacOS' && platform.osName !== 'Windows'
76                                 && platform.osName !== 'Ubuntu Linux'
77                                 && platform.osName !== 'Linux')
78                         {
79                                 widget.options.error = "os not supported";
80                         }
81                         else
82                         {
83                                 if (platform.browserName == 'Firefox')
84                                 {
85                                         if (platform.browserVersion < 3.5)
86                                                 widget.options.error = "browser version not supported";
87                                 }
88                                 else if (platform.browserName == 'Internet Explorer')
89                                 {
90                                         if (platform.browserVersion < 7.0)
91                                         {
92                                                 widget.options.error = "browser version not supported"; 
93                                         }
94                                 }
95                                 else
96                                         widget.options.error = "browser not supported";
97                         }
98                         
99                         if (widget.isSwarmPlayerAlreadyInstalled())
100                                 widget.options.error = "already installed";
101                         
102                         if (widget.options.error !== "already installed"
103                                         || (widget.options.error === "already installed"
104                                         && ! widget.options.hideIfAlreadyInstalled) )
105                                 widget._createSwarmPlayerInstall();
106                 }
107         },
108         
109         _createSwarmPlayerInstall: function() {
110                 var widget = this;
111                 
112                 if (widget.options.error == 'none')
113                 {
114                         var $installLink = $('<a id="install-swarmplayer" href="'
115                                         + widget.options.installLink + '">'
116                                         + widget.options.msg[widget.options.error] + ' SwarmPlayer Plugin</a>')
117                                 .appendTo(widget.element);
118                         
119                         $installLink
120                                 .button({
121                             icons: {
122                                 primary: "ui-icon-arrowthickstop-1-s"
123                             }
124                         });
125                 }
126                 else if (widget.options.error == 'already installed')
127                 {
128                         $box
129                                 .html('<div class="ui-widget">'
130                                                 + '<div style="padding: 0 .7em;" class="ui-state-highlight ui-corner-all">' 
131                                                 + '<p style="text-align: center"><span style="float: left; margin-right: .3em;" class="ui-icon ui-icon-info"></span>' 
132                                                 + '<span id="install-swarmplayer-msg"></span></p>'
133                                         + '</div>'
134                                 + '</div>');
135                         
136                         var msg = 'SwarmPlayer ' + widget.options.msg[widget.options.error];
137                         $('#install-swarmplayer-msg').html(msg);
138                 }
139                 else
140                 {
141                         var $box = $('<div id="install-swarmplayer"></div>')
142                                 .appendTo(widget.element);
143                         
144                         $box
145                                 .html('<div class="ui-widget">'
146                                                 + '<div style="padding: 0 .7em;" class="ui-state-error ui-corner-all">' 
147                                                 + '<p style="text-align: center"><span style="float: left; margin-right: .3em;" class="ui-icon ui-icon-alert"></span>' 
148                                                 + '<span id="install-swarmplayer-msg"></span></p>'
149                                         + '</div>'
150                                 + '</div>');
151                         
152                         var msg = 'SwarmPlayer ' + widget.options.msg[widget.options.error];
153                         $('#install-swarmplayer-msg').html(msg);
154                 }
155                 
156         },
157         
158         _createNextSharePCInstall: function() {
159                 var widget = this;
160                 
161                 if (widget.options.error == 'none')
162                 {
163                         var $installLink = $('<a id="install-nextsharepc" href="'
164                                         + widget.options.installLink + '">'
165                                         + widget.options.msg[widget.options.error] + ' NextSharePC Plugin</a>')
166                                 .appendTo(widget.element);
167                         
168                         $installLink
169                                 .button({
170                             icons: {
171                                 primary: "ui-icon-arrowthickstop-1-s"
172                             }
173                         });
174                 }
175                 else if (widget.options.error == 'already installed')
176                 {
177                         var $box = $('<div id="install-nextsharepc"></div>')
178                                 .appendTo(widget.element);
179                         
180                         $box
181                         .html('<div class="ui-widget">'
182                                         + '<div style="padding: 0 .7em;" class="ui-state-highlight ui-corner-all">' 
183                                         + '<p style="text-align: center"><span style="float: left; margin-right: .3em;" class="ui-icon ui-icon-info"></span>' 
184                                         + '<span id="install-nextsharepc-msg"></span></p>'
185                                 + '</div>'
186                         + '</div>');
187                         
188                         var msg = 'NextSharePC ' + widget.options.msg[widget.options.error];
189                         $('#install-nextsharepc-msg').html(msg);
190                 }
191                 else
192                 {
193                         var $box = $('<div id="install-nextsharepc"></div>')
194                                 .appendTo(widget.element);
195                         
196                         $box
197                                 .html('<div class="ui-widget">'
198                                                 + '<div style="padding: 0 .7em;" class="ui-state-error ui-corner-all">' 
199                                                 + '<p style="text-align: center"><span style="float: left; margin-right: .3em;" class="ui-icon ui-icon-alert"></span>' 
200                                                 + '<span id="install-nextsharepc-msg"></span></p>'
201                                         + '</div>'
202                                 + '</div>');
203                         
204                         var msg = 'NextSharePC ' + widget.options.msg[widget.options.error];
205                         $('#install-nextsharepc-msg').html(msg);
206                 }
207         },
208         
209         _destroy: function() {
210                 this.element.html('');
211         },
212         
213         _setOption: function( key, value ) {
214                 // TODO
215                 if ( key === "TODO" ) {
216                         
217                 }
218
219                 this._super( "_setOption", key, value );
220         },
221         
222         isNextSharePCAlreadyInstalled: function() {
223                 for (var i=0; i<navigator.plugins.length; i++)
224                 {
225                         if (navigator.plugins.item(i).name.indexOf('NextSharePC') != -1)
226                                 return true;
227                 }
228                 
229                 return false;
230         },
231         
232         isSwarmPlayerAlreadyInstalled: function() {
233                 return false;
234         },
235         
236         platform: function() {
237                 var browserName="Unknown";
238                 var browserVersion=-1;
239                 var osName="Unknown";
240                 var archName="Unknown";
241                 
242                 if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent))
243                 { 
244                         var ffbrowserVersion=new Number(RegExp.$1);
245                         browserName = "Firefox";
246                         browserVersion = ffbrowserVersion;
247                 }
248                 else if (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
249                 { 
250                         var iebrowserVersion=new Number(RegExp.$1);
251                         browserName = "Internet Explorer";
252                         browserVersion = iebrowserVersion;
253                 }
254                 else if (/Chrome[\/\s](\d+\.\d+)/.test(navigator.userAgent)) 
255                 {
256                     // Must come before Safari, Chrome says it's Safari too. 
257                         var chbrowserVersion=new Number(RegExp.$1);
258                         browserName = "Chrome";
259                         browserVersion = chbrowserVersion;
260                 }
261                 else if (/Safari[\/\s](\d+\.\d+)/.test(navigator.userAgent))
262                 { 
263                         var sfbrowserVersion=new Number(RegExp.$1);
264                         browserName = "Safari";
265                         browserVersion = sfbrowserVersion;
266                 }
267                 else if (/Iceweasel[\/\s](\d+\.\d+)/.test(navigator.userAgent))
268                 { 
269                     // Iceweasel should be compatible with Firefox
270                         var ffbrowserVersion=new Number(RegExp.$1);
271                         browserName = "Firefox";
272                         browserVersion = ffbrowserVersion;
273                 }
274                 else if (/Namoroka[\/\s](\d+\.\d+)/.test(navigator.userAgent))
275                 { 
276                     // Namoroka should be compatible with Firefox
277                         var ffbrowserVersion=new Number(RegExp.$1);
278                         browserName = "Firefox";
279                         browserVersion = ffbrowserVersion;
280                 }
281
282
283                 if (navigator.userAgent.indexOf("Win")!=-1) osName="Windows";
284                 else if (navigator.userAgent.indexOf("Mac")!=-1) osName="MacOS";
285                 else if (navigator.userAgent.indexOf("Ubuntu")!=-1) osName="Ubuntu Linux";
286                 else if (navigator.userAgent.indexOf("Linux")!=-1) osName="Linux";
287                 else if (navigator.userAgent.indexOf("X11")!=-1) osName="UNIX";
288                 
289                 if (navigator.userAgent.indexOf("Intel Mac")!=-1) archName="Intel";
290                 else if (navigator.userAgent.indexOf("PPC Mac")!=-1) archName="PowerPC";
291                 else if (navigator.userAgent.indexOf("Linux i686")!=-1) archName="i686";
292                 else if (navigator.userAgent.indexOf("Linux x86_64")!=-1) archName="x86_64";
293
294                 return {browserName: browserName, browserVersion: browserVersion, osName: osName, archName: archName};
295         }
296 });
297
298 })( jQuery );