├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .gitignore ├── .npmrc ├── .stylelintrc ├── .yarnrc ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── circle.yml ├── electron.js ├── gulpfile.js ├── karma.conf.js ├── meta ├── example-scenes │ ├── README.md │ ├── basic.png │ ├── bubble-wrap-style.png │ ├── cache-scenes.js │ ├── cache-thumbnails.js │ ├── sources.js │ └── tron-style.gif └── screenshot.png ├── package-lock.json ├── package.json ├── public ├── data │ ├── changelog.html │ ├── fonts │ │ ├── ms-sans-serif-bold │ │ │ ├── MS Sans Serif Bold.ttf │ │ │ ├── license.txt │ │ │ └── readme.txt │ │ ├── ms-sans-serif │ │ │ ├── MS Sans Serif.ttf │ │ │ ├── license.txt │ │ │ └── readme.txt │ │ ├── roboto │ │ │ ├── LICENSE.txt │ │ │ ├── Roboto-Black.ttf │ │ │ ├── Roboto-BlackItalic.ttf │ │ │ ├── Roboto-Bold.ttf │ │ │ ├── Roboto-BoldItalic.ttf │ │ │ ├── Roboto-Italic.ttf │ │ │ ├── Roboto-Light.ttf │ │ │ ├── Roboto-LightItalic.ttf │ │ │ ├── Roboto-Medium.ttf │ │ │ ├── Roboto-MediumItalic.ttf │ │ │ ├── Roboto-Regular.ttf │ │ │ ├── Roboto-Thin.ttf │ │ │ └── Roboto-ThinItalic.ttf │ │ └── source_code_pro │ │ │ ├── OFL.txt │ │ │ ├── SourceCodePro-Black.ttf │ │ │ ├── SourceCodePro-Bold.ttf │ │ │ ├── SourceCodePro-ExtraLight.ttf │ │ │ ├── SourceCodePro-Light.ttf │ │ │ ├── SourceCodePro-Medium.ttf │ │ │ ├── SourceCodePro-Regular.ttf │ │ │ └── SourceCodePro-Semibold.ttf │ ├── imgs │ │ ├── arrow_down.png │ │ ├── docs_inspect.png │ │ ├── docs_save_menu.png │ │ ├── docs_share_menu.png │ │ ├── docs_toolbars.png │ │ ├── globey.gif │ │ ├── globey_speech_bubble.png │ │ └── question.gif │ └── scenes │ │ ├── basic.yaml │ │ ├── blank.yaml │ │ └── thumbnails │ │ ├── 9845c.png │ │ ├── basic.png │ │ ├── blueprint.png │ │ ├── bubble-wrap.png │ │ ├── cinnabar.png │ │ ├── crosshatch.png │ │ ├── gotham.png │ │ ├── grain-area.png │ │ ├── grain-roads.png │ │ ├── grain.png │ │ ├── ikeda.gif │ │ ├── lego.png │ │ ├── matrix.png │ │ ├── patterns.png │ │ ├── pericoli.png │ │ ├── press.png │ │ ├── radar.gif │ │ ├── refill.png │ │ ├── tron-legacy.png │ │ ├── tron.png │ │ ├── walkabout.png │ │ └── zinc.png ├── docs │ └── index.html ├── embed │ └── index.html ├── iframe.html └── index.html ├── src ├── css │ ├── _application.css │ ├── _buttons.css │ ├── _call-to-action.css │ ├── _camera.css │ ├── _color-palette.css │ ├── _color.css │ ├── _divider.css │ ├── _docs-panel.css │ ├── _editor-context-menu.css │ ├── _editor-hidden-tooltip.css │ ├── _editor.css │ ├── _embedded-play.css │ ├── _errors.css │ ├── _filedrop.css │ ├── _floating-panel.css │ ├── _globey.css │ ├── _icon.css │ ├── _inputs.css │ ├── _leaflet-overrides.css │ ├── _map-inspection.css │ ├── _map-loading.css │ ├── _map-panel-search-bookmarks.css │ ├── _map-panel.css │ ├── _map.css │ ├── _menu-bar.css │ ├── _modals.code-snippet.css │ ├── _modals.css │ ├── _modals.open-scene.css │ ├── _modals.welcome.css │ ├── _overlay.css │ ├── _sandbox.css │ ├── _shield.css │ ├── _sign-in-overlay.css │ ├── _textmarkers.css │ ├── _tooltip.css │ ├── _typography.css │ ├── _ui.css │ ├── _workspace.css │ ├── main.css │ └── vendor │ │ ├── black-tie.css │ │ └── bootstrap.css └── js │ ├── components │ ├── App.jsx │ ├── AppEmbedded.jsx │ ├── Camera.jsx │ ├── ColorPalette.jsx │ ├── Divider.jsx │ ├── DocsPanel.jsx │ ├── DraggableModal.jsx │ ├── Editor.jsx │ ├── EditorCallToAction.jsx │ ├── EditorContextMenu.jsx │ ├── EditorHiddenTooltip.jsx │ ├── EditorPane.jsx │ ├── EditorTabBar.jsx │ ├── EditorTabs.jsx │ ├── ErrorsPanel.jsx │ ├── FloatingPanel.jsx │ ├── Globey.jsx │ ├── Icon.jsx │ ├── IconButton.jsx │ ├── Map.jsx │ ├── MapPanel.jsx │ ├── MapPanelBookmarks.jsx │ ├── MapPanelLocationBar.jsx │ ├── MapPanelZoom.jsx │ ├── MenuBar.jsx │ ├── MenuFullscreen.jsx │ ├── RefreshButton.jsx │ ├── SignInButton.jsx │ ├── SignInOverlay.jsx │ ├── UserAvatar.jsx │ ├── event-emitter.js │ ├── glsl-pickers │ │ ├── NumberPicker.jsx │ │ ├── Vec2Picker.jsx │ │ ├── glsl-pickers.js │ │ └── vector.js │ └── textmarkers │ │ ├── BooleanMarker.jsx │ │ ├── DropdownMarker.jsx │ │ ├── color │ │ ├── ColorMarker.jsx │ │ ├── ColorPicker.jsx │ │ ├── ColorPickerInputFields.jsx │ │ ├── ColorPickerSaturation.jsx │ │ └── color.js │ │ └── vector │ │ ├── TrackballControls.js │ │ └── VectorPicker.jsx │ ├── config.js │ ├── editor │ ├── api-keys.js │ ├── codemirror.js │ ├── codemirror │ │ ├── glsl-tangram.js │ │ ├── hint-tangram.js │ │ ├── tools.js │ │ ├── yaml-parser.js │ │ └── yaml-tangram.js │ ├── editor.js │ ├── errors.js │ ├── highlight.js │ ├── imports.js │ ├── io.js │ ├── keymap.js │ ├── suggest.js │ ├── textmarkers.js │ └── yaml-ast.js │ ├── embedded.js │ ├── file │ └── FileDrop.jsx │ ├── main.js │ ├── map │ ├── SceneLoading.jsx │ ├── actions.js │ ├── bookmarks.js │ ├── inspection.js │ ├── leaflet-hash.js │ ├── map.js │ ├── screenshot.js │ └── video.js │ ├── modals │ ├── AboutModal.jsx │ ├── CodeSnippetModal.jsx │ ├── ConfirmDialogModal.jsx │ ├── ErrorModal.jsx │ ├── ExamplesModal.jsx │ ├── LoadingSpinner.jsx │ ├── Modal.jsx │ ├── ModalRoot.jsx │ ├── ModalShield.jsx │ ├── OpenFromCloudModal.jsx │ ├── OpenGistModal.jsx │ ├── OpenUrlModal.jsx │ ├── SaveExistingToCloudModal.jsx │ ├── SaveGistModal.jsx │ ├── SaveGistSuccessModal.jsx │ ├── SaveToCloudModal.jsx │ ├── SceneItem.jsx │ ├── SceneSelectModal.jsx │ ├── ShareHostedMapModal.jsx │ ├── SupportModal.jsx │ ├── WelcomeModal.jsx │ ├── WhatsNewModal.jsx │ └── examples.json │ ├── storage │ ├── gist.js │ ├── mapzen.js │ └── migrate.js │ ├── store │ ├── actions │ │ ├── app.js │ │ ├── index.js │ │ └── settings.js │ ├── index.js │ └── reducers │ │ ├── app.js │ │ ├── errors.js │ │ ├── index.js │ │ ├── map.js │ │ ├── modals.js │ │ ├── persistence.js │ │ ├── scene.js │ │ ├── settings.js │ │ ├── system.js │ │ └── user.js │ ├── tangram-api.json │ ├── tangram-docs.json │ ├── tangram-play.js │ ├── tools │ ├── analytics.js │ ├── gist-url.js │ ├── helpers.js │ ├── thumbnail.js │ ├── url-state.js │ └── version.js │ ├── ui │ ├── fullscreen.js │ └── welcome.js │ ├── user │ ├── sign-in-window.js │ └── sign-in.js │ └── version.json ├── test ├── .eslintrc ├── api-key.spec.js ├── components │ └── Icon.spec.jsx ├── gist-url.spec.js ├── helpers.spec.js ├── karma.spec.js ├── url-state.spec.js ├── version.spec.js └── yaml-ast.spec.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "react"], 3 | "plugins": ["transform-object-rest-spread"] 4 | } 5 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | 15 | [{Makefile,makefile}] 16 | indent_style = tab 17 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | src/**/*.min.js 2 | src/js/vendor/ 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | 3 | # Compiled files 4 | public/scripts/ 5 | public/stylesheets/ 6 | 7 | # Cache 8 | browserify-cache.json 9 | 10 | # Dependency directory 11 | # https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git 12 | node_modules 13 | npm-debug.log 14 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | save-exact=true 2 | -------------------------------------------------------------------------------- /.stylelintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "stylelint-config-standard", 3 | "rules": { 4 | "at-rule-no-vendor-prefix": true, 5 | "comment-empty-line-before": null, 6 | "font-family-name-quotes": "always-where-recommended", 7 | "function-url-quotes": "always", 8 | "max-nesting-depth": 2, 9 | "media-feature-name-no-vendor-prefix": true, 10 | "no-browser-hacks": true, 11 | "property-no-vendor-prefix": true, 12 | "selector-max-compound-selectors": 3, 13 | "selector-no-qualifying-type": null, 14 | "selector-no-vendor-prefix": null, 15 | "string-quotes": "single", 16 | "value-no-vendor-prefix": true 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.yarnrc: -------------------------------------------------------------------------------- 1 | save-prefix false 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015-2017 Mapzen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [](https://circleci.com/gh/tangrams/tangram-play/) 2 | [](https://gitter.im/tangrams/tangram-chat) 3 | 4 |  5 | 6 | # Editor for Tangram scene files 7 | 8 | Tangram Play is an interactive text editor for creating maps using Mapzen’s [Tangram](https://mapzen.com/products/tangram/). With Play, you can write and edit map styles in YAML and preview the changes live in the web browser. Start with one of Mapzen’s base maps or create your own style! 9 | 10 | Here is [a clip of Patricio's live demo](https://twitter.com/ajturner/status/652186516194762752/video/1) at [JS.Geo](http://www.jsgeo.com/) (October 2015) ([notes are here](https://github.com/mapzen/presentations/tree/master/08-2015-JSGEO)). 11 | 12 | ## Support 13 | 14 | Learn more about using [Tangram](https://mapzen.com/documentation/tangram) and [Mapzen vector tiles](https://mapzen.com/documentation/vector-tiles/) in documentation. 15 | 16 | Having a problem with Tangram Play? Do you have feedback to share? Contact Mapzen Support by emailing [tangram@mapzen.com](mailto:tangram@mapzen.com). 17 | 18 | Tangram Play is still in active development and you can have a role in it! Add bugs or feature requests as an issue on the project’s [GitHub repository](https://github.com/tangrams/tangram-play/issues). 19 | 20 | ## Contributing 21 | 22 | We welcome contributions from the community. For more information how to run Tangram Play in your local environment and get started, please see [CONTRIBUTING.md](https://github.com/tangrams/tangram-play/blob/master/CONTRIBUTING.md). 23 | 24 | ## Query string API 25 | 26 | * ```lines=[number]/[number-number]```: you highlight a line or a range of lines. Example ```lines=10-12```. 27 | 28 | * ```scene=[url.yaml]```: load a specific ```.yaml``` file using a valid url 29 | 30 | ## Keys 31 | 32 | * ```Ctrl``` + ```[number]```: Fold indentation level ```[number]``` 33 | * ```Alt``` + ```F```: fold/unfold line 34 | * ```Alt``` + ```P```: screenshot of the map 35 | 36 | Sublime-like hotkeys 37 | * ```Ctrl``` + ```F```: Search 38 | * ```Ctrl``` + ```D```: Select next occurrence 39 | * ```Alt``` + ```ArrowKeys```: move word by word 40 | * ```Shift``` + ```ArrowKeys```: Select character by character 41 | * ```Shift``` + ```Alt``` + ```ArrowKeys```: Select word by word 42 | -------------------------------------------------------------------------------- /circle.yml: -------------------------------------------------------------------------------- 1 | machine: 2 | node: 3 | version: 8.1.0 4 | environment: 5 | NODE_ENV: test 6 | PATH: "${PATH}:${HOME}/${CIRCLE_PROJECT_REPONAME}/node_modules/.bin" 7 | 8 | dependencies: 9 | # Yarn is pre-installed on CircleCI Ubuntu 14.04 image. 10 | override: 11 | - yarn install --ignore-optional 12 | cache_directories: 13 | - ~/.cache/yarn 14 | 15 | test: 16 | override: 17 | - yarn test 18 | 19 | # For hosting on mapzen.com. Only deploy if tests pass. Compiled files are 20 | # rebuilt for a production environment. 21 | #deployment: 22 | # # Production environment will only deploy when a release is tagged in the 23 | # # correct format (semantic version, e.g. release-v0.5.0) 24 | # production: 25 | # tag: /release-v[0-9]+\.[0-9]+\.[0-9]+/ 26 | # commands: 27 | # - aws s3 sync $CIRCLE_ARTIFACTS $AWS_PROD_DESTINATION --delete 28 | # # The latest `master` branch will auto-deploy to dev. Unstable "test" code 29 | # # should go on `staging` and will also deploy to dev. 30 | # next: 31 | # branch: master 32 | # commands: 33 | # - aws s3 sync $CIRCLE_ARTIFACTS $AWS_DEV_DESTINATION --delete 34 | # staging: 35 | # branch: staging 36 | # commands: 37 | # - aws s3 sync $CIRCLE_ARTIFACTS $AWS_DEV_DESTINATION --delete 38 | -------------------------------------------------------------------------------- /karma.conf.js: -------------------------------------------------------------------------------- 1 | module.exports = function setKarmaConfig(config) { 2 | config.set({ 3 | basePath: '', 4 | frameworks: ['browserify', 'mocha', 'sinon'], 5 | files: [ 6 | // Source 7 | // 'src/js/**/*.js', 8 | // // Application 9 | // 'public/stylesheets/main.css', 10 | // 'public/index.html', 11 | // Test suites 12 | 'test/**/*.js', 13 | 'test/**/*.jsx', 14 | ], 15 | 16 | exclude: [], 17 | preprocessors: { 18 | 'test/**/*.{js,jsx}': ['browserify'], 19 | }, 20 | 21 | browserify: { 22 | debug: true, 23 | extensions: ['.jsx'], 24 | transform: [ 25 | ['babelify', { presets: ['es2015', 'react'] }], 26 | 'brfs', 27 | ], 28 | // Configuration required for enzyme to work; see 29 | // http://airbnb.io/enzyme/docs/guides/browserify.html 30 | configure(bundle) { 31 | bundle.on('prebundle', () => { 32 | bundle.external('react/addons'); 33 | bundle.external('react/lib/ReactContext'); 34 | bundle.external('react/lib/ExecutionEnvironment'); 35 | }); 36 | }, 37 | }, 38 | 39 | plugins: [ 40 | 'karma-mocha', 41 | 'karma-sinon', 42 | 'karma-phantomjs-launcher', 43 | 'karma-mocha-reporter', 44 | 'karma-browserify', 45 | ], 46 | reporters: ['mocha'], 47 | 48 | port: 9876, 49 | colors: true, 50 | 51 | logLevel: config.LOG_INFO, 52 | autoWatch: false, 53 | browsers: ['PhantomJS'], 54 | 55 | singleRun: true, 56 | }); 57 | }; 58 | -------------------------------------------------------------------------------- /meta/example-scenes/README.md: -------------------------------------------------------------------------------- 1 | # example scenes cache 2 | 3 | This directory contains Node scripts for fetching and saving example scene files 4 | displayed in Tangram Play's "Open an example" modal. 5 | 6 | Most of the scene files come from https://github.com/tangrams/tangram-sandbox, 7 | but can be located anywhere. Previously, Tangram Play loaded scene files and 8 | image thumbnails from the Sandbox's Rawgit cache, but this created some 9 | noticeable problems: first, Rawgit (and GitHub itself) may occasionally go 10 | down, and secondly, the image files were not optimized, resulting in long 11 | loading times. (We were downloading 18MB of images when the examples modal 12 | we opened, and it could take ten seconds to load fully, even on a good Internet 13 | connection.) 14 | 15 | So we want to (a) remove the dependency on third-party, free & unsupported 16 | content delivery services, and (b) optimize the thumbnail images for display 17 | in Tangram Play. We can automate this instead of having to download and optimize 18 | images ourselves. Two scripts are provided here. One downloads scene files 19 | and stores them in Tangram Play, the other downloads screenshot images and 20 | converts them to thumbnails, optimizing for file size. These files become 21 | static resources that will be stored directly in this repository, and deployed 22 | along with Tangram Play 23 | 24 | These scripts are designed to run only when needed, (whenever we update the 25 | examples list) so it is not part of the build or deploy process. Project 26 | maintainers are expected to run these scripts manually. When scene files or 27 | thumbnail images are updated or created, commit the changes to the repository. 28 | Be sure to update Tangram Play's `examples.json` so that the correct images 29 | appear in the "Open an example" menu. 30 | 31 | An npm script is provided for convenience. 32 | 33 | ``` 34 | npm run examples 35 | ``` 36 | 37 | ## sources 38 | 39 | One script exports an object whose keys are the filename to save to, and 40 | values are external URLs of the scene file or the screenshot image. Because this 41 | script runs rarely, and when needed, linking to Rawgit caches or GitHub URLs 42 | are acceptable here. 43 | 44 | When this script is run, all valid URLs will replace their destination files. 45 | URLs that are not valid for any reason (e.g. 404, 500 errors) are skipped with 46 | a warning. If you remove an entry or rename it, you will also have to remove 47 | the old destination files, scripts will not take care of that for you. This is 48 | because some examples may not have third-party sources so it will not delete 49 | anything that looks unfamiliar. 50 | 51 | ## scene files 52 | 53 | This is pretty simple; it downloads and saves each scene file locally. Not all 54 | scene files need to be saved; if it's hosted on mapzen.com, we can retrieve if 55 | from its canonical source. (We might revisit this if we need offline-first 56 | Tangram Play.) 57 | 58 | You can run this script by itself with this npm script: 59 | 60 | ``` 61 | npm run examples:scenes 62 | ``` 63 | 64 | ## thumbnail images 65 | 66 | To run this script, you will need a native installation of ImageMagick. 67 | On Mac OS X, you can use Homebrew: 68 | 69 | ``` 70 | brew install imagemagick 71 | ``` 72 | 73 | Each screenshot image is downloaded, resized, and cropped to the dimensions that 74 | Tangram Play expects (and at Retina resolution), optimized for file size and 75 | rendering, and saved to the `/data/scenes/thumbnails` path in this repository. 76 | 77 | You may edit this script update image dimensions. 78 | 79 | You can run this script by itself with this npm script: 80 | 81 | ``` 82 | npm run examples:thumbnails 83 | ``` 84 | -------------------------------------------------------------------------------- /meta/example-scenes/basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/meta/example-scenes/basic.png -------------------------------------------------------------------------------- /meta/example-scenes/bubble-wrap-style.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/meta/example-scenes/bubble-wrap-style.png -------------------------------------------------------------------------------- /meta/example-scenes/cache-scenes.js: -------------------------------------------------------------------------------- 1 | /** 2 | * A node script for fetching and saving example scene files for Tangram Play 3 | * locally. For more information, see README.md in this directory. 4 | */ 5 | 'use strict'; 6 | 7 | // Keep dependencies low, only use Node.js native modules 8 | const path = require('path'); 9 | const http = require('http'); 10 | const https = require('https'); 11 | const fs = require('fs'); 12 | 13 | const IMAGE_SOURCES = require('./sources'); 14 | const WRITE_PATH = '../../public/data/scenes'; 15 | 16 | for (let name in IMAGE_SOURCES) { 17 | const url = IMAGE_SOURCES[name].scene; 18 | 19 | // Not all scenes have urls to cache; move on to the next if that's the case 20 | if (!url) { 21 | continue; 22 | } 23 | 24 | const destination = path.resolve(__dirname, WRITE_PATH, name + '.yaml'); 25 | 26 | // Depending on the URL's protocol, Node either needs the `http` or `https` 27 | // module. 28 | const protocol = url.startsWith('https') ? https : http; 29 | 30 | protocol.get(url, (response) => { 31 | // Continuously update stream with data 32 | let body = ''; 33 | response.on('data', function (data) { 34 | body += data; 35 | }); 36 | response.on('end', function () { 37 | // Data reception is done, save it to destination 38 | fs.writeFile(destination, body, (err) => { 39 | if (err) { 40 | throw err; 41 | } 42 | console.log(`${destination} - done.`); 43 | }); 44 | }); 45 | }); 46 | } 47 | -------------------------------------------------------------------------------- /meta/example-scenes/cache-thumbnails.js: -------------------------------------------------------------------------------- 1 | /** 2 | * A node script for making the thumbnails for scene files displayed in 3 | * Tangram Play's "Open an example" modal. For more information, see 4 | * README.md in this directory. 5 | * 6 | * You may edit this script to update image dimensions. 7 | * 8 | * To run this script, you will need a native installation of ImageMagick. 9 | * On Mac OS X, you can use Homebrew: 10 | * 11 | * brew install imagemagick 12 | * 13 | * Then run this script with node 14 | * 15 | * node ./meta/example-scenes/cache-thumbnails.js 16 | * 17 | * Can this be done in a shell script? Probably! 18 | */ 19 | /* eslint-disable no-console */ 20 | const path = require('path'); 21 | const gm = require('gm').subClass({ imageMagick: true }); 22 | const imagemin = require('imagemin'); 23 | const imageminPngquant = require('imagemin-pngquant'); 24 | const imageminGifsicle = require('imagemin-gifsicle'); 25 | 26 | const IMAGE_SOURCES = require('./sources'); 27 | 28 | const THUMBNAIL_WIDTH = 144; 29 | const THUMBNAIL_HEIGHT = 81; 30 | const RETINA_MULTIPLIER = 2; 31 | const WRITE_PATH = '../../public/data/scenes/thumbnails'; 32 | 33 | Object.keys(IMAGE_SOURCES).forEach((name) => { 34 | const url = IMAGE_SOURCES[name].image; 35 | const forcePNG = IMAGE_SOURCES[name].forcePNG || false; 36 | const destination = path.resolve(__dirname, WRITE_PATH); 37 | 38 | // If we want to force an animated GIF to be a one-frame PNG, we fetch the 39 | // url with a `[0]` 40 | const fetchURL = forcePNG ? `${url}[0]` : url; 41 | 42 | gm(fetchURL) 43 | .format(function (err, value) { 44 | if (err) { 45 | console.log(`Error for ${url}:\n${err}`); 46 | return; 47 | } 48 | 49 | let ext = value.toLowerCase(); 50 | if (forcePNG === true) { 51 | ext = 'png'; 52 | } 53 | 54 | const filename = path.resolve(destination, `${name}.${ext}`); 55 | const width = THUMBNAIL_WIDTH * RETINA_MULTIPLIER; 56 | const height = THUMBNAIL_HEIGHT * RETINA_MULTIPLIER; 57 | 58 | this.coalesce() // This is required to fix resizing problems with animated GIFs 59 | .resize(width, height, '^') 60 | .gravity('Center') 61 | .extent(width, height) 62 | .interlace('Line') 63 | .write(filename, (error) => { 64 | if (error) { 65 | console.log(`Error writing ${filename}:\n ${error}`); 66 | return; 67 | } 68 | 69 | // Success, optimize now 70 | // Save as PNG or animated GIF, depending on source. 71 | if (ext === 'png') { 72 | imagemin([filename], destination, { 73 | plugins: [ 74 | imageminPngquant({ quality: '65-80' }), 75 | ], 76 | }).then((files) => { 77 | console.log(`${filename} - done.`); 78 | }); 79 | } else if (ext === 'gif') { 80 | imagemin([filename], destination, { 81 | use: [ 82 | imageminGifsicle({ optimizationLevel: 3 }), 83 | ], 84 | }).then(() => { 85 | console.log(`${filename} - done.`); 86 | }); 87 | } 88 | }); 89 | }); 90 | }); 91 | -------------------------------------------------------------------------------- /meta/example-scenes/tron-style.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/meta/example-scenes/tron-style.gif -------------------------------------------------------------------------------- /meta/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/meta/screenshot.png -------------------------------------------------------------------------------- /public/data/fonts/ms-sans-serif-bold/MS Sans Serif Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/ms-sans-serif-bold/MS Sans Serif Bold.ttf -------------------------------------------------------------------------------- /public/data/fonts/ms-sans-serif-bold/license.txt: -------------------------------------------------------------------------------- 1 | The FontStruction “MS Sans Serif Bold” 2 | (https://fontstruct.com/fontstructions/show/1384862) by “lou” is licensed 3 | under a Creative Commons Attribution Share Alike license 4 | (http://creativecommons.org/licenses/by-sa/3.0/). 5 | -------------------------------------------------------------------------------- /public/data/fonts/ms-sans-serif-bold/readme.txt: -------------------------------------------------------------------------------- 1 | The font file in this archive was created using Fontstruct the free, online 2 | font-building tool. 3 | This font was created by “lou”. 4 | This font has a homepage where this archive and other versions may be found: 5 | https://fontstruct.com/fontstructions/show/1384862 6 | 7 | Try Fontstruct at http://fontstruct.com 8 | It’s easy and it’s fun. 9 | 10 | NOTE FOR FLASH USERS: Fontstruct fonts (fontstructions) are optimized for Flash. 11 | If the font in this archive is a pixel font, it is best displayed at a font-size 12 | of 11. 13 | 14 | Fontstruct is sponsored by FontShop. 15 | Visit them at https://fontshop.com 16 | FontShop is the original independent font retailer. We’ve been around since 17 | the dawn of digital type. Whether you need the right font or need to create the 18 | right font from scratch, let our 26 years of experience work for you. 19 | 20 | Fontstruct is copyright ©2017 Rob Meek 21 | 22 | LEGAL NOTICE: 23 | In using this font you must comply with the licensing terms described in the 24 | file “license.txt” included with this archive. 25 | If you redistribute the font file in this archive, it must be accompanied by all 26 | the other files from this archive, including this one. 27 | -------------------------------------------------------------------------------- /public/data/fonts/ms-sans-serif/MS Sans Serif.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/ms-sans-serif/MS Sans Serif.ttf -------------------------------------------------------------------------------- /public/data/fonts/ms-sans-serif/license.txt: -------------------------------------------------------------------------------- 1 | The FontStruction “MS Sans Serif” 2 | (https://fontstruct.com/fontstructions/show/1384746) by “lou” is licensed 3 | under a Creative Commons Attribution Share Alike license 4 | (http://creativecommons.org/licenses/by-sa/3.0/). 5 | -------------------------------------------------------------------------------- /public/data/fonts/ms-sans-serif/readme.txt: -------------------------------------------------------------------------------- 1 | The font file in this archive was created using Fontstruct the free, online 2 | font-building tool. 3 | This font was created by “lou”. 4 | This font has a homepage where this archive and other versions may be found: 5 | https://fontstruct.com/fontstructions/show/1384746 6 | 7 | Try Fontstruct at http://fontstruct.com 8 | It’s easy and it’s fun. 9 | 10 | NOTE FOR FLASH USERS: Fontstruct fonts (fontstructions) are optimized for Flash. 11 | If the font in this archive is a pixel font, it is best displayed at a font-size 12 | of 11. 13 | 14 | Fontstruct is sponsored by FontShop. 15 | Visit them at https://fontshop.com 16 | FontShop is the original independent font retailer. We’ve been around since 17 | the dawn of digital type. Whether you need the right font or need to create the 18 | right font from scratch, let our 26 years of experience work for you. 19 | 20 | Fontstruct is copyright ©2017 Rob Meek 21 | 22 | LEGAL NOTICE: 23 | In using this font you must comply with the licensing terms described in the 24 | file “license.txt” included with this archive. 25 | If you redistribute the font file in this archive, it must be accompanied by all 26 | the other files from this archive, including this one. 27 | -------------------------------------------------------------------------------- /public/data/fonts/roboto/Roboto-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/roboto/Roboto-Black.ttf -------------------------------------------------------------------------------- /public/data/fonts/roboto/Roboto-BlackItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/roboto/Roboto-BlackItalic.ttf -------------------------------------------------------------------------------- /public/data/fonts/roboto/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/roboto/Roboto-Bold.ttf -------------------------------------------------------------------------------- /public/data/fonts/roboto/Roboto-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/roboto/Roboto-BoldItalic.ttf -------------------------------------------------------------------------------- /public/data/fonts/roboto/Roboto-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/roboto/Roboto-Italic.ttf -------------------------------------------------------------------------------- /public/data/fonts/roboto/Roboto-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/roboto/Roboto-Light.ttf -------------------------------------------------------------------------------- /public/data/fonts/roboto/Roboto-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/roboto/Roboto-LightItalic.ttf -------------------------------------------------------------------------------- /public/data/fonts/roboto/Roboto-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/roboto/Roboto-Medium.ttf -------------------------------------------------------------------------------- /public/data/fonts/roboto/Roboto-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/roboto/Roboto-MediumItalic.ttf -------------------------------------------------------------------------------- /public/data/fonts/roboto/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/roboto/Roboto-Regular.ttf -------------------------------------------------------------------------------- /public/data/fonts/roboto/Roboto-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/roboto/Roboto-Thin.ttf -------------------------------------------------------------------------------- /public/data/fonts/roboto/Roboto-ThinItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/roboto/Roboto-ThinItalic.ttf -------------------------------------------------------------------------------- /public/data/fonts/source_code_pro/SourceCodePro-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/source_code_pro/SourceCodePro-Black.ttf -------------------------------------------------------------------------------- /public/data/fonts/source_code_pro/SourceCodePro-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/source_code_pro/SourceCodePro-Bold.ttf -------------------------------------------------------------------------------- /public/data/fonts/source_code_pro/SourceCodePro-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/source_code_pro/SourceCodePro-ExtraLight.ttf -------------------------------------------------------------------------------- /public/data/fonts/source_code_pro/SourceCodePro-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/source_code_pro/SourceCodePro-Light.ttf -------------------------------------------------------------------------------- /public/data/fonts/source_code_pro/SourceCodePro-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/source_code_pro/SourceCodePro-Medium.ttf -------------------------------------------------------------------------------- /public/data/fonts/source_code_pro/SourceCodePro-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/source_code_pro/SourceCodePro-Regular.ttf -------------------------------------------------------------------------------- /public/data/fonts/source_code_pro/SourceCodePro-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/fonts/source_code_pro/SourceCodePro-Semibold.ttf -------------------------------------------------------------------------------- /public/data/imgs/arrow_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/imgs/arrow_down.png -------------------------------------------------------------------------------- /public/data/imgs/docs_inspect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/imgs/docs_inspect.png -------------------------------------------------------------------------------- /public/data/imgs/docs_save_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/imgs/docs_save_menu.png -------------------------------------------------------------------------------- /public/data/imgs/docs_share_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/imgs/docs_share_menu.png -------------------------------------------------------------------------------- /public/data/imgs/docs_toolbars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/imgs/docs_toolbars.png -------------------------------------------------------------------------------- /public/data/imgs/globey.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/imgs/globey.gif -------------------------------------------------------------------------------- /public/data/imgs/globey_speech_bubble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/imgs/globey_speech_bubble.png -------------------------------------------------------------------------------- /public/data/imgs/question.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/imgs/question.gif -------------------------------------------------------------------------------- /public/data/scenes/basic.yaml: -------------------------------------------------------------------------------- 1 | sources: 2 | nextzen: 3 | type: TopoJSON 4 | url: https://tile.nextzen.org/tilezen/vector/v1/all/{z}/{x}/{y}.topojson 5 | 6 | layers: 7 | water: 8 | data: { source: nextzen } 9 | draw: 10 | polygons: 11 | order: 2 12 | color: '#353535' 13 | earth: 14 | data: { source: nextzen } 15 | draw: 16 | polygons: 17 | order: 1 18 | color: '#555555' 19 | landuse: 20 | data: { source: nextzen } 21 | draw: 22 | polygons: 23 | order: 3 24 | color: '#666666' 25 | roads: 26 | data: { source: nextzen} 27 | filter: { not: { kind: [rail, ferry] } } 28 | draw: 29 | lines: 30 | order: 4 31 | color: '#ffffff' 32 | width: [[7,0.0px], [10, .5px], [15, .75px], [17, 5m]] 33 | highway: 34 | filter: { kind: highway } 35 | draw: 36 | lines: 37 | order: 5 38 | width: [[8,0px], [8,.25px], [11, 1.5px], [14, 2px], [16, 4px], [17, 10m]] 39 | link: 40 | filter: { is_link: true } # on- and off-ramps, etc 41 | draw: 42 | lines: 43 | width: [[8,0px], [14, 3px], [16, 5px], [18, 10m]] 44 | tunnel-link: 45 | filter: {is_tunnel: true, $zoom: {min: 13} } 46 | tunnel: 47 | filter: {is_tunnel: true } 48 | draw: 49 | lines: 50 | order: 6 51 | buildings: 52 | data: { source: nextzen } 53 | draw: 54 | polygons: 55 | order: 7 56 | color: '#999999' 57 | extrude: true 58 | -------------------------------------------------------------------------------- /public/data/scenes/blank.yaml: -------------------------------------------------------------------------------- 1 | sources: 2 | nextzen: 3 | type: TopoJSON 4 | url: https://tile.nextzen.org/tilezen/vector/v1/all/{z}/{x}/{y}.topojson 5 | 6 | layers: 7 | earth: 8 | data: { source: nextzen } 9 | draw: 10 | polygons: 11 | order: 0 12 | color: grey 13 | water: 14 | data: { source: nextzen } 15 | draw: 16 | polygons: 17 | order: 1 18 | color: lightblue 19 | -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/9845c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/9845c.png -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/basic.png -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/blueprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/blueprint.png -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/bubble-wrap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/bubble-wrap.png -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/cinnabar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/cinnabar.png -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/crosshatch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/crosshatch.png -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/gotham.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/gotham.png -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/grain-area.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/grain-area.png -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/grain-roads.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/grain-roads.png -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/grain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/grain.png -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/ikeda.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/ikeda.gif -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/lego.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/lego.png -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/matrix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/matrix.png -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/patterns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/patterns.png -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/pericoli.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/pericoli.png -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/press.png -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/radar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/radar.gif -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/refill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/refill.png -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/tron-legacy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/tron-legacy.png -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/tron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/tron.png -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/walkabout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/walkabout.png -------------------------------------------------------------------------------- /public/data/scenes/thumbnails/zinc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangrams/tangram-play/a2d9b67d1cbe1880ab7580a802b6a8873ecf017e/public/data/scenes/thumbnails/zinc.png -------------------------------------------------------------------------------- /public/embed/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 |42 | Or drag and drop a scene file from your computer onto this window! 43 |
44 | */} 45 |Drag this divider handle to bring it back!
71 |