ソースを参照

update URL schema

Raanan Weber 5 年 前
コミット
1960df43b4

+ 6 - 4
Playground/frame.html

@@ -10,6 +10,8 @@
         <title>Babylon.js Playground</title>
         <meta charset='utf-8' />
         <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1">
+        <meta name="description" content="Babylon.js playground is a live editor for Babylon.js WebGL 3D scenes">
+        <meta name="keywords" content="Babylon.js,WebGL,3D">
         <link rel="shortcut icon" href="https://www.babylonjs.com/img/favicon/favicon.ico">
 
         <meta name="msapplication-TileColor" content="#ffffff">
@@ -91,7 +93,7 @@
             src="https://rawcdn.githack.com/MackeyK24/MackeyK24.github.io/14fda491c50cfca6d3e2f6cbc5e6afe22cc455d6/toolkit/babylon.navmesh.js">
         </script>
 
-        <link rel="stylesheet" href="css/frame.css" />
+        <link rel="stylesheet" href="/css/frame.css" />
     </head>
 
     <body>
@@ -101,11 +103,11 @@
             <span id="fpsLabel">FPS</span>
             <div class="footerRight">
                 <a href="javascript:void(null);">
-                    <img id="refresh" src="textures/icons/refresh.png" width="36" height="36" alt="Reload page"
+                    <img id="refresh" src="/textures/icons/refresh.png" width="36" height="36" alt="Reload page"
                         title="Reload page" />
                 </a>
                 <a id="edit" href="#" target="_blank">
-                    <img src="textures/icons/edit.png" width="36" height="36" alt="Edit in playground"
+                    <img src="/textures/icons/edit.png" width="36" height="36" alt="Edit in playground"
                         title="Edit in playground" />
                 </a>
             </div>
@@ -114,7 +116,7 @@
         <!-- jQuery -->
         <script src="https://code.jquery.com/jquery.min.js"></script>
 
-        <script src="js/frame.js"></script>
+        <script src="/js/frame.js"></script>
     </body>
 
 </html>

+ 2 - 0
Playground/full.html

@@ -12,6 +12,8 @@
         <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1">
 
         <script src="https://code.jquery.com/pep/0.4.2/pep.min.js"></script>
+        <!-- DatGUI -->
+        <script src="https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.6.2/dat.gui.min.js"></script>
         <!-- Babylon.js -->
         <script src="https://preview.babylonjs.com/ammo.js"></script>
         <script src="https://preview.babylonjs.com/recast.js"></script>

+ 70 - 70
Playground/index-local.html

@@ -14,19 +14,19 @@
     <link rel="shortcut icon" href="https://www.babylonjs.com/favicon.ico">
 
     <link rel="stylesheet" href="https://use.typekit.net/cta4xsb.css">
-    <link rel="stylesheet" href="css/index.css" />
-    <link rel="stylesheet" href="css/index_mobile.css" />
+    <link rel="stylesheet" href="/css/index.css" />
+    <link rel="stylesheet" href="/css/index_mobile.css" />
 
     <!-- Pep -->
     <script src="https://code.jquery.com/pep/0.4.2/pep.min.js"></script>
     <!--For canvas/code separator-->
-    <script src="js/libs/split.js"></script>
+    <script src="/js/libs/split.js"></script>
 
     <!-- DatGUI -->
     <script src="https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.6.2/dat.gui.min.js"></script>
     <!-- jszip -->
-    <script src="js/libs/jszip.min.js"></script>
-    <script src="js/libs/fileSaver.js"></script>
+    <script src="/js/libs/jszip.min.js"></script>
+    <script src="/js/libs/fileSaver.js"></script>
 
     <!-- Dependencies -->
     <script src="../dist/preview%20release/ammo.js"></script>
@@ -44,23 +44,23 @@
     <!-- Big screens -->
     <div class="navbar navBar1280 languageJS">
         <div class="categoryTitle">
-            <img class="logo" src="css/img/logo_v4.svg">
+            <img class="logo" src="/css/img/logo_v4.svg">
             <div class="version">Playground <span class="versionSub" id="mainTitle1280"></span></div>
         </div>
 
         <div class="category languageJS" id="JStoTSbar">
             <div class="buttonJStoTS languageTS" id="toTSbutton1280" title="Switch to TypeScript">Typescript</div>
             <div class="buttonJStoTS languageJS" id="toJSbutton1280" title="Switch to JavaScript">Javascript</div>
