1
1
"use strict" ;
2
2
3
3
define ( [ "iter2d" , "evileval" ] , function ( iter2d , evileval ) {
4
-
5
-
6
- var loadAnimations2d = function ( animationNames , callback ) {
7
-
8
-
9
- var results = [ ] ;
10
- var addToResults = function ( result , path , position ) {
11
- var name = / a n i m a t i o n s \/ ( \w + ) \. j s / . exec ( path ) [ 1 ] ;
12
-
13
- if ( results [ position . row ] === undefined ) {
14
- results [ position . row ] = [ ] ;
15
- }
16
- result . name = name ;
17
- results [ position . row ] [ position . col ] = result ;
18
- } ;
19
- var addToResultsAndCallback = function ( result , path , position ) {
20
- addToResults ( result , path , position ) ;
21
- callback ( results ) ;
22
- } ;
23
-
24
- var initialPromise = null ;
25
- for ( var i = 0 ; i < animationNames . length ; i ++ ) {
26
- var lastrow = i == ( animationNames . length - 1 ) ;
27
- for ( var j = 0 ; j < animationNames [ i ] . length ; j ++ ) {
28
- var position = { row : i , col : j } ,
29
- animationName = animationNames [ i ] [ j ] ,
30
- lastcol = j == ( animationNames [ i ] . length - 1 ) ,
31
- handleAnimation = lastcol && lastrow ? addToResultsAndCallback : addToResults ;
32
- if ( isExternalJs ( animationName ) ) {
33
- //TODO this does not work
34
- animationName = / h t t p : .* \/ ( \w + \. j s ) / . exec ( animationName ) [ 1 ] ;
35
- }
36
- //loadAnimation(animationName, handleAnimation, position);
37
-
38
- if ( initialPromise === null ) {
39
- initialPromise = evileval . loadJsAnimOnCanvasAnimP ( animationName , { } ) ;
40
- } else {
41
- initialPromise = initialPromise . then ( function ( anPaPo ) {
42
- addToResults ( anPaPo . canvasAnim , anPaPo . path , anPaPo . position ) ;
43
- console . log ( results ) ;
44
- return evileval . loadJsAnimOnCanvasAnimP ( animationName , { } ) ;
45
- } ) ;
46
- }
47
- }
48
- }
49
- initialPromise . then ( function ( anPaPo ) {
50
- addToResults ( anPaPo . canvasAnim , anPaPo . path , anPaPo . position ) ;
51
- callback ( results ) ;
52
- } ) ;
53
-
54
- } ;
55
4
56
5
var isExternalJs = function ( url ) {
57
6
return url . match ( / h t t p : \/ \/ / ) ;
@@ -112,9 +61,7 @@ define(["iter2d", "evileval"], function(iter2d, evileval){
112
61
ajax . setRequestHeader ( "Content-type" , "application/x-www-form-urlencoded" ) ;
113
62
ajax . onreadystatechange = callback ;
114
63
ajax . send ( params ) ;
115
-
116
64
} ;
117
-
118
65
119
66
var makeAnimationFileName = function ( animationName ) {
120
67
return "/animations/" + animationName + ".js" ;
@@ -132,30 +79,79 @@ define(["iter2d", "evileval"], function(iter2d, evileval){
132
79
history . pushState ( { } , "..." , "/assemblage/" + assName ) ;
133
80
}
134
81
assemblagePath += assName + ".json" ;
135
-
136
- loadJson ( assemblagePath , function ( assemblage ) {
137
-
138
- var animationNames = iter2d . map2dArray ( assemblage , makeAnimationFileName ) ;
139
-
140
- loadAnimations2d ( animationNames , function ( animCodes ) {
141
- handleAnimCodes ( exquis , assName , animCodes ) ;
82
+ HTTPgetJSON ( assemblagePath )
83
+ . then ( function ( animationNames ) {
84
+ var animNamesList = animationNames . reduce ( function ( a , b ) {
85
+ return a . concat ( b ) ;
86
+ } ) ,
87
+ animPromises = animNamesList . map ( function ( animName ) {
88
+ var animPath = "/animations/" + animName + ".js" ;
89
+ return evileval . loadJsAnimOnCanvasAnimP ( animPath , { } ) ;
90
+ } ) ;
91
+ return Promise . all ( animPromises ) ;
92
+ } ) . then ( function ( animCodes ) {
93
+ var animCodes2d = splitarray ( animCodes , 3 ) ;
94
+ handleAnimCodes ( exquis , assName , animCodes2d ) ;
142
95
} ) ;
143
-
144
- } ) ;
145
96
} ;
146
-
97
+
98
+ var splitarray = function ( input , spacing ) {
99
+ var output = [ ] ;
100
+ for ( var i = 0 ; i < input . length ; i += spacing ) {
101
+ output [ output . length ] = input . slice ( i , i + spacing ) ;
102
+ }
103
+ return output ;
104
+ } ;
147
105
148
106
var loadAnimations = function ( exquis , handleJsonAnimations ) {
149
107
var name = window . location . pathname . substr ( "/assemblage/" . length ) ;
150
108
loadAssemblage ( exquis , name , handleJsonAnimations ) ;
151
109
} ;
110
+
111
+ var HTTPget = function ( url ) {
112
+ // Return a new promise.
113
+ return new Promise ( function ( resolve , reject ) {
114
+ // Do the usual XHR stuff
115
+ var req = new XMLHttpRequest ( ) ;
116
+ req . open ( 'GET' , url ) ;
117
+
118
+ req . onload = function ( ) {
119
+ // This is called even on 404 etc
120
+ // so check the status
121
+ if ( req . status == 200 ) {
122
+ // Resolve the promise with the response text
123
+ resolve ( req . response ) ;
124
+ }
125
+ else {
126
+ // Otherwise reject with the status text
127
+ // which will hopefully be a meaningful error
128
+ reject ( Error ( req . statusText ) ) ;
129
+ }
130
+ } ;
131
+
132
+ // Handle network errors
133
+ req . onerror = function ( ) {
134
+ reject ( Error ( "Network Error" ) ) ;
135
+ } ;
136
+
137
+ // Make the request
138
+ req . send ( ) ;
139
+ } ) ;
140
+ } ;
141
+
142
+ var HTTPgetJSON = function ( url ) {
143
+ return HTTPget ( url ) . then ( JSON . parse ) ;
144
+ } ;
152
145
153
146
return { saveAnimation : saveAnimation ,
154
147
loadAnimations : loadAnimations ,
155
148
loadAnimation : loadAnimation ,
156
149
loadText : loadText ,
157
150
loadJson : loadJson ,
158
151
makeAnimationFileUri : makeAnimationFileUri ,
159
- saveAssemblage : saveAssemblage } ;
152
+ saveAssemblage : saveAssemblage ,
153
+ HTTPgetJSON : HTTPgetJSON ,
154
+ HTTPget : HTTPget
155
+ } ;
160
156
161
157
} ) ;
0 commit comments