@@ -8,6 +8,13 @@ if (!('atob' in global) || !('btoa' in global)) {
8
8
( function ( ) { var t = global , r = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" , n = function ( ) { try { document . createElement ( "$" ) } catch ( t ) { return t } } ( ) ; t . btoa || ( t . btoa = function ( t ) { for ( var o , e , a = 0 , c = r , f = "" ; t . charAt ( 0 | a ) || ( c = "=" , a % 1 ) ; f += c . charAt ( 63 & o >> 8 - 8 * ( a % 1 ) ) ) { if ( e = t . charCodeAt ( a += .75 ) , e > 255 ) throw n ; o = o << 8 | e } return f } ) , t . atob || ( t . atob = function ( t ) { if ( t = t . replace ( / = + $ / , "" ) , 1 == t . length % 4 ) throw n ; for ( var o , e , a = 0 , c = 0 , f = "" ; e = t . charAt ( c ++ ) ; ~ e && ( o = a % 4 ?64 * o + e :e , a ++ % 4 ) ?f += String . fromCharCode ( 255 & o >> ( 6 & - 2 * a ) ) :0 ) e = r . indexOf ( e ) ; return f } ) } ) ( ) ;
9
9
}
10
10
11
+
12
+ // http://cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.min.js
13
+ if ( ! ( 'JSON' in global ) ) {
14
+ // jshint:skipline
15
+ JSON = { } ; ( function ( ) { function k ( a ) { return a < 10 ?"0" + a :a } function o ( a ) { p . lastIndex = 0 ; return p . test ( a ) ?'"' + a . replace ( p , function ( a ) { var c = r [ a ] ; return typeof c === "string" ?c :"\\u" + ( "0000" + a . charCodeAt ( 0 ) . toString ( 16 ) ) . slice ( - 4 ) } ) + '"' :'"' + a + '"' } function l ( a , j ) { var c , d , h , m , g = e , f , b = j [ a ] ; b && typeof b === "object" && typeof b . toJSON === "function" && ( b = b . toJSON ( a ) ) ; typeof i === "function" && ( b = i . call ( j , a , b ) ) ; switch ( typeof b ) { case "string" :return o ( b ) ; case "number" :return isFinite ( b ) ?String ( b ) :"null" ; case "boolean" :case "null" :return String ( b ) ; case "object" :if ( ! b ) return "null" ; e += n ; f = [ ] ; if ( Object . prototype . toString . apply ( b ) === "[object Array]" ) { m = b . length ; for ( c = 0 ; c < m ; c += 1 ) f [ c ] = l ( c , b ) || "null" ; h = f . length === 0 ?"[]" :e ?"[\n" + e + f . join ( ",\n" + e ) + "\n" + g + "]" :"[" + f . join ( "," ) + "]" ; e = g ; return h } if ( i && typeof i === "object" ) { m = i . length ; for ( c = 0 ; c < m ; c += 1 ) typeof i [ c ] === "string" && ( d = i [ c ] , ( h = l ( d , b ) ) && f . push ( o ( d ) + ( e ?": " :":" ) + h ) ) } else for ( d in b ) Object . prototype . hasOwnProperty . call ( b , d ) && ( h = l ( d , b ) ) && f . push ( o ( d ) + ( e ?": " :":" ) + h ) ; h = f . length === 0 ?"{}" :e ?"{\n" + e + f . join ( ",\n" + e ) + "\n" + g + "}" :"{" + f . join ( "," ) + "}" ; e = g ; return h } } if ( typeof Date . prototype . toJSON !== "function" ) Date . prototype . toJSON = function ( ) { return isFinite ( this . valueOf ( ) ) ?this . getUTCFullYear ( ) + "-" + k ( this . getUTCMonth ( ) + 1 ) + "-" + k ( this . getUTCDate ( ) ) + "T" + k ( this . getUTCHours ( ) ) + ":" + k ( this . getUTCMinutes ( ) ) + ":" + k ( this . getUTCSeconds ( ) ) + "Z" :null } , String . prototype . toJSON = Number . prototype . toJSON = Boolean . prototype . toJSON = function ( ) { return this . valueOf ( ) } ; var q = / [ \u0000 \u00ad \u0600 - \u0604 \u070f \u17b4 \u17b5 \u200c - \u200f \u2028 - \u202f \u2060 - \u206f \ufeff \ufff0 - \uffff ] / g, p = / [ \\ \" \x00 - \x1f \x7f - \x9f \u00ad \u0600 - \u0604 \u070f \u17b4 \u17b5 \u200c - \u200f \u2028 - \u202f \u2060 - \u206f \ufeff \ufff0 - \uffff ] / g, e , n , r = { "\u0008" :"\\b" , "\t" :"\\t" , "\n" :"\\n" , "\u000c" :"\\f" , "\r" :"\\r" , '"' :'\\"' , "\\" :"\\\\" } , i ; if ( typeof JSON . stringify !== "function" ) JSON . stringify = function ( a , j , c ) { var d ; n = e = "" ; if ( typeof c === "number" ) for ( d = 0 ; d < c ; d += 1 ) n += " " ; else typeof c === "string" && ( n = c ) ; if ( ( i = j ) && typeof j !== "function" && ( typeof j !== "object" || typeof j . length !== "number" ) ) throw Error ( "JSON.stringify" ) ; return l ( "" , { "" :a } ) } ; if ( typeof JSON . parse !== "function" ) JSON . parse = function ( a , e ) { function c ( a , d ) { var g , f , b = a [ d ] ; if ( b && typeof b === "object" ) for ( g in b ) Object . prototype . hasOwnProperty . call ( b , g ) && ( f = c ( b , g ) , f !== void 0 ?b [ g ] = f :delete b [ g ] ) ; return e . call ( a , d , b ) } var d , a = String ( a ) ; q . lastIndex = 0 ; q . test ( a ) && ( a = a . replace ( q , function ( a ) { return "\\u" + ( "0000" + a . charCodeAt ( 0 ) . toString ( 16 ) ) . slice ( - 4 ) } ) ) ; if ( / ^ [ \] , : { } \s ] * $ / . test ( a . replace ( / \\ (?: [ " \\ \/ b f n r t ] | u [ 0 - 9 a - f A - F ] { 4 } ) / g, "@" ) . replace ( / " [ ^ " \\ \n \r ] * " | t r u e | f a l s e | n u l l | - ? \d + (?: \. \d * ) ? (?: [ e E ] [ + \- ] ? \d + ) ? / g, "]" ) . replace ( / (?: ^ | : | , ) (?: \s * \[ ) + / g, "" ) ) ) return d = eval ( "(" + a + ")" ) , typeof e === "function" ?c ( { "" :d } , "" ) :d ; throw new SyntaxError ( "JSON.parse" ) ; } } ) ( ) ;
16
+ }
17
+
11
18
var hasRequire = typeof require === 'function' ;
12
19
13
20
var jDataView ;
@@ -68,22 +75,28 @@ proto.cacheKey = 'jBinary.Cache';
68
75
proto . id = 0 ;
69
76
70
77
var defineProperty = Object . defineProperty ;
71
- // this is needed to detect broken Object.defineProperty in IE8:
72
- try {
73
- defineProperty ( { } , 'x' , { } ) ;
74
- } catch ( e ) {
75
- defineProperty = null ;
78
+
79
+ if ( defineProperty ) {
80
+ // this is needed to detect broken Object.defineProperty in IE8:
81
+ try {
82
+ defineProperty ( { } , 'x' , { } ) ;
83
+ } catch ( e ) {
84
+ defineProperty = null ;
85
+ }
86
+ }
87
+
88
+ if ( ! defineProperty ) {
89
+ defineProperty = function ( obj , key , descriptor , allowVisible ) {
90
+ if ( allowVisible ) {
91
+ obj [ key ] = descriptor . value ;
92
+ }
93
+ } ;
76
94
}
77
95
78
96
proto . _getCached = function ( obj , valueAccessor , allowVisible ) {
79
97
if ( ! obj . hasOwnProperty ( this . cacheKey ) ) {
80
98
var value = valueAccessor . call ( this , obj ) ;
81
- if ( defineProperty ) {
82
- defineProperty ( obj , this . cacheKey , { value : value } ) ;
83
- } else
84
- if ( allowVisible ) {
85
- obj [ this . cacheKey ] = value ;
86
- }
99
+ defineProperty ( obj , this . cacheKey , { value : value } , allowVisible ) ;
87
100
return value ;
88
101
} else {
89
102
return obj [ this . cacheKey ] ;
@@ -709,17 +722,19 @@ var getScript = (function () {
709
722
script . src = url ;
710
723
script . defer = true ;
711
724
712
- if ( ! ( 'onload' in script ) ) {
713
- script . onreadystatechange = function ( ) {
714
- console . log ( this . src , ' ' , this . readyState ) ;
715
- if ( this . readyState === 'loaded' || this . readyState === 'complete' ) {
716
- this . onreadystatechange = null ;
717
- this . onload ( ) ;
718
- }
719
- } ;
720
- }
725
+ if ( callback ) {
726
+ if ( ! ( 'onload' in script ) ) {
727
+ script . onreadystatechange = function ( ) {
728
+ console . log ( this . src , ' ' , this . readyState ) ;
729
+ if ( this . readyState === 'loaded' || this . readyState === 'complete' ) {
730
+ this . onreadystatechange = null ;
731
+ this . onload ( ) ;
732
+ }
733
+ } ;
734
+ }
721
735
722
- script . onload = script . onerror = callback ;
736
+ script . onload = script . onerror = callback ;
737
+ }
723
738
724
739
head . appendChild ( script ) ;
725
740
} ;
@@ -733,7 +748,9 @@ var getScript = (function () {
733
748
// jshint:skipline
734
749
eval ( body ) ;
735
750
}
736
- callback ( ) ;
751
+ if ( callback ) {
752
+ callback ( ) ;
753
+ }
737
754
} ) ;
738
755
} ;
739
756
}
@@ -776,6 +793,42 @@ var repo = jBinary.Repo = function (names, callback) {
776
793
} ) ;
777
794
} ;
778
795
796
+ repo . getAssociations = function ( callback ) {
797
+ // lazy loading data by replacing `jBinary.Repo.getAssociations` itself
798
+ getScript ( 'https://rawgithub.com/jDataView/jBinary.Repo/gh-pages/associations.js' , function ( ) {
799
+ repo . getAssociations ( callback ) ;
800
+ } ) ;
801
+ } ;
802
+
803
+ repo . getAssociation = function ( source , _callback ) {
804
+ var callback = function ( typeSetName ) {
805
+ repo ( typeSetName , _callback ) ;
806
+ } ;
807
+
808
+ repo . getAssociations ( function ( assoc ) {
809
+ if ( source . fileName ) {
810
+ var fileParts = source . fileName . toLowerCase ( ) . split ( '.' ) . slice ( 1 ) ;
811
+ // trying everything from longest possible extension to shortest one
812
+ for ( var i = 0 , length = fileParts . length ; i < length ; i ++ ) {
813
+ var extension = fileParts . slice ( i ) . join ( '.' ) ,
814
+ typeSetName = assoc . extensions [ extension ] ;
815
+
816
+ if ( typeSetName ) {
817
+ return callback ( typeSetName ) ;
818
+ }
819
+ }
820
+ }
821
+ if ( source . mimeType ) {
822
+ var typeSetName = assoc . mimeTypes [ source . mimeType ] ;
823
+
824
+ if ( typeSetName ) {
825
+ return callback ( typeSetName ) ;
826
+ }
827
+ }
828
+ _callback ( ) ;
829
+ } ) ;
830
+ } ;
831
+
779
832
if ( typeof module === 'object' && module && typeof module . exports === 'object' ) {
780
833
jDataView = require ( 'jDataView' ) ;
781
834
module . exports = jBinary ;
0 commit comments