-            <div class="buttonPG run removeOnDiff" id="runButton1280" title="Run&#10;(Alt+Enter)"><img src="css/img/playButton.svg"></div>
-            <div class="buttonPG removeOnDiff" id="saveButton1280" title="Save&#10;(Ctrl+S)"><img src="css/img/saveButton.svg"></div>
-            <div class="buttonPG removeOnPhone removeOnDiff" id="zipButton1280" title="Download ZIP&#10;(Ctrl+Shift+S)"><img src="css/img/downloadButton.svg"></div>
-            <div class="buttonPG removeOnDiff" id="newButton1280" title="Create new"><img src="css/img/newButton.svg"></div>
-            <div class="buttonPG removeOnPhone removeOnDiff" id="clearButton1280" title="Clear"><img src="css/img/clearButton.svg"></div>
-            <div class="buttonPG removeOnPhone removeOnDiff" id="diffButton1280" title="Compare"><img src="css/img/diffButton.svg"></div>
-            <div class="buttonPG removeOnPhone displayOnDiff" id="previousButton1280" title="Previous difference&#10;(Shift+Alt+F5)"><img src="css/img/previousButton.svg"></div>
-            <div class="buttonPG removeOnPhone displayOnDiff" id="nextButton1280" title="Next difference&#10;(Alt+F5)"><img src="css/img/nextButton.svg"></div>
-            <div class="buttonPG removeOnPhone displayOnDiff" id="exitButton1280" title="Exit&#10;(Esc)"><img src="css/img/exitButton.svg"></div>
-            <div class="buttonPG select removeOnDiff" id="menuButton1280" title="Options"><img src="css/img/optionsButton.svg">
+            <div class="buttonPG run removeOnDiff" id="runButton1280" title="Run&#10;(Alt+Enter)"><img src="/css/img/playButton.svg"></div>
+            <div class="buttonPG removeOnDiff" id="saveButton1280" title="Save&#10;(Ctrl+S)"><img src="/css/img/saveButton.svg"></div>
+            <div class="buttonPG removeOnPhone removeOnDiff" id="zipButton1280" title="Download ZIP&#10;(Ctrl+Shift+S)"><img src="/css/img/downloadButton.svg"></div>
+            <div class="buttonPG removeOnDiff" id="newButton1280" title="Create new"><img src="/css/img/newButton.svg"></div>
+            <div class="buttonPG removeOnPhone removeOnDiff" id="clearButton1280" title="Clear"><img src="/css/img/clearButton.svg"></div>
+            <div class="buttonPG removeOnPhone removeOnDiff" id="diffButton1280" title="Compare"><img src="/css/img/diffButton.svg"></div>
+            <div class="buttonPG removeOnPhone displayOnDiff" id="previousButton1280" title="Previous difference&#10;(Shift+Alt+F5)"><img src="/css/img/previousButton.svg"></div>
+            <div class="buttonPG removeOnPhone displayOnDiff" id="nextButton1280" title="Next difference&#10;(Alt+F5)"><img src="/css/img/nextButton.svg"></div>
+            <div class="buttonPG removeOnPhone displayOnDiff" id="exitButton1280" title="Exit&#10;(Esc)"><img src="/css/img/exitButton.svg"></div>
+            <div class="buttonPG select removeOnDiff" id="menuButton1280" title="Options"><img src="/css/img/optionsButton.svg">
                 <div class="toDisplay languageJS">
                     <div class="option subSelect">Theme <i class="fa fa-chevron-right" aria-hidden="true"></i>
                         <div class="toDisplaySub languageJS">
@@ -107,14 +107,14 @@
                 <span id="currentVersion1280"></span>
                 <div class="toDisplay currentVersionDisplay" style="display: none"></div>
             </div>
-            <div class="buttonPG select removeOnDiff" title="Examples"><img class="examplesButton" src="css/img/examplesButton.svg"></div>
+            <div class="buttonPG select removeOnDiff" title="Examples"><img class="examplesButton" src="/css/img/examplesButton.svg"></div>
         </div>
     </div>
 
     <!-- Mid-size screens -->
     <div class="navbar navBar1024 languageJS">
         <div class="categoryTitle">
-            <img class="logo" src="css/img/logo_v4.svg">
+            <img class="logo" src="/css/img/logo_v4.svg">
             <div class="version"><span class="versionSub" id="mainTitle1024"></span></div>
         </div>
 
@@ -122,17 +122,17 @@
             <div class="buttonJStoTS languageTS" id="toTSbutton1024" title="Switch to TypeScript">TS</div>
             <div class="buttonJStoTS languageJS" id="toJSbutton1024" title="Switch to JavaScript">JS</div>
             <div class="buttonSpaceKiller"></div>
-            <div class="buttonPG run removeOnDiff" id="runButton1024" title="Run&#10;(Alt+Enter)"><img src="css/img/playButton.svg"></div>
-            <div class="buttonPG removeOnDiff" id="saveButton1024" title="Save&#10;(Ctrl+S)"><img src="css/img/saveButton.svg"></div>
-            <div class="buttonPG removeOnPhone removeOnDiff" id="zipButton1024" title="Download ZIP&#10;(Ctrl+Shift+S)"><img src="css/img/downloadButton.svg"></div>
-            <div class="buttonPG removeOnDiff" id="newButton1024" title="Create new"><img src="css/img/newButton.svg"></div>
-            <div class="buttonPG removeOnPhone removeOnDiff" id="clearButton1024" title="Clear"><img src="css/img/clearButton.svg"></div>
-            <div class="buttonPG removeOnPhone removeOnDiff" id="diffButton1024" title="Compare"><img src="css/img/diffButton.svg"></div>
-            <div class="buttonPG removeOnPhone displayOnDiff" id="previousButton1024"><img src="css/img/previousButton.svg"></div>
-            <div class="buttonPG removeOnPhone displayOnDiff" id="nextButton1024"><img src="css/img/nextButton.svg"></div>
-            <div class="buttonPG removeOnPhone displayOnDiff" id="exitButton1024"><img src="css/img/exitButton.svg"></div>
-
-            <div class="buttonPG select removeOnDiff" id="menuButton1024" title="Options"><img src="css/img/optionsButton.svg">
+            <div class="buttonPG run removeOnDiff" id="runButton1024" title="Run&#10;(Alt+Enter)"><img src="/css/img/playButton.svg"></div>
+            <div class="buttonPG removeOnDiff" id="saveButton1024" title="Save&#10;(Ctrl+S)"><img src="/css/img/saveButton.svg"></div>
+            <div class="buttonPG removeOnPhone removeOnDiff" id="zipButton1024" title="Download ZIP&#10;(Ctrl+Shift+S)"><img src="/css/img/downloadButton.svg"></div>
+            <div class="buttonPG removeOnDiff" id="newButton1024" title="Create new"><img src="/css/img/newButton.svg"></div>
+            <div class="buttonPG removeOnPhone removeOnDiff" id="clearButton1024" title="Clear"><img src="/css/img/clearButton.svg"></div>
+            <div class="buttonPG removeOnPhone removeOnDiff" id="diffButton1024" title="Compare"><img src="/css/img/diffButton.svg"></div>
+            <div class="buttonPG removeOnPhone displayOnDiff" id="previousButton1024"><img src="/css/img/previousButton.svg"></div>
+            <div class="buttonPG removeOnPhone displayOnDiff" id="nextButton1024"><img src="/css/img/nextButton.svg"></div>
+            <div class="buttonPG removeOnPhone displayOnDiff" id="exitButton1024"><img src="/css/img/exitButton.svg"></div>
+
+            <div class="buttonPG select removeOnDiff" id="menuButton1024" title="Options"><img src="/css/img/optionsButton.svg">
                 <div class="toDisplay">
                     <div class="option subSelect">Theme <i class="fa fa-chevron-right" aria-hidden="true"></i>
 
