webshims-rails 1.10.3 → 1.10.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +8 -8
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/polyfiller.js +96 -73
  4. data/vendor/assets/javascripts/webshims/shims/color-picker.js +2415 -0
  5. data/vendor/assets/javascripts/webshims/shims/combos/1.js +248 -745
  6. data/vendor/assets/javascripts/webshims/shims/combos/10.js +771 -1206
  7. data/vendor/assets/javascripts/webshims/shims/combos/11.js +679 -1201
  8. data/vendor/assets/javascripts/webshims/shims/combos/12.js +46 -65
  9. data/vendor/assets/javascripts/webshims/shims/combos/13.js +45 -64
  10. data/vendor/assets/javascripts/webshims/shims/combos/14.js +94 -7
  11. data/vendor/assets/javascripts/webshims/shims/combos/15.js +557 -1189
  12. data/vendor/assets/javascripts/webshims/shims/combos/16.js +598 -1249
  13. data/vendor/assets/javascripts/webshims/shims/combos/17.js +697 -1208
  14. data/vendor/assets/javascripts/webshims/shims/combos/18.js +697 -1208
  15. data/vendor/assets/javascripts/webshims/shims/combos/19.js +145 -78
  16. data/vendor/assets/javascripts/webshims/shims/combos/2.js +472 -1280
  17. data/vendor/assets/javascripts/webshims/shims/combos/20.js +144 -77
  18. data/vendor/assets/javascripts/webshims/shims/combos/21.js +14 -15
  19. data/vendor/assets/javascripts/webshims/shims/combos/22.js +2 -2
  20. data/vendor/assets/javascripts/webshims/shims/combos/23.js +45 -64
  21. data/vendor/assets/javascripts/webshims/shims/combos/24.js +848 -0
  22. data/vendor/assets/javascripts/webshims/shims/combos/25.js +4373 -0
  23. data/vendor/assets/javascripts/webshims/shims/combos/26.js +1516 -0
  24. data/vendor/assets/javascripts/webshims/shims/combos/27.js +884 -0
  25. data/vendor/assets/javascripts/webshims/shims/combos/28.js +2067 -0
  26. data/vendor/assets/javascripts/webshims/shims/combos/29.js +1156 -0
  27. data/vendor/assets/javascripts/webshims/shims/combos/3.js +313 -700
  28. data/vendor/assets/javascripts/webshims/shims/combos/30.js +1868 -0
  29. data/vendor/assets/javascripts/webshims/shims/combos/31.js +1663 -0
  30. data/vendor/assets/javascripts/webshims/shims/combos/4.js +111 -20
  31. data/vendor/assets/javascripts/webshims/shims/combos/5.js +747 -1321
  32. data/vendor/assets/javascripts/webshims/shims/combos/6.js +837 -1809
  33. data/vendor/assets/javascripts/webshims/shims/combos/7.js +435 -1239
  34. data/vendor/assets/javascripts/webshims/shims/combos/8.js +360 -766
  35. data/vendor/assets/javascripts/webshims/shims/combos/9.js +843 -1676
  36. data/vendor/assets/javascripts/webshims/shims/details.js +1 -1
  37. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +90 -3
  38. data/vendor/assets/javascripts/webshims/shims/filereader.js +386 -0
  39. data/vendor/assets/javascripts/webshims/shims/form-core.js +201 -680
  40. data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +418 -0
  41. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +69 -467
  42. data/vendor/assets/javascripts/webshims/shims/form-message.js +21 -17
  43. data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +19 -82
  44. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +17 -6
  45. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +570 -1185
  46. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +181 -28
  47. data/vendor/assets/javascripts/webshims/shims/form-validation.js +599 -0
  48. data/vendor/assets/javascripts/webshims/{extras/custom-validity.js → shims/form-validators.js} +33 -38
  49. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +865 -0
  50. data/vendor/assets/javascripts/webshims/shims/geolocation.js +2 -2
  51. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-de.txt +37 -34
  52. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-en.txt +88 -48
  53. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-lt.js +74 -0
  54. data/vendor/assets/javascripts/webshims/shims/jpicker/ChangeLog.txt +121 -0
  55. data/vendor/assets/javascripts/webshims/shims/jpicker/ReadMe.txt +47 -0
  56. data/vendor/assets/javascripts/webshims/shims/jpicker/images/AlphaBar.png +0 -0
  57. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Bars.png +0 -0
  58. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Maps.png +0 -0
  59. data/vendor/assets/javascripts/webshims/shims/jpicker/images/NoColor.png +0 -0
  60. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Thumbs.db +0 -0
  61. data/vendor/assets/javascripts/webshims/shims/jpicker/images/bar-opacity.png +0 -0
  62. data/vendor/assets/javascripts/webshims/shims/jpicker/images/map-opacity.png +0 -0
  63. data/vendor/assets/javascripts/webshims/shims/jpicker/images/mappoint.gif +0 -0
  64. data/vendor/assets/javascripts/webshims/shims/jpicker/images/picker.gif +0 -0
  65. data/vendor/assets/javascripts/webshims/shims/jpicker/images/preview-opacity.png +0 -0
  66. data/vendor/assets/javascripts/webshims/shims/jpicker/images/rangearrows.gif +0 -0
  67. data/vendor/assets/javascripts/webshims/shims/jpicker/jpicker.css +257 -0
  68. data/vendor/assets/javascripts/webshims/shims/json-storage.js +4 -4
  69. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +44 -63
  70. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +10 -11
  71. data/vendor/assets/javascripts/webshims/shims/mediaelement-native-fix.js +2 -1
  72. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +5 -3
  73. data/vendor/assets/javascripts/webshims/shims/range-ui.js +110 -17
  74. data/vendor/assets/javascripts/webshims/shims/styles/forms.png +0 -0
  75. data/vendor/assets/javascripts/webshims/shims/styles/range-track.png +0 -0
  76. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +104 -21
  77. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +90 -16
  78. data/vendor/assets/javascripts/webshims/shims/styles/vertical-range.png +0 -0
  79. data/vendor/assets/javascripts/webshims/shims/swf/filereader.swf +0 -0
  80. data/vendor/assets/javascripts/webshims/shims/swfmini.js +1 -1
  81. data/vendor/assets/javascripts/webshims/shims/track-ui.js +35 -3
  82. data/vendor/assets/javascripts/webshims/shims/track.js +1 -1
  83. metadata +33 -3
