@@ -96,6 +96,27 @@ Code.getDemoPage = function () {
9696 return 'default' ;
9797} ;
9898
99+ Code . loadDoc = function ( href , callback ) {
100+ var link = document . createElement ( 'link' ) ,
101+ tag = document . getElementsByTagName ( 'script' ) [ 0 ] ;
102+ link . rel = 'import' ;
103+ link . href = href ;
104+ if ( typeof callback === 'function' ) {
105+ link . onload = function ( e ) {
106+ callback ( e . target . import ) ;
107+ } ;
108+ }
109+ tag . parentNode . insertBefore ( link , tag ) ;
110+ } ;
111+
112+ Code . loadJs = function ( src ) {
113+ var js = document . createElement ( 'script' ) ,
114+ tag = document . getElementsByTagName ( 'script' ) [ 0 ] ;
115+ js . async = 1 ;
116+ js . src = src ;
117+ tag . parentNode . insertBefore ( js , tag ) ;
118+ } ;
119+
99120/**
100121 * Is the current language (Code.LANG) an RTL language?
101122 * @return {boolean } True if RTL, false if LTR.
@@ -572,31 +593,14 @@ Code.renderContent = function() {
572593 }
573594} ;
574595
575- Code . getToolBox = function ( callback ) {
576- var toolboxContent = new XMLHttpRequest ( ) ;
577- var toolboxXML , toolbox ;
578-
579- toolboxContent . overrideMimeType ( 'text/xml' ) ;
580- toolboxContent . open ( 'GET' , 'toolbox/' + Code . PAGE + '.xml' , true ) ;
581-
582- toolboxContent . onreadystatechange = function ( ) {
583- if ( toolboxContent . readyState !== 4 ) return ;
584- toolboxXML = toolboxContent . responseXML ;
585- var categories =
586- slice . call ( toolboxXML . querySelectorAll ( 'category' ) ) . map ( function ( e ) {
587- return e . id ;
588- } ) ;
589- for ( var i = 0 , cat ; cat = categories [ i ] ; i ++ ) {
590- toolboxXML . getElementById ( cat ) . setAttribute ( 'name' , MSG [ cat ] ) ;
591- }
592- toolbox = new XMLSerializer ( ) . serializeToString ( toolboxXML ) ;
593-
594- if ( typeof callback === 'function' ) {
595- callback ( toolbox ) ;
596- }
597- } ;
598-
599- toolboxContent . send ( ) ;
596+ Code . getToolBox = function ( toolboxXML ) {
597+ var categories = slice . call ( toolboxXML . querySelectorAll ( 'category' ) ) . map ( function ( e ) {
598+ return e . id ;
599+ } ) ;
600+ for ( var i = 0 , cat ; cat = categories [ i ] ; i ++ ) {
601+ toolboxXML . querySelector ( '#' + cat ) . setAttribute ( 'name' , MSG [ cat ] ) ;
602+ }
603+ return new XMLSerializer ( ) . serializeToString ( toolboxXML ) ;
600604} ;
601605
602606/**
@@ -729,36 +733,24 @@ Code.init = function(toolbox) {
729733 window . addEventListener ( 'message' , messageDelegator , false ) ;
730734} ;
731735
732- Code . renderPage = function ( callback ) {
733- var tpl = Code . PAGE . split ( '/' ) [ 0 ] ,
734- req = new XMLHttpRequest ( ) ,
735- head = document . head ,
736- body = document . body ;
737-
738- req . addEventListener ( 'load' , function ( ) {
739- var template = Handlebars . compile ( this . responseText ) ;
740- body . innerHTML = template ( MSG ) ;
741-
742- slice . call ( body . querySelectorAll ( 'script' ) ) . forEach ( function ( sc ) {
743- var script = document . createElement ( 'script' ) ;
744- if ( sc . getAttribute ( 'src' ) ) {
745- script . setAttribute ( 'src' , sc . getAttribute ( 'src' ) ) ;
746- head . appendChild ( script ) ;
747- body . removeChild ( sc ) ;
748- } else if ( sc . text ) {
749- script . text = sc . text ;
750- head . appendChild ( script ) ;
751- body . removeChild ( sc ) ;
752- }
753- } ) ;
754-
755- if ( typeof callback === 'function' ) {
756- callback ( ) ;
736+ Code . renderPage = function ( templateStr ) {
737+ var head = document . head ,
738+ body = document . body ,
739+ template = Handlebars . compile ( templateStr ) ;
740+
741+ body . innerHTML = template ( MSG ) ;
742+ slice . call ( body . querySelectorAll ( 'script' ) ) . forEach ( function ( sc ) {
743+ var script = document . createElement ( 'script' ) ;
744+ if ( sc . getAttribute ( 'src' ) ) {
745+ script . setAttribute ( 'src' , sc . getAttribute ( 'src' ) ) ;
746+ head . appendChild ( script ) ;
747+ body . removeChild ( sc ) ;
748+ } else if ( sc . text ) {
749+ script . text = sc . text ;
750+ head . appendChild ( script ) ;
751+ body . removeChild ( sc ) ;
757752 }
758753 } ) ;
759-
760- req . open ( "get" , baseUrl + '/views/' + tpl + '.handlebars' , true ) ;
761- req . send ( ) ;
762754} ;
763755
764756/**
@@ -807,10 +799,14 @@ Code.initLanguage = function() {
807799Code . runJS = function ( ) {
808800 var now = Date . now ( ) ;
809801
810- if ( now - Code . lastRun < 500 ) {
811- return ;
802+ if ( navigator . userAgent . match ( / i P h o n e / i) ||
803+ navigator . userAgent . match ( / i P a d / i) ||
804+ navigator . userAgent . match ( / i P o d / i) ) {
805+ if ( now - Code . lastRun < 1000 ) {
806+ return ;
807+ }
808+ Code . lastRun = now ;
812809 }
813- Code . lastRun = now ;
814810
815811 Code . toggleRunning ( ) ;
816812 Code . reloadSandbox ( ) ;
@@ -882,6 +878,7 @@ Code.reloadSandbox = function () {
882878 frame . id = 'demo-frame' ;
883879 frame . style . display = 'block' ;
884880 container . appendChild ( frame ) ;
881+ Code . tabClick ( 'blocks' ) ;
885882
886883 launcher . sandbox ( frame , data ) ;
887884
@@ -1320,10 +1317,31 @@ if (Code.PAGE !== 'index') {
13201317 document . write ( '<script src="' + baseUrl + '/generators/' + Code . PAGE . split ( '/' ) [ 0 ] + '.js"></script>\n' ) ;
13211318}
13221319
1323- window . addEventListener ( 'load' , function ( ) {
1324- Code . renderPage ( function ( ) {
1325- Code . getToolBox ( function ( toolbox ) {
1326- Code . init ( toolbox ) ;
1320+ Promise . all ( [
1321+ new Promise ( function ( resolve ) {
1322+ Code . loadDoc ( baseUrl + '/views/' + Code . PAGE . split ( '/' ) [ 0 ] + '.handlebars' , function ( doc ) {
1323+ resolve ( doc . body . innerHTML ) ;
1324+ } ) ;
1325+ } ) ,
1326+ new Promise ( function ( resolve ) {
1327+ Code . loadDoc ( baseUrl + '/toolbox/' + Code . PAGE + '.xml' , function ( doc ) {
1328+ resolve ( doc . body . firstChild ) ;
13271329 } ) ;
1330+ } ) ,
1331+ new Promise ( function ( resolve ) {
1332+ window . addEventListener ( 'load' , function ( ) {
1333+ resolve ( ) ;
1334+ } , false ) ;
1335+ } )
1336+ ] ) . then ( function ( values ) {
1337+ Code . renderPage ( values [ 0 ] ) ;
1338+ Code . init ( Code . getToolBox ( values [ 1 ] ) ) ;
1339+ [
1340+ '/lib/babel.min.js' ,
1341+ '/lib/saveSvgAsPng.js' ,
1342+ '/lib/webduino-all-0.4.0.min.js' ,
1343+ '/webduino-samples.js' ,
1344+ ] . forEach ( function ( url ) {
1345+ Code . loadJs ( baseUrl + url ) ;
13281346 } ) ;
1329- } , false ) ;
1347+ } ) ;
0 commit comments