@@ -181,42 +181,42 @@
                 <div class="toDisplay currentVersionDisplay" style="display: none">
                 </div>
             </div>
-            <div class="buttonPG select removeOnDiff" title="Examples"><img class="examplesButton" src="css/img/examplesButton.svg"></div>
+            <div class="buttonPG select removeOnDiff" title="Examples"><img class="examplesButton" src="/css/img/examplesButton.svg"></div>
         </div>
     </div>
 
     <!-- Mobile -->
     <div class="navbar navBarMobile languageJS">
         <div class="category languageJS" id="JStoTSbar">
-            <div class="buttonPG select" id="menuButtonMobile"><img src="css/img/hamburgerButton.svg">
+            <div class="buttonPG select" id="menuButtonMobile"><img src="/css/img/hamburgerButton.svg">
                 <div class="toDisplay">
                     <div class="option noSubSelect languageTS" id="toTSbuttonMobile">TypeScript</div>
                     <div class="option noSubSelect languageJS" id="toJSbuttonMobile">JavaScript</div>
-                    <div class="option noSubSelect run removeOnDiff" id="runButtonMobile"><img src="css/img/playButton.svg">Run</div>
-                    <div class="option noSubSelect removeOnDiff" id="saveButtonMobile"><img src="css/img/saveButton.svg">Save</div>
-                    <div class="option noSubSelect removeOnDiff" id="zipButtonMobile"><img src="css/img/downloadButton.svg">Download</div>
-                    <div class="option noSubSelect removeOnDiff" id="newButtonMobile"><img src="css/img/newButton.svg">New</div>
-                    <div class="option noSubSelect removeOnDiff" id="clearButtonMobile"><img src="css/img/clearButton.svg">Clear</div>
-                    <div class="option noSubSelect removeOnDiff" id="diffButtonMobile"><img src="css/img/diffButton.svg">Diff</div>
-                    <div class="option noSubSelect displayOnDiff" id="previousButtonMobile"><img src="css/img/previousButton.svg">Previous</div>
-                    <div class="option noSubSelect displayOnDiff" id="nextButtonMobile"><img src="css/img/nextButton.svg">Next</div>
-                    <div class="option noSubSelect displayOnDiff" id="exitButtonMobile"><img src="css/img/exitButton.svg">Exit</div>
+                    <div class="option noSubSelect run removeOnDiff" id="runButtonMobile"><img src="/css/img/playButton.svg">Run</div>
+                    <div class="option noSubSelect removeOnDiff" id="saveButtonMobile"><img src="/css/img/saveButton.svg">Save</div>
+                    <div class="option noSubSelect removeOnDiff" id="zipButtonMobile"><img src="/css/img/downloadButton.svg">Download</div>
+                    <div class="option noSubSelect removeOnDiff" id="newButtonMobile"><img src="/css/img/newButton.svg">New</div>
+                    <div class="option noSubSelect removeOnDiff" id="clearButtonMobile"><img src="/css/img/clearButton.svg">Clear</div>
+                    <div class="option noSubSelect removeOnDiff" id="diffButtonMobile"><img src="/css/img/diffButton.svg">Diff</div>
+                    <div class="option noSubSelect displayOnDiff" id="previousButtonMobile"><img src="/css/img/previousButton.svg">Previous</div>
+                    <div class="option noSubSelect displayOnDiff" id="nextButtonMobile"><img src="/css/img/nextButton.svg">Next</div>
+                    <div class="option noSubSelect displayOnDiff" id="exitButtonMobile"><img src="/css/img/exitButton.svg">Exit</div>
 
                     <div class="option noSubSelect removeOnDiff" id="debugButtonMobile"><img
-                            src="css/img/inspectorButton.svg">Inspector</div>
+                            src="/css/img/inspectorButton.svg">Inspector</div>
                     <div class="option subSelect removeOnDiff">
-                        <img src="css/img/optionsButton.svg">
+                        <img src="/css/img/optionsButton.svg">
                         <div id="currentVersionMobile"></div>
                         <div class="toDisplaySub currentVersionDisplay">
                         </div>
                     </div>
-                    <div class="option subSelect removeOnDiff"><img src="css/img/optionsButton.svg">Theme
+                    <div class="option subSelect removeOnDiff"><img src="/css/img/optionsButton.svg">Theme
                         <div class="toDisplaySub">
                             <div class="option selected" id="darkThemeMobile">Dark</div>
                             <div class="option" id="lightThemeMobile">Light</div>
                         </div>
                     </div>
-                    <div class="option subSelect removeOnDiff"><img src="css/img/optionsButton.svg">Font size
+                    <div class="option subSelect removeOnDiff"><img src="/css/img/optionsButton.svg">Font size
                         <div class="toDisplaySub displayFontSize">
                             <div class="option">8</div>
                             <div class="option">10</div>
@@ -239,21 +239,21 @@
                     <div style="display: none;" class="option nosubselect" id="editorFullscreenButtonMobile"
                         style="display: none">Editor
                         Fullscreen</div>
-                    <div class="option nosubselect removeOnDiff" id="formatButtonMobile"><img src="css/img/optionsButton.svg">Format
+                    <div class="option nosubselect removeOnDiff" id="formatButtonMobile"><img src="/css/img/optionsButton.svg">Format
                         code</div>
                     <div style="display: none;" class="option nosubselect" id="minimapToggleMobile">Minimap
                         <i class="fa fa-square" aria-hidden="true"></i>
                     </div>
-                    <!-- <div class="option subSelect" id="qrCodeHoverMobile"><img src="css/img/optionsButton.svg">QR Code Link
+                    <!-- <div class="option subSelect" id="qrCodeHoverMobile"><img src="/css/img/optionsButton.svg">QR Code Link
                         <div class="toDisplaySub qrCodeImage">
                             <div class="option" id="qrCodeImageMobile">[QR Code Image]</div>
                         </div>
                     </div> -->
                     <div class="option nosubselect removeOnDiff" id="metadataButtonMobile"><img
