silverlight_player_helper 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Bagwan Pankaj
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.textile ADDED
@@ -0,0 +1,36 @@
1
+ h1. JW Silverlight Player ActionView Helper
2
+
3
+ h2. What Is It?
4
+
5
+ *silverlight-player-helper* is a Rails plugin that presents an ActionView wrapper for rendering "JW Silverlight Player":http://www.longtailvideo.com/players/jw-wmv-player/ by using silverlight
6
+
7
+ "JW Silverlight Player":http://www.longtailvideo.com/players/jw-wmv-player/ is a popular open source Media player that supports WMV, WMA and MP3 format.
8
+
9
+ h2. Getting Started
10
+
11
+ @script/plugin install git://github.com/bagwanpankaj/silverlight_player_helper.git@
12
+
13
+ This will automatically do what is required by JW Silverlight Player.
14
+
15
+ If required files are not copied autometically under public directory then run
16
+
17
+ @rake sl_player:install@
18
+
19
+ h2. How to use
20
+
21
+ First you need to include two javascript files into your views
22
+
23
+ @<%= javascript_include_tag 'silverlight', 'wmvplayer' %>@
24
+
25
+ then In your views use it like
26
+
27
+ @<%= jw_silverlight_player({:file => '/path/video.wmv',:width => 640, :height => 480}) %>@
28
+
29
+ in which *options* contains hash of JW Silverlight variables. You can find list of those "variables here":http://developer.longtailvideo.com/trac/wiki/SilverlightVars#Layout
30
+ and *player_config* contains hash of player_id and path to xaml file.
31
+
32
+ h2. More Info
33
+
34
+ For more info write me at bagwan.pankaj[at]railsjaipur.in
35
+
36
+ Copyright (c) 2010 Bagwan Pankaj, released under the MIT license
data/Rakefile ADDED
@@ -0,0 +1,23 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ desc 'Default: run unit tests.'
6
+ task :default => :test
7
+
8
+ desc 'Test the silverlight_player_helper plugin.'
9
+ Rake::TestTask.new(:test) do |t|
10
+ t.libs << 'lib'
11
+ t.libs << 'test'
12
+ t.pattern = 'test/**/*_test.rb'
13
+ t.verbose = true
14
+ end
15
+
16
+ desc 'Generate documentation for the silverlight_player_helper plugin.'
17
+ Rake::RDocTask.new(:rdoc) do |rdoc|
18
+ rdoc.rdoc_dir = 'rdoc'
19
+ rdoc.title = 'SilverlightPlayerHelper'
20
+ rdoc.options << '--line-numbers' << '--inline-source'
21
+ rdoc.rdoc_files.include('README')
22
+ rdoc.rdoc_files.include('lib/**/*.rb')
23
+ end
@@ -0,0 +1,576 @@
1
+ ///////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // Silverlight.js version 2.0.30523.6
4
+ //
5
+ // This file is provided by Microsoft as a helper file for websites that
6
+ // incorporate Silverlight Objects. This file is provided under the Microsoft
7
+ // Public License available at
8
+ // http://code.msdn.microsoft.com/silverlightjs/Project/License.aspx.
9
+ // You may not use or distribute this file or the code in this file except as
10
+ // expressly permitted under that license.
11
+ //
12
+ // Copyright (c) Microsoft Corporation. All rights reserved.
13
+ //
14
+ ///////////////////////////////////////////////////////////////////////////////
15
+
16
+ if (!window.Silverlight)
17
+ {
18
+ window.Silverlight = { };
19
+ }
20
+
21
+ //////////////////////////////////////////////////////////////////
22
+ //
23
+ // _silverlightCount:
24
+ //
25
+ // Counter of globalized event handlers
26
+ //
27
+ //////////////////////////////////////////////////////////////////
28
+ Silverlight._silverlightCount = 0;
29
+
30
+ //////////////////////////////////////////////////////////////////
31
+ //
32
+ // fwlinkRoot:
33
+ //
34
+ // Prefix for fwlink URL's
35
+ //
36
+ //////////////////////////////////////////////////////////////////
37
+ Silverlight.fwlinkRoot='http://go2.microsoft.com/fwlink/?LinkID=';
38
+
39
+ //////////////////////////////////////////////////////////////////
40
+ //
41
+ // onGetSilverlight:
42
+ //
43
+ // Called by Silverlight.GetSilverlight to notify the page that a user
44
+ // has requested the Silverlight installer
45
+ //
46
+ //////////////////////////////////////////////////////////////////
47
+ Silverlight.onGetSilverlight = null;
48
+
49
+ //////////////////////////////////////////////////////////////////
50
+ //
51
+ // onSilverlightInstalled:
52
+ //
53
+ // Called by Silverlight.WaitForInstallCompletion when the page detects
54
+ // that Silverlight has been installed. The event handler is not called
55
+ // in upgrade scenarios.
56
+ //
57
+ //////////////////////////////////////////////////////////////////
58
+ Silverlight.onSilverlightInstalled = function () {window.location.reload(false);};
59
+
60
+ //////////////////////////////////////////////////////////////////
61
+ //
62
+ // isInstalled:
63
+ //
64
+ // Checks to see if the correct version is installed
65
+ //
66
+ //////////////////////////////////////////////////////////////////
67
+ Silverlight.isInstalled = function(version)
68
+ {
69
+ var isVersionSupported=false;
70
+ var container = null;
71
+
72
+ try
73
+ {
74
+ var control = null;
75
+
76
+ try
77
+ {
78
+ control = new ActiveXObject('AgControl.AgControl');
79
+ if ( version == null )
80
+ {
81
+ isVersionSupported = true;
82
+ }
83
+ else if ( control.IsVersionSupported(version) )
84
+ {
85
+ isVersionSupported = true;
86
+ }
87
+ control = null;
88
+ }
89
+ catch (e)
90
+ {
91
+ var plugin = navigator.plugins["Silverlight Plug-In"] ;
92
+ if ( plugin )
93
+ {
94
+ if ( version === null )
95
+ {
96
+ isVersionSupported = true;
97
+ }
98
+ else
99
+ {
100
+ var actualVer = plugin.description;
101
+ if ( actualVer === "1.0.30226.2")
102
+ actualVer = "2.0.30226.2";
103
+ var actualVerArray =actualVer.split(".");
104
+ while ( actualVerArray.length > 3)
105
+ {
106
+ actualVerArray.pop();
107
+ }
108
+ while ( actualVerArray.length < 4)
109
+ {
110
+ actualVerArray.push(0);
111
+ }
112
+ var reqVerArray = version.split(".");
113
+ while ( reqVerArray.length > 4)
114
+ {
115
+ reqVerArray.pop();
116
+ }
117
+
118
+ var requiredVersionPart ;
119
+ var actualVersionPart
120
+ var index = 0;
121
+
122
+
123
+ do
124
+ {
125
+ requiredVersionPart = parseInt(reqVerArray[index]);
126
+ actualVersionPart = parseInt(actualVerArray[index]);
127
+ index++;
128
+ }
129
+ while (index < reqVerArray.length && requiredVersionPart === actualVersionPart);
130
+
131
+ if ( requiredVersionPart <= actualVersionPart && !isNaN(requiredVersionPart) )
132
+ {
133
+ isVersionSupported = true;
134
+ }
135
+ }
136
+ }
137
+ }
138
+ }
139
+ catch (e)
140
+ {
141
+ isVersionSupported = false;
142
+ }
143
+ if (container)
144
+ {
145
+ document.body.removeChild(container);
146
+ }
147
+
148
+ return isVersionSupported;
149
+ }
150
+ //////////////////////////////////////////////////////////////////
151
+ //
152
+ // WaitForInstallCompletion:
153
+ //
154
+ // Occasionally checks for Silverlight installation status. If it
155
+ // detects that Silverlight has been installed then it calls
156
+ // Silverlight.onSilverlightInstalled();. This is only supported
157
+ // if Silverlight was not previously installed on this computer.
158
+ //
159
+ //////////////////////////////////////////////////////////////////
160
+ Silverlight.WaitForInstallCompletion = function()
161
+ {
162
+ if ( ! Silverlight.isBrowserRestartRequired && Silverlight.onSilverlightInstalled )
163
+ {
164
+ try
165
+ {
166
+ navigator.plugins.refresh();
167
+ }
168
+ catch(e)
169
+ {
170
+ }
171
+ if ( Silverlight.isInstalled(null) )
172
+ {
173
+ Silverlight.onSilverlightInstalled();
174
+ }
175
+ else
176
+ {
177
+ setTimeout(Silverlight.WaitForInstallCompletion, 3000);
178
+ }
179
+ }
180
+ }
181
+ //////////////////////////////////////////////////////////////////
182
+ //
183
+ // __startup:
184
+ //
185
+ // Performs startup tasks
186
+ //////////////////////////////////////////////////////////////////
187
+ Silverlight.__startup = function()
188
+ {
189
+ Silverlight.isBrowserRestartRequired = Silverlight.isInstalled(null);
190
+ if ( !Silverlight.isBrowserRestartRequired)
191
+ {
192
+ Silverlight.WaitForInstallCompletion();
193
+ }
194
+ if (window.removeEventListener) {
195
+ window.removeEventListener('load', Silverlight.__startup , false);
196
+ }
197
+ else {
198
+ window.detachEvent('onload', Silverlight.__startup );
199
+ }
200
+ }
201
+
202
+ if (window.addEventListener)
203
+ {
204
+ window.addEventListener('load', Silverlight.__startup , false);
205
+ }
206
+ else
207
+ {
208
+ window.attachEvent('onload', Silverlight.__startup );
209
+ }
210
+
211
+ ///////////////////////////////////////////////////////////////////////////////
212
+ // createObject:
213
+ //
214
+ // Inserts a Silverlight <object> tag or installation experience into the HTML
215
+ // DOM based on the current installed state of Silverlight.
216
+ //
217
+ /////////////////////////////////////////////////////////////////////////////////
218
+
219
+ Silverlight.createObject = function(source, parentElement, id, properties, events, initParams, userContext)
220
+ {
221
+ var slPluginHelper = new Object();
222
+ var slProperties = properties;
223
+ var slEvents = events;
224
+
225
+ slPluginHelper.version = slProperties.version;
226
+ slProperties.source = source;
227
+ slPluginHelper.alt = slProperties.alt;
228
+
229
+ //rename properties to their tag property names. For bacwards compatibility
230
+ //with Silverlight.js version 1.0
231
+ if ( initParams )
232
+ slProperties.initParams = initParams;
233
+ if ( slProperties.isWindowless && !slProperties.windowless)
234
+ slProperties.windowless = slProperties.isWindowless;
235
+ if ( slProperties.framerate && !slProperties.maxFramerate)
236
+ slProperties.maxFramerate = slProperties.framerate;
237
+ if ( id && !slProperties.id)
238
+ slProperties.id = id;
239
+
240
+ // remove elements which are not to be added to the instantiation tag
241
+ delete slProperties.ignoreBrowserVer;
242
+ delete slProperties.inplaceInstallPrompt;
243
+ delete slProperties.version;
244
+ delete slProperties.isWindowless;
245
+ delete slProperties.framerate;
246
+ delete slProperties.data;
247
+ delete slProperties.src;
248
+ delete slProperties.alt;
249
+
250
+
251
+ // detect that the correct version of Silverlight is installed, else display install
252
+
253
+ if (Silverlight.isInstalled(slPluginHelper.version))
254
+ {
255
+ //move unknown events to the slProperties array
256
+ for (var name in slEvents)
257
+ {
258
+ if ( slEvents[name])
259
+ {
260
+ if ( name == "onLoad" && typeof slEvents[name] == "function" && slEvents[name].length != 1 )
261
+ {
262
+ var onLoadHandler = slEvents[name];
263
+ slEvents[name]=function (sender){ return onLoadHandler(document.getElementById(id), userContext, sender)};
264
+ }
265
+ var handlerName = Silverlight.__getHandlerName(slEvents[name]);
266
+ if ( handlerName != null )
267
+ {
268
+ slProperties[name] = handlerName;
269
+ slEvents[name] = null;
270
+ }
271
+ else
272
+ {
273
+ throw "typeof events."+name+" must be 'function' or 'string'";
274
+ }
275
+ }
276
+ }
277
+ slPluginHTML = Silverlight.buildHTML(slProperties);
278
+ }
279
+ //The control could not be instantiated. Show the installation prompt
280
+ else
281
+ {
282
+ slPluginHTML = Silverlight.buildPromptHTML(slPluginHelper);
283
+ }
284
+
285
+ // insert or return the HTML
286
+ if(parentElement)
287
+ {
288
+ parentElement.innerHTML = slPluginHTML;
289
+ }
290
+ else
291
+ {
292
+ return slPluginHTML;
293
+ }
294
+
295
+ }
296
+
297
+ ///////////////////////////////////////////////////////////////////////////////
298
+ //
299
+ // buildHTML:
300
+ //
301
+ // create HTML that instantiates the control
302
+ //
303
+ ///////////////////////////////////////////////////////////////////////////////
304
+ Silverlight.buildHTML = function( slProperties)
305
+ {
306
+ var htmlBuilder = [];
307
+
308
+ htmlBuilder.push('<object type=\"application/x-silverlight\" data="data:application/x-silverlight,"');
309
+ if ( slProperties.id != null )
310
+ {
311
+ htmlBuilder.push(' id="' + slProperties.id + '"');
312
+ }
313
+ if ( slProperties.width != null )
314
+ {
315
+ htmlBuilder.push(' width="' + slProperties.width+ '"');
316
+ }
317
+ if ( slProperties.height != null )
318
+ {
319
+ htmlBuilder.push(' height="' + slProperties.height + '"');
320
+ }
321
+ htmlBuilder.push(' >');
322
+
323
+ delete slProperties.id;
324
+ delete slProperties.width;
325
+ delete slProperties.height;
326
+
327
+ for (var name in slProperties)
328
+ {
329
+ if (slProperties[name])
330
+ {
331
+ htmlBuilder.push('<param name="'+Silverlight.HtmlAttributeEncode(name)+'" value="'+Silverlight.HtmlAttributeEncode(slProperties[name])+'" />');
332
+ }
333
+ }
334
+ htmlBuilder.push('<\/object>');
335
+ return htmlBuilder.join('');
336
+ }
337
+
338
+
339
+
340
+ //////////////////////////////////////////////////////////////////
341
+ //
342
+ // createObjectEx:
343
+ //
344
+ // takes a single parameter of all createObject
345
+ // parameters enclosed in {}
346
+ //
347
+ //////////////////////////////////////////////////////////////////
348
+
349
+ Silverlight.createObjectEx = function(params)
350
+ {
351
+ var parameters = params;
352
+ var html = Silverlight.createObject(parameters.source, parameters.parentElement, parameters.id, parameters.properties, parameters.events, parameters.initParams, parameters.context);
353
+ if (parameters.parentElement == null)
354
+ {
355
+ return html;
356
+ }
357
+ }
358
+
359
+ ///////////////////////////////////////////////////////////////////////////////////////////////
360
+ //
361
+ // buildPromptHTML
362
+ //
363
+ // Builds the HTML to prompt the user to download and install Silverlight
364
+ //
365
+ ///////////////////////////////////////////////////////////////////////////////////////////////
366
+ Silverlight.buildPromptHTML = function(slPluginHelper)
367
+ {
368
+ var slPluginHTML = "";
369
+ var urlRoot = Silverlight.fwlinkRoot;
370
+ var shortVer = slPluginHelper.version ;
371
+ if ( slPluginHelper.alt )
372
+ {
373
+ slPluginHTML = slPluginHelper.alt;
374
+ }
375
+ else
376
+ {
377
+ if (! shortVer )
378
+ {
379
+ shortVer="";
380
+ }
381
+ slPluginHTML = "<a href='javascript:Silverlight.getSilverlight(\"{1}\");' style='text-decoration: none;'><img src='{2}' alt='Get Microsoft Silverlight' style='border-style: none'/></a>";
382
+ slPluginHTML = slPluginHTML.replace('{1}', shortVer );
383
+ slPluginHTML = slPluginHTML.replace('{2}', urlRoot + '108181');
384
+ }
385
+
386
+ return slPluginHTML;
387
+ }
388
+
389
+ ///////////////////////////////////////////////////////////////////////////////////////////////
390
+ //
391
+ // getSilverlight:
392
+ //
393
+ // Navigates the browser to the appropriate Silverlight installer
394
+ //
395
+ ///////////////////////////////////////////////////////////////////////////////////////////////
396
+ Silverlight.getSilverlight = function(version)
397
+ {
398
+ if (Silverlight.onGetSilverlight )
399
+ {
400
+ Silverlight.onGetSilverlight();
401
+ }
402
+
403
+ var shortVer = "";
404
+ var reqVerArray = String(version).split(".");
405
+ if (reqVerArray.length > 1)
406
+ {
407
+ var majorNum = parseInt(reqVerArray[0] );
408
+ if ( isNaN(majorNum) || majorNum < 2 )
409
+ {
410
+ shortVer = "1.0";
411
+ }
412
+ else
413
+ {
414
+ shortVer = reqVerArray[0]+'.'+reqVerArray[1];
415
+ }
416
+ }
417
+
418
+ var verArg = "";
419
+
420
+ if (shortVer.match(/^\d+\056\d+$/) )
421
+ {
422
+ verArg = "&v="+shortVer;
423
+ }
424
+
425
+ Silverlight.followFWLink("114576" + verArg);
426
+ }
427
+
428
+
429
+ ///////////////////////////////////////////////////////////////////////////////////////////////
430
+ //
431
+ // followFWLink:
432
+ //
433
+ // Navigates to a url based on fwlinkid
434
+ //
435
+ ///////////////////////////////////////////////////////////////////////////////////////////////
436
+ Silverlight.followFWLink = function(linkid)
437
+ {
438
+ top.location=Silverlight.fwlinkRoot+String(linkid);
439
+ }
440
+
441
+ ///////////////////////////////////////////////////////////////////////////////////////////////
442
+ //
443
+ // HtmlAttributeEncode:
444
+ //
445
+ // Encodes special characters in input strings as charcodes
446
+ //
447
+ ///////////////////////////////////////////////////////////////////////////////////////////////
448
+ Silverlight.HtmlAttributeEncode = function( strInput )
449
+ {
450
+ var c;
451
+ var retVal = '';
452
+
453
+ if(strInput == null)
454
+ {
455
+ return null;
456
+ }
457
+
458
+ for(var cnt = 0; cnt < strInput.length; cnt++)
459
+ {
460
+ c = strInput.charCodeAt(cnt);
461
+
462
+ if (( ( c > 96 ) && ( c < 123 ) ) ||
463
+ ( ( c > 64 ) && ( c < 91 ) ) ||
464
+ ( ( c > 43 ) && ( c < 58 ) && (c!=47)) ||
465
+ ( c == 95 ))
466
+ {
467
+ retVal = retVal + String.fromCharCode(c);
468
+ }
469
+ else
470
+ {
471
+ retVal = retVal + '&#' + c + ';';
472
+ }
473
+ }
474
+
475
+ return retVal;
476
+ }
477
+ ///////////////////////////////////////////////////////////////////////////////
478
+ //
479
+ // default_error_handler:
480
+ //
481
+ // Default error handling function
482
+ //
483
+ ///////////////////////////////////////////////////////////////////////////////
484
+
485
+ Silverlight.default_error_handler = function (sender, args)
486
+ {
487
+ var iErrorCode;
488
+ var errorType = args.ErrorType;
489
+
490
+ iErrorCode = args.ErrorCode;
491
+
492
+ var errMsg = "\nSilverlight error message \n" ;
493
+
494
+ errMsg += "ErrorCode: "+ iErrorCode + "\n";
495
+
496
+
497
+ errMsg += "ErrorType: " + errorType + " \n";
498
+ errMsg += "Message: " + args.ErrorMessage + " \n";
499
+
500
+ if (errorType == "ParserError")
501
+ {
502
+ errMsg += "XamlFile: " + args.xamlFile + " \n";
503
+ errMsg += "Line: " + args.lineNumber + " \n";
504
+ errMsg += "Position: " + args.charPosition + " \n";
505
+ }
506
+ else if (errorType == "RuntimeError")
507
+ {
508
+ if (args.lineNumber != 0)
509
+ {
510
+ errMsg += "Line: " + args.lineNumber + " \n";
511
+ errMsg += "Position: " + args.charPosition + " \n";
512
+ }
513
+ errMsg += "MethodName: " + args.methodName + " \n";
514
+ }
515
+ alert (errMsg);
516
+ }
517
+
518
+ ///////////////////////////////////////////////////////////////////////////////////////////////
519
+ //
520
+ // __cleanup:
521
+ //
522
+ // Releases event handler resources when the page is unloaded
523
+ //
524
+ ///////////////////////////////////////////////////////////////////////////////////////////////
525
+ Silverlight.__cleanup = function ()
526
+ {
527
+ for (var i = Silverlight._silverlightCount - 1; i >= 0; i--) {
528
+ window['__slEvent' + i] = null;
529
+ }
530
+ Silverlight._silverlightCount = 0;
531
+ if (window.removeEventListener) {
532
+ window.removeEventListener('unload', Silverlight.__cleanup , false);
533
+ }
534
+ else {
535
+ window.detachEvent('onunload', Silverlight.__cleanup );
536
+ }
537
+ }
538
+
539
+ ///////////////////////////////////////////////////////////////////////////////////////////////
540
+ //
541
+ // __getHandlerName:
542
+ //
543
+ // Generates named event handlers for delegates.
544
+ //
545
+ ///////////////////////////////////////////////////////////////////////////////////////////////
546
+ Silverlight.__getHandlerName = function (handler)
547
+ {
548
+ var handlerName = "";
549
+ if ( typeof handler == "string")
550
+ {
551
+ handlerName = handler;
552
+ }
553
+ else if ( typeof handler == "function" )
554
+ {
555
+ if (Silverlight._silverlightCount == 0)
556
+ {
557
+ if (window.addEventListener)
558
+ {
559
+ window.addEventListener('onunload', Silverlight.__cleanup , false);
560
+ }
561
+ else
562
+ {
563
+ window.attachEvent('onunload', Silverlight.__cleanup );
564
+ }
565
+ }
566
+ var count = Silverlight._silverlightCount++;
567
+ handlerName = "__slEvent"+count;
568
+
569
+ window[handlerName]=handler;
570
+ }
571
+ else
572
+ {
573
+ handlerName = null;
574
+ }
575
+ return handlerName;
576
+ }