webshims-rails 1.14.6 → 1.15.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/polyfiller.js +145 -139
  4. data/vendor/assets/javascripts/webshims/shims/canvas-blob.js +97 -0
  5. data/vendor/assets/javascripts/webshims/shims/combos/1.js +13 -15
  6. data/vendor/assets/javascripts/webshims/shims/combos/10.js +29 -28
  7. data/vendor/assets/javascripts/webshims/shims/combos/11.js +2 -1
  8. data/vendor/assets/javascripts/webshims/shims/combos/12.js +22 -10
  9. data/vendor/assets/javascripts/webshims/shims/combos/13.js +22 -10
  10. data/vendor/assets/javascripts/webshims/shims/combos/15.js +28 -43
  11. data/vendor/assets/javascripts/webshims/shims/combos/16.js +41 -44
  12. data/vendor/assets/javascripts/webshims/shims/combos/17.js +2 -1
  13. data/vendor/assets/javascripts/webshims/shims/combos/2.js +40 -42
  14. data/vendor/assets/javascripts/webshims/shims/combos/21.js +98 -71
  15. data/vendor/assets/javascripts/webshims/shims/combos/22.js +9 -9
  16. data/vendor/assets/javascripts/webshims/shims/combos/23.js +13 -1
  17. data/vendor/assets/javascripts/webshims/shims/combos/25.js +141 -51
  18. data/vendor/assets/javascripts/webshims/shims/combos/27.js +66 -12
  19. data/vendor/assets/javascripts/webshims/shims/combos/28.js +1 -2
  20. data/vendor/assets/javascripts/webshims/shims/combos/3.js +27 -41
  21. data/vendor/assets/javascripts/webshims/shims/combos/30.js +27 -41
  22. data/vendor/assets/javascripts/webshims/shims/combos/31.js +27 -41
  23. data/vendor/assets/javascripts/webshims/shims/combos/34.js +36 -36
  24. data/vendor/assets/javascripts/webshims/shims/combos/4.js +27 -27
  25. data/vendor/assets/javascripts/webshims/shims/combos/5.js +2 -1
  26. data/vendor/assets/javascripts/webshims/shims/combos/6.js +2 -1
  27. data/vendor/assets/javascripts/webshims/shims/combos/7.js +40 -42
  28. data/vendor/assets/javascripts/webshims/shims/combos/8.js +40 -42
  29. data/vendor/assets/javascripts/webshims/shims/combos/9.js +29 -28
  30. data/vendor/assets/javascripts/webshims/shims/combos/98.js +4 -2
  31. data/vendor/assets/javascripts/webshims/shims/combos/99.js +4 -2
  32. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +27 -27
  33. data/vendor/assets/javascripts/webshims/shims/es6.js +23 -29
  34. data/vendor/assets/javascripts/webshims/shims/{filereader.js → filereader-xhr.js} +66 -12
  35. data/vendor/assets/javascripts/webshims/shims/form-core.js +0 -14
  36. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +2 -1
  37. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +1 -2
  38. data/vendor/assets/javascripts/webshims/shims/form-validation.js +18 -5
  39. data/vendor/assets/javascripts/webshims/shims/form-validators.js +15 -14
  40. data/vendor/assets/javascripts/webshims/shims/geolocation.js +41 -50
  41. data/vendor/assets/javascripts/webshims/shims/jme/controls.css +4 -4
  42. data/vendor/assets/javascripts/webshims/shims/jme/controls.scss +2 -1
  43. data/vendor/assets/javascripts/webshims/shims/jme/mediacontrols.js +4 -2
  44. data/vendor/assets/javascripts/webshims/shims/mediacapture-picker.js +42 -0
  45. data/vendor/assets/javascripts/webshims/shims/mediacapture.js +159 -0
  46. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +13 -1
  47. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +48 -12
  48. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +20 -8
  49. data/vendor/assets/javascripts/webshims/shims/{combos/26.js → moxie/js/moxie-html4.js} +2121 -1257
  50. data/vendor/assets/javascripts/webshims/shims/moxie/js/{moxie.js → moxie-swf.js} +1125 -1741
  51. data/vendor/assets/javascripts/webshims/shims/sticky.js +585 -0
  52. data/vendor/assets/javascripts/webshims/shims/styles/forms-picker.css +20 -0
  53. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-picker.scss +23 -0
  54. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +74 -34
  55. data/vendor/assets/javascripts/webshims/shims/styles/shim-ext.css +78 -31
  56. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +78 -31
  57. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  58. data/vendor/assets/javascripts/webshims/shims/track-ui.js +214 -111
  59. data/vendor/assets/javascripts/webshims/shims/track.js +9 -9
  60. data/vendor/assets/javascripts/webshims/shims/usermedia-core.js +27 -0
  61. data/vendor/assets/javascripts/webshims/shims/usermedia-shim.js +34 -37
  62. metadata +9 -8
  63. data/vendor/assets/javascripts/webshims/shims/jajax.js +0 -1262
  64. data/vendor/assets/javascripts/webshims/shims/moxie/silverlight/Moxie.cdn.xap +0 -0
  65. data/vendor/assets/javascripts/webshims/shims/moxie/silverlight/Moxie.min.xap +0 -0