-                            src="css/img/metadataButton.svg">Metadata</div>
+                            src="/css/img/metadataButton.svg">Metadata</div>
                     <div class="option nosubselect removeOnDiff"><img class="examplesButton"
-                            src="css/img/examplesButton.svg">Examples</div>
-                    <div class="option subSelect removeOnDiff"><img src="css/img/examplesButton.svg">Links / Tools
+                            src="/css/img/examplesButton.svg">Examples</div>
+                    <div class="option subSelect removeOnDiff"><img src="/css/img/examplesButton.svg">Links / Tools
                         <div class="toDisplaySub displayFooterLinks">
                             <div class="option link">
                                 <a target='_new' href="https://www.netlify.com/">Deployed by Netlify</a>
@@ -275,14 +275,14 @@
                 </div>
             </div>
             <div class="categoryTitle">
-                <img class="logo" src="css/img/logo_v4.svg">
+                <img class="logo" src="/css/img/logo_v4.svg">
                 <div class="version"><span class="versionSub" id="mainTitleMobile"></span></div>
             </div>
         </div>
 
         <div id="switchWrapper" class="languageJS removeOnDiff">
-            <img id="switchWrapperCode" src="css/img/codeButton.svg">
-            <img id="switchWrapperCanvas" src="css/img/canvas3Dbutton.svg">
+            <img id="switchWrapperCode" src="/css/img/codeButton.svg">
+            <img id="switchWrapperCanvas" src="/css/img/canvas3Dbutton.svg">
         </div>
     </div>
 
@@ -297,7 +297,7 @@
     </div>
     <div id="exampleList" class="javascript">
         <div id="exampleBanner" class="languageJS">
-            <h1>Examples<img id="examplesButtonClose" src="css/img/clearButton.svg"></h1>
+            <h1>Examples<img id="examplesButtonClose" src="/css/img/clearButton.svg"></h1>
         </div>
         <div class="horizontalSeparator"></div>
         <input id="filterBar" type="text" placeholder="Filter examples...">
@@ -333,7 +333,7 @@
 
     <div id="saveLayer" class="save-layer">
         <div class="save-form languageJS ">
-            <img id="saveFormButtonClose" src="css/img/clearButton.svg">
+            <img id="saveFormButtonClose" src="/css/img/clearButton.svg">
             <label for="saveFormTitle">TITLE</label>
             <div class="separator"></div>
             <input type="text" maxlength="120" id="saveFormTitle" class="save-form-title">
@@ -372,31 +372,31 @@
 
     <div id="waitDiv">
         <div id="logo-part">
-            <img src="css/img/v4.svg" id="waitLogo" />
-            <img src="css/img/spinner.svg" id="waitSpinner" />
+            <img src="/css/img/v4.svg" id="waitLogo" />
+            <img src="/css/img/spinner.svg" id="waitSpinner" />
         </div>
     </div>
 
     <!-- jQuery -->
     <script src="https://code.jquery.com/jquery.js"></script>
-    <script src="js/jquery.qrcode.js"></script>
-    <script src="js/qrcode.js"></script>
+    <script src="/js/jquery.qrcode.js"></script>
+    <script src="/js/qrcode.js"></script>
 
     <!-- jQuery -->
-    <script src="js/libs/jquery.min.js"></script>
-    <script src="js/jquery.qrcode.js"></script>
-    <script src="js/qrcode.js"></script>
+    <script src="/js/libs/jquery.min.js"></script>
+    <script src="/js/jquery.qrcode.js"></script>
+    <script src="/js/qrcode.js"></script>
 
     <!-- Main scripts -->
-    <script src="js/config_versions.js"></script>
-    <script src="js/pbt.js"></script>
-    <script src="js/examples.js"></script>
-    <script src="js/main.js"></script>
-    <script src="js/menuPG.js"></script>
-    <script src="js/monacoCreator.js"></script>
-    <script src="js/settingsPG.js"></script>
-    <script src="js/utils.js"></script>
-    <script src="js/zipTool.js"></script>
+    <script src="/js/config_versions.js"></script>
+    <script src="/js/pbt.js"></script>
+    <script src="/js/examples.js"></script>
+    <script src="/js/main.js"></script>
+    <script src="/js/menuPG.js"></script>
+    <script src="/js/monacoCreator.js"></script>
+    <script src="/js/settingsPG.js"></script>
+    <script src="/js/utils.js"></script>
+    <script src="/js/zipTool.js"></script>
     
     <script>
         BABYLONDEVTOOLS.Loader

+ 72 - 70
Playground/index.html

@@ -5,13 +5,13 @@
         <title>Babylon.js Playground</title>
         <meta charset='utf-8' />
         <meta name="viewport" content="width=device-width, user-scalable=no">
-        <meta name="description" content="Babylon.js playground is a live editor for Babylon.js WebGL scenes">
+        <meta name="description" content="Babylon.js playground is a live editor for Babylon.js WebGL 3D scenes">
         <meta name="keywords" content="Babylon.js,WebGL,3D">
         <link rel="shortcut icon" href="https://www.babylonjs.com/favicon.ico">
 
         <link rel="stylesheet" href="https://use.typekit.net/cta4xsb.css" />
-        <link rel="stylesheet" href="css/index.css" />
-        <link rel="stylesheet" href="css/index_mobile.css" />
+        <link rel="stylesheet" href="/css/index.css" />
+        <link rel="stylesheet" href="/css/index_mobile.css" />
 
     </head>
 
@@ -19,7 +19,7 @@
         <!-- Big screens -->
         <div class="navbar navBar1280 languageJS">
             <div class="categoryTitle">
-                <img class="logo" src="css/img/logo_v4.svg">
+                <img class="logo" src="/css/img/logo_v4.svg">
                 <div class="version">Playground <span class="versionSub" id="mainTitle1280"></span></div>
             </div>
 
