@@ -462,8 +462,8 @@ $(function () {
462
462
// Reverses what router() does, returning a URI (starting with #)
463
463
if ( ext ) route = $ . extend ( { } , route , ext )
464
464
var h = "#/"
465
- if ( route . page == "welcome" ) return h
466
- if ( route . page == "action" ) return h + e ( route . action )
465
+ if ( route . page == "welcome" ) return h
466
+ if ( route . page == "action" ) return h + e ( route . action )
467
467
if ( route . user ) {
468
468
h += "user/" + e ( route . user ) + "/"
469
469
if ( route . page == "user" ) return h
@@ -474,6 +474,7 @@ $(function () {
474
474
h += "program/" + e ( route . program )
475
475
if ( route . page == "run" ) return h
476
476
if ( route . page == "downloadFolder" ) return h + "/option/" + e ( route . page )
477
+ if ( route . page == "downloadHTML" ) return h + "/option/" + e ( route . page )
477
478
if ( route . page == "downloadProgram" ) return h + "/option/" + e ( route . page )
478
479
if ( route . page == "share" || route . page == "edit" ) return h + "/" + e ( route . page )
479
480
}
@@ -558,6 +559,7 @@ $(function () {
558
559
559
560
/********** Pages **********/
560
561
// Each of these replaces pageBody with the contents of a page
562
+ var embedHTML // The JavaScript code generated at pages.share
561
563
var pageBody = $ ( "#ajaxBody" )
562
564
pages . redirect = function ( route ) { redirect ( route . target ) }
563
565
pages . error = function ( route ) {
@@ -1295,6 +1297,7 @@ $(function () {
1295
1297
if ( ! header . ok )
1296
1298
page . find ( ".embedWarning" ) . text ( "This program cannot be embedded because its version declaration is unknown." )
1297
1299
else {
1300
+ embedHTML = '' // Will be an ampty string if there is a compile error
1298
1301
if ( header . unpackaged )
1299
1302
page . find ( ".embedWarning" ) . text ( "Embedding programs with development versions of GlowScript is not recommended. They will likely be broken by further changes, and the packages used for embedding may not match the packages used to run in an development version." )
1300
1303
var compiler_url
@@ -1343,8 +1346,8 @@ $(function () {
1343
1346
if ( v >= 2.5 && v < 3.0 ) exporturl = "https://s3.amazonaws.com/glowscript/"
1344
1347
// Note: some already exported 3.0 programs contain references to s3.amazonaws.com
1345
1348
if ( header . lang == 'vpython' )
1346
- runner = '<script type="text/javascript" src="' + exporturl + 'package/RSrun.' + header . version + '.min.js"></script>\n'
1347
- var embedHTML = (
1349
+ runner = '<script type="text/javascript" src="' + exporturl + 'package/RSrun.' + header . version + '.min.js"></script>\n'
1350
+ embedHTML = ( // embedHTML is a var introduced above to make it easy for downloadHTML
1348
1351
'<div id="' + divid + '" class="glowscript">\n' +
1349
1352
'<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n' +
1350
1353
'<link type="text/css" href="' + exporturl + 'css/redmond/' + verdir + '/jquery-ui.custom.css" rel="stylesheet" />\n' +
@@ -1359,14 +1362,29 @@ $(function () {
1359
1362
'\n//--><!]]></script>' +
1360
1363
'\n</div>' ) ;
1361
1364
page . find ( ".embedSource" ) . text ( embedHTML )
1365
+ page . find ( ".prog-download-html.button" ) . prop ( "href" , unroute ( route , { page :"downloadHTML" } ) )
1366
+ page . find ( ".prog-download-html.button" ) . text ( 'Download as HTML' )
1367
+ // page.find(".prog-edit.button").prop("href", unroute(route, {page:"edit"}))
1368
+ // if (isWritable) page.find(".prog-edit.button").text('Edit this program')
1369
+ // else page.find(".prog-edit.button").text('View this program')
1362
1370
} )
1363
1371
}
1364
1372
} )
1365
-
1366
1373
var frameSrc = run_link
1367
1374
var frameHTML = '<iframe style="border-style:none; border:0; width:650px; height:500px; margin:0; padding:0;" allow="hid" frameborder=0 src="' + frameSrc + '"></iframe>'
1368
1375
page . find ( ".frameSource" ) . text ( frameHTML ) ;
1369
1376
}
1377
+ pages . downloadHTML = function ( route ) { // Download an .html file suitable for running just by clicking it
1378
+ if ( embedHTML . length > 0 ) {
1379
+ let a = document . createElement ( "a" )
1380
+ a . setAttribute ( 'href' , 'data:text/text;charset=utf-8,' + encodeURIComponent ( embedHTML ) ) ;
1381
+ a . setAttribute ( 'download' , route . program + '.html' ) ;
1382
+ a . click ( )
1383
+ a . remove ( )
1384
+ }
1385
+
1386
+ navigate ( unroute ( route , { page :"edit" } ) ) // return to (stay on) edit page
1387
+ }
1370
1388
pages . downloadProgram = function ( route ) { // Currently the only program option is download (download a program to user computer)
1371
1389
apiDownload ( { user :route . user , folder :route . folder , program : route . program , option :'downloadProgram' } , function ( ret ) {
1372
1390
window . location = apiURL ( route ) // this sends the file to the user's download folder
0 commit comments