@@ -8,7 +8,7 @@ var swfmini = function() {
8
8
 
9
9
  var UNDEF = "undefined",
10
10
  OBJECT = "object",
11
- webshims = jQuery.webshims,
11
+ webshims = jQuery.webshims || window.webshims,
12
12
  SHOCKWAVE_FLASH = "Shockwave Flash",
13
13
  SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
14
14
  FLASH_MIME_TYPE = "application/x-shockwave-flash",
@@ -496,32 +496,9 @@ var swfmini = function() {
496
496
  };
497
497
  }();
498
498
 
499
- //additional tests for partial implementation of forms features
500
- (function($){
499
+ webshims.register('form-core', function($, webshims, window, document, undefined, options){
501
500
  "use strict";
502
- var isWebkit = 'webkitURL' in window;
503
- var Modernizr = window.Modernizr;
504
- var webshims = $.webshims;
505
- var bugs = webshims.bugs;
506
- var form = $('<form action="#" style="width: 1px; height: 1px; overflow: hidden;"><select name="b" required="" /><input required="" name="a" /></form>');
507
- var testRequiredFind = function(){
508
- if(form[0].querySelector){
509
- try {
510
- bugs.findRequired = !(form[0].querySelector('select:required'));
511
- } catch(er){
512
- bugs.findRequired = false;
513
- }
514
- }
515
- };
516
- var inputElem = $('input', form).eq(0);
517
- var onDomextend = function(fn){
518
- webshims.loader.loadList(['dom-extend']);
519
- webshims.ready('dom-extend', fn);
520
- };
521
-
522
- bugs.findRequired = false;
523
- bugs.validationMessage = false;
524
-
501
+
525
502
  webshims.capturingEventPrevented = function(e){
526
503
  if(!e._isPolyfilled){
527
504
  var isDefaultPrevented = e.isDefaultPrevented;
@@ -540,690 +517,235 @@ var swfmini = function() {
540
517
  }
541
518
  };
542
519
 
543
- if(!Modernizr.formvalidation || bugs.bustedValidity){
544
- testRequiredFind();
545
- } else {
520
+ if(Modernizr.formvalidation && !webshims.bugs.bustedValidity){
546
521
  //create delegatable events
547
522
  webshims.capturingEvents(['invalid'], true);
548
-
549
- if(window.opera || window.testGoodWithFix){
550
-
551
- form.appendTo('head');
552
-
553
- testRequiredFind();
554
- bugs.validationMessage = !(inputElem.prop('validationMessage'));
555
-
556
- webshims.reTest(['form-native-extend', 'form-message']);
557
-
558
- form.remove();
559
-
560
- $(function(){
561
- onDomextend(function(){
562
-
563
- //Opera shows native validation bubbles in case of input.checkValidity()
564
- // Opera 11.6/12 hasn't fixed this issue right, it's buggy
565
- var preventDefault = function(e){
566
- e.preventDefault();
567
- };
568
-
569
- ['form', 'input', 'textarea', 'select'].forEach(function(name){
570
- var desc = webshims.defineNodeNameProperty(name, 'checkValidity', {
571
- prop: {
572
- value: function(){
573
- if (!webshims.fromSubmit) {
574
- $(this).on('invalid.checkvalidity', preventDefault);
575
- }
576
-
577
- webshims.fromCheckValidity = true;
578
- var ret = desc.prop._supvalue.apply(this, arguments);
579
- if (!webshims.fromSubmit) {
580
- $(this).unbind('invalid.checkvalidity', preventDefault);
581
- }
582
- webshims.fromCheckValidity = false;
583
- return ret;
584
- }
585
- }
586
- });
587
- });
588
-
589
- });
590
- });
591
- }
592
-
593
- if(isWebkit && !webshims.bugs.bustedValidity){
594
- (function(){
595
- var elems = /^(?:textarea|input)$/i;
596
- var form = false;
597
-
598
- document.addEventListener('contextmenu', function(e){
599
- if(elems.test( e.target.nodeName || '') && (form = e.target.form)){
600
- setTimeout(function(){
601
- form = false;
602
- }, 1);
603
- }
604
- }, false);
605
-
606
- $(window).on('invalid', function(e){
607
- if(e.originalEvent && form && form == e.target.form){
608
- e.wrongWebkitInvalid = true;
609
- e.stopImmediatePropagation();
610
- }
611
- });
612
-
613
- })();
614
- }
615
523
  }
616
524
 
617
- $.webshims.register('form-core', function($, webshims, window, document, undefined, options){
618
-
619
- var checkTypes = {checkbox: 1, radio: 1};
620
- var emptyJ = $([]);
621
- var bugs = webshims.bugs;
622
- var getGroupElements = function(elem){
623
- elem = $(elem);
624
- var name;
625
- var form;
626
- var ret = emptyJ;
627
- if(elem[0].type == 'radio'){
628
- form = elem.prop('form');
629
- name = elem[0].name;
630
- if(!name){
631
- ret = elem;
632
- } else if(form){
633
- ret = $(form[name]);
634
- } else {
635
- ret = $(document.getElementsByName(name)).filter(function(){
636
- return !$.prop(this, 'form');
637
- });
638
- }
639
- ret = ret.filter('[type="radio"]');
640
- }
641
- return ret;
642
- };
643
-
644
- var getContentValidationMessage = webshims.getContentValidationMessage = function(elem, validity, key){
645
- var message = $(elem).data('errormessage') || elem.getAttribute('x-moz-errormessage') || '';
646
- if(key && message[key]){
647
- message = message[key];
648
- }
649
- if(typeof message == 'object'){
650
- validity = validity || $.prop(elem, 'validity') || {valid: 1};
651
- if(!validity.valid){
652
- $.each(validity, function(name, prop){
653
- if(prop && name != 'valid' && message[name]){
654
- message = message[name];
655
- return false;
656
- }
657
- });
658
- }
659
- }
660
-
661
- if(typeof message == 'object'){
662
- message = message.defaultMessage;
663
- }
664
- return message || '';
665
- };
666
-
667
- /*
668
- * Selectors for all browsers
669
- */
670
- var rangeTypes = {number: 1, range: 1, date: 1/*, time: 1, 'datetime-local': 1, datetime: 1, month: 1, week: 1*/};
671
- var hasInvalid = function(elem){
672
- var ret = false;
673
- $($.prop(elem, 'elements')).each(function(){
674
- ret = $(this).is(':invalid');
675
- if(ret){
676
- return false;
677
- }
678
- });
679
- return ret;
680
- };
681
- $.extend($.expr[":"], {
682
- "valid-element": function(elem){
683
- return $.nodeName(elem, 'form') ? !hasInvalid(elem) :!!($.prop(elem, 'willValidate') && isValid(elem));
684
- },
685
- "invalid-element": function(elem){
686
- return $.nodeName(elem, 'form') ? hasInvalid(elem) : !!($.prop(elem, 'willValidate') && !isValid(elem));
687
- },
688
- "required-element": function(elem){
689
- return !!($.prop(elem, 'willValidate') && $.prop(elem, 'required'));
690
- },
691
- "user-error": function(elem){
692
- return ($.prop(elem, 'willValidate') && $(elem).hasClass('user-error'));
693
- },
694
- "optional-element": function(elem){
695
- return !!($.prop(elem, 'willValidate') && $.prop(elem, 'required') === false);
696
- },
697
- "in-range": function(elem){
698
- if(!rangeTypes[$.prop(elem, 'type')] || !$.prop(elem, 'willValidate')){
699
- return false;
700
- }
701
- var val = $.prop(elem, 'validity');
702
- return !!(val && !val.rangeOverflow && !val.rangeUnderflow);
703
- },
704
- "out-of-range": function(elem){
705
- if(!rangeTypes[$.prop(elem, 'type')] || !$.prop(elem, 'willValidate')){
706
- return false;
707
- }
708
- var val = $.prop(elem, 'validity');
709
- return !!(val && (val.rangeOverflow || val.rangeUnderflow));
525
+ var isValid = function(elem){
526
+ return ($.prop(elem, 'validity') || {valid: 1}).valid;
527
+ };
528
+ var lazyLoad = function(){
529
+ var toLoad = ['form-validation'];
530
+ if(options.lazyCustomMessages){
531
+ options.customMessages = true;
532
+ toLoad.push('form-message');
533
+ }
534
+ if(options.addValidators){
535
+ toLoad.push('form-validators');
536
+ }
537
+ webshims.reTest(toLoad);
538
+ $(document).off('.lazyloadvalidation');
539
+ };
540
+ /*
541
+ * Selectors for all browsers
542
+ */
543
+ var hasInvalid = function(elem){
544
+ var ret = false;
545
+ $(elem).jProp('elements').each(function(){
546
+ ret = $(this).is(':invalid');
547
+ if(ret){
548
+ return false;
710
549
  }
711
-
712
550
  });
713
-
714
- ['valid', 'invalid', 'required', 'optional'].forEach(function(name){
715
- $.expr[":"][name] = $.expr.filters[name+"-element"];
716
- });
717
-
718
-
719
- $.expr[":"].focus = function( elem ) {
720
- try {
721
- var doc = elem.ownerDocument;
722
- return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus());
723
- } catch(e){}
724
- return false;
725
- };
726
-
727
-
728
- var customEvents = $.event.customEvent || {};
729
- var isValid = function(elem){
730
- return ($.prop(elem, 'validity') || {valid: 1}).valid;
731
- };
732
-
733
- if (bugs.bustedValidity || bugs.findRequired) {
734
- (function(){
735
- var find = $.find;
736
- var matchesSelector = $.find.matchesSelector;
737
-
738
- var regExp = /(\:valid|\:invalid|\:optional|\:required|\:in-range|\:out-of-range)(?=[\s\[\~\.\+\>\:\#*]|$)/ig;
739
- var regFn = function(sel){
740
- return sel + '-element';
741
- };
742
-
743
- $.find = (function(){
744
- var slice = Array.prototype.slice;
745
- var fn = function(sel){
746
- var ar = arguments;
747
- ar = slice.call(ar, 1, ar.length);
748
- ar.unshift(sel.replace(regExp, regFn));
749
- return find.apply(this, ar);
750
- };
751
- for (var i in find) {
752
- if(find.hasOwnProperty(i)){
753
- fn[i] = find[i];
754
- }
755
- }
756
- return fn;
757
- })();
758
- if(!Modernizr.prefixed || Modernizr.prefixed("matchesSelector", document.documentElement)){
759
- $.find.matchesSelector = function(node, expr){
760
- expr = expr.replace(regExp, regFn);
761
- return matchesSelector.call(this, node, expr);
762
- };
763
- }
764
-
765
- })();
551
+ return ret;
552
+ };
553
+ var rElementsGroup = /^(?:form)$/i;///^(?:form|fieldset)$/i
554
+ $.extend($.expr[":"], {
555
+ "valid-element": function(elem){
556
+ return rElementsGroup.test(elem.nodeName || '') ? !hasInvalid(elem) :!!($.prop(elem, 'willValidate') && isValid(elem));
557
+ },
558
+ "invalid-element": function(elem){
559
+ return rElementsGroup.test(elem.nodeName || '') ? hasInvalid(elem) : !!($.prop(elem, 'willValidate') && !isValid(elem));
560
+ },
561
+ "required-element": function(elem){
562
+ return !!($.prop(elem, 'willValidate') && $.prop(elem, 'required'));
563
+ },
564
+ "user-error": function(elem){
565
+ return ($.prop(elem, 'willValidate') && $(elem).hasClass('user-error'));
566
+ },
567
+ "optional-element": function(elem){
568
+ return !!($.prop(elem, 'willValidate') && $.prop(elem, 'required') === false);
766
569
  }
767
-
768
- //ToDo needs testing
769
- var oldAttr = $.prop;
770
- var changeVals = {selectedIndex: 1, value: 1, checked: 1, disabled: 1, readonly: 1};
771
- $.prop = function(elem, name, val){
772
- var ret = oldAttr.apply(this, arguments);
773
- if(elem && 'form' in elem && changeVals[name] && val !== undefined && $(elem).hasClass(invalidClass)){
774
- if(isValid(elem)){
775
- $(elem).getShadowElement().removeClass(invalidClass);
776
- if(name == 'checked' && val) {
777
- getGroupElements(elem).not(elem).removeClass(invalidClass).removeAttr('aria-invalid');
778
- }
779
- }
780
- }
781
- return ret;
782
- };
783
-
784
- var returnValidityCause = function(validity, elem){
785
- var ret;
786
- $.each(validity, function(name, value){
787
- if(value){
788
- ret = (name == 'customError') ? $.prop(elem, 'validationMessage') : name;
789
- return false;
790
- }
570
+ });
571
+
572
+ ['valid', 'invalid', 'required', 'optional'].forEach(function(name){
573
+ $.expr[":"][name] = $.expr.filters[name+"-element"];
574
+ });
575
+
576
+
577
+ $.expr[":"].focus = function( elem ) {
578
+ try {
579
+ var doc = elem.ownerDocument;
580
+ return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus());
581
+ } catch(e){}
582
+ return false;
583
+ };
584
+
585
+ webshims.triggerInlineForm = function(elem, event){
586
+ $(elem).trigger(event);
587
+ };
588
+
589
+ var lazyLoadProxy = function(obj, fn, args){
590
+ lazyLoad();
591
+ webshims.ready('form-validation', function(){
592
+ obj[fn].apply(obj, args);
593
+ });
594
+ };
595
+
596
+
597
+ webshims.wsPopover = {
598
+ id: 0,
599
+ _create: function(){
600
+ this.options = $.extend({}, webshims.cfg.wspopover, this.options);
601
+ this.id = webshims.wsPopover.id++;
602
+ this.eventns = '.wsoverlay' + this.id;
603
+ this.timers = {};
604
+ this.element = $('<div class="ws-popover" tabindex="-1"><div class="ws-po-outerbox"><div class="ws-po-arrow"><div class="ws-po-arrowbox" /></div><div class="ws-po-box" /></div></div>');
605
+ this.contentElement = $('.ws-po-box', this.element);
606
+ this.lastElement = $([]);
607
+ this.bindElement();
608
+
609
+ this.element.data('wspopover', this);
610
+
611
+ },
612
+ options: {},
613
+ content: function(html){
614
+ this.contentElement.html(html);
615
+ },
616
+ bindElement: function(){
617
+ var that = this;
618
+ var stopBlur = function(){
619
+ that.stopBlur = false;
620
+ };
621
+ this.preventBlur = function(e){
622
+ that.stopBlur = true;
623
+ clearTimeout(that.timers.stopBlur);
624
+ that.timers.stopBlur = setTimeout(stopBlur, 9);
625
+ };
626
+ this.element.on({
627
+ 'mousedown': this.preventBlur
791
628
  });
792
- return ret;
793
- };
629
+ },
630
+ show: function(){
631
+ lazyLoadProxy(this, 'show', arguments);
632
+ }
633
+ };
634
+
635
+ /* some extra validation UI */
636
+ webshims.validityAlert = {
637
+ showFor: function(){
638
+ lazyLoadProxy(this, 'showFor', arguments);
639
+ }
640
+ };
641
+
642
+
643
+ /* extension, but also used to fix native implementation workaround/bugfixes */
644
+ (function(){
645
+ var firstEvent,
646
+ invalids = [],
647
+ stopSubmitTimer,
648
+ form
649
+ ;
794
650
 
795
- var isInGroup = function(name){
796
- var ret;
797
- try {
798
- ret = document.activeElement.name === name;
799
- } catch(e){}
800
- return ret;
801
- };
802
- /* form-ui-invalid/form-ui-valid are deprecated. use user-error/user-success instead */
803
- var invalidClass = 'user-error';
804
- var validClass = 'user-success';
805
- var stopChangeTypes = {
806
- time: 1,
807
- date: 1,
808
- month: 1,
809
- datetime: 1,
810
- week: 1,
811
- 'datetime-local': 1
812
- };
813
- var switchValidityClass = function(e){
814
- var elem, timer;
815
- if(!e.target){return;}
816
- elem = $(e.target).getNativeElement()[0];
817
- if(elem.type == 'submit' || !$.prop(elem, 'willValidate')){return;}
818
- timer = $.data(elem, 'webshimsswitchvalidityclass');
819
- var switchClass = function(){
820
- if(e.type == 'focusout' && elem.type == 'radio' && isInGroup(elem.name)){return;}
821
- var validity = $.prop(elem, 'validity');
822
- var shadowElem = $(elem).getShadowElement();
823
- var addClass, removeClass, trigger, generaltrigger, validityCause;
824
-
825
- if(isWebkit && e.type == 'change' && !bugs.bustedValidity && stopChangeTypes[shadowElem.prop('type')] && shadowElem.is(':focus')){return;}
826
-
827
- $(elem).trigger('refreshCustomValidityRules');
828
-
829
- if(validity.valid){
830
- if(!shadowElem.hasClass(validClass)){
831
- addClass = validClass;
832
- removeClass = invalidClass;
833
- generaltrigger = 'changedvaliditystate';
834
- trigger = 'changedvalid';
835
- if(checkTypes[elem.type] && elem.checked){
836
- getGroupElements(elem).not(elem).removeClass(removeClass).addClass(addClass).removeAttr('aria-invalid');
837
- }
838
- $.removeData(elem, 'webshimsinvalidcause');
839
- }
840
- } else {
841
- validityCause = returnValidityCause(validity, elem);
842
- if($.data(elem, 'webshimsinvalidcause') != validityCause){
843
- $.data(elem, 'webshimsinvalidcause', validityCause);
844
- generaltrigger = 'changedvaliditystate';
845
- }
846
- if(!shadowElem.hasClass(invalidClass)){
847
- addClass = invalidClass;
848
- removeClass = validClass;
849
- if (checkTypes[elem.type] && !elem.checked) {
850
- getGroupElements(elem).not(elem).removeClass(removeClass).addClass(addClass);
851
- }
852
- trigger = 'changedinvalid';
853
- }
854
- }
855
-
856
- if(addClass){
857
- shadowElem.addClass(addClass).removeClass(removeClass);
858
- //jQuery 1.6.1 IE9 bug (doubble trigger bug)
859
- setTimeout(function(){
860
- $(elem).trigger(trigger);
861
- }, 0);
862
- }
863
- if(generaltrigger){
864
- setTimeout(function(){
865
- $(elem).trigger(generaltrigger);
866
- }, 0);
867
- }
868
-
869
- $.removeData(elem, 'webshimsswitchvalidityclass');
870
- };
651
+ $(document).on('invalid', function(e){
652
+ if(e.wrongWebkitInvalid){return;}
653
+ var jElm = $(e.target);
871
654
 
872
- if(timer){
873
- clearTimeout(timer);
655
+
656
+ if(!firstEvent){
657
+ //trigger firstinvalid
658
+ firstEvent = $.Event('firstinvalid');
659
+ firstEvent.isInvalidUIPrevented = e.isDefaultPrevented;
660
+ var firstSystemInvalid = $.Event('firstinvalidsystem');
661
+ $(document).triggerHandler(firstSystemInvalid, {element: e.target, form: e.target.form, isInvalidUIPrevented: e.isDefaultPrevented});
662
+ jElm.trigger(firstEvent);
874
663
  }
875
- if(e.type == 'refreshvalidityui'){
876
- switchClass();
877
- } else {
878
- $.data(elem, 'webshimsswitchvalidityclass', setTimeout(switchClass, 9));
664
+
665
+ //if firstinvalid was prevented all invalids will be also prevented
666
+ if( firstEvent && firstEvent.isDefaultPrevented() ){
667
+ e.preventDefault();
879
668
  }
880
- };
881
-
882
- $(document).on(options.validityUIEvents || 'focusout change refreshvalidityui', switchValidityClass);
883
- customEvents.changedvaliditystate = true;
884
- customEvents.refreshCustomValidityRules = true;
885
- customEvents.changedvalid = true;
886
- customEvents.changedinvalid = true;
887
- customEvents.refreshvalidityui = true;
888
-
889
-
890
- webshims.triggerInlineForm = function(elem, event){
891
- $(elem).trigger(event);
892
- };
893
-
894
- webshims.modules["form-core"].getGroupElements = getGroupElements;
895
-
896
-
897
- var setRoot = function(){
898
- webshims.scrollRoot = (isWebkit || document.compatMode == 'BackCompat') ?
899
- $(document.body) :
900
- $(document.documentElement)
901
- ;
902
- };
903
- var minWidth = (Modernizr.boxSizing || Modernizr['display-table'] || $.support.getSetAttribute) ?
904
- 'minWidth' :
905
- 'width'
906
- ;
907
- setRoot();
908
- webshims.ready('DOM', setRoot);
909
-
910
- webshims.getRelOffset = function(posElem, relElem){
911
- posElem = $(posElem);
912
- var offset = $(relElem).offset();
913
- var bodyOffset;
914
- $.swap($(posElem)[0], {visibility: 'hidden', display: 'inline-block', left: 0, top: 0}, function(){
915
- bodyOffset = posElem.offset();
916
- });
917
- offset.top -= bodyOffset.top;
918
- offset.left -= bodyOffset.left;
919
- return offset;
920
- };
921
-
922
- webshims.wsPopover = {
923
- _create: function(){
924
- this.options = $.extend({}, webshims.cfg.wspopover, this.options);
925
- this.id = webshims.wsPopover.id++;
926
- this.eventns = '.wsoverlay'+this.id;
927
- this.timers = {};
928
- this.element = $('<div class="ws-popover" tabindex="-1"><div class="ws-po-outerbox"><div class="ws-po-arrow"><div class="ws-po-arrowbox" /></div><div class="ws-po-box" /></div></div>');
929
- this.contentElement = $('.ws-po-box', this.element);
930
- this.lastElement = $([]);
931
- this.bindElement();
932
-
933
- this.element.data('wspopover', this);
934
-
935
- },
936
- options: {},
937
- content: function(html){
938
- this.contentElement.html(html);
939
- },
940
- bindElement: function(){
941
- var that = this;
942
- var stopBlur = function(){
943
- that.stopBlur = false;
944
- };
945
- this.preventBlur = function(e){
946
- that.stopBlur = true;
947
- clearTimeout(that.timers.stopBlur);
948
- that.timers.stopBlur = setTimeout(stopBlur, 9);
949
- };
950
- this.element.on({
951
- 'mousedown': this.preventBlur
952
- });
953
- },
954
-
955
- isInElement: function(container, contained){
956
- return container == contained || $.contains(container, contained);
957
- },
958
- show: function(element){
959
- var e = $.Event('wspopoverbeforeshow');
960
- this.element.trigger(e);
961
- if(e.isDefaultPrevented() || this.isVisible){return;}
962
- this.isVisible = true;
963
- element = $(element || this.options.prepareFor).getNativeElement() ;
964
-
965
- var that = this;
966
- var visual = $(element).getShadowElement();
669
+ invalids.push(e.target);
670
+ e.extraData = 'fix';
671
+ clearTimeout(stopSubmitTimer);
672
+ stopSubmitTimer = setTimeout(function(){
673
+ var lastEvent = {type: 'lastinvalid', cancelable: false, invalidlist: $(invalids)};
674
+ //reset firstinvalid
675
+ firstEvent = false;
676
+ invalids = [];
677
+ $(e.target).trigger(lastEvent, lastEvent);
678
+ }, 9);
679
+ jElm = null;
680
+ });
681
+ })();
967
682
 
968
- this.clear();
969
- this.element.removeClass('ws-po-visible').css('display', 'none');
970
-
971
- this.prepareFor(element, visual);
972
-
973
- this.position(visual);
974
- that.timers.show = setTimeout(function(){
975
- that.element.css('display', '');
976
- that.timers.show = setTimeout(function(){
977
- that.element.addClass('ws-po-visible').trigger('wspopovershow');
978
- }, 9);
979
- }, 9);
980
- $(document).on('focusin'+this.eventns+' mousedown'+this.eventns, function(e){
981
- if(that.options.hideOnBlur && !that.stopBlur && !that.isInElement(that.lastElement[0] || document.body, e.target) && !that.isInElement(element[0] || document.body, e.target) && !that.isInElement(that.element[0], e.target)){
982
- that.hide();
983
- }
984
- });
985
- $(window).on('resize'+this.eventns + ' pospopover'+this.eventns, function(){
986
- clearTimeout(that.timers.repos);
987
- that.timers.repos = setTimeout(function(){
988
- that.position(visual);
989
- }, 900);
990
- });
991
- },
992
- prepareFor: function(element, visual){
993
- var onBlur;
994
- var opts = $.extend({}, this.options, $(element.prop('form') || []).data('wspopover') || {}, element.data('wspopover'));
995
- var that = this;
996
- var css = {};
997
- this.lastElement = $(element).getShadowFocusElement();
998
- if(opts.appendTo == 'element'){
999
- this.element.insertAfter(element);
1000
- } else {
1001
- this.element.appendTo(opts.appendTo);
1002
- }
1003
-
1004
- this.element.attr({
1005
- 'data-class': element.prop('className'),
1006
- 'data-id': element.prop('id')
1007
- });
1008
-
1009
- css[minWidth] = opts.constrainWidth ? visual.outerWidth() : '';
1010
-
1011
- this.element.css(css);
1012
-
1013
- if(opts.hideOnBlur){
1014
- onBlur = function(e){
1015
- if(that.stopBlur){
1016
- e.stopImmediatePropagation();
1017
- } else {
1018
- that.hide();
1019
- }
1020
- };
1021
-
1022
- that.timers.bindBlur = setTimeout(function(){
1023
- that.lastElement.off(that.eventns).on('focusout'+that.eventns + ' blur'+that.eventns, onBlur);
1024
- that.lastElement.getNativeElement().off(that.eventns);
1025
- }, 10);
1026
-
1027
-
1028
- }
1029
-
1030
- if(!this.prepared){
1031
-
1032
- if($.fn.bgIframe){
1033
- this.element.bgIframe();
683
+
684
+ webshims.getContentValidationMessage = function(elem, validity, key){
685
+ var message = $(elem).data('errormessage') || elem.getAttribute('x-moz-errormessage') || '';
686
+ if(key && message[key]){
687
+ message = message[key];
688
+ }
689
+ if(typeof message == 'object'){
690
+ validity = validity || $.prop(elem, 'validity') || {valid: 1};
691
+ if(!validity.valid){
692
+ $.each(validity, function(name, prop){
693
+ if(prop && name != 'valid' && message[name]){
694
+ message = message[name];
695
+ return false;
1034
696
  }
1035
- }
1036
- this.prepared = true;
1037
- },
1038
- clear: function(){
1039
- $(window).off(this.eventns);
1040
- $(document).off(this.eventns);
1041
-
1042
- this.stopBlur = false;
1043
- $.each(this.timers, function(timerName, val){
1044
- clearTimeout(val);
1045
697
  });
1046
- },
1047
- hide: function(){
1048
- var e = $.Event('wspopoverbeforehide');
1049
- this.element.trigger(e);
1050
- if(e.isDefaultPrevented() || !this.isVisible){return;}
1051
- this.isVisible = false;
1052
- var that = this;
1053
- var forceHide = function(){
1054
- that.element.css('display', 'none').attr({'data-id': '', 'data-class': '', 'hidden': 'hidden'});
1055
- clearTimeout(that.timers.forcehide);
1056
- };
1057
- this.clear();
1058
- this.element.removeClass('ws-po-visible').trigger('wspopoverhide');
1059
- $(window).on('resize'+this.eventns, forceHide);
1060
- that.timers.forcehide = setTimeout(forceHide, 999);
1061
- },
1062
- position: function(element){
1063
- var offset = webshims.getRelOffset(this.element.css({marginTop: 0, marginLeft: 0, marginRight: 0, marginBottom: 0}).removeAttr('hidden'), element);
1064
- offset.top += element.outerHeight();
1065
- this.element.css({marginTop: '', marginLeft: '', marginRight: '', marginBottom: ''}).css(offset);
1066
698
  }
1067
- };
1068
-
1069
- webshims.wsPopover.id = 0;
1070
-
1071
- /* some extra validation UI */
1072
- webshims.validityAlert = (function(){
1073
-
1074
-
1075
- var focusTimer = false;
1076
-
1077
- var api = webshims.objectCreate(webshims.wsPopover, {}, options.messagePopover);
1078
- var boundHide = api.hide.bind(api);
1079
-
1080
- api.element.addClass('validity-alert').attr({role: 'alert'});
1081
- $.extend(api, {
1082
- hideDelay: 5000,
1083
- showFor: function(elem, message, noFocusElem, noBubble){
1084
-
1085
- elem = $(elem).getNativeElement();
1086
- this.clear();
1087
- this.hide();
1088
- if(!noBubble){
1089
- this.getMessage(elem, message);
1090
-
1091
- this.show(elem);
1092
- if(this.hideDelay){
1093
- this.timers.delayedHide = setTimeout(boundHide, this.hideDelay);
1094
- }
1095
-
1096
- }
1097
-
1098
- if(!noFocusElem){
1099
- this.setFocus(elem);
1100
- }
1101
- },
1102
- setFocus: function(element){
1103
- var focusElem = $(element).getShadowFocusElement();
1104
- var scrollTop = webshims.scrollRoot.scrollTop();
1105
- var elemTop = focusElem.offset().top - 30;
1106
- var smooth;
1107
-
1108
- if(scrollTop > elemTop){
1109
- webshims.scrollRoot.animate(
1110
- {scrollTop: elemTop - 5},
1111
- {
1112
- queue: false,
1113
- duration: Math.max( Math.min( 600, (scrollTop - elemTop) * 1.5 ), 80 )
1114
- }
1115
- );
1116
- smooth = true;
1117
- }
1118
- try {
1119
- focusElem[0].focus();
1120
- } catch(e){}
1121
- if(smooth){
1122
- webshims.scrollRoot.scrollTop(scrollTop);
1123
- setTimeout(function(){
1124
- webshims.scrollRoot.scrollTop(scrollTop);
1125
- }, 0);
1126
- }
1127
-
1128
- $(window).triggerHandler('pospopover'+this.eventns);
1129
- },
1130
- getMessage: function(elem, message){
1131
- if (!message) {
1132
- message = getContentValidationMessage(elem[0]) || elem.prop('customValidationMessage') || elem.prop('validationMessage');
1133
- }
1134
- if (message) {
1135
- api.contentElement.text(message);
1136
- } else {
1137
- this.hide();
1138
- }
1139
- }
1140
- });
1141
-
1142
-
1143
- return api;
1144
- })();
1145
-
699
+ }
1146
700
 
1147
- /* extension, but also used to fix native implementation workaround/bugfixes */
1148
- (function(){
1149
- var firstEvent,
1150
- invalids = [],
1151
- stopSubmitTimer,
1152
- form
1153
- ;
1154
-
1155
- $(document).on('invalid', function(e){
1156
- if(e.wrongWebkitInvalid){return;}
1157
- var jElm = $(e.target);
1158
- var shadowElem = jElm.getShadowElement();
1159
- if(!shadowElem.hasClass(invalidClass)){
1160
- shadowElem.addClass(invalidClass).removeClass(validClass);
1161
- setTimeout(function(){
1162
- $(e.target).trigger('changedinvalid').trigger('changedvaliditystate');
1163
- }, 0);
1164
- }
1165
-
1166
- if(!firstEvent){
1167
- //trigger firstinvalid
1168
- firstEvent = $.Event('firstinvalid');
1169
- firstEvent.isInvalidUIPrevented = e.isDefaultPrevented;
1170
- var firstSystemInvalid = $.Event('firstinvalidsystem');
1171
- $(document).triggerHandler(firstSystemInvalid, {element: e.target, form: e.target.form, isInvalidUIPrevented: e.isDefaultPrevented});
1172
- jElm.trigger(firstEvent);
1173
- }
701
+ if(typeof message == 'object'){
702
+ message = message.defaultMessage;
703
+ }
704
+ return message || '';
705
+ };
706
+
707
+ $.fn.getErrorMessage = function(key){
708
+ var message = '';
709
+ var elem = this[0];
710
+ if(elem){
711
+ message = webshims.getContentValidationMessage(elem, false, key) || $.prop(elem, 'customValidationMessage') || $.prop(elem, 'validationMessage');
712
+ }
713
+ return message;
714
+ };
715
+
1174
716
 
1175
- //if firstinvalid was prevented all invalids will be also prevented
1176
- if( firstEvent && firstEvent.isDefaultPrevented() ){
717
+ webshims.ready('forms', function(){
718
+ $(document).on('focusin.lazyloadvalidation', function(e){
719
+ if('form' in e.target && $(e.target).is(':invalid')){
720
+ lazyLoad();
721
+ }
722
+ });
723
+ });
724
+ webshims.ready('WINDOWLOAD', lazyLoad);
725
+ if(options.overrideMessages){
726
+ options.customMessages = true;
727
+ webshims.reTest('form-message');
728
+ webshims.error('overrideMessages is deprecated. use customMessages instead.');
729
+ }
730
+ if(options.replaceValidationUI){
731
+ webshims.ready('DOM forms', function(){
732
+ $(document).on('firstinvalid', function(e){
733
+ if(!e.isInvalidUIPrevented()){
1177
734
  e.preventDefault();
735
+ webshims.validityAlert.showFor( e.target );
1178
736
  }
1179
- invalids.push(e.target);
1180
- e.extraData = 'fix';
1181
- clearTimeout(stopSubmitTimer);
1182
- stopSubmitTimer = setTimeout(function(){
1183
- var lastEvent = {type: 'lastinvalid', cancelable: false, invalidlist: $(invalids)};
1184
- //reset firstinvalid
1185
- firstEvent = false;
1186
- invalids = [];
1187
- $(e.target).trigger(lastEvent, lastEvent);
1188
- }, 9);
1189
- jElm = null;
1190
- shadowElem = null;
1191
737
  });
1192
- })();
1193
-
1194
- $.fn.getErrorMessage = function(){
1195
- var message = '';
1196
- var elem = this[0];
1197
- if(elem){
1198
- message = getContentValidationMessage(elem) || $.prop(elem, 'customValidationMessage') || $.prop(elem, 'validationMessage');
1199
- }
1200
- return message;
1201
- };
1202
-
1203
- if(options.replaceValidationUI){
1204
- if(options.overrideMessages && (options.customMessages || options.customMessages == null)){
1205
- options.customMessages = true;
1206
- options.overrideMessages = false;
1207
- webshims.info("set overrideMessages to false. Use customMessages instead");
1208
- }
1209
- webshims.ready('DOM forms', function(){
1210
- $(document).on('firstinvalid', function(e){
1211
- if(!e.isInvalidUIPrevented()){
1212
- e.preventDefault();
1213
- $.webshims.validityAlert.showFor( e.target );
1214
- }
1215
- });
1216
- });
1217
- }
1218
- });
738
+ });
739
+ }
740
+ });
741
+
1219
742
 
1220
- })(jQuery);
1221
743
  (function($, Modernizr, webshims){
1222
744
  "use strict";
1223
745
  var hasNative = Modernizr.audio && Modernizr.video;
1224
746
  var supportsLoop = false;
1225
747
  var bugs = webshims.bugs;
1226
-
748
+ var swfType = 'mediaelement-jaris';
1227
749
  var loadSwf = function(){
1228
750
  webshims.ready(swfType, function(){
1229
751
  if(!webshims.mediaelement.createSWF){
@@ -1233,7 +755,7 @@ var swfmini = function() {
1233
755
  });
1234
756
  };
1235
757
  var options = webshims.cfg.mediaelement;
1236
- var swfType = 'mediaelement-jaris';
758
+ var hasFullTrackSupport;
1237
759
  var hasSwf;
1238
760
  if(!options){
1239
761
  webshims.error("mediaelement wasn't implemented but loaded");
@@ -1246,14 +768,11 @@ var swfmini = function() {
1246
768
 
1247
769
  webshims.capturingEvents(['play', 'playing', 'waiting', 'paused', 'ended', 'durationchange', 'loadedmetadata', 'canplay', 'volumechange']);
1248
770
 
1249
- if(!Modernizr.videoBuffered){
771
+ if(!Modernizr.videoBuffered ){
1250
772
  webshims.addPolyfill('mediaelement-native-fix', {
1251
- f: 'mediaelement',
1252
- test: Modernizr.videoBuffered,
1253
773
  d: ['dom-support']
1254
774
  });
1255
-
1256
- webshims.reTest('mediaelement-native-fix');
775
+ webshims.loader.loadList(['mediaelement-native-fix']);
1257
776
  }
1258
777
  }
1259
778
 
@@ -1264,9 +783,9 @@ var swfmini = function() {
1264
783
  };
1265
784
  var switchOptions = function(e){
1266
785
  var media;
1267
- var parent = e.target.parentNode;
786
+ var parent;
1268
787
  if(!options.preferFlash &&
1269
- ($(e.target).is('audio, video') || (parent && $('source:last', parent)[0] == e.target)) &&
788
+ ($(e.target).is('audio, video') || ((parent = e.target.parentNode) && $('source:last', parent)[0] == e.target)) &&
1270
789
  (media = $(e.target).closest('audio, video')) && !noSwitch[media.prop('error')]
1271
790
  ){
1272
791
  $(function(){
@@ -1280,7 +799,7 @@ var swfmini = function() {
1280
799
  $('audio, video').each(function(){
1281
800
  webshims.mediaelement.selectSource(this);
1282
801
  });
1283
- webshims.info("switching mediaelements option to 'preferFlash', due to an error with native player: "+e.target.src+" Mediaerror: "+ media.prop('error'));
802
+ webshims.error("switching mediaelements option to 'preferFlash', due to an error with native player: "+e.target.src+" Mediaerror: "+ media.prop('error'));
1284
803
  }
1285
804
  }, 9);
1286
805
  });
@@ -1315,43 +834,9 @@ var swfmini = function() {
1315
834
  bugs.track = true;
1316
835
  }
1317
836
  }
1318
-
1319
- var trackOptions = webshims.cfg.track;
1320
- var trackListener = function(e){
1321
- $(e.target).filter('track').each(changeApi);
1322
- };
1323
- var changeApi = function(){
1324
- if(bugs.track || (!trackOptions.override && $.prop(this, 'readyState') == 3)){
1325
- trackOptions.override = true;
1326
- webshims.reTest('track');
1327
- document.removeEventListener('error', trackListener, true);
1328
- if(this && $.nodeName(this, 'track')){
1329
- webshims.error("track support was overwritten. Please check your vtt including your vtt mime-type");
1330
- } else {
1331
- webshims.info("track support was overwritten. due to bad browser support");
1332
- }
1333
- return false;
1334
- }
1335
- };
1336
- var detectTrackError = function(){
1337
- document.addEventListener('error', trackListener, true);
1338
-
1339
- if(bugs.track){
1340
- changeApi();
1341
- } else {
1342
- $('track').each(changeApi);
1343
- }
1344
- };
1345
- if(!trackOptions.override){
1346
- if(webshims.isReady('track')){
1347
- detectTrackError();
1348
- } else {
1349
- $(detectTrackError);
1350
- }
1351
- }
1352
837
  })();
1353
-
1354
838
  }
839
+ hasFullTrackSupport = Modernizr.track && !bugs.track;
1355
840
 
1356
841
  webshims.register('mediaelement-core', function($, webshims, window, document, undefined){
1357
842
  hasSwf = swfmini.hasFlashPlayerVersion('9.0.115');
@@ -1436,7 +921,8 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1436
921
  var loadTrackUi = function(){
1437
922
  if(loadTrackUi.loaded){return;}
1438
923
  loadTrackUi.loaded = true;
1439
- $(function(){
924
+ webshims.ready('WINDOWLOAD', function(){
925
+ loadThird();
1440
926
  webshims.loader.loadList(['track-ui']);
1441
927
  });
1442
928
  };
@@ -1609,27 +1095,40 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1609
1095
  }
1610
1096
  return ret;
1611
1097
  };
1612
-
1098
+ var emptyType = (/^\s*application\/octet\-stream\s*$/i);
1099
+ var getRemoveEmptyType = function(){
1100
+ var ret = emptyType.test($.attr(this, 'type') || '');
1101
+ if(ret){
1102
+ $(this).removeAttr('type');
1103
+ }
1104
+ return ret;
1105
+ };
1613
1106
  mediaelement.setError = function(elem, message){
1614
- if(!message){
1615
- message = "can't play sources";
1107
+ if($('source', elem).filter(getRemoveEmptyType).length){
1108
+ webshims.error('"application/octet-stream" is a useless mimetype for audio/video. Please change this attribute.');
1109
+ try {
1110
+ $(elem).mediaLoad();
1111
+ } catch(er){}
1112
+ } else {
1113
+ if(!message){
1114
+ message = "can't play sources";
1115
+ }
1116
+ $(elem).pause().data('mediaerror', message);
1117
+ webshims.error('mediaelementError: '+ message);
1118
+ setTimeout(function(){
1119
+ if($(elem).data('mediaerror')){
1120
+ $(elem).trigger('mediaerror');
1121
+ }
1122
+ }, 1);
1616
1123
  }
1617
1124
 
1618
- $(elem).pause().data('mediaerror', message);
1619
- webshims.error('mediaelementError: '+ message);
1620
- setTimeout(function(){
1621
- if($(elem).data('mediaerror')){
1622
- $(elem).trigger('mediaerror');
1623
- }
1624
- }, 1);
1125
+
1625
1126
  };
1626
1127
 
1627
1128
  var handleThird = (function(){
1628
1129
  var requested;
1629
1130
  return function( mediaElem, ret, data ){
1630
- if(!requested){
1631
- loadTrackUi();
1632
- }
1131
+
1633
1132
  webshims.ready(hasSwf ? swfType : 'mediaelement-yt', function(){
1634
1133
  if(mediaelement.createSWF){
1635
1134
  mediaelement.createSWF( mediaElem, ret, data );
@@ -1774,6 +1273,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1774
1273
  var buffered = getBufferedString();
1775
1274
  if(buffered != lastBuffered){
1776
1275
  lastBuffered = buffered;
1276
+ webshims.info('needed to trigger progress manually');
1777
1277
  $(elem).triggerHandler('progress');
1778
1278
  }
1779
1279
  };
@@ -1825,11 +1325,14 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1825
1325
  $('video, audio', context)
1826
1326
  .add(insertedElement.filter('video, audio'))
1827
1327
  .each(function(){
1828
- if(!mediaelement.canNativePlaySrces(this) || (!loadTrackUi.loaded && $('track', this).length)){
1328
+ if(!mediaelement.canNativePlaySrces(this)){
1829
1329
  loadThird();
1830
1330
  handleMedia = true;
1831
1331
  return false;
1832
1332
  }
1333
+ if((!hasFullTrackSupport || webshims.modules.track.options.override) && !loadTrackUi.loaded && $('track', this).length){
1334
+ loadTrackUi();
1335
+ }
1833
1336
  })
1834
1337
  ;
1835
1338
  }
@@ -1837,7 +1340,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1837
1340
  }
1838
1341
  };
1839
1342
 
1840
- if(Modernizr.track && !bugs.track){
1343
+ if(hasFullTrackSupport){
1841
1344
  webshims.defineProperty(TextTrack.prototype, 'shimActiveCues', {
1842
1345
  get: function(){
1843
1346
  return this._shimActiveCues || this.activeCues;
@@ -1852,6 +1355,6 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1852
1355
  } else {
1853
1356
  webshims.ready(swfType, initMediaElements);
1854
1357
  }
1855
- webshims.ready('WINDOWLOAD mediaelement', loadTrackUi);
1358
+ webshims.ready('track', loadTrackUi);
1856
1359
  });
1857
- })(jQuery, Modernizr, jQuery.webshims);
1360
+ })(jQuery, Modernizr, webshims);