@@ -27,25 +27,25 @@
                 <div class="buttonJStoTS languageTS" id="toTSbutton1280" title="Switch to TypeScript">Typescript</div>
                 <div class="buttonJStoTS languageJS" id="toJSbutton1280" title="Switch to JavaScript">Javascript</div>
                 <div class="buttonPG run removeOnDiff" id="runButton1280" title="Run&#10;(Alt+Enter)"><img
-                        src="css/img/playButton.svg"></div>
+                        src="/css/img/playButton.svg"></div>
                 <div class="buttonPG removeOnDiff" id="saveButton1280" title="Save&#10;(Ctrl+S)"><img
-                        src="css/img/saveButton.svg"></div>
+                        src="/css/img/saveButton.svg"></div>
                 <div class="buttonPG removeOnPhone removeOnDiff" id="zipButton1280"
-                    title="Download ZIP&#10;(Ctrl+Shift+S)"><img src="css/img/downloadButton.svg"></div>
+                    title="Download ZIP&#10;(Ctrl+Shift+S)"><img src="/css/img/downloadButton.svg"></div>
                 <div class="buttonPG removeOnDiff" id="newButton1280" title="Create new"><img
-                        src="css/img/newButton.svg"></div>
+                        src="/css/img/newButton.svg"></div>
                 <div class="buttonPG removeOnPhone removeOnDiff" id="clearButton1280" title="Clear"><img
-                        src="css/img/clearButton.svg"></div>
+                        src="/css/img/clearButton.svg"></div>
                 <div class="buttonPG removeOnPhone removeOnDiff" id="diffButton1280" title="Compare"><img
-                        src="css/img/diffButton.svg"></div>
+                        src="/css/img/diffButton.svg"></div>
                 <div class="buttonPG removeOnPhone displayOnDiff" id="previousButton1280"
-                    title="Previous difference&#10;(Shift+Alt+F5)"><img src="css/img/previousButton.svg"></div>
+                    title="Previous difference&#10;(Shift+Alt+F5)"><img src="/css/img/previousButton.svg"></div>
                 <div class="buttonPG removeOnPhone displayOnDiff" id="nextButton1280"
-                    title="Next difference&#10;(Alt+F5)"><img src="css/img/nextButton.svg"></div>
+                    title="Next difference&#10;(Alt+F5)"><img src="/css/img/nextButton.svg"></div>
                 <div class="buttonPG removeOnPhone displayOnDiff" id="exitButton1280" title="Exit&#10;(Esc)"><img
-                        src="css/img/exitButton.svg"></div>
+                        src="/css/img/exitButton.svg"></div>
                 <div class="buttonPG select removeOnDiff" id="menuButton1280" title="Options"><img
-                        src="css/img/optionsButton.svg">
+                        src="/css/img/optionsButton.svg">
                     <div class="toDisplay languageJS">
                         <div class="option subSelect">Theme <i class="fa fa-chevron-right" aria-hidden="true"></i>
                             <div class="toDisplaySub languageJS">
@@ -93,14 +93,14 @@
                     <div class="toDisplay currentVersionDisplay" style="display: none"></div>
                 </div>
                 <div class="buttonPG select removeOnDiff" title="Examples"><img class="examplesButton"
-                        src="css/img/examplesButton.svg"></div>
+                        src="/css/img/examplesButton.svg"></div>
             </div>
         </div>
 
         <!-- Mid-size screens -->
         <div class="navbar navBar1024 languageJS">
             <div class="categoryTitle">
-                <img class="logo" src="css/img/logo_v4.svg">
+                <img class="logo" src="/css/img/logo_v4.svg">
                 <div class="version"><span class="versionSub" id="mainTitle1024"></span></div>
             </div>
 
@@ -109,26 +109,28 @@
                 <div class="buttonJStoTS languageJS" id="toJSbutton1024" title="Switch to JavaScript">JS</div>
                 <div class="buttonSpaceKiller"></div>
                 <div class="buttonPG run removeOnDiff" id="runButton1024" title="Run&#10;(Alt+Enter)"><img
-                        src="css/img/playButton.svg"></div>
+                        src="/css/img/playButton.svg"></div>
                 <div class="buttonPG removeOnDiff" id="saveButton1024" title="Save&#10;(Ctrl+S)"><img
-                        src="css/img/saveButton.svg"></div>
+                        src="/css/img/saveButton.svg"></div>
                 <div class="buttonPG removeOnPhone removeOnDiff" id="zipButton1024"
-                    title="Download ZIP&#10;(Ctrl+Shift+S)"><img src="css/img/downloadButton.svg"></div>
+                    title="Download ZIP&#10;(Ctrl+Shift+S)"><img src="/css/img/downloadButton.svg"></div>
                 <div class="buttonPG removeOnDiff" id="newButton1024" title="Create new"><img
-                        src="css/img/newButton.svg"></div>
+                        src="/css/img/newButton.svg"></div>
                 <div class="buttonPG removeOnPhone removeOnDiff" id="clearButton1024" title="Clear"><img
-                        src="css/img/clearButton.svg"></div>
+                        src="/css/img/clearButton.svg"></div>
                 <div class="buttonPG removeOnPhone removeOnDiff" id="diffButton1024" title="Compare"><img
-                        src="css/img/diffButton.svg"></div>
+                        src="/css/img/diffButton.svg"></div>
                 <div class="buttonPG removeOnPhone displayOnDiff" id="previousButton1024"><img
-                        src="css/img/previousButton.svg"></div>
-                <div class="buttonPG removeOnPhone displayOnDiff" id="nextButton1024"><img src="css/img/nextButton.svg">
+                        src="/css/img/previousButton.svg"></div>
+                <div class="buttonPG removeOnPhone displayOnDiff" id="nextButton1024"><img
+                        src="/css/img/nextButton.svg">
                 </div>
-                <div class="buttonPG removeOnPhone displayOnDiff" id="exitButton1024"><img src="css/img/exitButton.svg">
+                <div class="buttonPG removeOnPhone displayOnDiff" id="exitButton1024"><img
+                        src="/css/img/exitButton.svg">
                 </div>
 
                 <div class="buttonPG select removeOnDiff" id="menuButton1024" title="Options"><img
