@@ -160,12 +160,16 @@ require({
160
160
var currentTab = '' ;
161
161
var newDemo ;
162
162
var demoHtml = '' ;
163
- var demoJs = '' ;
163
+ var demoCode = '' ;
164
164
var previousCode = '' ;
165
+ var previousHtml = '' ;
165
166
var runGist = false ;
166
167
var gistCode ;
168
+ var gistHtml ;
167
169
var sandcastleUrl = '' ;
168
170
171
+ var defaultHtml = '<style>\n@import url(../templates/bucket.css);\n</style>\n<div id=\"cesiumContainer\" class=\"fullSize\"></div>\n<div id=\"loadingOverlay\"><h1>Loading...</h1></div>\n<div id=\"toolbar\"></div>' ;
172
+
169
173
var galleryErrorMsg = document . createElement ( 'span' ) ;
170
174
galleryErrorMsg . className = 'galleryError' ;
171
175
galleryErrorMsg . style . display = 'none' ;
@@ -504,7 +508,7 @@ require({
504
508
window . onbeforeunload = function ( e ) {
505
509
var htmlText = ( htmlEditor . getValue ( ) ) . replace ( / \s / g, '' ) ;
506
510
var jsText = ( jsEditor . getValue ( ) ) . replace ( / \s / g, '' ) ;
507
- if ( demoHtml !== htmlText || demoJs !== jsText ) {
511
+ if ( demoHtml !== htmlText || demoCode !== jsText ) {
508
512
return 'Be sure to save a copy of any important edits before leaving this page.' ;
509
513
}
510
514
} ;
@@ -695,7 +699,7 @@ require({
695
699
696
700
if ( demo . name === 'Gist Import' ) {
697
701
jsEditor . setValue ( gistCode ) ;
698
- htmlEditor . setValue ( '<style>\n@import url(../templates/bucket.css);\n</style>\n<div id=\"cesiumContainer\" class=\"fullSize\"></div>\n<div id=\"loadingOverlay\"><h1>Loading...</h1></div>\n<div id=\"toolbar\"></div>' ) ;
702
+ htmlEditor . setValue ( gistHtml ) ;
699
703
document . title = 'Gist Import - Cesium Sandcastle' ;
700
704
CodeMirror . commands . runCesium ( jsEditor ) ;
701
705
return ;
@@ -719,17 +723,23 @@ require({
719
723
}
720
724
721
725
var scriptCode = scriptMatch [ 1 ] ;
722
- demoJs = scriptCode . replace ( / \s / g, '' ) ;
726
+ demoCode = scriptCode . replace ( / \s / g, '' ) ;
723
727
724
728
if ( Cesium . defined ( queryObject . gistId ) ) {
725
729
Cesium . loadJsonp ( 'https://api.github.com/gists/' + queryObject . gistId + '?access_token=dd8f755c2e5d9bbb26806bb93eaa2291f2047c60' )
726
730
. then ( function ( data ) {
727
731
var files = data . data . files ;
728
- var code = files [ Object . keys ( files ) [ 0 ] ] . content ;
732
+ var code = files [ 'Cesium-Sandcastle.js' ] . content ;
733
+ var htmlFile = files [ 'Cesium-Sandcastle.html' ] ;
734
+ var html = Cesium . defined ( htmlFile ) ? htmlFile . content : defaultHtml ; // Use the default html for old gists
729
735
jsEditor . setValue ( code ) ;
730
- demoJs = code . replace ( / \s / g, '' ) ;
736
+ htmlEditor . setValue ( html ) ;
737
+ demoCode = code . replace ( / \s / g, '' ) ;
738
+ demoHtml = html . replace ( / \s / g, '' ) ;
731
739
gistCode = code ;
740
+ gistHtml = html ;
732
741
previousCode = code ;
742
+ previousHtml = html ;
733
743
sandcastleUrl = Cesium . getBaseUri ( window . location . href ) + '?src=Hello%20World.html&label=Showcases&gist=' + gistId ;
734
744
CodeMirror . commands . runCesium ( jsEditor ) ;
735
745
clearRun ( ) ;
@@ -885,17 +895,22 @@ require({
885
895
var textArea = document . getElementById ( 'link' ) ;
886
896
textArea . value = '\n\n' ;
887
897
var code = jsEditor . getValue ( ) ;
888
- if ( code === previousCode ) {
898
+ var html = htmlEditor . getValue ( ) ;
899
+ if ( code === previousCode && html === previousHtml ) {
889
900
textArea . value = sandcastleUrl ;
890
901
textArea . select ( ) ;
891
902
return ;
892
903
}
893
904
previousCode = code ;
905
+ previousHtml = html ;
894
906
var data = {
895
907
public : true ,
896
908
files : {
897
909
'Cesium-Sandcastle.js' : {
898
910
content : code
911
+ } ,
912
+ 'Cesium-Sandcastle.html' : {
913
+ content : html
899
914
}
900
915
}
901
916
} ;
@@ -915,9 +930,10 @@ require({
915
930
916
931
registry . byId ( 'buttonImport' ) . on ( 'click' , function ( ) {
917
932
gistId = document . getElementById ( "gistId" ) . value ;
918
- if ( gistId . indexOf ( '/' ) !== - 1 ) {
919
- var index = gistId . lastIndexOf ( '/' ) ;
920
- gistId = gistId . substring ( index + 1 ) ;
933
+ var gistParameter = '&gist=' ;
934
+ var gistIndex = gistId . indexOf ( gistParameter ) ;
935
+ if ( gistIndex !== - 1 ) {
936
+ gistId = gistId . substring ( gistIndex + gistParameter . length ) ;
921
937
}
922
938
window . location . href = Cesium . getBaseUri ( window . location . href ) + '?src=Hello%20World.html&label=Showcases&gist=' + gistId ;
923
939
} ) ;
@@ -926,7 +942,7 @@ require({
926
942
var htmlText = ( htmlEditor . getValue ( ) ) . replace ( / \s / g, '' ) ;
927
943
var jsText = ( jsEditor . getValue ( ) ) . replace ( / \s / g, '' ) ;
928
944
var confirmChange = true ;
929
- if ( demoHtml !== htmlText || demoJs !== jsText ) {
945
+ if ( demoHtml !== htmlText || demoCode !== jsText ) {
930
946
confirmChange = window . confirm ( 'You have unsaved changes. Are you sure you want to navigate away from this demo?' ) ;
931
947
}
932
948
if ( confirmChange ) {
@@ -1044,9 +1060,7 @@ require({
1044
1060
} ) ;
1045
1061
}
1046
1062
1047
- function loadDemoFromFile ( index ) {
1048
- var demo = gallery_demos [ index ] ;
1049
-
1063
+ function loadDemoFromFile ( demo ) {
1050
1064
return requestDemo ( demo . name ) . then ( function ( value ) {
1051
1065
// Store the file contents for later searching.
1052
1066
demo . code = value ;
@@ -1092,7 +1106,7 @@ require({
1092
1106
content : demo . description . replace ( / \\ n / g, '<br/>' )
1093
1107
} ) ;
1094
1108
1095
- addFileToTab ( index ) ;
1109
+ addFileToTab ( demo ) ;
1096
1110
return demo ;
1097
1111
} ) ;
1098
1112
}
@@ -1104,10 +1118,21 @@ require({
1104
1118
loading = false ;
1105
1119
}
1106
1120
1107
- function addFileToGallery ( index ) {
1121
+ function insertSortedById ( parentTab , galleryButton ) {
1122
+ var child ;
1123
+ for ( child = parentTab . lastChild ; child !== null ; child = child . previousSibling ) {
1124
+ if ( galleryButton . id >= child . id ) {
1125
+ parentTab . insertBefore ( galleryButton , child . nextSibling ) ;
1126
+ return ;
1127
+ }
1128
+ }
1129
+ parentTab . appendChild ( galleryButton ) ;
1130
+ }
1131
+
1132
+ function addFileToGallery ( demo ) {
1108
1133
var searchDemos = dom . byId ( 'searchDemos' ) ;
1109
- createGalleryButton ( index , searchDemos , 'searchDemo' ) ;
1110
- return loadDemoFromFile ( index ) ;
1134
+ insertSortedById ( searchDemos , createGalleryButton ( demo , 'searchDemo' ) ) ;
1135
+ return loadDemoFromFile ( demo ) ;
1111
1136
}
1112
1137
1113
1138
function onShowCallback ( ) {
@@ -1116,8 +1141,7 @@ require({
1116
1141
} ;
1117
1142
}
1118
1143
1119
- function addFileToTab ( index ) {
1120
- var demo = gallery_demos [ index ] ;
1144
+ function addFileToTab ( demo ) {
1121
1145
if ( demo . label !== '' ) {
1122
1146
var labels = demo . label . split ( ',' ) ;
1123
1147
for ( var j = 0 ; j < labels . length ; j ++ ) {
@@ -1134,13 +1158,12 @@ require({
1134
1158
}
1135
1159
var tabName = label + 'Demos' ;
1136
1160
var tab = dom . byId ( tabName ) ;
1137
- createGalleryButton ( index , tab , tabName ) ;
1161
+ insertSortedById ( tab , createGalleryButton ( demo , tabName ) ) ;
1138
1162
}
1139
1163
}
1140
1164
}
1141
1165
1142
- function createGalleryButton ( index , tab , tabName ) {
1143
- var demo = gallery_demos [ index ] ;
1166
+ function createGalleryButton ( demo , tabName ) {
1144
1167
var imgSrc = 'templates/Gallery_tile.jpg' ;
1145
1168
if ( Cesium . defined ( demo . img ) ) {
1146
1169
imgSrc = 'gallery/' + demo . img ;
@@ -1150,7 +1173,6 @@ require({
1150
1173
demoLink . id = demo . name + tabName ;
1151
1174
demoLink . className = 'linkButton' ;
1152
1175
demoLink . href = 'gallery/' + encodeURIComponent ( demo . name ) + '.html' ;
1153
- tab . appendChild ( demoLink ) ;
1154
1176
1155
1177
if ( demo . name === "Hello World" ) {
1156
1178
newDemo = demo ;
@@ -1163,7 +1185,7 @@ require({
1163
1185
var htmlText = ( htmlEditor . getValue ( ) ) . replace ( / \s / g, '' ) ;
1164
1186
var jsText = ( jsEditor . getValue ( ) ) . replace ( / \s / g, '' ) ;
1165
1187
var confirmChange = true ;
1166
- if ( demoHtml !== htmlText || demoJs !== jsText ) {
1188
+ if ( demoHtml !== htmlText || demoCode !== jsText ) {
1167
1189
confirmChange = window . confirm ( 'You have unsaved changes. Are you sure you want to navigate away from this demo?' ) ;
1168
1190
}
1169
1191
if ( confirmChange ) {
@@ -1184,13 +1206,15 @@ require({
1184
1206
'<img src="' + imgSrc + '" class="demoTileThumbnail" alt="" onDragStart="return false;" />'
1185
1207
} ) . placeAt ( demoLink ) ;
1186
1208
1187
- on ( dom . byId ( demoLink . id ) , 'mouseover' , function ( ) {
1209
+ on ( demoLink , 'mouseover' , function ( ) {
1188
1210
scheduleGalleryTooltip ( demo ) ;
1189
1211
} ) ;
1190
1212
1191
- on ( dom . byId ( demoLink . id ) , 'mouseout' , function ( ) {
1213
+ on ( demoLink , 'mouseout' , function ( ) {
1192
1214
closeGalleryTooltip ( ) ;
1193
1215
} ) ;
1216
+
1217
+ return demoLink ;
1194
1218
}
1195
1219
1196
1220
var promise ;
@@ -1212,18 +1236,11 @@ require({
1212
1236
var i ;
1213
1237
var len = gallery_demos . length ;
1214
1238
1215
- // Sort alphabetically. This will eventually be a user option.
1216
- gallery_demos . sort ( function ( a , b ) {
1217
- var aName = a . name . toUpperCase ( ) ;
1218
- var bName = b . name . toUpperCase ( ) ;
1219
- return bName < aName ? 1 : bName > aName ? - 1 : 0 ;
1220
- } ) ;
1221
-
1222
1239
var queryInGalleryIndex = false ;
1223
1240
var queryName = queryObject . src . replace ( '.html' , '' ) ;
1224
1241
var promises = [ ] ;
1225
1242
for ( i = 0 ; i < len ; ++ i ) {
1226
- promises . push ( addFileToGallery ( i ) ) ;
1243
+ promises . push ( addFileToGallery ( gallery_demos [ i ] ) ) ;
1227
1244
}
1228
1245
1229
1246
promise = all ( promises ) . then ( function ( results ) {
@@ -1247,17 +1264,19 @@ require({
1247
1264
1248
1265
var demos = dom . byId ( 'allDemos' ) ;
1249
1266
for ( i = 0 ; i < len ; ++ i ) {
1250
- if ( ! / D e v e l o p m e n t / i. test ( gallery_demos [ i ] . label ) ) {
1251
- createGalleryButton ( i , demos , 'all' ) ;
1267
+ var demo = gallery_demos [ i ] ;
1268
+ if ( ! / D e v e l o p m e n t / i. test ( demo . label ) ) {
1269
+ insertSortedById ( demos , createGalleryButton ( demo , 'all' ) ) ;
1252
1270
}
1253
1271
}
1254
1272
1255
1273
if ( ! queryInGalleryIndex ) {
1256
- gallery_demos . push ( {
1257
- name : queryName ,
1258
- description : ''
1259
- } ) ;
1260
- return addFileToGallery ( gallery_demos . length - 1 ) ;
1274
+ var emptyDemo = {
1275
+ name : queryName ,
1276
+ description : ''
1277
+ } ;
1278
+ gallery_demos . push ( emptyDemo ) ;
1279
+ return addFileToGallery ( emptyDemo ) ;
1261
1280
}
1262
1281
} ) ;
1263
1282
}
0 commit comments