@@ -92,52 +92,46 @@
92
92
  }
93
93
  return;
94
94
  }
95
- createAjax = function(){
96
- $.ajax({
97
- url: 'http://freegeoip.net/json/',
98
- dataType: 'jsonp',
99
- cache: true,
100
- jsonp: 'callback',
101
- success: function(data){
102
- locationAPIs--;
103
- if(!data){return;}
104
- pos = pos || {
105
- coords: {
106
- latitude: data.latitude,
107
- longitude: data.longitude,
108
- altitude: null,
109
- accuracy: 43000,
110
- altitudeAccuracy: null,
111
- heading: parseInt('NaN', 10),
112
- velocity: null
113
- },
114
- //extension similiar to FF implementation
115
- address: {
116
- city: data.city,
117
- country: data.country_name,
118
- countryCode: data.country_code,
119
- county: "",
120
- postalCode: data.zipcode,
121
- premises: "",
122
- region: data.region_name,
123
- street: "",
124
- streetNumber: ""
125
- }
126
- };
127
- endCallback();
128
- },
129
- error: function(){
130
- locationAPIs--;
131
- endCallback();
132
- }
133
- });
134
- };
135
- if($.ajax){
136
- createAjax();
137
- } else {
138
- webshims.ready('jajax', createAjax);
139
- webshims.loader.loadList(['jajax']);
140
- }
95
+
96
+ $.ajax({
97
+ url: 'http://freegeoip.net/json/',
98
+ dataType: 'jsonp',
99
+ cache: true,
100
+ jsonp: 'callback',
101
+ success: function(data){
102
+ locationAPIs--;
103
+ if(!data){return;}
104
+ pos = pos || {
105
+ coords: {
106
+ latitude: data.latitude,
107
+ longitude: data.longitude,
108
+ altitude: null,
109
+ accuracy: 43000,
110
+ altitudeAccuracy: null,
111
+ heading: parseInt('NaN', 10),
112
+ velocity: null
113
+ },
114
+ //extension similiar to FF implementation
115
+ address: {
116
+ city: data.city,
117
+ country: data.country_name,
118
+ countryCode: data.country_code,
119
+ county: "",
120
+ postalCode: data.zipcode,
121
+ premises: "",
122
+ region: data.region_name,
123
+ street: "",
124
+ streetNumber: ""
125
+ }
126
+ };
127
+ endCallback();
128
+ },
129
+ error: function(){
130
+ locationAPIs--;
131
+ endCallback();
132
+ }
133
+ });
134
+
141
135
  clearTimeout(googleTimer);
142
136
  if (!window.google || !window.google.loader) {
143
137
  googleTimer = setTimeout(function(){
@@ -179,9 +173,6 @@
179
173
  };
180
174
  return api;
181
175
  })());