-                        src="css/img/optionsButton.svg">
+                        src="/css/img/optionsButton.svg">
                     <div class="toDisplay">
                         <div class="option subSelect">Theme <i class="fa fa-chevron-right" aria-hidden="true"></i>
 
@@ -178,51 +180,51 @@
                     </div>
                 </div>
                 <div class="buttonPG select removeOnDiff" title="Examples"><img class="examplesButton"
-                        src="css/img/examplesButton.svg"></div>
+                        src="/css/img/examplesButton.svg"></div>
             </div>
         </div>
 
         <!-- Mobile -->
         <div class="navbar navBarMobile languageJS">
             <div class="category languageJS" id="JStoTSbar">
-                <div class="buttonPG select" id="menuButtonMobile"><img src="css/img/hamburgerButton.svg">
+                <div class="buttonPG select" id="menuButtonMobile"><img src="/css/img/hamburgerButton.svg">
                     <div class="toDisplay">
                         <div class="option noSubSelect languageTS" id="toTSbuttonMobile">TypeScript</div>
                         <div class="option noSubSelect languageJS" id="toJSbuttonMobile">JavaScript</div>
                         <div class="option noSubSelect run removeOnDiff" id="runButtonMobile"><img
-                                src="css/img/playButton.svg">Run</div>
+                                src="/css/img/playButton.svg">Run</div>
                         <div class="option noSubSelect removeOnDiff" id="saveButtonMobile"><img
-                                src="css/img/saveButton.svg">Save</div>
+                                src="/css/img/saveButton.svg">Save</div>
                         <div class="option noSubSelect removeOnDiff" id="zipButtonMobile"><img
-                                src="css/img/downloadButton.svg">Download</div>
+                                src="/css/img/downloadButton.svg">Download</div>
                         <div class="option noSubSelect removeOnDiff" id="newButtonMobile"><img
-                                src="css/img/newButton.svg">New</div>
+                                src="/css/img/newButton.svg">New</div>
                         <div class="option noSubSelect removeOnDiff" id="clearButtonMobile"><img
-                                src="css/img/clearButton.svg">Clear</div>
+                                src="/css/img/clearButton.svg">Clear</div>
                         <div class="option noSubSelect removeOnDiff" id="diffButtonMobile"><img
-                                src="css/img/diffButton.svg">Diff</div>
+                                src="/css/img/diffButton.svg">Diff</div>
                         <div class="option noSubSelect displayOnDiff" id="previousButtonMobile"><img
-                                src="css/img/previousButton.svg">Previous</div>
+                                src="/css/img/previousButton.svg">Previous</div>
                         <div class="option noSubSelect displayOnDiff" id="nextButtonMobile"><img
-                                src="css/img/nextButton.svg">Next</div>
+                                src="/css/img/nextButton.svg">Next</div>
                         <div class="option noSubSelect displayOnDiff" id="exitButtonMobile"><img
-                                src="css/img/exitButton.svg">Exit</div>
+                                src="/css/img/exitButton.svg">Exit</div>
 
                         <div class="option noSubSelect removeOnDiff" id="debugButtonMobile"><img
-                                src="css/img/inspectorButton.svg">Inspector</div>
+                                src="/css/img/inspectorButton.svg">Inspector</div>
                         <div class="option subSelect removeOnDiff">
-                            <img src="css/img/optionsButton.svg">
+                            <img src="/css/img/optionsButton.svg">
                             <div id="currentVersionMobile"></div>
                             <div class="toDisplaySub currentVersionDisplay">
                             </div>
                         </div>
-                        <div class="option subSelect removeOnDiff"><img src="css/img/optionsButton.svg">Theme
+                        <div class="option subSelect removeOnDiff"><img src="/css/img/optionsButton.svg">Theme
                             <div class="toDisplaySub">
                                 <div class="option selected" id="darkThemeMobile">Dark</div>
                                 <div class="option" id="lightThemeMobile">Light</div>
                             </div>
                         </div>
-                        <div class="option subSelect removeOnDiff"><img src="css/img/optionsButton.svg">Font size
+                        <div class="option subSelect removeOnDiff"><img src="/css/img/optionsButton.svg">Font size
                             <div class="toDisplaySub displayFontSize">
                                 <div class="option">8</div>
                                 <div class="option">10</div>
@@ -246,21 +248,21 @@
                             style="display: none">Editor
                             Fullscreen</div>
                         <div class="option nosubselect removeOnDiff" id="formatButtonMobile"><img
-                                src="css/img/optionsButton.svg">Format
+                                src="/css/img/optionsButton.svg">Format
                             code</div>
                         <div style="display: none;" class="option nosubselect" id="minimapToggleMobile">Minimap
                             <i class="fa fa-square" aria-hidden="true"></i>
                         </div>
-                        <!-- <div class="option subSelect" id="qrCodeHoverMobile"><img src="css/img/optionsButton.svg">QR Code Link
+                        <!-- <div class="option subSelect" id="qrCodeHoverMobile"><img src="/css/img/optionsButton.svg">QR Code Link
                         <div class="toDisplaySub qrCodeImage">
                             <div class="option" id="qrCodeImageMobile">[QR Code Image]</div>
                         </div>
                     </div> -->
                         <div class="option nosubselect removeOnDiff" id="metadataButtonMobile"><img
-                                src="css/img/metadataButton.svg">Metadata</div>
+                                src="/css/img/metadataButton.svg">Metadata</div>
                         <div class="option nosubselect removeOnDiff"><img class="examplesButton"
-                                src="css/img/examplesButton.svg">Examples</div>
-                        <div class="option subSelect removeOnDiff"><img src="css/img/examplesButton.svg">Links / Tools
+                                src="/css/img/examplesButton.svg">Examples</div>
+                        <div class="option subSelect removeOnDiff"><img src="/css/img/examplesButton.svg">Links / Tools
                             <div class="toDisplaySub displayFooterLinks">
                                 <div class="option link">
                                     <a target='_new' href="https://forum.babylonjs.com/">Forum</a>
