772fa6fe3a64a73e670c1691f0b56a0cbf535ac6
[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                 var msg;
112                 
113                 if (widget.options.error == 'none')
114                 {
115                         var $installLink = $('<a id="install-swarmplayer" href="'
116                                         + widget.options.installLink + '">'
117                                         + widget.options.msg[widget.options.error] + ' SwarmPlayer Plugin</a>')
118                                 .appendTo(widget.element);
119                         
120                         $installLink
121                                 .button({
122                             icons: {
123                                 primary: "ui-icon-arrowthickstop-1-s"
124                             }
125                         });
126                 }
127                 else if (widget.options.error == 'already installed')
128                 {
129                         $box
130                                 .html('<div class="ui-widget">'
131                                                 + '<div style="padding: 0 .7em;" class="ui-state-highlight ui-corner-all">' 
132                                                 + '<p style="text-align: center"><span style="float: left; margin-right: .3em;" class="ui-icon ui-icon-info"></span>' 
133                                                 + '<span id="install-swarmplayer-msg"></span></p>'
134                                         + '</div>'
135                                 + '</div>');
136                         
137                         msg = 'SwarmPlayer ' + widget.options.msg[widget.options.error];
138                         $('#install-swarmplayer-msg').html(msg);
139                 }
140                 else
141                 {
142                         var $box = $('<div id="install-swarmplayer"></div>')
143                                 .appendTo(widget.element);
144                         
145                         $box
146                                 .html('<div class="ui-widget">'
147                                                 + '<div style="padding: 0 .7em;" class="ui-state-error ui-corner-all">' 
148                                                 + '<p style="text-align: center"><span style="float: left; margin-right: .3em;" class="ui-icon ui-icon-alert"></span>' 
149                                                 + '<span id="install-swarmplayer-msg"></span></p>'
150                                         + '</div>'
151                                 + '</div>');
152                         
153                         msg = 'SwarmPlayer ' + widget.options.msg[widget.options.error];
154                         $('#install-swarmplayer-msg').html(msg);
155                 }
156                 
157         },
158         
159         _createNextSharePCInstall: function() {
160                 var widget = this;
161                 
162                 if (widget.options.error == 'none')
163                 {
164                         var $installLink = $('<a id="install-nextsharepc" href="'
165                                         + widget.options.installLink + '">'
166                                         + widget.options.msg[widget.options.error] + ' NextSharePC Plugin</a>')
167                                 .appendTo(widget.element);
168                         
169                         $installLink
170                                 .button({
171                             icons: {
172                                 primary: "ui-icon-arrowthickstop-1-s"
173                             }
174                         });
175                 }
176                 else if (widget.options.error == 'already installed')
177                 {
178                         var $box = $('<div id="install-nextsharepc"></div>')
179                                 .appendTo(widget.element);
180                         
181                         $box
182                         .html('<div class="ui-widget">'
183                                         + '<div style="padding: 0 .7em;" class="ui-state-highlight ui-corner-all">' 
184                                         + '<p style="text-align: center"><span style="float: left; margin-right: .3em;" class="ui-icon ui-icon-info"></span>' 
185                                         + '<span id="install-nextsharepc-msg"></span></p>'
186                                 + '</div>'
187                         + '</div>');
188                         
189                         var msg = 'NextSharePC ' + widget.options.msg[widget.options.error];
190                         $('#install-nextsharepc-msg').html(msg);
191                 }
192                 else
193                 {
194                         var $box = $('<div id="install-nextsharepc"></div>')
195                                 .appendTo(widget.element);
196                         
197                         $box
198                                 .html('<div class="ui-widget">'
199                                                 + '<div style="padding: 0 .7em;" class="ui-state-error ui-corner-all">' 
200                                                 + '<p style="text-align: center"><span style="float: left; margin-right: .3em;" class="ui-icon ui-icon-alert"></span>' 
201                                                 + '<span id="install-nextsharepc-msg"></span></p>'
202                                         + '</div>'
203                                 + '</div>');
204                         
205                         var msg = 'NextSharePC ' + widget.options.msg[widget.options.error];
206                         $('#install-nextsharepc-msg').html(msg);
207                 }
208         },
209         
210         _destroy: function() {
211                 this.element.html('');
212         },
213         
214         _setOption: function( key, value ) {
215                 // TODO
216                 if ( key === "TODO" ) {
217                         
218                 }
219
220                 this._super( "_setOption", key, value );
221         },
222         
223         isNextSharePCAlreadyInstalled: function() {
224                 for (var i=0; i<navigator.plugins.length; i++)
225                 {
226                         if (navigator.plugins.item(i).name.indexOf('NextSharePC') != -1)
227                                 return true;
228                 }
229                 
230                 return false;
231         },
232         
233         isSwarmPlayerAlreadyInstalled: function() {
234                 return false;
235         },
236         
237         platform: function() {
238                 var browserName="Unknown";
239                 var browserVersion=-1;
240                 var osName="Unknown";
241                 var archName="Unknown";
242                 
243                 if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent))
244                 { 
245                         var ffbrowserVersion=new Number(RegExp.$1);
246                         browserName = "Firefox";
247                         browserVersion = ffbrowserVersion;
248                 }
249                 else if (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
250                 { 
251                         var iebrowserVersion=new Number(RegExp.$1);
252                         browserName = "Internet Explorer";
253                         browserVersion = iebrowserVersion;
254                 }
255                 else if (/Chrome[\/\s](\d+\.\d+)/.test(navigator.userAgent)) 
256                 {
257                     // Must come before Safari, Chrome says it's Safari too. 
258                         var chbrowserVersion=new Number(RegExp.$1);
259                         browserName = "Chrome";
260                         browserVersion = chbrowserVersion;
261                 }
262                 else if (/Safari[\/\s](\d+\.\d+)/.test(navigator.userAgent))
263                 { 
264                         var sfbrowserVersion=new Number(RegExp.$1);
265                         browserName = "Safari";
266                         browserVersion = sfbrowserVersion;
267                 }
268                 else if (/Iceweasel[\/\s](\d+\.\d+)/.test(navigator.userAgent))
269                 { 
270                     // Iceweasel should be compatible with Firefox
271                         var ffbrowserVersion=new Number(RegExp.$1);
272                         browserName = "Firefox";
273                         browserVersion = ffbrowserVersion;
274                 }
275                 else if (/Namoroka[\/\s](\d+\.\d+)/.test(navigator.userAgent))
276                 { 
277                     // Namoroka should be compatible with Firefox
278                         var ffbrowserVersion=new Number(RegExp.$1);
279                         browserName = "Firefox";
280                         browserVersion = ffbrowserVersion;
281                 }
282
283
284                 if (navigator.userAgent.indexOf("Win")!=-1) osName="Windows";
285                 else if (navigator.userAgent.indexOf("Mac")!=-1) osName="MacOS";
286                 else if (navigator.userAgent.indexOf("Ubuntu")!=-1) osName="Ubuntu Linux";
287                 else if (navigator.userAgent.indexOf("Linux")!=-1) osName="Linux";
288                 else if (navigator.userAgent.indexOf("X11")!=-1) osName="UNIX";
289                 
290                 if (navigator.userAgent.indexOf("Intel Mac")!=-1) archName="Intel";
291                 else if (navigator.userAgent.indexOf("PPC Mac")!=-1) archName="PowerPC";
292                 else if (navigator.userAgent.indexOf("Linux i686")!=-1) archName="i686";
293                 else if (navigator.userAgent.indexOf("Linux x86_64")!=-1) archName="x86_64";
294
295                 return {browserName: browserName, browserVersion: browserVersion, osName: osName, archName: archName};
296         }
297 });
298
299 })( jQuery );