webshims-rails 0.4.2 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/webshims-rails/version.rb +2 -2
- data/vendor/assets/javascripts/webshims/minified/polyfiller.js +30 -29
- data/vendor/assets/javascripts/webshims/minified/shims/combos/1.js +12 -12
- data/vendor/assets/javascripts/webshims/minified/shims/combos/10.js +76 -76
- data/vendor/assets/javascripts/webshims/minified/shims/combos/11.js +12 -12
- data/vendor/assets/javascripts/webshims/minified/shims/combos/12.js +12 -12
- data/vendor/assets/javascripts/webshims/minified/shims/combos/13.js +27 -27
- data/vendor/assets/javascripts/webshims/minified/shims/combos/16.js +12 -12
- data/vendor/assets/javascripts/webshims/minified/shims/combos/17.js +14 -14
- data/vendor/assets/javascripts/webshims/minified/shims/combos/18.js +63 -60
- data/vendor/assets/javascripts/webshims/minified/shims/combos/19.js +59 -59
- data/vendor/assets/javascripts/webshims/minified/shims/combos/20.js +1 -1
- data/vendor/assets/javascripts/webshims/minified/shims/combos/22.js +1 -1
- data/vendor/assets/javascripts/webshims/minified/shims/combos/24.js +67 -67
- data/vendor/assets/javascripts/webshims/minified/shims/combos/25.js +59 -58
- data/vendor/assets/javascripts/webshims/minified/shims/combos/26.js +81 -80
- data/vendor/assets/javascripts/webshims/minified/shims/combos/27.js +103 -102
- data/vendor/assets/javascripts/webshims/minified/shims/combos/6.js +34 -31
- data/vendor/assets/javascripts/webshims/minified/shims/combos/7.js +41 -38
- data/vendor/assets/javascripts/webshims/minified/shims/combos/8.js +35 -35
- data/vendor/assets/javascripts/webshims/minified/shims/combos/9.js +67 -67
- data/vendor/assets/javascripts/webshims/minified/shims/dom-extend.js +17 -17
- data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-api.js +10 -8
- data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-ui.js +24 -23
- data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-swf.js +1 -1
- data/vendor/assets/javascripts/webshims/minified/shims/styles/shim.css +9 -0
- data/vendor/assets/javascripts/webshims/minified/shims/track-ui.js +9 -9
- data/vendor/assets/javascripts/webshims/minified/shims/track.js +21 -20
- data/vendor/assets/javascripts/webshims/polyfiller.js +144 -140
- data/vendor/assets/javascripts/webshims/shims/combos/1.js +10 -6
- data/vendor/assets/javascripts/webshims/shims/combos/10.js +11 -7
- data/vendor/assets/javascripts/webshims/shims/combos/11.js +10 -6
- data/vendor/assets/javascripts/webshims/shims/combos/12.js +10 -6
- data/vendor/assets/javascripts/webshims/shims/combos/13.js +10 -6
- data/vendor/assets/javascripts/webshims/shims/combos/16.js +10 -6
- data/vendor/assets/javascripts/webshims/shims/combos/17.js +10 -6
- data/vendor/assets/javascripts/webshims/shims/combos/18.js +986 -924
- data/vendor/assets/javascripts/webshims/shims/combos/19.js +10 -6
- data/vendor/assets/javascripts/webshims/shims/combos/20.js +1 -1
- data/vendor/assets/javascripts/webshims/shims/combos/22.js +1 -1
- data/vendor/assets/javascripts/webshims/shims/combos/24.js +10 -6
- data/vendor/assets/javascripts/webshims/shims/combos/25.js +820 -768
- data/vendor/assets/javascripts/webshims/shims/combos/26.js +820 -768
- data/vendor/assets/javascripts/webshims/shims/combos/27.js +821 -769
- data/vendor/assets/javascripts/webshims/shims/combos/6.js +986 -924
- data/vendor/assets/javascripts/webshims/shims/combos/7.js +986 -924
- data/vendor/assets/javascripts/webshims/shims/combos/8.js +10 -6
- data/vendor/assets/javascripts/webshims/shims/combos/9.js +11 -7
- data/vendor/assets/javascripts/webshims/shims/dom-extend.js +10 -6
- data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +77 -77
- data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +909 -847
- data/vendor/assets/javascripts/webshims/shims/mediaelement-swf.js +1 -1
- data/vendor/assets/javascripts/webshims/shims/styles/shim.css +9 -0
- data/vendor/assets/javascripts/webshims/shims/track-ui.js +300 -291
- data/vendor/assets/javascripts/webshims/shims/track.js +810 -762
- metadata +10 -5
@@ -388,7 +388,7 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
|
|
388
388
|
var docObserve = {
|
389
389
|
init: false,
|
390
390
|
start: function(){
|
391
|
-
if(!this.init){
|
391
|
+
if(!this.init && document.body){
|
392
392
|
this.init = true;
|
393
393
|
this.height = $(document).height();
|
394
394
|
this.width = $(document).width();
|
@@ -400,7 +400,7 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
|
|
400
400
|
docObserve.width = width;
|
401
401
|
handler({type: 'docresize'});
|
402
402
|
}
|
403
|
-
},
|
403
|
+
}, 600);
|
404
404
|
}
|
405
405
|
}
|
406
406
|
};
|
@@ -416,8 +416,10 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
|
|
416
416
|
}
|
417
417
|
lastHeight = height;
|
418
418
|
lastWidth = width;
|
419
|
-
|
420
|
-
|
419
|
+
if(document.body){
|
420
|
+
docObserve.height = $(document).height();
|
421
|
+
docObserve.width = $(document).width();
|
422
|
+
}
|
421
423
|
}
|
422
424
|
$.event.trigger('updateshadowdom');
|
423
425
|
}, 40);
|
@@ -463,7 +465,9 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
|
|
463
465
|
shadowFocusElementData.shadowData.data = shadowData.shadowData.data = nativeData.shadowData.data = opts.data;
|
464
466
|
}
|
465
467
|
opts = null;
|
466
|
-
|
468
|
+
webshims.ready('DOM', function(){
|
469
|
+
docObserve.start();
|
470
|
+
});
|
467
471
|
}
|
468
472
|
})(),
|
469
473
|
propTypes: {
|
@@ -607,7 +611,7 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
|
|
607
611
|
}
|
608
612
|
if(propType){
|
609
613
|
if(descs[prop][propType]){
|
610
|
-
webshims.log('override: '+ name +'['+prop +'] for '+ propType);
|
614
|
+
//webshims.log('override: '+ name +'['+prop +'] for '+ propType);
|
611
615
|
} else {
|
612
616
|
descs[prop][propType] = {};
|
613
617
|
['value', 'set', 'get'].forEach(function(copyProp){
|
@@ -1439,766 +1443,814 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
|
|
1439
1443
|
});
|
1440
1444
|
|
1441
1445
|
});
|
1442
|
-
})(jQuery, Modernizr, jQuery.webshims);jQuery.webshims.register('track', function($, webshims, window, document, undefined){
|
1443
|
-
var mediaelement = webshims.mediaelement;
|
1444
|
-
var id = new Date().getTime();
|
1445
|
-
|
1446
|
-
var
|
1447
|
-
|
1448
|
-
|
1449
|
-
|
1450
|
-
var
|
1451
|
-
|
1452
|
-
|
1453
|
-
|
1454
|
-
|
1455
|
-
|
1456
|
-
|
1457
|
-
|
1458
|
-
|
1459
|
-
|
1460
|
-
|
1461
|
-
|
1462
|
-
|
1463
|
-
|
1464
|
-
|
1465
|
-
|
1466
|
-
|
1467
|
-
|
1468
|
-
|
1469
|
-
|
1470
|
-
|
1471
|
-
|
1472
|
-
|
1473
|
-
|
1474
|
-
|
1475
|
-
|
1476
|
-
|
1477
|
-
|
1478
|
-
|
1479
|
-
|
1480
|
-
|
1481
|
-
|
1482
|
-
|
1483
|
-
|
1484
|
-
|
1485
|
-
|
1486
|
-
|
1487
|
-
|
1488
|
-
|
1489
|
-
|
1490
|
-
|
1491
|
-
|
1492
|
-
|
1493
|
-
|
1494
|
-
|
1495
|
-
|
1496
|
-
|
1497
|
-
|
1498
|
-
|
1499
|
-
|
1500
|
-
|
1501
|
-
|
1502
|
-
|
1503
|
-
|
1504
|
-
|
1505
|
-
|
1506
|
-
|
1507
|
-
|
1508
|
-
|
1509
|
-
|
1510
|
-
|
1511
|
-
|
1512
|
-
|
1513
|
-
|
1514
|
-
|
1515
|
-
|
1516
|
-
|
1517
|
-
|
1518
|
-
|
1519
|
-
|
1520
|
-
|
1521
|
-
|
1522
|
-
|
1523
|
-
|
1524
|
-
|
1525
|
-
|
1526
|
-
|
1527
|
-
|
1528
|
-
|
1529
|
-
|
1530
|
-
|
1531
|
-
|
1532
|
-
|
1533
|
-
|
1534
|
-
}
|
1535
|
-
|
1536
|
-
|
1537
|
-
|
1538
|
-
|
1539
|
-
|
1540
|
-
|
1541
|
-
|
1542
|
-
|
1543
|
-
|
1544
|
-
|
1545
|
-
|
1546
|
-
|
1547
|
-
|
1548
|
-
|
1549
|
-
|
1550
|
-
|
1551
|
-
|
1552
|
-
|
1553
|
-
|
1554
|
-
|
1555
|
-
|
1556
|
-
|
1557
|
-
|
1558
|
-
|
1559
|
-
|
1560
|
-
|
1561
|
-
|
1562
|
-
|
1563
|
-
|
1564
|
-
|
1565
|
-
|
1566
|
-
|
1567
|
-
|
1568
|
-
|
1569
|
-
|
1570
|
-
|
1571
|
-
|
1572
|
-
|
1573
|
-
|
1574
|
-
|
1575
|
-
|
1576
|
-
|
1577
|
-
|
1578
|
-
|
1579
|
-
|
1580
|
-
|
1581
|
-
|
1582
|
-
|
1583
|
-
|
1584
|
-
|
1585
|
-
|
1586
|
-
|
1587
|
-
|
1588
|
-
|
1589
|
-
|
1590
|
-
|
1591
|
-
|
1592
|
-
|
1593
|
-
|
1594
|
-
|
1595
|
-
|
1596
|
-
|
1597
|
-
|
1598
|
-
|
1599
|
-
|
1600
|
-
|
1601
|
-
|
1602
|
-
|
1603
|
-
|
1604
|
-
|
1605
|
-
|
1606
|
-
|
1607
|
-
|
1608
|
-
|
1609
|
-
|
1610
|
-
|
1611
|
-
|
1612
|
-
|
1613
|
-
|
1614
|
-
|
1615
|
-
|
1616
|
-
|
1617
|
-
|
1618
|
-
|
1619
|
-
|
1620
|
-
|
1621
|
-
|
1622
|
-
};
|
1623
|
-
|
1624
|
-
|
1625
|
-
|
1626
|
-
|
1627
|
-
|
1628
|
-
|
1629
|
-
|
1630
|
-
|
1631
|
-
|
1632
|
-
|
1633
|
-
|
1634
|
-
|
1635
|
-
|
1636
|
-
|
1637
|
-
|
1638
|
-
|
1639
|
-
|
1640
|
-
|
1641
|
-
|
1642
|
-
|
1643
|
-
|
1644
|
-
|
1645
|
-
|
1646
|
-
|
1647
|
-
|
1648
|
-
|
1649
|
-
|
1650
|
-
|
1651
|
-
|
1652
|
-
|
1653
|
-
|
1654
|
-
|
1655
|
-
|
1656
|
-
|
1657
|
-
|
1658
|
-
|
1659
|
-
|
1660
|
-
|
1661
|
-
|
1662
|
-
|
1663
|
-
|
1664
|
-
|
1665
|
-
|
1666
|
-
|
1667
|
-
|
1668
|
-
|
1669
|
-
|
1670
|
-
|
1671
|
-
|
1672
|
-
|
1673
|
-
|
1674
|
-
|
1675
|
-
|
1676
|
-
|
1677
|
-
|
1678
|
-
|
1679
|
-
|
1680
|
-
|
1681
|
-
|
1682
|
-
|
1683
|
-
|
1684
|
-
|
1685
|
-
|
1686
|
-
|
1687
|
-
|
1688
|
-
|
1689
|
-
|
1690
|
-
|
1691
|
-
|
1692
|
-
|
1693
|
-
|
1694
|
-
|
1695
|
-
|
1696
|
-
|
1697
|
-
|
1698
|
-
|
1699
|
-
|
1700
|
-
|
1701
|
-
}
|
1702
|
-
return
|
1703
|
-
};
|
1704
|
-
|
1705
|
-
|
1706
|
-
|
1707
|
-
|
1708
|
-
|
1709
|
-
|
1710
|
-
|
1711
|
-
|
1712
|
-
|
1713
|
-
|
1714
|
-
|
1715
|
-
|
1716
|
-
|
1717
|
-
|
1718
|
-
|
1719
|
-
|
1720
|
-
|
1721
|
-
|
1722
|
-
|
1723
|
-
|
1724
|
-
|
1725
|
-
|
1726
|
-
|
1727
|
-
|
1728
|
-
|
1729
|
-
|
1730
|
-
|
1731
|
-
|
1732
|
-
|
1733
|
-
|
1734
|
-
|
1735
|
-
|
1736
|
-
|
1737
|
-
|
1738
|
-
|
1739
|
-
|
1740
|
-
|
1741
|
-
|
1742
|
-
|
1743
|
-
|
1744
|
-
|
1745
|
-
|
1746
|
-
|
1747
|
-
|
1748
|
-
|
1749
|
-
|
1750
|
-
|
1751
|
-
|
1752
|
-
|
1753
|
-
|
1754
|
-
|
1755
|
-
|
1756
|
-
|
1757
|
-
|
1758
|
-
|
1759
|
-
|
1760
|
-
|
1761
|
-
|
1762
|
-
|
1763
|
-
|
1764
|
-
|
1765
|
-
|
1766
|
-
|
1767
|
-
|
1768
|
-
|
1769
|
-
|
1770
|
-
|
1771
|
-
|
1772
|
-
|
1773
|
-
|
1774
|
-
|
1775
|
-
|
1776
|
-
|
1777
|
-
|
1778
|
-
|
1779
|
-
|
1780
|
-
|
1781
|
-
|
1782
|
-
|
1783
|
-
|
1784
|
-
|
1785
|
-
|
1786
|
-
|
1787
|
-
|
1788
|
-
|
1789
|
-
|
1790
|
-
|
1791
|
-
|
1792
|
-
|
1793
|
-
|
1794
|
-
|
1795
|
-
|
1796
|
-
|
1797
|
-
|
1798
|
-
|
1799
|
-
|
1800
|
-
|
1801
|
-
|
1802
|
-
|
1803
|
-
|
1804
|
-
|
1805
|
-
|
1806
|
-
|
1807
|
-
|
1808
|
-
|
1809
|
-
|
1810
|
-
|
1811
|
-
|
1812
|
-
|
1813
|
-
|
1814
|
-
|
1815
|
-
|
1816
|
-
|
1817
|
-
|
1818
|
-
|
1819
|
-
|
1820
|
-
|
1821
|
-
|
1822
|
-
|
1823
|
-
|
1824
|
-
|
1825
|
-
|
1826
|
-
|
1827
|
-
|
1828
|
-
|
1829
|
-
|
1830
|
-
|
1831
|
-
|
1832
|
-
|
1833
|
-
|
1834
|
-
|
1835
|
-
|
1836
|
-
|
1837
|
-
|
1838
|
-
|
1839
|
-
|
1840
|
-
}
|
1841
|
-
|
1842
|
-
|
1843
|
-
|
1844
|
-
|
1845
|
-
|
1846
|
-
|
1847
|
-
|
1848
|
-
|
1849
|
-
|
1850
|
-
|
1851
|
-
|
1852
|
-
|
1853
|
-
|
1854
|
-
|
1855
|
-
|
1856
|
-
|
1857
|
-
|
1858
|
-
|
1859
|
-
|
1860
|
-
|
1861
|
-
|
1862
|
-
|
1863
|
-
|
1864
|
-
|
1865
|
-
|
1866
|
-
|
1867
|
-
|
1868
|
-
|
1869
|
-
|
1870
|
-
|
1871
|
-
|
1872
|
-
|
1873
|
-
|
1874
|
-
|
1875
|
-
|
1876
|
-
|
1877
|
-
|
1878
|
-
|
1879
|
-
|
1880
|
-
|
1881
|
-
|
1882
|
-
|
1883
|
-
|
1884
|
-
|
1885
|
-
|
1886
|
-
}
|
1887
|
-
|
1888
|
-
if (
|
1889
|
-
//
|
1890
|
-
|
1891
|
-
}
|
1892
|
-
|
1893
|
-
|
1894
|
-
|
1895
|
-
|
1896
|
-
|
1897
|
-
|
1898
|
-
|
1899
|
-
|
1900
|
-
|
1901
|
-
|
1902
|
-
|
1903
|
-
|
1904
|
-
|
1905
|
-
|
1906
|
-
|
1907
|
-
|
1908
|
-
|
1909
|
-
|
1910
|
-
|
1911
|
-
|
1912
|
-
|
1913
|
-
|
1914
|
-
|
1915
|
-
|
1916
|
-
|
1917
|
-
|
1918
|
-
|
1919
|
-
|
1920
|
-
|
1921
|
-
|
1922
|
-
|
1923
|
-
|
1924
|
-
|
1925
|
-
|
1926
|
-
|
1927
|
-
|
1928
|
-
|
1929
|
-
|
1930
|
-
|
1931
|
-
|
1932
|
-
|
1933
|
-
|
1934
|
-
|
1935
|
-
|
1936
|
-
|
1937
|
-
|
1938
|
-
|
1939
|
-
|
1940
|
-
|
1941
|
-
|
1942
|
-
|
1943
|
-
|
1944
|
-
|
1945
|
-
|
1946
|
-
|
1947
|
-
|
1948
|
-
|
1949
|
-
|
1950
|
-
|
1951
|
-
|
1952
|
-
|
1953
|
-
|
1954
|
-
|
1955
|
-
|
1956
|
-
|
1957
|
-
|
1958
|
-
|
1959
|
-
|
1960
|
-
|
1961
|
-
|
1962
|
-
|
1963
|
-
|
1964
|
-
|
1965
|
-
|
1966
|
-
|
1967
|
-
|
1968
|
-
|
1969
|
-
|
1970
|
-
|
1971
|
-
|
1972
|
-
|
1973
|
-
|
1974
|
-
|
1975
|
-
|
1976
|
-
|
1977
|
-
|
1978
|
-
|
1979
|
-
|
1980
|
-
|
1981
|
-
|
1982
|
-
|
1983
|
-
|
1984
|
-
|
1985
|
-
|
1986
|
-
|
1987
|
-
|
1988
|
-
|
1989
|
-
|
1990
|
-
|
1991
|
-
|
1992
|
-
|
1993
|
-
|
1994
|
-
|
1995
|
-
|
1996
|
-
|
1997
|
-
|
1998
|
-
|
1999
|
-
|
2000
|
-
|
2001
|
-
|
2002
|
-
|
2003
|
-
|
2004
|
-
|
2005
|
-
|
2006
|
-
|
2007
|
-
|
2008
|
-
|
2009
|
-
|
2010
|
-
|
2011
|
-
|
2012
|
-
|
2013
|
-
|
2014
|
-
|
2015
|
-
|
2016
|
-
|
2017
|
-
|
2018
|
-
|
2019
|
-
|
2020
|
-
|
2021
|
-
|
2022
|
-
|
2023
|
-
|
2024
|
-
|
2025
|
-
|
2026
|
-
|
2027
|
-
|
2028
|
-
|
2029
|
-
|
2030
|
-
|
2031
|
-
|
2032
|
-
|
2033
|
-
|
2034
|
-
}
|
2035
|
-
}
|
2036
|
-
|
2037
|
-
|
2038
|
-
|
2039
|
-
|
2040
|
-
|
2041
|
-
|
2042
|
-
|
2043
|
-
|
2044
|
-
|
2045
|
-
|
2046
|
-
|
2047
|
-
|
2048
|
-
|
2049
|
-
|
2050
|
-
|
2051
|
-
|
2052
|
-
|
2053
|
-
|
2054
|
-
|
2055
|
-
|
2056
|
-
|
2057
|
-
|
2058
|
-
|
2059
|
-
|
2060
|
-
|
2061
|
-
|
2062
|
-
|
2063
|
-
|
2064
|
-
|
2065
|
-
|
2066
|
-
|
2067
|
-
|
2068
|
-
|
2069
|
-
|
2070
|
-
|
2071
|
-
|
2072
|
-
|
2073
|
-
|
2074
|
-
|
2075
|
-
|
2076
|
-
}
|
2077
|
-
|
2078
|
-
|
2079
|
-
|
2080
|
-
|
2081
|
-
|
2082
|
-
|
2083
|
-
|
2084
|
-
|
2085
|
-
|
2086
|
-
|
2087
|
-
|
2088
|
-
|
2089
|
-
|
2090
|
-
|
2091
|
-
|
2092
|
-
|
2093
|
-
|
2094
|
-
|
2095
|
-
|
2096
|
-
|
2097
|
-
|
2098
|
-
|
2099
|
-
|
2100
|
-
|
2101
|
-
|
2102
|
-
|
2103
|
-
|
2104
|
-
|
2105
|
-
|
2106
|
-
|
2107
|
-
|
2108
|
-
|
2109
|
-
|
2110
|
-
|
2111
|
-
|
2112
|
-
|
2113
|
-
|
2114
|
-
|
2115
|
-
|
2116
|
-
|
2117
|
-
|
2118
|
-
|
2119
|
-
|
2120
|
-
|
2121
|
-
|
2122
|
-
|
2123
|
-
|
2124
|
-
|
2125
|
-
|
2126
|
-
|
2127
|
-
|
2128
|
-
|
2129
|
-
|
2130
|
-
|
2131
|
-
|
2132
|
-
|
2133
|
-
|
2134
|
-
|
2135
|
-
|
2136
|
-
|
2137
|
-
|
2138
|
-
|
2139
|
-
|
2140
|
-
|
2141
|
-
};
|
2142
|
-
|
2143
|
-
webshims.
|
2144
|
-
|
2145
|
-
|
2146
|
-
|
2147
|
-
|
2148
|
-
|
2149
|
-
|
2150
|
-
|
2151
|
-
|
2152
|
-
|
2153
|
-
|
2154
|
-
|
2155
|
-
|
2156
|
-
|
2157
|
-
|
2158
|
-
|
2159
|
-
|
2160
|
-
|
2161
|
-
|
2162
|
-
|
2163
|
-
|
2164
|
-
|
2165
|
-
|
2166
|
-
|
2167
|
-
|
2168
|
-
|
2169
|
-
|
2170
|
-
|
2171
|
-
|
2172
|
-
|
2173
|
-
|
2174
|
-
|
2175
|
-
|
2176
|
-
|
2177
|
-
|
2178
|
-
|
2179
|
-
|
2180
|
-
|
2181
|
-
|
2182
|
-
|
2183
|
-
|
2184
|
-
|
2185
|
-
|
2186
|
-
|
2187
|
-
|
2188
|
-
|
2189
|
-
|
2190
|
-
|
2191
|
-
|
2192
|
-
|
2193
|
-
|
2194
|
-
|
2195
|
-
|
2196
|
-
|
2197
|
-
|
2198
|
-
|
2199
|
-
|
2200
|
-
|
2201
|
-
|
2202
|
-
|
2203
|
-
|
1446
|
+
})(jQuery, Modernizr, jQuery.webshims);jQuery.webshims.register('track', function($, webshims, window, document, undefined){
|
1447
|
+
var mediaelement = webshims.mediaelement;
|
1448
|
+
var id = new Date().getTime();
|
1449
|
+
//descriptions are not really shown, but they are inserted into the dom
|
1450
|
+
var showTracks = {subtitles: 1, captions: 1, descriptions: 1};
|
1451
|
+
var notImplemented = function(){
|
1452
|
+
webshims.error('not implemented yet');
|
1453
|
+
};
|
1454
|
+
var supportTrackMod = Modernizr.ES5 && Modernizr.objectAccessor;
|
1455
|
+
var createEventTarget = function(obj){
|
1456
|
+
var eventList = {};
|
1457
|
+
obj.addEventListener = function(name, fn){
|
1458
|
+
if(eventList[name]){
|
1459
|
+
webshims.error('always use $.bind to the shimed event: '+ name +' already bound fn was: '+ eventList[name] +' your fn was: '+ fn);
|
1460
|
+
}
|
1461
|
+
eventList[name] = fn;
|
1462
|
+
|
1463
|
+
};
|
1464
|
+
obj.removeEventListener = function(name, fn){
|
1465
|
+
if(eventList[name] && eventList[name] != fn){
|
1466
|
+
webshims.error('always use $.bind/$.unbind to the shimed event: '+ name +' already bound fn was: '+ eventList[name] +' your fn was: '+ fn);
|
1467
|
+
}
|
1468
|
+
if(eventList[name]){
|
1469
|
+
delete eventList[name];
|
1470
|
+
}
|
1471
|
+
};
|
1472
|
+
return obj;
|
1473
|
+
};
|
1474
|
+
|
1475
|
+
|
1476
|
+
var cueListProto = {
|
1477
|
+
getCueById: function(id){
|
1478
|
+
var cue = null;
|
1479
|
+
for(var i = 0, len = this.length; i < len; i++){
|
1480
|
+
if(this[i].id === id){
|
1481
|
+
cue = this[i];
|
1482
|
+
break;
|
1483
|
+
}
|
1484
|
+
}
|
1485
|
+
return cue;
|
1486
|
+
}
|
1487
|
+
};
|
1488
|
+
|
1489
|
+
var textTrackProto = {
|
1490
|
+
shimActiveCues: null,
|
1491
|
+
_shimActiveCues: null,
|
1492
|
+
activeCues: null,
|
1493
|
+
cues: null,
|
1494
|
+
kind: 'subtitles',
|
1495
|
+
label: '',
|
1496
|
+
language: '',
|
1497
|
+
mode: 'disabled',
|
1498
|
+
readyState: 0,
|
1499
|
+
oncuechange: null,
|
1500
|
+
toString: function() {
|
1501
|
+
return "[object TextTrack]";
|
1502
|
+
},
|
1503
|
+
addCue: function(cue){
|
1504
|
+
if(!this.cues){
|
1505
|
+
this.cues = mediaelement.createCueList();
|
1506
|
+
} else {
|
1507
|
+
var lastCue = this.cues[this.cues.length-1];
|
1508
|
+
if(lastCue && lastCue.startTime > cue.startTime){
|
1509
|
+
webshims.error("cue startTime higher than previous cue's startTime");
|
1510
|
+
}
|
1511
|
+
}
|
1512
|
+
if(cue.track && cue.track.removeCue){
|
1513
|
+
cue.track.removeCue(cue);
|
1514
|
+
}
|
1515
|
+
cue.track = this;
|
1516
|
+
this.cues.push(cue);
|
1517
|
+
},
|
1518
|
+
//ToDo: make it more dynamic
|
1519
|
+
removeCue: function(cue){
|
1520
|
+
var cues = this.cues || [];
|
1521
|
+
var i = 0;
|
1522
|
+
var len = cues.length;
|
1523
|
+
if(cue.track != this){
|
1524
|
+
webshims.error("cue not part of track");
|
1525
|
+
return;
|
1526
|
+
}
|
1527
|
+
for(; i < len; i++){
|
1528
|
+
if(cues[i] === cue){
|
1529
|
+
cues.splice(i, 1);
|
1530
|
+
cue.track = null;
|
1531
|
+
break;
|
1532
|
+
}
|
1533
|
+
}
|
1534
|
+
if(cue.track){
|
1535
|
+
webshims.error("cue not part of track");
|
1536
|
+
return;
|
1537
|
+
}
|
1538
|
+
},
|
1539
|
+
DISABLED: 'disabled',
|
1540
|
+
OFF: 'disabled',
|
1541
|
+
HIDDEN: 'hidden',
|
1542
|
+
SHOWING: 'showing',
|
1543
|
+
ERROR: 3,
|
1544
|
+
LOADED: 2,
|
1545
|
+
LOADING: 1,
|
1546
|
+
NONE: 0
|
1547
|
+
};
|
1548
|
+
var copyProps = ['kind', 'label', 'srclang'];
|
1549
|
+
var copyName = {srclang: 'language'};
|
1550
|
+
|
1551
|
+
var owns = Function.prototype.call.bind(Object.prototype.hasOwnProperty);
|
1552
|
+
|
1553
|
+
var updateMediaTrackList = function(baseData, trackList){
|
1554
|
+
var removed = [];
|
1555
|
+
var added = [];
|
1556
|
+
var newTracks = [];
|
1557
|
+
var i, len;
|
1558
|
+
if(!baseData){
|
1559
|
+
baseData = webshims.data(this, 'mediaelementBase') || webshims.data(this, 'mediaelementBase', {});
|
1560
|
+
}
|
1561
|
+
|
1562
|
+
if(!trackList){
|
1563
|
+
baseData.blockTrackListUpdate = true;
|
1564
|
+
trackList = $.prop(this, 'textTracks');
|
1565
|
+
baseData.blockTrackListUpdate = false;
|
1566
|
+
}
|
1567
|
+
|
1568
|
+
clearTimeout(baseData.updateTrackListTimer);
|
1569
|
+
|
1570
|
+
$('track', this).each(function(){
|
1571
|
+
var track = $.prop(this, 'track');
|
1572
|
+
newTracks.push(track);
|
1573
|
+
if(trackList.indexOf(track) == -1){
|
1574
|
+
added.push(track);
|
1575
|
+
}
|
1576
|
+
});
|
1577
|
+
|
1578
|
+
if(baseData.scriptedTextTracks){
|
1579
|
+
for(i = 0, len = baseData.scriptedTextTracks.length; i < len; i++){
|
1580
|
+
newTracks.push(baseData.scriptedTextTracks[i]);
|
1581
|
+
if(trackList.indexOf(baseData.scriptedTextTracks[i]) == -1){
|
1582
|
+
added.push(baseData.scriptedTextTracks[i]);
|
1583
|
+
}
|
1584
|
+
}
|
1585
|
+
}
|
1586
|
+
|
1587
|
+
for(i = 0, len = trackList.length; i < len; i++){
|
1588
|
+
if(newTracks.indexOf(trackList[i]) == -1){
|
1589
|
+
removed.push(trackList[i]);
|
1590
|
+
}
|
1591
|
+
}
|
1592
|
+
|
1593
|
+
if(removed.length || added.length){
|
1594
|
+
trackList.splice(0);
|
1595
|
+
|
1596
|
+
for(i = 0, len = newTracks.length; i < len; i++){
|
1597
|
+
trackList.push(newTracks[i]);
|
1598
|
+
}
|
1599
|
+
for(i = 0, len = removed.length; i < len; i++){
|
1600
|
+
$([trackList]).triggerHandler($.Event({type: 'removetrack', track: trackList, track: removed[i]}));
|
1601
|
+
}
|
1602
|
+
for(i = 0, len = added.length; i < len; i++){
|
1603
|
+
$([trackList]).triggerHandler($.Event({type: 'addtrack', track: trackList, track: added[i]}));
|
1604
|
+
}
|
1605
|
+
if(baseData.scriptedTextTracks || removed.length){
|
1606
|
+
$(this).triggerHandler('updatetrackdisplay');
|
1607
|
+
}
|
1608
|
+
}
|
1609
|
+
};
|
1610
|
+
|
1611
|
+
var refreshTrack = function(track, trackData){
|
1612
|
+
if(!trackData){
|
1613
|
+
trackData = webshims.data(track, 'trackData');
|
1614
|
+
}
|
1615
|
+
if(trackData && !trackData.isTriggering){
|
1616
|
+
trackData.isTriggering = true;
|
1617
|
+
setTimeout(function(){
|
1618
|
+
if(!(trackData.track || {}).readyState){
|
1619
|
+
$(track).triggerHandler('checktrackmode');
|
1620
|
+
} else {
|
1621
|
+
$(track).closest('audio, video').triggerHandler('updatetrackdisplay');
|
1622
|
+
}
|
1623
|
+
trackData.isTriggering = false;
|
1624
|
+
}, 1);
|
1625
|
+
}
|
1626
|
+
};
|
1627
|
+
|
1628
|
+
var emptyDiv = $('<div />')[0];
|
1629
|
+
window.TextTrackCue = function(startTime, endTime, text){
|
1630
|
+
if(arguments.length != 3){
|
1631
|
+
webshims.error("wrong arguments.length for TextTrackCue.constructor");
|
1632
|
+
}
|
1633
|
+
|
1634
|
+
this.startTime = startTime;
|
1635
|
+
this.endTime = endTime;
|
1636
|
+
this.text = text;
|
1637
|
+
|
1638
|
+
this.id = "";
|
1639
|
+
this.pauseOnExit = false;
|
1640
|
+
|
1641
|
+
createEventTarget(this);
|
1642
|
+
};
|
1643
|
+
|
1644
|
+
window.TextTrackCue.prototype = {
|
1645
|
+
|
1646
|
+
onenter: null,
|
1647
|
+
onexit: null,
|
1648
|
+
pauseOnExit: false,
|
1649
|
+
getCueAsHTML: function(){
|
1650
|
+
var lastText = "";
|
1651
|
+
var parsedText = "";
|
1652
|
+
var fragment = document.createDocumentFragment();
|
1653
|
+
var fn;
|
1654
|
+
if(!owns(this, 'getCueAsHTML')){
|
1655
|
+
fn = this.getCueAsHTML = function(){
|
1656
|
+
var i, len;
|
1657
|
+
if(lastText != this.text){
|
1658
|
+
lastText = this.text;
|
1659
|
+
parsedText = mediaelement.parseCueTextToHTML(lastText);
|
1660
|
+
emptyDiv.innerHTML = parsedText;
|
1661
|
+
|
1662
|
+
for(i = 0, len = emptyDiv.childNodes.length; i < len; i++){
|
1663
|
+
fragment.appendChild(emptyDiv.childNodes[i].cloneNode(true));
|
1664
|
+
}
|
1665
|
+
}
|
1666
|
+
return fragment.cloneNode(true);
|
1667
|
+
};
|
1668
|
+
|
1669
|
+
}
|
1670
|
+
return fn ? fn.apply(this, arguments) : fragment.cloneNode(true);
|
1671
|
+
},
|
1672
|
+
track: null,
|
1673
|
+
|
1674
|
+
|
1675
|
+
id: ''
|
1676
|
+
//todo-->
|
1677
|
+
// ,
|
1678
|
+
// snapToLines: true,
|
1679
|
+
// line: 'auto',
|
1680
|
+
// size: 100,
|
1681
|
+
// position: 50,
|
1682
|
+
// vertical: '',
|
1683
|
+
// align: 'middle'
|
1684
|
+
};
|
1685
|
+
|
1686
|
+
|
1687
|
+
|
1688
|
+
|
1689
|
+
|
1690
|
+
mediaelement.createCueList = function(){
|
1691
|
+
return $.extend([], cueListProto);
|
1692
|
+
};
|
1693
|
+
|
1694
|
+
mediaelement.parseCueTextToHTML = (function(){
|
1695
|
+
var tagSplits = /(<\/?[^>]+>)/ig;
|
1696
|
+
var allowedTags = /^(?:c|v|ruby|rt|b|i|u)/;
|
1697
|
+
var regEnd = /\<\s*\//;
|
1698
|
+
var addToTemplate = function(localName, attribute, tag, html){
|
1699
|
+
var ret;
|
1700
|
+
if(regEnd.test(html)){
|
1701
|
+
ret = '</'+ localName +'>';
|
1702
|
+
} else {
|
1703
|
+
tag.splice(0, 1);
|
1704
|
+
ret = '<'+ localName +' '+ attribute +'="'+ (tag.join(' ').replace(/\"/g, '"')) +'">';
|
1705
|
+
}
|
1706
|
+
return ret;
|
1707
|
+
};
|
1708
|
+
var replacer = function(html){
|
1709
|
+
var tag = html.replace(/[<\/>]+/ig,"").split(/[\s\.]+/);
|
1710
|
+
if(tag[0]){
|
1711
|
+
tag[0] = tag[0].toLowerCase();
|
1712
|
+
if(allowedTags.test(tag[0])){
|
1713
|
+
if(tag[0] == 'c'){
|
1714
|
+
html = addToTemplate('span', 'class', tag, html);
|
1715
|
+
} else if(tag[0] == 'v'){
|
1716
|
+
html = addToTemplate('q', 'title', tag, html);
|
1717
|
+
}
|
1718
|
+
} else {
|
1719
|
+
html = "";
|
1720
|
+
}
|
1721
|
+
}
|
1722
|
+
return html;
|
1723
|
+
};
|
1724
|
+
|
1725
|
+
return function(cueText){
|
1726
|
+
return cueText.replace(tagSplits, replacer);
|
1727
|
+
};
|
1728
|
+
})();
|
1729
|
+
|
1730
|
+
mediaelement.loadTextTrack = function(mediaelem, track, trackData, _default){
|
1731
|
+
var loadEvents = 'play playing timeupdate updatetrackdisplay';
|
1732
|
+
var obj = trackData.track;
|
1733
|
+
var load = function(){
|
1734
|
+
var src = $.prop(track, 'src');
|
1735
|
+
var error;
|
1736
|
+
var ajax;
|
1737
|
+
if(obj.mode != 'disabled' && src && $.attr(track, 'src')){
|
1738
|
+
$(mediaelem).unbind(loadEvents, load);
|
1739
|
+
$(track).unbind('checktrackmode', load);
|
1740
|
+
if(!obj.readyState){
|
1741
|
+
error = function(){
|
1742
|
+
obj.readyState = 3;
|
1743
|
+
obj.cues = null;
|
1744
|
+
obj.activeCues = obj.shimActiveCues = obj._shimActiveCues = null;
|
1745
|
+
$(track).triggerHandler('error');
|
1746
|
+
};
|
1747
|
+
obj.readyState = 1;
|
1748
|
+
try {
|
1749
|
+
obj.cues = mediaelement.createCueList();
|
1750
|
+
obj.activeCues = obj.shimActiveCues = obj._shimActiveCues = mediaelement.createCueList();
|
1751
|
+
ajax = $.ajax({
|
1752
|
+
dataType: 'text',
|
1753
|
+
url: src,
|
1754
|
+
success: function(text){
|
1755
|
+
if(ajax.getResponseHeader('content-type') != 'text/vtt'){
|
1756
|
+
webshims.error('set the mime-type of your WebVTT files to text/vtt. see: http://dev.w3.org/html5/webvtt/#text/vtt');
|
1757
|
+
}
|
1758
|
+
mediaelement.parseCaptions(text, obj, function(cues){
|
1759
|
+
if(cues && 'length' in cues){
|
1760
|
+
obj.readyState = 2;
|
1761
|
+
$(track).triggerHandler('load');
|
1762
|
+
$(mediaelem).triggerHandler('updatetrackdisplay');
|
1763
|
+
} else {
|
1764
|
+
error();
|
1765
|
+
}
|
1766
|
+
});
|
1767
|
+
|
1768
|
+
},
|
1769
|
+
error: error
|
1770
|
+
});
|
1771
|
+
} catch(er){
|
1772
|
+
error();
|
1773
|
+
webshims.warn(er);
|
1774
|
+
}
|
1775
|
+
}
|
1776
|
+
}
|
1777
|
+
};
|
1778
|
+
obj.readyState = 0;
|
1779
|
+
obj.shimActiveCues = null;
|
1780
|
+
obj._shimActiveCues = null;
|
1781
|
+
obj.activeCues = null;
|
1782
|
+
obj.cues = null;
|
1783
|
+
$(mediaelem).unbind(loadEvents, load);
|
1784
|
+
$(track).unbind('checktrackmode', load);
|
1785
|
+
$(mediaelem).bind(loadEvents, load);
|
1786
|
+
$(track).bind('checktrackmode', load);
|
1787
|
+
if(_default){
|
1788
|
+
obj.mode = showTracks[obj.kind] ? 'showing' : 'hidden';
|
1789
|
+
load();
|
1790
|
+
}
|
1791
|
+
};
|
1792
|
+
|
1793
|
+
mediaelement.createTextTrack = function(mediaelem, track){
|
1794
|
+
var obj, trackData;
|
1795
|
+
if(track.nodeName){
|
1796
|
+
trackData = webshims.data(track, 'trackData');
|
1797
|
+
|
1798
|
+
if(trackData){
|
1799
|
+
refreshTrack(track, trackData);
|
1800
|
+
obj = trackData.track;
|
1801
|
+
}
|
1802
|
+
}
|
1803
|
+
|
1804
|
+
if(!obj){
|
1805
|
+
obj = createEventTarget(webshims.objectCreate(textTrackProto));
|
1806
|
+
|
1807
|
+
if(!supportTrackMod){
|
1808
|
+
copyProps.forEach(function(copyProp){
|
1809
|
+
var prop = $.prop(track, copyProp);
|
1810
|
+
if(prop){
|
1811
|
+
obj[copyName[copyProp] || copyProp] = prop;
|
1812
|
+
}
|
1813
|
+
});
|
1814
|
+
}
|
1815
|
+
|
1816
|
+
|
1817
|
+
if(track.nodeName){
|
1818
|
+
|
1819
|
+
if(supportTrackMod){
|
1820
|
+
copyProps.forEach(function(copyProp){
|
1821
|
+
webshims.defineProperty(obj, copyName[copyProp] || copyProp, {
|
1822
|
+
get: function(){
|
1823
|
+
return $.prop(track, copyProp);
|
1824
|
+
}
|
1825
|
+
});
|
1826
|
+
});
|
1827
|
+
}
|
1828
|
+
|
1829
|
+
trackData = webshims.data(track, 'trackData', {track: obj});
|
1830
|
+
mediaelement.loadTextTrack(mediaelem, track, trackData, ($.prop(track, 'default') && $(track).siblings('track[default]').andSelf()[0] == track));
|
1831
|
+
} else {
|
1832
|
+
if(supportTrackMod){
|
1833
|
+
copyProps.forEach(function(copyProp){
|
1834
|
+
webshims.defineProperty(obj, copyName[copyProp] || copyProp, {
|
1835
|
+
value: track[copyProp],
|
1836
|
+
writeable: false
|
1837
|
+
});
|
1838
|
+
});
|
1839
|
+
}
|
1840
|
+
obj.cues = mediaelement.createCueList();
|
1841
|
+
obj.activeCues = obj._shimActiveCues = obj.shimActiveCues = mediaelement.createCueList();
|
1842
|
+
obj.mode = 'hidden';
|
1843
|
+
obj.readyState = 2;
|
1844
|
+
}
|
1845
|
+
}
|
1846
|
+
return obj;
|
1847
|
+
};
|
1848
|
+
|
1849
|
+
|
1850
|
+
/*
|
1851
|
+
taken from:
|
1852
|
+
Captionator 0.5.1 [CaptionCrunch]
|
1853
|
+
Christopher Giffard, 2011
|
1854
|
+
Share and enjoy
|
1855
|
+
|
1856
|
+
https://github.com/cgiffard/Captionator
|
1857
|
+
|
1858
|
+
modified for webshims
|
1859
|
+
*/
|
1860
|
+
mediaelement.parseCaptionChunk = (function(){
|
1861
|
+
// Set up timestamp parsers
|
1862
|
+
var WebVTTTimestampParser = /^(\d{2})?:?(\d{2}):(\d{2})\.(\d+)\s+\-\-\>\s+(\d{2})?:?(\d{2}):(\d{2})\.(\d+)\s*(.*)/;
|
1863
|
+
var GoogleTimestampParser = /^([\d\.]+)\s+\+([\d\.]+)\s*(.*)/;
|
1864
|
+
var WebVTTDEFAULTSCueParser = /^(DEFAULTS|DEFAULT)\s+\-\-\>\s+(.*)/g;
|
1865
|
+
var WebVTTSTYLECueParser = /^(STYLE|STYLES)\s+\-\-\>\s*\n([\s\S]*)/g;
|
1866
|
+
var WebVTTCOMMENTCueParser = /^(COMMENT|COMMENTS)\s+\-\-\>\s+(.*)/g;
|
1867
|
+
|
1868
|
+
return function(subtitleElement,objectCount){
|
1869
|
+
var cueDefaults = [];
|
1870
|
+
|
1871
|
+
var subtitleParts, timeIn, timeOut, html, timeData, subtitlePartIndex, cueSettings = "", id, specialCueData;
|
1872
|
+
var timestampMatch, tmpCue;
|
1873
|
+
|
1874
|
+
// WebVTT Special Cue Logic
|
1875
|
+
if ((specialCueData = WebVTTDEFAULTSCueParser.exec(subtitleElement))) {
|
1876
|
+
// cueDefaults = specialCueData.slice(2).join("");
|
1877
|
+
// cueDefaults = cueDefaults.split(/\s+/g).filter(function(def) { return def && !!def.length; });
|
1878
|
+
return null;
|
1879
|
+
} else if ((specialCueData = WebVTTSTYLECueParser.exec(subtitleElement))) {
|
1880
|
+
return null;
|
1881
|
+
} else if ((specialCueData = WebVTTCOMMENTCueParser.exec(subtitleElement))) {
|
1882
|
+
return null; // At this stage, we don't want to do anything with these.
|
1883
|
+
}
|
1884
|
+
|
1885
|
+
subtitleParts = subtitleElement.split(/\n/g);
|
1886
|
+
|
1887
|
+
// Trim off any blank lines (logically, should only be max. one, but loop to be sure)
|
1888
|
+
while (!subtitleParts[0].replace(/\s+/ig,"").length && subtitleParts.length > 0) {
|
1889
|
+
subtitleParts.shift();
|
1890
|
+
}
|
1891
|
+
|
1892
|
+
if (subtitleParts[0].match(/^\s*[a-z0-9-\_]+\s*$/ig)) {
|
1893
|
+
// The identifier becomes the cue ID (when *we* load the cues from file. Programatically created cues can have an ID of whatever.)
|
1894
|
+
id = String(subtitleParts.shift().replace(/\s*/ig,""));
|
1895
|
+
}
|
1896
|
+
|
1897
|
+
for (subtitlePartIndex = 0; subtitlePartIndex < subtitleParts.length; subtitlePartIndex ++) {
|
1898
|
+
var timestamp = subtitleParts[subtitlePartIndex];
|
1899
|
+
|
1900
|
+
if ((timestampMatch = WebVTTTimestampParser.exec(timestamp))) {
|
1901
|
+
|
1902
|
+
// WebVTT
|
1903
|
+
|
1904
|
+
timeData = timestampMatch.slice(1);
|
1905
|
+
|
1906
|
+
timeIn = parseInt((timeData[0]||0) * 60 * 60,10) + // Hours
|
1907
|
+
parseInt((timeData[1]||0) * 60,10) + // Minutes
|
1908
|
+
parseInt((timeData[2]||0),10) + // Seconds
|
1909
|
+
parseFloat("0." + (timeData[3]||0)); // MS
|
1910
|
+
|
1911
|
+
timeOut = parseInt((timeData[4]||0) * 60 * 60,10) + // Hours
|
1912
|
+
parseInt((timeData[5]||0) * 60,10) + // Minutes
|
1913
|
+
parseInt((timeData[6]||0),10) + // Seconds
|
1914
|
+
parseFloat("0." + (timeData[7]||0)); // MS
|
1915
|
+
/*
|
1916
|
+
if (timeData[8]) {
|
1917
|
+
cueSettings = timeData[8];
|
1918
|
+
}
|
1919
|
+
*/
|
1920
|
+
}
|
1921
|
+
|
1922
|
+
// We've got the timestamp - return all the other unmatched lines as the raw subtitle data
|
1923
|
+
subtitleParts = subtitleParts.slice(0,subtitlePartIndex).concat(subtitleParts.slice(subtitlePartIndex+1));
|
1924
|
+
break;
|
1925
|
+
}
|
1926
|
+
|
1927
|
+
if (!timeIn && !timeOut) {
|
1928
|
+
// We didn't extract any time information. Assume the cue is invalid!
|
1929
|
+
webshims.warn("couldn't extract time information: "+[timeIn, timeOut, subtitleParts.join("\n"), id].join(' ; '));
|
1930
|
+
return null;
|
1931
|
+
}
|
1932
|
+
/*
|
1933
|
+
// Consolidate cue settings, convert defaults to object
|
1934
|
+
var compositeCueSettings =
|
1935
|
+
cueDefaults
|
1936
|
+
.reduce(function(previous,current,index,array){
|
1937
|
+
previous[current.split(":")[0]] = current.split(":")[1];
|
1938
|
+
return previous;
|
1939
|
+
},{});
|
1940
|
+
|
1941
|
+
// Loop through cue settings, replace defaults with cue specific settings if they exist
|
1942
|
+
compositeCueSettings =
|
1943
|
+
cueSettings
|
1944
|
+
.split(/\s+/g)
|
1945
|
+
.filter(function(set) { return set && !!set.length; })
|
1946
|
+
// Convert array to a key/val object
|
1947
|
+
.reduce(function(previous,current,index,array){
|
1948
|
+
previous[current.split(":")[0]] = current.split(":")[1];
|
1949
|
+
return previous;
|
1950
|
+
},compositeCueSettings);
|
1951
|
+
|
1952
|
+
// Turn back into string like the TextTrackCue constructor expects
|
1953
|
+
cueSettings = "";
|
1954
|
+
for (var key in compositeCueSettings) {
|
1955
|
+
if (compositeCueSettings.hasOwnProperty(key)) {
|
1956
|
+
cueSettings += !!cueSettings.length ? " " : "";
|
1957
|
+
cueSettings += key + ":" + compositeCueSettings[key];
|
1958
|
+
}
|
1959
|
+
}
|
1960
|
+
*/
|
1961
|
+
// The remaining lines are the subtitle payload itself (after removing an ID if present, and the time);
|
1962
|
+
html = subtitleParts.join("\n");
|
1963
|
+
tmpCue = new TextTrackCue(timeIn, timeOut, html);
|
1964
|
+
if(id){
|
1965
|
+
tmpCue.id = id;
|
1966
|
+
}
|
1967
|
+
return tmpCue;
|
1968
|
+
};
|
1969
|
+
})();
|
1970
|
+
|
1971
|
+
mediaelement.parseCaptions = function(captionData, track, complete) {
|
1972
|
+
var subtitles = mediaelement.createCueList();
|
1973
|
+
var cue, lazyProcess, regWevVTT;
|
1974
|
+
var startDate;
|
1975
|
+
var isWEBVTT;
|
1976
|
+
if (captionData) {
|
1977
|
+
|
1978
|
+
regWevVTT = /^WEBVTT(\s*FILE)?/ig;
|
1979
|
+
|
1980
|
+
lazyProcess = function(i, len){
|
1981
|
+
|
1982
|
+
for(; i < len; i++){
|
1983
|
+
cue = captionData[i];
|
1984
|
+
if(regWevVTT.test(cue)){
|
1985
|
+
isWEBVTT = true;
|
1986
|
+
} else if(cue.replace(/\s*/ig,"").length){
|
1987
|
+
if(!isWEBVTT){
|
1988
|
+
webshims.error('please use WebVTT format. This is the standard');
|
1989
|
+
complete(null);
|
1990
|
+
break;
|
1991
|
+
}
|
1992
|
+
cue = mediaelement.parseCaptionChunk(cue, i);
|
1993
|
+
if(cue){
|
1994
|
+
track.addCue(cue);
|
1995
|
+
}
|
1996
|
+
}
|
1997
|
+
if(startDate < (new Date().getTime()) - 30){
|
1998
|
+
i++;
|
1999
|
+
setTimeout(function(){
|
2000
|
+
startDate = new Date().getTime();
|
2001
|
+
lazyProcess(i, len);
|
2002
|
+
}, 90);
|
2003
|
+
|
2004
|
+
break;
|
2005
|
+
}
|
2006
|
+
}
|
2007
|
+
if(i >= len){
|
2008
|
+
if(!isWEBVTT){
|
2009
|
+
webshims.error('please use WebVTT format. This is the standard');
|
2010
|
+
}
|
2011
|
+
complete(track.cues);
|
2012
|
+
}
|
2013
|
+
};
|
2014
|
+
|
2015
|
+
captionData = captionData.replace(/\r\n/g,"\n");
|
2016
|
+
|
2017
|
+
setTimeout(function(){
|
2018
|
+
captionData = captionData.replace(/\r/g,"\n");
|
2019
|
+
setTimeout(function(){
|
2020
|
+
startDate = new Date().getTime();
|
2021
|
+
captionData = captionData.split(/\n\n+/g);
|
2022
|
+
lazyProcess(0, captionData.length);
|
2023
|
+
}, 9);
|
2024
|
+
}, 9);
|
2025
|
+
|
2026
|
+
} else {
|
2027
|
+
webshims.error("Required parameter captionData not supplied.");
|
2028
|
+
}
|
2029
|
+
};
|
2030
|
+
|
2031
|
+
|
2032
|
+
mediaelement.createTrackList = function(mediaelem, baseData){
|
2033
|
+
baseData = baseData || webshims.data(mediaelem, 'mediaelementBase') || webshims.data(mediaelem, 'mediaelementBase', {});
|
2034
|
+
if(!baseData.textTracks){
|
2035
|
+
baseData.textTracks = [];
|
2036
|
+
webshims.defineProperties(baseData.textTracks, {
|
2037
|
+
onaddtrack: {value: null},
|
2038
|
+
onremovetrack: {value: null}
|
2039
|
+
});
|
2040
|
+
createEventTarget(baseData.textTracks);
|
2041
|
+
}
|
2042
|
+
return baseData.textTracks;
|
2043
|
+
};
|
2044
|
+
|
2045
|
+
if(!Modernizr.track){
|
2046
|
+
webshims.defineNodeNamesBooleanProperty(['track'], 'default');
|
2047
|
+
webshims.reflectProperties(['track'], ['srclang', 'label']);
|
2048
|
+
|
2049
|
+
webshims.defineNodeNameProperties('track', {
|
2050
|
+
src: {
|
2051
|
+
//attr: {},
|
2052
|
+
reflect: true,
|
2053
|
+
propType: 'src'
|
2054
|
+
}
|
2055
|
+
});
|
2056
|
+
}
|
2057
|
+
|
2058
|
+
webshims.defineNodeNameProperties('track', {
|
2059
|
+
kind: {
|
2060
|
+
attr: Modernizr.track ? {
|
2061
|
+
set: function(value){
|
2062
|
+
var trackData = webshims.data(this, 'trackData');
|
2063
|
+
this.setAttribute('data-kind', value);
|
2064
|
+
if(trackData){
|
2065
|
+
trackData.attrKind = value;
|
2066
|
+
}
|
2067
|
+
},
|
2068
|
+
get: function(){
|
2069
|
+
var trackData = webshims.data(this, 'trackData');
|
2070
|
+
if(trackData && ('attrKind' in trackData)){
|
2071
|
+
return trackData.attrKind;
|
2072
|
+
}
|
2073
|
+
return this.getAttribute('kind');
|
2074
|
+
}
|
2075
|
+
} : {},
|
2076
|
+
reflect: true,
|
2077
|
+
propType: 'enumarated',
|
2078
|
+
defaultValue: 'subtitles',
|
2079
|
+
limitedTo: ['subtitles', 'captions', 'descriptions', 'chapters', 'metadata']
|
2080
|
+
}
|
2081
|
+
});
|
2082
|
+
|
2083
|
+
$.each(copyProps, function(i, copyProp){
|
2084
|
+
var name = copyName[copyProp] || copyProp;
|
2085
|
+
webshims.onNodeNamesPropertyModify('track', copyProp, function(){
|
2086
|
+
var trackData = webshims.data(this, 'trackData');
|
2087
|
+
var track = this;
|
2088
|
+
if(trackData){
|
2089
|
+
if(copyProp == 'kind'){
|
2090
|
+
refreshTrack(this, trackData);
|
2091
|
+
}
|
2092
|
+
if(!supportTrackMod){
|
2093
|
+
trackData.track[name] = $.prop(this, copyProp);
|
2094
|
+
}
|
2095
|
+
clearTimeout(trackData.changedTrackPropTimer);
|
2096
|
+
trackData.changedTrackPropTimer = setTimeout(function(){
|
2097
|
+
$(track).trigger('updatesubtitlestate');
|
2098
|
+
}, 1);
|
2099
|
+
}
|
2100
|
+
});
|
2101
|
+
});
|
2102
|
+
|
2103
|
+
|
2104
|
+
webshims.onNodeNamesPropertyModify('track', 'src', function(val){
|
2105
|
+
if(val){
|
2106
|
+
var data = webshims.data(this, 'trackData');
|
2107
|
+
var media;
|
2108
|
+
if(data){
|
2109
|
+
media = $(this).closest('video, audio');
|
2110
|
+
if(media[0]){
|
2111
|
+
mediaelement.loadTextTrack(media, this, data);
|
2112
|
+
}
|
2113
|
+
}
|
2114
|
+
}
|
2115
|
+
|
2116
|
+
});
|
2117
|
+
|
2118
|
+
//
|
2119
|
+
|
2120
|
+
webshims.defineNodeNamesProperties(['track'], {
|
2121
|
+
ERROR: {
|
2122
|
+
value: 3
|
2123
|
+
},
|
2124
|
+
LOADED: {
|
2125
|
+
value: 2
|
2126
|
+
},
|
2127
|
+
LOADING: {
|
2128
|
+
value: 1
|
2129
|
+
},
|
2130
|
+
NONE: {
|
2131
|
+
value: 0
|
2132
|
+
},
|
2133
|
+
readyState: {
|
2134
|
+
get: function(){
|
2135
|
+
return ($.prop(this, 'track') || {readyState: 0}).readyState;
|
2136
|
+
},
|
2137
|
+
writeable: false
|
2138
|
+
},
|
2139
|
+
track: {
|
2140
|
+
get: function(){
|
2141
|
+
return mediaelement.createTextTrack($(this).closest('audio, video')[0], this);
|
2142
|
+
},
|
2143
|
+
writeable: false
|
2144
|
+
}
|
2145
|
+
}, 'prop');
|
2146
|
+
|
2147
|
+
webshims.defineNodeNamesProperties(['audio', 'video'], {
|
2148
|
+
textTracks: {
|
2149
|
+
get: function(){
|
2150
|
+
var media = this;
|
2151
|
+
var baseData = webshims.data(media, 'mediaelementBase') || webshims.data(media, 'mediaelementBase', {});
|
2152
|
+
var tracks = mediaelement.createTrackList(media, baseData);
|
2153
|
+
if(!baseData.blockTrackListUpdate){
|
2154
|
+
updateMediaTrackList.call(media, baseData, tracks);
|
2155
|
+
}
|
2156
|
+
return tracks;
|
2157
|
+
},
|
2158
|
+
writeable: false
|
2159
|
+
},
|
2160
|
+
addTextTrack: {
|
2161
|
+
value: function(kind, label, lang){
|
2162
|
+
var textTrack = mediaelement.createTextTrack(this, {
|
2163
|
+
kind: kind || '',
|
2164
|
+
label: label || '',
|
2165
|
+
srclang: lang || ''
|
2166
|
+
});
|
2167
|
+
var baseData = webshims.data(this, 'mediaelementBase') || webshims.data(this, 'mediaelementBase', {});
|
2168
|
+
if (!baseData.scriptedTextTracks) {
|
2169
|
+
baseData.scriptedTextTracks = [];
|
2170
|
+
}
|
2171
|
+
baseData.scriptedTextTracks.push(textTrack);
|
2172
|
+
updateMediaTrackList.call(this);
|
2173
|
+
return textTrack;
|
2174
|
+
}
|
2175
|
+
}
|
2176
|
+
}, 'prop');
|
2177
|
+
|
2178
|
+
|
2179
|
+
$(document).bind('emptied ended updatetracklist', function(e){
|
2180
|
+
if($(e.target).is('audio, video')){
|
2181
|
+
var baseData = webshims.data(e.target, 'mediaelementBase');
|
2182
|
+
if(baseData){
|
2183
|
+
clearTimeout(baseData.updateTrackListTimer);
|
2184
|
+
baseData.updateTrackListTimer = setTimeout(function(){
|
2185
|
+
updateMediaTrackList.call(e.target, baseData);
|
2186
|
+
}, 0);
|
2187
|
+
}
|
2188
|
+
}
|
2189
|
+
});
|
2190
|
+
|
2191
|
+
var getNativeReadyState = function(trackElem, textTrack){
|
2192
|
+
return textTrack.readyState || trackElem.readyState;
|
2193
|
+
};
|
2194
|
+
|
2195
|
+
webshims.addReady(function(context, insertedElement){
|
2196
|
+
var insertedMedia = insertedElement.filter('video, audio, track').closest('audio, video');
|
2197
|
+
$('video, audio', context)
|
2198
|
+
.add(insertedMedia)
|
2199
|
+
.each(function(){
|
2200
|
+
updateMediaTrackList.call(this);
|
2201
|
+
})
|
2202
|
+
.each(function(){
|
2203
|
+
if(Modernizr.track){
|
2204
|
+
var shimedTextTracks = $.prop(this, 'textTracks');
|
2205
|
+
var origTextTracks = this.textTracks;
|
2206
|
+
if(shimedTextTracks.length != origTextTracks.length){
|
2207
|
+
webshims.error("textTracks couldn't be copied");
|
2208
|
+
}
|
2209
|
+
|
2210
|
+
$('track', this)
|
2211
|
+
.each(function(){
|
2212
|
+
var shimedTrack = $.prop(this, 'track');
|
2213
|
+
var origTrack = this.track;
|
2214
|
+
var kind;
|
2215
|
+
var readyState;
|
2216
|
+
if(origTrack){
|
2217
|
+
kind = $.prop(this, 'kind');
|
2218
|
+
readyState = getNativeReadyState(this, origTrack);
|
2219
|
+
if (origTrack.mode || readyState) {
|
2220
|
+
shimedTrack.mode = origTrack.mode;
|
2221
|
+
}
|
2222
|
+
//disable track from showing + remove UI
|
2223
|
+
if(kind != 'descriptions'){
|
2224
|
+
origTrack.mode = (typeof origTrack.mode == 'string') ? 'disabled' : 0;
|
2225
|
+
this.kind = 'metadata';
|
2226
|
+
$(this).attr({kind: kind});
|
2227
|
+
}
|
2228
|
+
|
2229
|
+
}
|
2230
|
+
})
|
2231
|
+
.bind('load error', function(e){
|
2232
|
+
if(e.originalEvent){
|
2233
|
+
e.stopImmediatePropagation();
|
2234
|
+
}
|
2235
|
+
})
|
2236
|
+
;
|
2237
|
+
}
|
2238
|
+
})
|
2239
|
+
;
|
2240
|
+
insertedMedia.each(function(){
|
2241
|
+
var media = this;
|
2242
|
+
var baseData = webshims.data(media, 'mediaelementBase');
|
2243
|
+
if(baseData){
|
2244
|
+
clearTimeout(baseData.updateTrackListTimer);
|
2245
|
+
baseData.updateTrackListTimer = setTimeout(function(){
|
2246
|
+
updateMediaTrackList.call(media, baseData);
|
2247
|
+
}, 9);
|
2248
|
+
}
|
2249
|
+
});
|
2250
|
+
});
|
2251
|
+
|
2252
|
+
if(Modernizr.track){
|
2253
|
+
$('video, audio').trigger('trackapichange');
|
2254
|
+
}
|
2255
|
+
|
2204
2256
|
});
|