@@ -279,14 +281,14 @@
                     </div>
                 </div>
                 <div class="categoryTitle">
-                    <img class="logo" src="css/img/logo_v4.svg">
+                    <img class="logo" src="/css/img/logo_v4.svg">
                     <div class="version"><span class="versionSub" id="mainTitleMobile"></span></div>
                 </div>
             </div>
 
             <div id="switchWrapper" class="languageJS removeOnDiff">
-                <img id="switchWrapperCode" src="css/img/codeButton.svg">
-                <img id="switchWrapperCanvas" src="css/img/canvas3Dbutton.svg">
+                <img id="switchWrapperCode" src="/css/img/codeButton.svg">
+                <img id="switchWrapperCanvas" src="/css/img/canvas3Dbutton.svg">
             </div>
         </div>
 
@@ -301,7 +303,7 @@
         </div>
         <div id="exampleList" class="javascript">
             <div id="exampleBanner" class="languageJS">
-                <h1>Examples<img id="examplesButtonClose" src="css/img/clearButton.svg"></h1>
+                <h1>Examples<img id="examplesButtonClose" src="/css/img/clearButton.svg"></h1>
             </div>
             <div class="horizontalSeparator"></div>
             <input id="filterBar" type="text" placeholder="Filter examples...">
@@ -334,7 +336,7 @@
 
         <div id="saveLayer" class="save-layer">
             <div class="save-form languageJS ">
-                <img id="saveFormButtonClose" src="css/img/clearButton.svg">
+                <img id="saveFormButtonClose" src="/css/img/clearButton.svg">
                 <label for="saveFormTitle">TITLE</label>
                 <div class="separator"></div>
                 <input type="text" maxlength="120" id="saveFormTitle" class="save-form-title">
@@ -375,22 +377,22 @@
 
         <div id="waitDiv">
             <div id="logo-part">
-                <img src="css/img/v4.svg" id="waitLogo" />
-                <img src="css/img/spinner.svg" id="waitSpinner" />
+                <img src="/css/img/v4.svg" id="waitLogo" />
+                <img src="/css/img/spinner.svg" id="waitSpinner" />
             </div>
         </div>
 
 
         <!-- Pep -->
-        <script src="js/libs/pep.min.js"></script>
+        <script src="/js/libs/pep.min.js"></script>
         <!-- For canvas/code separator -->
-        <script src="js/libs/split.js"></script>
+        <script src="/js/libs/split.js"></script>
 
         <!-- DatGUI -->
         <script src="https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.6.2/dat.gui.min.js"></script>
         <!-- jszip -->
-        <script src="js/libs/jszip.min.js"></script>
-        <script src="js/libs/fileSaver.js"></script>
+        <script src="/js/libs/jszip.min.js"></script>
+        <script src="/js/libs/fileSaver.js"></script>
 
         <!-- Dependencies -->
         <script src="https://preview.babylonjs.com/ammo.js"></script>
@@ -428,24 +430,24 @@
         </script>
 
         <!-- Monaco -->
-        <script src="node_modules/monaco-editor/dev/vs/loader.js"></script>
+        <script src="/node_modules/monaco-editor/dev/vs/loader.js"></script>
 
         <!-- jQuery -->
         <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
-        <script src="js/jquery.qrcode.js"></script>
-        <script src="js/qrcode.js"></script>
+        <script src="/js/jquery.qrcode.js"></script>
+        <script src="/js/qrcode.js"></script>
 
         <!-- Main scripts -->
-        <script src="js/config_versions.js"></script>
-        <script src="js/pbt.js"></script>
-        <script src="js/examples.js"></script>
-        <script src="js/main.js"></script>
-        <script src="js/menuPG.js"></script>
-        <script src="js/monacoCreator.js"></script>
-        <script src="js/settingsPG.js"></script>
-        <script src="js/utils.js"></script>
-        <script src="js/zipTool.js"></script>
-        <script src="js/index.js"></script>
+        <script src="/js/config_versions.js"></script>
+        <script src="/js/pbt.js"></script>
+        <script src="/js/examples.js"></script>
+        <script src="/js/main.js"></script>
+        <script src="/js/menuPG.js"></script>
+        <script src="/js/monacoCreator.js"></script>
+        <script src="/js/settingsPG.js"></script>
+        <script src="/js/utils.js"></script>
+        <script src="/js/zipTool.js"></script>
+        <script src="/js/index.js"></script>
     </body>
 
 </html>

+ 16 - 14
Playground/js/frame.js

@@ -1,9 +1,8 @@
-
-var engine = null;
+var engine = null;
 var canvas = null;
 var scene = null;
 