182
-
183
- webshims.ready('WINDOWLOAD', function(){
184
- webshims.loader.loadList(['jajax']);
185
- });
176
+
186
177
  webshims.isReady('geolocation', true);
187
178
  })(webshims.$);
@@ -1,5 +1,5 @@
1
1
  /* thx to http://icomoon.io */
2
- .mediaplayer[data-state="waiting"] > .jme-media-overlay, .mediaplayer .fullscreen, .mediaplayer .fullscreen.state-exitfullscreen, .mediaplayer .mediaconfigmenu, .mediaplayer.initial-state > .jme-media-overlay, .mediaplayer button.play-pause, .mediaplayer button.play-pause.state-playing, .mediaplayer .mute-unmute, .mediaplayer[data-volume="medium"] .mute-unmute, .mediaplayer[data-volume="low"] .mute-unmute, .mediaplayer[data-volume="no"] .mute-unmute, .mediaplayer .state-unmute.mute-unmute, .mediaplayer .captions, .mediaplayer .subtitle-menu button[aria-checked="true"], .mediaplayer .subtitle-menu button, .mediaplayer .playlist-next, .mediaplayer .playlist-prev, .mediaplayer .chapters, .mediaplayer.ended-state > .jme-media-overlay {
2
+ .mediaplayer[data-state="waiting"] > div.jme-media-overlay, .mediaplayer .fullscreen, .mediaplayer .fullscreen.state-exitfullscreen, .mediaplayer .mediaconfigmenu, .mediaplayer.initial-state > .jme-media-overlay, .mediaplayer button.play-pause, .mediaplayer button.play-pause.state-playing, .mediaplayer .mute-unmute, .mediaplayer[data-volume="medium"] .mute-unmute, .mediaplayer[data-volume="low"] .mute-unmute, .mediaplayer[data-volume="no"] .mute-unmute, .mediaplayer .state-unmute.mute-unmute, .mediaplayer .captions, .mediaplayer .subtitle-menu button[aria-checked="true"], .mediaplayer .subtitle-menu button, .mediaplayer .playlist-next, .mediaplayer .playlist-prev, .mediaplayer .chapters, .mediaplayer.ended-state > .jme-media-overlay {
3
3
  font-family: 'jme';
4
4
  speak: none;
5
5
  font-style: normal;
@@ -13,7 +13,7 @@
13
13
  -moz-osx-font-smoothing: grayscale;
14
14
  }
15
15
 
16
- .mediaplayer[data-state="waiting"] > .jme-media-overlay:before {
16
+ .mediaplayer[data-state="waiting"] > div.jme-media-overlay:before {
17
17
  content: "\e612";
18
18
  }
19
19
 
@@ -300,10 +300,10 @@
300
300
  .mediaplayer[data-state="waiting"] {
301
301
  cursor: default;
302
302
  }
303
- .mediaplayer[data-state="waiting"] > .jme-media-overlay {
303
+ .mediaplayer[data-state="waiting"] > div.jme-media-overlay {
304
304
  background-position: 4px 4px;
305
305
  }
306
- .mediaplayer[data-state="waiting"] > .jme-media-overlay:before {
306
+ .mediaplayer[data-state="waiting"] > div.jme-media-overlay:before {
307
307
  -webkit-animation-name: jmespin;
308
308
  -webkit-animation-iteration-count: infinite;
309
309
  -webkit-animation-duration: 1100ms;
@@ -4,6 +4,7 @@
4
4
  font-family: 'jme';
5
5
  src: url('jme.eot');
6
6
  }
7
+
7
8
  @font-face {
8
9
  font-family: 'jme';
9
10
  src: url(data:application/font-woff;charset=utf-8;base64,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) format('woff'),
@@ -235,7 +236,7 @@ $browser-context: 16; // Default
235
236
 
236
237
  &[data-state="waiting"] {
237
238
  cursor: default;
238
- > .jme-media-overlay {
239
+ > div.jme-media-overlay {
239
240
  @extend %icon-spinner;
240
241
  background-position: 4px 4px;
241
242
 
@@ -52,7 +52,8 @@ webshims.register('mediacontrols', function($, webshims, window){
52
52
  })();
53
53
  var ios = /iP(hone|od|ad)/i.test(navigator.platform);
54
54
  var ios6 = ios && parseInt(((navigator.appVersion).match(/OS (\d+)_\d+/) || ['','8'])[1], 10) < 7;
55
- var hasYtBug = (!window.Modernizr || !Modernizr.videoautoplay) && (ios || /android/i.test(navigator.userAgent));
55
+ var modern = window.Modernizr;
56
+ var hasYtBug = (!modern || !modern.videoautoplay) && (ios || /android/i.test(navigator.userAgent));
56
57
  var loadLazy = function(){
57
58
  if(!loadLazy.loaded){
58
59
  loadLazy.loaded = true;
@@ -173,7 +174,8 @@ webshims.register('mediacontrols', function($, webshims, window){
173
174
  if(!e){
174
175
  e.type = 'playing';
175
176
  }
176
- if(isInitial && (!isYt || !hasYtBug || e.type == 'playing' || data.media.prop('readyState') > 1)){
177
+
178
+ if(isInitial && (!isYt || !hasYtBug || e.type == 'playing' || data.media.prop('readyState') || data.media.prop('networkState'))){
177
179
  isInitial = false;
178
180
  data.player.removeClass('initial-state');
179
181
  }
@@ -0,0 +1,42 @@
1
+ webshim.register('mediacapture-picker', function($, webshim, window, document, undefined, featureOptions){
2
+ "use strict";
3
+
4
+ function PhotoShooter($dom){
5
+ this.$dom = $dom;
6
+ this._createDom();
7
+ this.requestMedia();
8
+ }
9
+
10
+ PhotoShooter.prototype = {
11
+ _createDom: function(){
12
+ this.$dom.html('<div class="ws-videocapture-view">' +
13
+ '<video class="ws-usermedia ws-inlineusermedia" autoplay=""></video>' +
14
+ '<div class="ws-video-overlay"></div>' +
15
+ '</div>' +
16
+ '<div class="button-row"><button type="button" class="ws-capture-button">take</button>' +
17
+ '</div>')
18
+ ;
19
+ },
20
+ requestMedia: function(){
21
+ var that = this;
22
+
23
+
24
+ navigator.getUserMedia(
25
+ {video: {minWidth: 200, audio: false}},
26
+ function(stream){
27
+ that.stream = stream;
28
+ $('video', that.$dom).prop('src', URL.createObjectURL(stream));
29
+ },
30
+ function(){
31
+
32
+ }
33
+ );
34
+ $('video', that.$dom).removeClass('ws-usermedia');
35
+
36
+ }
37
+ };
38
+
39
+ webshim.mediacapture.showContent = function($fileinput, $button, popover){
40
+ var stream = new PhotoShooter(popover.contentElement);
41
+ };
42
+ });
@@ -0,0 +1,159 @@
1
+ webshim.register('mediacapture', function($, webshim, window, document, undefined, featureOptions){
2
+ "use strict";
3
+ var hasCamera = -1;
4
+ var checkCameras = $.noop;
5
+ var sel = 'input[type="file"].ws-filereader, input[type="file"].ws-capture';
6
+ var cameraListPromise = $.Deferred();
7
+
8
+ //
9
+
10
+ (function(){
11
+ var tmp;
12
+
13
+ var hasNativeUserMedia = !!(navigator.getUserMedia && !navigator.wsGetUserMedia);
14
+ var hasFlash = swfmini.hasFlashPlayerVersion('11.3');
15
+ var writeToStorage = function(){
16
+ try{
17
+ sessionStorage.setItem('wsCameras', JSON.stringify(hasCamera));
18
+ } catch (e){}
19
+ };
20
+ var reject = function(){
21
+ hasCamera = 0;
22
+ writeToStorage();
23
+ cameraListPromise.reject(hasCamera);
24
+ };
25
+ var resolve = function(){
26
+ writeToStorage();
27
+ cameraListPromise.resolve(hasCamera);
28
+ };
29
+ try {
30
+ tmp = JSON.parse(sessionStorage.getItem('wsCameras'));
31
+ if(tmp == null){
32
+ hasCamera = -1;
33
+ }
34
+ } catch(e){}
35
+
36
+ if(hasCamera === 0 || (hasCamera == -1 && !hasNativeUserMedia && !hasFlash)){
37
+ reject();
38
+ } else if(hasFlash){
39
+ checkCameras = function(){
40
+ var mediaOptions = webshim.cfg.mediaelement;
41
+ var playerSwfPath = mediaOptions.playerPath || (webshim.cfg.basePath + "swf/" + (mediaOptions.playerName || 'JarisFLVPlayer.swf'));
42
+ var id = 'wscameralistdetection';
43
+ var vars = {
44
+ controltype: '1',
45
+ jsapi: '1',
46
+ source: '',
47
+ id: id,
48
+ evtId: id
49
+ };
50
+ var attrs = {
51
+ id: id,
52
+ name: id
53
+ };
54
+ var params = {
55
+ allowscriptaccess: 'always',
56
+ allowNetworking: 'all'
57
+ };
58
+ var $dom = $('<div><div id="'+ id +'"></div></div>')
59
+ .css({position: 'absolute', left: -999, width: 5, height: 5, overflow: 'hidden'})
60
+ .appendTo('body')
61
+ ;
62
+
63
+ webshim.mediaelement.jarisEvent = webshim.mediaelement.jarisEvent || {};
64
+ webshim.mediaelement.jarisEvent[id] = function(jaris){
65
+ hasCamera = jaris.cameras;
66
+ $dom.remove();
67
+ if(hasCamera){
68
+ resolve();
69
+ } else {
70
+ reject();
71
+ }
72
+ };
73
+
74
+
75
+ checkCameras = $.noop;
76
+ swfmini.embedSWF(playerSwfPath, id, "100%", "100%", "11.3", false, vars, params, attrs);
77
+ };
78
+
79
+ } else {
80
+ hasCamera = -1;
81
+ resolve();
82
+ }
83
+ })();
84
+ var loadPicker = function(){
85
+ webshim.ready('WINDOWLOAD', function(){
86
+ webshim.loader.loadList(['mediacapture-picker']);
87
+ });
88
+ loadPicker = $.noop;
89
+ };
90
+
91
+
92
+ var _createPhotoPicker = function(){
93
+ if($(this).is('[capture].ws-filereader, .ws-capture') && webshim.implement(this, 'capture')){
94
+ var $wrapper, $customFile;
95
+ var $fileinput = $(this);
96
+ var $button = $('<button type="button" class="ws-capture-button">photo</button>');
97
+ var popover = webshim.objectCreate(webshim.wsPopover, {}, $.extend({prepareFor: $button}));
98
+ popover.element.addClass('capture-popover input-picker');
99
+
100
+ if($fileinput.is('.ws-custom-file > *')){
101
+ $customFile = $fileinput.closest('.ws-custom-file');
102
+ $wrapper = $('<div class="ws-capture-file" />').insertAfter($customFile);
103
+ $wrapper.append($button).append($customFile);
104
+ } else {
105
+ $fileinput.before($button);
106
+ }
107
+ popover.element.insertAfter($button);
108
+
109
+ $button.on('click', function(){
110
+ webshim.mediacapture.showContent($fileinput, $button, popover);
111
+ popover.show();
112
+ });
113
+ loadPicker();
114
+ }
115
+ };
116
+ var createPhotoPicker = function (){
117
+ var elem = this;
118
+ checkCameras();
119
+
120
+ cameraListPromise.done(function(){
121
+ _createPhotoPicker.call(elem);
122
+ });
123
+ };
124
+
125
+ webshim.mediacapture = {
126
+ showContent: function($fileinput, $button, popover){
127
+ webshim.loader.loadList(['mediacapture-picker']);
128
+ webshim.ready('mediacapture-picker', function(){
129
+ webshim.mediacapture.showContent($fileinput, $button, popover);
130
+ });
131
+ }
132
+ };
133
+ webshim.defineNodeNamesBooleanProperty('input', 'capture');
134
+
135
+ if(hasCamera){
136
+
137
+ cameraListPromise.done(function(){
138
+ createPhotoPicker = _createPhotoPicker;
139
+ webshim.loader.addModule('mediacapture-picker', {
140
+ noAutoCallback: true,
141
+ css: 'styles/forms-picker.css',
142
+ options: featureOptions
143
+ });
144
+
145
+ });
146
+
147
+ webshim.addReady(function(context, insertedElement){
148
+ $(sel, context).add(insertedElement.filter(sel))
149
+ .filter('[accept*="image"], :not([accept]), [accept=""]')
150
+ .each(createPhotoPicker)
151
+ ;
152
+ });
153
+
154
+ webshim.ready('WINDOWLOAD', checkCameras);
155
+ }
156
+ if(document.readyState == 'complete'){
157
+ webshim.isReady('WINDOWLOAD', true);
158
+ }
159
+ });
@@ -58,9 +58,16 @@
58
58
  })();
59
59
  }
60
60
 
61
+ if(window.CanvasRenderingContext2D && CanvasRenderingContext2D.prototype){
62
+ CanvasRenderingContext2D.prototype.wsImageComplete = function(cb){
63
+ cb.call(this, this);
64
+ };
65
+ }
66
+
61
67
  webshims.register('mediaelement-core', function($, webshims, window, document, undefined, options){
62
68
  var hasSwf = swfmini.hasFlashPlayerVersion('11.3');
63
69
  var mediaelement = webshims.mediaelement;
70
+ var allowYtLoading = false;
64
71
 
65
72
  mediaelement.parseRtmp = function(data){
66
73
  var src = data.src.split('://');
@@ -156,7 +163,9 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
156
163
  return function(){
157
164
  if(loaded || !hasYt){return;}
158
165
  loaded = true;
159
- webshims.loader.loadScript("https://www.youtube.com/player_api");
166
+ if(allowYtLoading){
167
+ webshims.loader.loadScript("https://www.youtube.com/player_api");
168
+ }
160
169
  $(function(){
161
170
  webshims._polyfill(["mediaelement-yt"]);
162
171
  });
@@ -342,6 +351,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
342
351
  }
343
352
  });
344
353
  if(!requested && hasYt && !mediaelement.createSWF){
354
+ allowYtLoading = true;
345
355
  loadYt();
346
356
  }
347
357
  };
@@ -506,6 +516,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
506
516
  .add(insertedElement.filter('video, audio'))
507
517
  .each(function(){
508
518
  if(!mediaelement.canNativePlaySrces(this)){
519
+ allowYtLoading = true;
509
520
  loadThird();
510
521
  handleMedia = true;
511
522
  return false;
@@ -528,6 +539,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
528
539
  mediaelement.loadDebugger();
529
540
  });
530
541
  }
542
+
531
543
  //set native implementation ready, before swf api is retested
532
544
  if(hasNative){
533
545
  webshims.isReady('mediaelement-core', true);
@@ -124,12 +124,13 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
124
124
  };
125
125
 
126
126
 
127
- mediaelement.jarisEvent = {};
127
+ mediaelement.jarisEvent = mediaelement.jarisEvent || {};
128
128
  var localConnectionTimer;
129
129
  var onEvent = {
130
130
  onPlayPause: function(jaris, data, override){
131
131
  var playing, type;
132
132
  var idled = data.paused || data.ended;
133
+
133
134
  if(override == null){
134
135
  try {
135
136
  playing = data.api.api_get("isPlaying");
@@ -143,12 +144,15 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
143
144
  type = data.paused ? 'pause' : 'play';
144
145
  data._ppFlag = true;
145
146
  trigger(data._elem, type);
147
+
148
+ }
149
+ if(!data.paused || playing == idled || playing == null){
146
150
  if(data.readyState < 3){
147
151
  setReadyState(3, data);
148
152
  }
149
- if(!data.paused){
150
- trigger(data._elem, 'playing');
151
- }
153
+ }
154
+ if(!data.paused){
155
+ trigger(data._elem, 'playing');
152
156
  }
153
157
  },
154
158
  onSeek: function(jaris, data){
@@ -900,11 +904,11 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
900
904
  options.changeSWF(vars, elem, canPlaySrc, data, 'embed');
901
905
  clearTimeout(data.flashBlock);
902
906
 
903
- swfmini.embedSWF(playerSwfPath, elemId, "100%", "100%", "9.0.115", false, vars, params, attrs, function(swfData){
907
+ swfmini.embedSWF(playerSwfPath, elemId, "100%", "100%", "11.3", false, vars, params, attrs, function(swfData){
904
908
  if(swfData.success){
905
909
  var fBlocker = function(){
906
- if((!swfData.ref.parentNode && box[0].parentNode) || swfData.ref.style.display == "none"){
907
- box.addClass('flashblocker-assumed');
910
+ if((!swfData.ref.parentNode) || swfData.ref.style.display == "none"){
911
+
908
912
  $(elem).trigger('flashblocker');
909
913
  webshims.warn("flashblocker assumed");
910
914
  }
@@ -1138,8 +1142,19 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
1138
1142
  webshim.error('canvas.drawImage feature is needed. In IE8 flashvanvas pro can be used');
1139
1143
  }
1140
1144
 
1145
+ CanvasRenderingContext2D.prototype.wsImageComplete = function(cb){
1146
+ if(this._wsIsLoading){
1147
+ if(!this._wsLoadingCbs){
1148
+ this._wsLoadingCbs = [];
1149
+ }
1150
+ this._wsLoadingCbs.push(cb);
1151
+ } else {
1152
+ cb.call(this, this);
1153
+ }
1154
+ };
1155
+
1141
1156
  CanvasRenderingContext2D.prototype.drawImage = function(elem){
1142
- var data, img, args, imgData;
1157
+ var data, img, args, imgData, hadCachedImg;
1143
1158
  var context = this;
1144
1159
 
1145
1160
  if(isVideo[elem.nodeName] && (data = webshims.data(elem, 'mediaelement')) && data.isActive == 'third' && data.api.api_image){
@@ -1157,18 +1172,39 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
1157
1172
  }
1158
1173
 
1159
1174
  args = slice.call(arguments, 1);
1160
- img = new Image();
1175
+
1176
+ if(options.canvasSync && data.canvasImg){
1177
+ args.unshift(data.canvasImg);
1178
+ _drawImage.apply(context, args);
1179
+ args = slice.call(arguments, 1);
1180
+ hadCachedImg = true;
1181
+ }
1182
+
1183
+ img = document.createElement('img');
1161
1184
 
1162
1185
  //todo find a performant sync way
1163
1186
  img.onload = function(){
1164
1187
  args.unshift(this);
1165
- _drawImage.apply(context, args);
1166
1188
  img.onload = null;
1189
+
1190
+ if(options.canvasSync){
1191
+ data.canvasImg = img;
1192
+ if(hadCachedImg && options.noDoubbleDraw){
1193
+ return;
1194
+ }
1195
+ }
1196
+ _drawImage.apply(context, args);
1197
+ context._wsIsLoading = false;
1198
+ if(context._wsLoadingCbs && context._wsLoadingCbs.length){
1199
+ while(context._wsLoadingCbs.length){
1200
+ context._wsLoadingCbs.shift().call(context, context);
1201
+ }
1202
+ }
1167
1203
  };
1168
1204
 
1169
1205
  img.src = 'data:image/jpeg;base64,'+imgData;
1170
-
1171
- if(img.complete){
1206
+ this._wsIsLoading = true;
1207
+ if(img.complete && img.onload){
1172
1208
  img.onload();
1173
1209
  }
1174
1210
  return;