-fastEval = function(code) {
+fastEval = function (code) {
     var head = document.getElementsByTagName('head')[0];
     var script = document.createElement('script');
     script.setAttribute('type', 'text/javascript');
@@ -16,11 +15,11 @@ fastEval = function(code) {
     head.appendChild(script);
 }
 
-handleException = function(e) {
+handleException = function (e) {
     console.error(e);
 }
 
-run = function() {
+run = function () {
     var snippetUrl = "https://snippet.babylonjs.com";
     var fpsLabel = document.getElementById("fpsLabel");
     var refreshAnchor = document.getElementById("refresh");
@@ -40,7 +39,7 @@ run = function() {
 
     BABYLON.Engine.ShadersRepository = "/src/Shaders/";
 
-    compileAndRun = function(code) {
+    compileAndRun = function (code) {
         try {
 
             if (!BABYLON.Engine.isSupported()) {
@@ -56,7 +55,10 @@ run = function() {
             canvas = document.getElementById("renderCanvas");
 
             createDefaultEngine = function () {
-                return new BABYLON.Engine(canvas, true, { preserveDrawingBuffer: true, stencil: true });
+                return new BABYLON.Engine(canvas, true, {
+                    preserveDrawingBuffer: true,
+                    stencil: true
+                });
             }
 
             if (code.indexOf("createEngine") !== -1) {
@@ -118,20 +120,20 @@ run = function() {
                 }
 
                 fpsLabel.innerHTML = engine.getFps().toFixed() + " fps";
-            }.bind(this));         
+            }.bind(this));
 
         } catch (e) {
             // showError(e.message);
         }
     };
-    window.addEventListener("resize", function() {
+    window.addEventListener("resize", function () {
         if (engine) {
             engine.resize();
         }
     });
 
     // UI
-    var cleanHash = function() {
+    var cleanHash = function () {
         var splits = decodeURIComponent(location.hash.substr(1)).split("#");
 
         if (splits.length > 2) {
@@ -141,13 +143,13 @@ run = function() {
         location.hash = splits.join("#");
     };
 
-    var checkHash = function() {
+    var checkHash = function () {
         if (location.hash) {
             cleanHash();
 
             try {
                 var xmlHttp = new XMLHttpRequest();
-                xmlHttp.onreadystatechange = function() {
+                xmlHttp.onreadystatechange = function () {
                     if (xmlHttp.readyState === 4) {
                         if (xmlHttp.status === 200) {
                             var snippetCode = JSON.parse(JSON.parse(xmlHttp.responseText).jsonPayload).code;
@@ -156,7 +158,7 @@ run = function() {
                             var refresh = document.getElementById("refresh");
 
                             if (refresh) {
-                                refresh.addEventListener("click", function() {
+                                refresh.addEventListener("click", function () {
                                     compileAndRun(snippetCode);
                                 });
                             }
@@ -186,4 +188,4 @@ run = function() {
 
 }
 
-run();
+run();

+ 20 - 11
Playground/js/main.js

@@ -728,10 +728,10 @@ class Main {
                                 window.location.href = location.protocol + "//" + location.host + location.pathname + "#" + newPG;
                             } else if (query.indexOf("=") === -1) {
                                 this.loadScript("scripts/" + query + ".js", query);
-                            } else if (query.indexOf('pg=') === -1) {
+                            } else if (query.indexOf('pg=') === -1 && !location.pathname.match(/\/pg\//)) {
                                 this.loadScript(this.parent.settingsPG.DefaultScene, "Basic scene");
                             }
-                        } else {
+                        } else if (!location.pathname.match(/\/pg\//)) {
                             this.loadScript(this.parent.settingsPG.DefaultScene, "Basic scene");
                         }
                     }
@@ -1032,22 +1032,31 @@ class Main {
         location.hash = splits.join("#");
     };
     checkHash() {
+        let pgHash = "";
         if (location.search) {
             var query = this.parseQuery(location.search);
-            this.previousHash = "#" + query.pg + "#" + (query.revision || "0")
             if (query.pg) {
-                this.loadPlayground(query.pg + "#" + (query.revision || "0"));
+                pgHash = "#" + query.pg + "#" + (query.revision || "0")
             }
 
-        }
-        if (location.hash) {
+        } else if (location.hash) {
             if (this.previousHash !== location.hash) {
-                this.cleanHash();
-
-                this.previousHash = location.hash;
-
-                this.loadPlayground(location.hash.substr(1))
+                pgHash = location.hash;
             }
+        } else if (location.pathname) {
+            const pgMatch = location.pathname.match(/\/pg\/(.*)/);
+            const withRevision = location.pathname.match(/\/pg\/(.*)\/revision\/(\d*)/);
+            if (pgMatch || withRevision) {
+                if (withRevision) {
+                    pgHash = "#" + withRevision[1] + "#" + withRevision[2];
+                } else {
+                    pgHash = "#" + pgMatch[1] + "#0";
+                }
+            }
+        }
+        if (pgHash) {
+            this.previousHash = pgHash;
+            this.loadPlayground(pgHash.substr(1))
         }
         window.addEventListener("hashchange", this.checkHash.bind(this));
     };

+ 30 - 4
Tools/Gulp/tasks/gulpTasks-localRun.js

@@ -19,14 +19,41 @@ var skipExtensions = [".js", ".glb", ".gltf", ".bin", ".html", ".gif", ".jpg", "
 /**
  * Embedded webserver for test convenience.
  */
-gulp.task("webserver", function() {
+gulp.task("webserver", function () {
     var rootRelativePath = "../../";
     var options = {
         root: rootRelativePath,
         port: 1338,
         livereload: false,
-        middleware: function(connect, opt) {
+        middleware: function (connect, opt) {
             return [function (req, res, next) {
+                const baseUrl =  (req.url.indexOf('dist') !== -1 || req.url.indexOf('Tools') !== -1  || req.url.indexOf('temp/') !== -1);
+                if (!baseUrl && req.headers['referer'] && req.headers['referer'].indexOf('/Playground/') && req.url.indexOf('/Playground/') === -1) {
+                    req.url = "/Playground/" + req.url;
+                    res.writeHead(301, {
+                        'Location': req.url
+                    });
+                    return res.end();
+                }
+                const pgMath = req.url.match(/\/Playground\/pg\/(.*)/);
+                if (pgMath) {
+                    const isAFile = req.url.indexOf('.') !== -1;
+                    const withRevision = req.url.match(/\/pg\/(.*)\/revision\/(\d*)/);
+                    if (withRevision) {
+                        revision = withRevision[2];
+                        if (isAFile) {
+                            req.url = req.url.replace(/\/pg\/(.*)\/revision\//gi, "/")
+                        } else {
+                            req.url = req.url.replace(/\/pg\/(.*)\/revision\/(\d*)/gi, "/?pg=$1&revision=$2")
+                        }
+                    } else {
+                        if (isAFile) {
+                            req.url = req.url.replace(/\/pg\//gi, "/")
+                        } else {
+                            req.url = req.url.replace(/\/pg\/(.*)/gi, "/?pg=$1")
+                        }
+                    }
+                }
                 var extension = path.extname(decodeURIComponent(req.originalUrl));
                 if (req.originalUrl.indexOf(config.build.localDevES6FolderName) > -1 && skipExtensions.indexOf(extension) === -1) {
                     // Append .js for es6 modules.
@@ -35,8 +62,7 @@ gulp.task("webserver", function() {
                     }
                 }
                 next();
-              }
-            ]
+            }]
         }
     };