From 207e7a026c50a1f06e0d3a4352d1aa8993fc7b00 Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Thu, 29 Jun 2017 15:47:26 +0100 Subject: [PATCH] Initial commit, based on pxt-adafruit --- .clang-format | 5 + .gitattributes | 23 ++ .gitignore | 31 +++ CONTRIBUTING.md | 26 +++ LICENSE | 25 ++ README.md | 67 ++++++ THIRD-PARTY-NOTICES.txt | 16 ++ cmds/pxtrequire.ts | 7 + cmds/tsconfig.json | 13 ++ docs/SUMMARY.md | 11 + docs/about.md | 43 ++++ docs/beta-ref.json | 3 + docs/blocks/loops.md | 8 + docs/docs.md | 14 ++ docs/examples.md | 8 + docs/index-ref.json | 3 + docs/projects.md | 9 + docs/reference.md | 19 ++ .../Microsoft-logo_rgb_c-gray-square.png | Bin 0 -> 1850 bytes docs/static/Microsoft-logo_rgb_c-gray.png | Bin 0 -> 20339 bytes docs/static/Microsoft-logo_rgb_c-white.png | Bin 0 -> 12350 bytes jenkins.groovy | 40 ++++ jenkins.sh | 56 +++++ libs/base/pxt.json | 28 +++ libs/core/README.md | 4 + libs/core/ns.ts | 4 + libs/core/pxt.h | 7 + libs/core/pxt.json | 17 ++ libs/core/pxtcore.h | 7 + libs/core/test.ts | 11 + libs/ev3/ns.ts | 34 +++ libs/ev3/pxt.json | 13 ++ package.json | 48 ++++ pxtarget.json | 136 +++++++++++ targetconfig.json | 10 + theme/fieldeditors.less | 39 ++++ theme/site/collections/breadcrumb.overrides | 3 + theme/site/collections/breadcrumb.variables | 3 + theme/site/collections/form.overrides | 3 + theme/site/collections/form.variables | 3 + theme/site/collections/grid.overrides | 3 + theme/site/collections/grid.variables | 3 + theme/site/collections/menu.overrides | 8 + theme/site/collections/menu.variables | 5 + theme/site/collections/message.overrides | 3 + theme/site/collections/message.variables | 3 + theme/site/collections/table.overrides | 3 + theme/site/collections/table.variables | 3 + theme/site/elements/button.overrides | 3 + theme/site/elements/button.variables | 3 + theme/site/elements/container.overrides | 3 + theme/site/elements/container.variables | 3 + theme/site/elements/divider.overrides | 3 + theme/site/elements/divider.variables | 3 + theme/site/elements/flag.overrides | 3 + theme/site/elements/flag.variables | 3 + theme/site/elements/header.overrides | 3 + theme/site/elements/header.variables | 3 + theme/site/elements/icon.overrides | 3 + theme/site/elements/icon.variables | 3 + theme/site/elements/image.overrides | 3 + theme/site/elements/image.variables | 3 + theme/site/elements/input.overrides | 3 + theme/site/elements/input.variables | 6 + theme/site/elements/label.overrides | 3 + theme/site/elements/label.variables | 3 + theme/site/elements/list.overrides | 3 + theme/site/elements/list.variables | 3 + theme/site/elements/loader.overrides | 3 + theme/site/elements/loader.variables | 3 + theme/site/elements/rail.overrides | 3 + theme/site/elements/rail.variables | 3 + theme/site/elements/reveal.overrides | 3 + theme/site/elements/reveal.variables | 3 + theme/site/elements/segment.overrides | 3 + theme/site/elements/segment.variables | 3 + theme/site/elements/step.overrides | 3 + theme/site/elements/step.variables | 3 + theme/site/globals/reset.overrides | 3 + theme/site/globals/reset.variables | 3 + theme/site/globals/site.overrides | 3 + theme/site/globals/site.variables | 90 ++++++++ theme/site/modules/accordion.overrides | 3 + theme/site/modules/accordion.variables | 3 + theme/site/modules/chatroom.overrides | 3 + theme/site/modules/chatroom.variables | 3 + theme/site/modules/checkbox.overrides | 3 + theme/site/modules/checkbox.variables | 3 + theme/site/modules/dimmer.overrides | 3 + theme/site/modules/dimmer.variables | 3 + theme/site/modules/dropdown.overrides | 3 + theme/site/modules/dropdown.variables | 3 + theme/site/modules/embed.overrides | 3 + theme/site/modules/embed.variables | 0 theme/site/modules/modal.overrides | 3 + theme/site/modules/modal.variables | 3 + theme/site/modules/nag.overrides | 3 + theme/site/modules/nag.variables | 3 + theme/site/modules/popup.overrides | 3 + theme/site/modules/popup.variables | 3 + theme/site/modules/progress.overrides | 3 + theme/site/modules/progress.variables | 3 + theme/site/modules/rating.overrides | 3 + theme/site/modules/rating.variables | 3 + theme/site/modules/search.overrides | 3 + theme/site/modules/search.variables | 3 + theme/site/modules/shape.overrides | 3 + theme/site/modules/shape.variables | 3 + theme/site/modules/sidebar.overrides | 3 + theme/site/modules/sidebar.variables | 3 + theme/site/modules/sticky.overrides | 3 + theme/site/modules/sticky.variables | 3 + theme/site/modules/tab.overrides | 3 + theme/site/modules/tab.variables | 3 + theme/site/modules/transition.overrides | 216 ++++++++++++++++++ theme/site/modules/transition.variables | 3 + theme/site/modules/video.overrides | 3 + theme/site/modules/video.variables | 0 theme/site/views/ad.overrides | 3 + theme/site/views/ad.variables | 3 + theme/site/views/card.overrides | 3 + theme/site/views/card.variables | 3 + theme/site/views/comment.overrides | 3 + theme/site/views/comment.variables | 3 + theme/site/views/feed.overrides | 3 + theme/site/views/feed.variables | 3 + theme/site/views/item.overrides | 3 + theme/site/views/item.variables | 3 + theme/site/views/statistic.overrides | 3 + theme/site/views/statistic.variables | 3 + theme/style.less | 149 ++++++++++++ theme/theme.config | 94 ++++++++ tslint.json | 56 +++++ 133 files changed, 1670 insertions(+) create mode 100644 .clang-format create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 THIRD-PARTY-NOTICES.txt create mode 100644 cmds/pxtrequire.ts create mode 100644 cmds/tsconfig.json create mode 100644 docs/SUMMARY.md create mode 100644 docs/about.md create mode 100644 docs/beta-ref.json create mode 100644 docs/blocks/loops.md create mode 100644 docs/docs.md create mode 100644 docs/examples.md create mode 100644 docs/index-ref.json create mode 100644 docs/projects.md create mode 100644 docs/reference.md create mode 100644 docs/static/Microsoft-logo_rgb_c-gray-square.png create mode 100644 docs/static/Microsoft-logo_rgb_c-gray.png create mode 100644 docs/static/Microsoft-logo_rgb_c-white.png create mode 100644 jenkins.groovy create mode 100755 jenkins.sh create mode 100644 libs/base/pxt.json create mode 100644 libs/core/README.md create mode 100644 libs/core/ns.ts create mode 100644 libs/core/pxt.h create mode 100644 libs/core/pxt.json create mode 100644 libs/core/pxtcore.h create mode 100644 libs/core/test.ts create mode 100644 libs/ev3/ns.ts create mode 100644 libs/ev3/pxt.json create mode 100644 package.json create mode 100644 pxtarget.json create mode 100644 targetconfig.json create mode 100644 theme/fieldeditors.less create mode 100644 theme/site/collections/breadcrumb.overrides create mode 100644 theme/site/collections/breadcrumb.variables create mode 100644 theme/site/collections/form.overrides create mode 100644 theme/site/collections/form.variables create mode 100644 theme/site/collections/grid.overrides create mode 100644 theme/site/collections/grid.variables create mode 100644 theme/site/collections/menu.overrides create mode 100644 theme/site/collections/menu.variables create mode 100644 theme/site/collections/message.overrides create mode 100644 theme/site/collections/message.variables create mode 100644 theme/site/collections/table.overrides create mode 100644 theme/site/collections/table.variables create mode 100644 theme/site/elements/button.overrides create mode 100644 theme/site/elements/button.variables create mode 100644 theme/site/elements/container.overrides create mode 100644 theme/site/elements/container.variables create mode 100644 theme/site/elements/divider.overrides create mode 100644 theme/site/elements/divider.variables create mode 100644 theme/site/elements/flag.overrides create mode 100644 theme/site/elements/flag.variables create mode 100644 theme/site/elements/header.overrides create mode 100644 theme/site/elements/header.variables create mode 100644 theme/site/elements/icon.overrides create mode 100644 theme/site/elements/icon.variables create mode 100644 theme/site/elements/image.overrides create mode 100644 theme/site/elements/image.variables create mode 100644 theme/site/elements/input.overrides create mode 100644 theme/site/elements/input.variables create mode 100644 theme/site/elements/label.overrides create mode 100644 theme/site/elements/label.variables create mode 100644 theme/site/elements/list.overrides create mode 100644 theme/site/elements/list.variables create mode 100644 theme/site/elements/loader.overrides create mode 100644 theme/site/elements/loader.variables create mode 100644 theme/site/elements/rail.overrides create mode 100644 theme/site/elements/rail.variables create mode 100644 theme/site/elements/reveal.overrides create mode 100644 theme/site/elements/reveal.variables create mode 100644 theme/site/elements/segment.overrides create mode 100644 theme/site/elements/segment.variables create mode 100644 theme/site/elements/step.overrides create mode 100644 theme/site/elements/step.variables create mode 100644 theme/site/globals/reset.overrides create mode 100644 theme/site/globals/reset.variables create mode 100644 theme/site/globals/site.overrides create mode 100644 theme/site/globals/site.variables create mode 100644 theme/site/modules/accordion.overrides create mode 100644 theme/site/modules/accordion.variables create mode 100644 theme/site/modules/chatroom.overrides create mode 100644 theme/site/modules/chatroom.variables create mode 100644 theme/site/modules/checkbox.overrides create mode 100644 theme/site/modules/checkbox.variables create mode 100644 theme/site/modules/dimmer.overrides create mode 100644 theme/site/modules/dimmer.variables create mode 100644 theme/site/modules/dropdown.overrides create mode 100644 theme/site/modules/dropdown.variables create mode 100644 theme/site/modules/embed.overrides create mode 100644 theme/site/modules/embed.variables create mode 100644 theme/site/modules/modal.overrides create mode 100644 theme/site/modules/modal.variables create mode 100644 theme/site/modules/nag.overrides create mode 100644 theme/site/modules/nag.variables create mode 100644 theme/site/modules/popup.overrides create mode 100644 theme/site/modules/popup.variables create mode 100644 theme/site/modules/progress.overrides create mode 100644 theme/site/modules/progress.variables create mode 100644 theme/site/modules/rating.overrides create mode 100644 theme/site/modules/rating.variables create mode 100644 theme/site/modules/search.overrides create mode 100644 theme/site/modules/search.variables create mode 100644 theme/site/modules/shape.overrides create mode 100644 theme/site/modules/shape.variables create mode 100644 theme/site/modules/sidebar.overrides create mode 100644 theme/site/modules/sidebar.variables create mode 100644 theme/site/modules/sticky.overrides create mode 100644 theme/site/modules/sticky.variables create mode 100644 theme/site/modules/tab.overrides create mode 100644 theme/site/modules/tab.variables create mode 100644 theme/site/modules/transition.overrides create mode 100644 theme/site/modules/transition.variables create mode 100644 theme/site/modules/video.overrides create mode 100644 theme/site/modules/video.variables create mode 100644 theme/site/views/ad.overrides create mode 100644 theme/site/views/ad.variables create mode 100644 theme/site/views/card.overrides create mode 100644 theme/site/views/card.variables create mode 100644 theme/site/views/comment.overrides create mode 100644 theme/site/views/comment.variables create mode 100644 theme/site/views/feed.overrides create mode 100644 theme/site/views/feed.variables create mode 100644 theme/site/views/item.overrides create mode 100644 theme/site/views/item.variables create mode 100644 theme/site/views/statistic.overrides create mode 100644 theme/site/views/statistic.variables create mode 100644 theme/style.less create mode 100644 theme/theme.config create mode 100644 tslint.json diff --git a/.clang-format b/.clang-format new file mode 100644 index 00000000..001deef8 --- /dev/null +++ b/.clang-format @@ -0,0 +1,5 @@ +BasedOnStyle: LLVM +IndentWidth: 4 +UseTab: Never +ColumnLimit: 100 +AllowShortFunctionsOnASingleLine: Inline diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..00076398 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +# enforce unix style line endings +*.ts text eol=lf +*.tsx text eol=lf +*.md text eol=lf +*.txt text eol=lf +*.js text eol=lf +*.json text eol=lf +*.xml text eol=lf +*.svg text eol=lf +*.yaml text eol=lf +*.css text eol=lf +*.html text eol=lf +*.py text eol=lf +*.exp text eol=lf +*.manifest text eol=lf + +# do not enforce text for everything - it causes issues with random binary files + +*.sln text eol=crlf + +*.png binary +*.jpg binary +*.jpeg binary diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..d7a531cf --- /dev/null +++ b/.gitignore @@ -0,0 +1,31 @@ +node_modules +yotta_modules +yotta_targets +pxt_modules +built +typings +tmp +temp +projects/** +clients/win10/app/AppPackages +clients/win10/app/BundlePackages +clients/win10/app/BundleArtifacts +clients/win10/app/bin +clients/win10/app/bld +clients/win10/*.opendb +clients/**/bin/** +clients/**/obj/** +clients/electron/projects + +videos/** + +*.user +*.sw? +*.ts.new +*.tgz +*.db +*.suo +*.log +.pioenvs +.piolibdeps +lib/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..4ff0eed2 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,26 @@ +# Contributing Code + +This repo accepts bug fix pull requests. For a bug fix PR to be accepted, it must first have a tracking issue that has been marked approved. Your PR should link to the bug you are fixing. If you've submitted a PR for a bug, please post a comment in the bug to avoid duplication of effort. + +This repo also accepts new feature pull requests. For a feature-level PR to be accepted, it first needs to have design discussion. Design discussion can take one of two forms a) a feature request in the issue tracker that has been marked as approved or b) the PR must be accompanied by a full design spec and this spec is later approved in the open design discussion. Features are evaluated against their complexity, impact on other features, roadmap alignment, and maintainability. + +These two blogs posts on contributing code to open source projects are a good reference: [Open Source Contribution Etiquette](http://tirania.org/blog/archive/2010/Dec-31.html) by Miguel de Icaza and [Don't "Push" Your Pull Requests](https://www.igvita.com/2011/12/19/dont-push-your-pull-requests/) by Ilya Grigorik. + +## Security + +If you believe you have found a security issue here, please share it with us privately following the guidance at the Microsoft [Security TechCenter](https://technet.microsoft.com/en-us/security/ff852094). Reporting it via this channel helps minimize risk to projects built with this repo. + +## Legal + +You will need to complete a Contributor License Agreement (CLA) before your pull request can be accepted. This agreement testifies that you are granting us permission to use the source code you are submitting, and that this work is being submitted under appropriate license that we can use it. + +You can complete the CLA by going through the steps at https://cla.microsoft.com. Once we have received the signed CLA, we'll review the request. You will only need to do this once. + +## Housekeeping + +Your pull request should: +* Include a description of what your change intends to do +* Be a child commit of a reasonably recent commit in the master branch +* Pass all unit tests +* Have a clear commit message +* Include adequate tests diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..06950649 --- /dev/null +++ b/LICENSE @@ -0,0 +1,25 @@ +PXT-EV3 + +The MIT License (MIT) + +Copyright (c) Microsoft Corporation + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 00000000..0866a645 --- /dev/null +++ b/README.md @@ -0,0 +1,67 @@ +# LEGO Mindstorms EV3 target for PXT + +[![Build Status](https://ci2.dot.net/buildStatus/icon?job=Private/pxt_project_pink/master/pxt-ev3_Push)](https://ci2.dot.net/job/Private/job/pxt_project_pink/job/master/job/pxt-ev3_Push/) + +This repo contains the editor target hosted at https://lego.makecode.com + +## Local Dev setup + +These instructions assume familiarity with dev tools and languages. + +* install Node.js 6+ +* install [yotta](http://docs.yottabuild.org/#installing) +* (optional) install [Visual Studio Code](https://code.visualstudio.com/) + +In a common folder, + +* clone https://github.com/Microsoft/pxt to ``pxt`` folder +* clone https://github.com/Microsoft/pxt-common-packages to ``pxt-common-packages`` folder +* clone https://github.com/Microsoft/pxt-ev3 to ``pxt-ev3`` folder +* go to ``pxt`` and run + +``` +npm install +typings install +``` + +* go to ``pxt-common-packages`` and run + +``` +npm install +npm link ../pxt +``` + +* go to ``pxt-ev3`` and run + +``` +npm install +npm link ../pxt +npm link ../pxt-common-packages +``` + +## to run the local server + +From root github folder, + +``` +cd pxt-ev3 +pxt serve --cloud +``` + +## to build and deploy a single package via command line + +``` +cd libs/core +pxt deploy +``` + +## Jenkins build + +https://ci2.dot.net/job/Private/job/pxt_project_pink/job/master/ + +## License +MIT + +## Code of Conduct + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. diff --git a/THIRD-PARTY-NOTICES.txt b/THIRD-PARTY-NOTICES.txt new file mode 100644 index 00000000..ea773a0b --- /dev/null +++ b/THIRD-PARTY-NOTICES.txt @@ -0,0 +1,16 @@ +/*!----------------- PXT ThirdPartyNotices ------------------------------------------------------- + +PXT uses third party material from the projects listed below. +The original copyright notice and the license under which Microsoft +received such third party material are set forth below. Microsoft +reserves all other rights not expressly granted, whether by +implication, estoppel or otherwise. + +In the event that we accidentally failed to list a required notice, please +bring it to our attention. Post an issue or email us: + + makecode@microsoft.com + +--------------------------------------------- +Third Party Code Components +--------------------------------------------- diff --git a/cmds/pxtrequire.ts b/cmds/pxtrequire.ts new file mode 100644 index 00000000..0eabce91 --- /dev/null +++ b/cmds/pxtrequire.ts @@ -0,0 +1,7 @@ +/// +/// + +import * as path from "path"; +export let pxtCore = require("pxt-core"); +// require.resolve() gives path to [pxt dir]/built/pxt.js, so move up twice to get pxt root dir +export let pxtCoreDir = path.resolve(require.resolve("pxt-core"), "..", ".."); diff --git a/cmds/tsconfig.json b/cmds/tsconfig.json new file mode 100644 index 00000000..7d57cc95 --- /dev/null +++ b/cmds/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "es5", + "noImplicitAny": true, + "noImplicitReturns": true, + "declaration": true, + "outDir": "../built", + "module": "commonjs", + "rootDir": ".", + "newLine": "LF", + "sourceMap": false + } +} diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md new file mode 100644 index 00000000..04e337be --- /dev/null +++ b/docs/SUMMARY.md @@ -0,0 +1,11 @@ +# @extends + +## Reference #reference + +* [Reference](/reference) + * [input](/reference/input) + * [light](/reference/light) + * [music](/reference/music) + * [pins](/reference/pins) + * [control](/reference/control) + * [serial](/reference/serial) diff --git a/docs/about.md b/docs/about.md new file mode 100644 index 00000000..511ca72d --- /dev/null +++ b/docs/about.md @@ -0,0 +1,43 @@ +# About + +Welcome to the **Microsoft MakeCode** editor for the **@boardname@**! + +## Programming: [Blocks](/blocks) or [JavaScript](/javascript) + +You can program the @boardname@ using [Blocks](/blocks) or [JavaScript](/javascript) in your web browser: + +```block +input.buttonA.onEvent(ButtonEvent.Click, () => { + light.showRing(`blue blue blue blue blue blue blue blue blue blue`) +}) +``` +```typescript +input.buttonA.onEvent(ButtonEvent.Click, () => { + light.showRing(`blue blue blue blue blue blue blue blue blue blue`) +}) +``` + +The editor work in [most modern browsers](/browsers), work [offline](/offline) once loaded and do not require any installation. + +## [Compile and Flash: Your Program!](/device/usb) + +When you have your code ready, you connect your @boardname@ to a computer via a USB cable +**then press the reset button** so it appears as a mounted drive (named **CPLAYBOOT**). + +Compilation to machine code from [Blocks](/blocks) or [JavaScript](/javascript) happens in the browser. You save the binary +program to a **.uf2** file, which you then copy to the **CPLAYBOOT** drive, which flashes the device with the new program. + +## Simulator: Test Your Code + +You can run your code using the micro:bit simulator, all within the confines of a web browser. +The simulator has support for the LED screen, buttons, as well as compass, accelerometer, and digital I/O pins. + +```sim +loops.forever(() => { + light.pixels.showAnimation(light.animation(LightAnimation.Rainbow), 1000) +}) +``` + +```package +light +``` diff --git a/docs/beta-ref.json b/docs/beta-ref.json new file mode 100644 index 00000000..58f715cc --- /dev/null +++ b/docs/beta-ref.json @@ -0,0 +1,3 @@ +{ + "appref": "v" +} diff --git a/docs/blocks/loops.md b/docs/blocks/loops.md new file mode 100644 index 00000000..e7ddc85c --- /dev/null +++ b/docs/blocks/loops.md @@ -0,0 +1,8 @@ +# @extends + +### #specific + +```cards +loops.forever(() => {}); +loops.pause(0) +``` \ No newline at end of file diff --git a/docs/docs.md b/docs/docs.md new file mode 100644 index 00000000..5bc2ec6c --- /dev/null +++ b/docs/docs.md @@ -0,0 +1,14 @@ +# Documentation + +### @description Links to the documentation, reference and projects. + +Welcome to the documentation of the Microsoft MakeCode editor +for the @boardname@. + +## Documentation + +* [About](/about) +* [Examples](/examples) +* [Blocks](/blocks) +* [JavaScript](/javascript) +* [Reference](/reference) \ No newline at end of file diff --git a/docs/examples.md b/docs/examples.md new file mode 100644 index 00000000..5936e85c --- /dev/null +++ b/docs/examples.md @@ -0,0 +1,8 @@ +# Examples + +Here are some fun programs for your @boardname@! + +## Fun stuff + + +Coming soon. \ No newline at end of file diff --git a/docs/index-ref.json b/docs/index-ref.json new file mode 100644 index 00000000..58f715cc --- /dev/null +++ b/docs/index-ref.json @@ -0,0 +1,3 @@ +{ + "appref": "v" +} diff --git a/docs/projects.md b/docs/projects.md new file mode 100644 index 00000000..74274b0f --- /dev/null +++ b/docs/projects.md @@ -0,0 +1,9 @@ +# Projects + +Here are some cool projects that you can build with your @boardname@! + +## Basic + +Basic projects to build with your @boardname@. + +Coming soon. \ No newline at end of file diff --git a/docs/reference.md b/docs/reference.md new file mode 100644 index 00000000..0990d1bd --- /dev/null +++ b/docs/reference.md @@ -0,0 +1,19 @@ +# Reference + +```namespaces +input.onGesture(Gesture.Shake, () => {}) +light.showRing('red red red red red red red red red red') +music.playTone(0, 0) +pins.pulseDuration() +control.runInBackground(() => {}) +serial.writeLine(""); +``` + +## See Also + +[blocks](/blocks), [JavaScript](/javascript), [input](/reference/input), [light](/reference/light), [music](/reference/music), +[control](/reference/control), [pins](/reference/pins), [serial](/reference/serial) + +```package +circuit-playground +``` \ No newline at end of file diff --git a/docs/static/Microsoft-logo_rgb_c-gray-square.png b/docs/static/Microsoft-logo_rgb_c-gray-square.png new file mode 100644 index 0000000000000000000000000000000000000000..f5f83b8c33d027642954f4f833432de810768249 GIT binary patch literal 1850 zcmeAS@N?(olHy`uVBq!ia0y~yVAKU+4rZW8mhG`SK#C>Z(btiIVPik{pF~y$24;o; zpAc7|c>OL0h9&RqcYVq~{q<9T(%0&Ud8h5S-N^sHli~j<`~TPTzt3p`DjNl(Au#+x zV5xK!D5Efx1o;L3AK8E*_&d8QForn`JR*x381xiDn2|mD&wrqxWQl7;NpOBzNqJ&X zDnmhHW?qS2UTTSgiJpO;p^-C7_8SHUrum*Ojv*CsZ!c^NWi}LHaBMvIjOXum?Md+m za+f76YpUIC_I>T&+9}UVdaoZ3yrVS=v4_C5I=QF$X1(*T2VP4lY>#fm0gvA5UtHsR z{YR~Q>f7^+ZPG4R#Jd-+E*OQ_Lg4kj*T2}MLgqY?Tb{HLRE&AL`njxgN@xNA3um2* literal 0 HcmV?d00001 diff --git a/docs/static/Microsoft-logo_rgb_c-gray.png b/docs/static/Microsoft-logo_rgb_c-gray.png new file mode 100644 index 0000000000000000000000000000000000000000..6b77415ea54ca5734e224edcc035e72def037edf GIT binary patch literal 20339 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

7_RvbKcwsFBKroa5w` z;j99Uo9p%53I^$KA1@e)Pl+66>{|Ph(xvZ)6(!!L^xllyyY>!9QiHt7w zsqj{>6F>6}sOUA*RmIpunG}Ad9$#r%%l)PSIe+SzR=etI4uw6};9M(SlyLW;ef;9D zWRR)fLaQNdv2;F&{)N|M0vkn>LB?tBQt3-VZJx0dLngA7oU@-fO%BJpN$Eg7?9rkN z@s8Whr~REggR+q6;(@&W;UwNeVz$m@m*dU$+Bc3lkFXD17ZdE`XV!OIFLrg$&1T7Z zADw==;DZk#$>D#zYy5wH8TNnSBJ=-`{QvQO_y0AqSRUP`(N3t|p@KbxuDSC#-`911 zX5wrvWA?%vdcZ`5MI;1;#RNq~v_-^Z0C5>ni5tQqGQz@KexBa{1AwjlGb;;^|2crh T-}>(m08H_|s(kKUWB>mK4yDiA literal 0 HcmV?d00001 diff --git a/jenkins.groovy b/jenkins.groovy new file mode 100644 index 00000000..5cdd3180 --- /dev/null +++ b/jenkins.groovy @@ -0,0 +1,40 @@ +import jobs.generation.Utilities; +import jobs.generation.InternalUtilities; + +def project = GithubProject +def projectName = "pxt-ev3" + +[true, false].each { isPR -> + def newJobName = projectName + + if (isPR) { + newJobName += "_PR" + } else { + newJobName += "_Push" + } + + def newJob = job(newJobName) { + steps { + shell("chmod +x ./jenkins.sh") + shell("./jenkins.sh ${isPR}") + } + + if (!isPR) { + wrappers { + credentialsBinding { + string("PXT_ACCESS_TOKEN", "pxt_access_token") + string("PXT_RELEASE_REPO", "pxt_release_repo_ev3") + } + } + } + } + + Utilities.setMachineAffinity(newJob, "Ubuntu", "20161020") + InternalUtilities.standardJobSetup(newJob, project, isPR, "*/*") + + if (isPR) { + Utilities.addGithubPRTrigger(newJob, "Default Testing") + } else { + Utilities.addGithubPushTrigger(newJob) + } +} diff --git a/jenkins.sh b/jenkins.sh new file mode 100755 index 00000000..b708528c --- /dev/null +++ b/jenkins.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash + +# Set up NVM +export NVM_DIR="/home/dotnet-bot/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" + +nvm install 5 + +# Set up build environment variables +echo ---------- Setting build environment variables +echo Git branch: $GIT_BRANCH +echo isPR: $1 + +originRegex="^origin/.*" +branchRegex="^origin/\K.*(?=$)" +releaseBranchRegex="^(master|v\d+)$" + +if [[ "$GIT_BRANCH" =~ $originRegex ]]; then + branchName=$(echo ${GIT_BRANCH} | grep -oP $branchRegex) + echo Setting TRAVIS_BRANCH to ${branchName} + export TRAVIS_BRANCH=${branchName} +else + echo Setting TRAVIS_BRANCH to $GIT_BRANCH + export TRAVIS_BRANCH=$GIT_BRANCH +fi + +if [ "$1" == "false" ]; then + echo Setting TRAVIS_PULL_REQUEST to false + export TRAVIS_PULL_REQUEST=false + + if [[ "$TRAVIS_BRANCH" =~ $releaseBranchRegex ]]; then + if [[ -z $PXT_RELEASE_REPO ]]; then + echo Cannot find release repo\; skipping tag checks + else + gitTag=$(git describe --tags --exact-match 2> /dev/null) + builtTag=$(git ls-remote --tags $PXT_RELEASE_REPO | grep -o "refs/tags/$gitTag$") + + echo Current tag: $gitTag + echo Built tag: $builtTag + + if [[ ! -z $gitTag && -z $builtTag ]]; then + echo Built tag not found\; building tag + echo Setting TRAVIS_BRANCH to $gitTag + export TRAVIS_BRANCH=$gitTag + echo Setting TRAVIS_TAG to $gitTag + export TRAVIS_TAG=$gitTag + else + echo Not a tag build + fi + fi + fi +fi + +# Perform build +npm install +npm test diff --git a/libs/base/pxt.json b/libs/base/pxt.json new file mode 100644 index 00000000..98322f56 --- /dev/null +++ b/libs/base/pxt.json @@ -0,0 +1,28 @@ +{ + "name": "base", + "description": "The base library", + "files": [ + "README.md", + "pxt-core.d.ts", + "pxt.cpp", + "pxtbase.h", + "core.cpp", + "pxt-helpers.ts", + "buffer.cpp", + "shims.d.ts", + "enums.d.ts", + "loops.cpp", + "math.ts", + "ns.ts", + "control.cpp", + "control.ts", + "serial.cpp", + "serial.ts" + ], + "testFiles": [ + "test.ts" + ], + "additionalFilePath": "../../node_modules/pxt-common-packages/libs/base", + "public": true, + "dependencies": {} +} diff --git a/libs/core/README.md b/libs/core/README.md new file mode 100644 index 00000000..7010a9e3 --- /dev/null +++ b/libs/core/README.md @@ -0,0 +1,4 @@ +# core + +The core library for ev3 target. + diff --git a/libs/core/ns.ts b/libs/core/ns.ts new file mode 100644 index 00000000..e1cfb040 --- /dev/null +++ b/libs/core/ns.ts @@ -0,0 +1,4 @@ + +//% color="#B4009E" weight=98 icon="\uf192" +namespace input { +} diff --git a/libs/core/pxt.h b/libs/core/pxt.h new file mode 100644 index 00000000..0f6a0fdc --- /dev/null +++ b/libs/core/pxt.h @@ -0,0 +1,7 @@ +#ifndef __PXT_H +#define __PXT_H + +#include "pxtbase.h" +#undef DMESG + +#endif diff --git a/libs/core/pxt.json b/libs/core/pxt.json new file mode 100644 index 00000000..7cd2c55d --- /dev/null +++ b/libs/core/pxt.json @@ -0,0 +1,17 @@ +{ + "name": "core", + "description": "The core library", + "files": [ + "README.md", + "pxt.h", + "pxtcore.h", + "ns.ts" + ], + "testFiles": [ + "test.ts" + ], + "public": true, + "dependencies": { + "base": "file:../base" + } +} diff --git a/libs/core/pxtcore.h b/libs/core/pxtcore.h new file mode 100644 index 00000000..39e2814c --- /dev/null +++ b/libs/core/pxtcore.h @@ -0,0 +1,7 @@ +#ifndef __PXTCORE_H +#define __PXTCORE_H + +//void codal_dmesg(const char *format, ...); +#define DMESG(...) /* nothing */ + +#endif diff --git a/libs/core/test.ts b/libs/core/test.ts new file mode 100644 index 00000000..c2bde318 --- /dev/null +++ b/libs/core/test.ts @@ -0,0 +1,11 @@ +let i = 1 +let f = 0.5 +let plus = i + f +let minus = i - f + +let r = Math.random() +let ri = Math.randomRange(5, 10) + +loops.forever(() => { + loops.pause(100) +}) diff --git a/libs/ev3/ns.ts b/libs/ev3/ns.ts new file mode 100644 index 00000000..172c4655 --- /dev/null +++ b/libs/ev3/ns.ts @@ -0,0 +1,34 @@ + +//% color="#d65cd6" +namespace input { +} + +//% color="#F55D3E" +namespace music { + +} + +//% color="#1B998B" +namespace control { + +} + +//% color="#EF2D56" +namespace pins { + +} + +//% color="#006E90" +namespace serial { + +} + +//% color="#40bf4a" +namespace loops { + +} + +//% color="#4c97ff" +namespace light { + +} diff --git a/libs/ev3/pxt.json b/libs/ev3/pxt.json new file mode 100644 index 00000000..069669c9 --- /dev/null +++ b/libs/ev3/pxt.json @@ -0,0 +1,13 @@ +{ + "name": "ev3", + "description": "The EV3 library", + "files": [ + "README.md", + "ns.ts" + ], + "dependencies": { + "base": "file:../base", + "core": "file:../core" + }, + "public": true +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..aee9e0a1 --- /dev/null +++ b/package.json @@ -0,0 +1,48 @@ +{ + "name": "pxt-ev3", + "version": "0.0.0", + "description": "LEGO Mindstorms EV3 for Microsoft MakeCode", + "private": true, + "keywords": [ + "JavaScript", + "education", + "lego", + "pxt", + "MakeCode", + "Microsoft" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/Microsoft/pxt-ev3.git" + }, + "author": "", + "license": "MIT", + "homepage": "https://github.com/Microsoft/pxt-ev3#readme", + "files": [ + "README.md", + "pxtarget.json", + "built/*.js", + "built/*.json", + "built/*.d.ts", + "sim/public", + "docs/*.md", + "docs/*/*.md", + "docs/*/*/*.md" + ], + "main": "built/pxtrequire.js", + "typings": "built/pxtrequire.d.ts", + "devDependencies": { + "typescript": "^1.8.7", + "less": "^2.6.0", + "rtlcss": "^2.1.2", + "autoprefixer": "^6.7.6", + "semantic-ui-less": "^2.2.4" + }, + "dependencies": { + "pxt-common-packages": "0.8.1", + "pxt-core": "1.7.4" + }, + "scripts": { + "test": "node node_modules/pxt-core/built/pxt.js travis" + } +} diff --git a/pxtarget.json b/pxtarget.json new file mode 100644 index 00000000..02de03b7 --- /dev/null +++ b/pxtarget.json @@ -0,0 +1,136 @@ +{ + "id": "ev3", + "platformid": "linux", + "nickname": "lego", + "name": "LEGO Mindstorms EV3", + "title": "LEGO Mindstorms EV3 - Blocks / Javascript editor", + "description": "A Blocks / JavaScript code editor for the LEGO Mindstorms EV3.", + "corepkg": "ev3", + "bundleddirs": [ + "libs/base", + "libs/core", + "libs/ev3" + ], + "simulator": { + "autoRun": true, + "streams": true, + "aspectRatio": 1.0, + "parts": false, + "enableTrace": true + }, + "cloud": { + "workspace": false, + "packages": true, + "sharing": true, + "publishing": true, + "importing": false, + "preferredPackages": [], + "githubPackages": true + }, + "compile": { + "isNative": true, + "useUF2": true, + "hasHex": true, + "deployDrives": ".*", + "deployFileMarker": "INFO_UF2.TXT", + "driveName": "LEGO", + "flashCodeAlign": 256, + "floatingPoint": true, + "taggedInts": true + }, + "runtime": { + "mathBlocks": true, + "loopsBlocks": true, + "logicBlocks": true, + "variablesBlocks": true, + "textBlocks": true, + "listsBlocks": true, + "functionBlocks": true, + "onStartNamespace": "loops", + "onStartColor": "#40bf4a" + }, + "compileService": { + "buildEngine": "dockermake", + "serviceId": "ev3" + }, + "appTheme": { + "accentColor": "#0089BF", + "logoUrl": "https://lego.makecode.com", + "logo": "./static/logo.svg", + "docsLogo": "./static/logo.square.svg", + "portraitLogo": "./static/logo.square.svg", + "footerLogo": "./static/logo.square.svg", + "cardLogo": "./static/icons/android-chrome-192x192.png", + "appLogo": "./static/icons/android-chrome-192x192.png", + "organization": "Microsoft MakeCode", + "organizationUrl": "https://makecode.com/", + "organizationLogo": "./static/Microsoft-logo_rgb_c-gray-square.png", + "organizationWideLogo": "./static/Microsoft-logo_rgb_c-white.png", + "homeUrl": "https://lego.makecode.com/", + "embedUrl": "https://lego.makecode.com/", + "privacyUrl": "https://go.microsoft.com/fwlink/?LinkId=521839", + "termsOfUseUrl": "https://go.microsoft.com/fwlink/?LinkID=206977", + "githubUrl": "https://github.com/Microsoft/pxt-ev3", + "boardName": "LEGO Mindstorms EV3 Brick", + "docMenu": [ + { + "name": "About", + "path": "/about" + }, + { + "name": "Examples", + "path": "#projects:Examples" + }, + { + "name": "Blocks", + "path": "/blocks" + }, + { + "name": "JavaScript", + "path": "/javascript" + }, + { + "name": "Reference", + "path": "/reference" + }, + { + "name": "Buy", + "path": "https://www.lego.com/en-us/mindstorms/products/mindstorms-ev3-31313" + } + ], + "galleries": { + "Make": "projects", + "Examples": "examples" + }, + "sideDoc": "tutorials/getting-started", + "invertedMenu": true, + "invertedToolbox": true, + "invertedMonaco": true, + "monacoToolbox": true, + "simAnimationEnter": "roll in", + "simAnimationExit": "roll out", + "exampleGallery": "examples", + "hasAudio": true, + "usbHelp": [], + "extendEditor": true, + "disableBlockIcons": true, + "blocklyOptions": { + "grid": { + "spacing": 20, + "length": 2, + "colour": "rgba(189, 195, 199, 0.20)", + "snap": true + } + }, + "blockColors": { + "loops": "#40bf4a", + "logic": "#4cbfe6", + "math": "#9966ff", + "variables": "#FF6680", + "text": "#ffab19", + "advanced": "#00272B", + "functions": "#005a9e", + "arrays": "#8A1C7C" + } + } +} \ No newline at end of file diff --git a/targetconfig.json b/targetconfig.json new file mode 100644 index 00000000..3ecfe14b --- /dev/null +++ b/targetconfig.json @@ -0,0 +1,10 @@ +{ + "packages": { + "approvedOrgs": [ + "Microsoft", + "LEGO" + ], + "approvedRepos": [ + ] + } +} \ No newline at end of file diff --git a/theme/fieldeditors.less b/theme/fieldeditors.less new file mode 100644 index 00000000..7f4ba0ba --- /dev/null +++ b/theme/fieldeditors.less @@ -0,0 +1,39 @@ + + + +/******************************* + Field Light +*******************************/ +#field-neopixels { + cursor: default; +} + +#field-neopixels .neopixel, #field-neopixels .colorbutton { + cursor:pointer; +} + +#field-neopixels .neopixel { + stroke: #fff; + stroke-width:2px; +} + +#field-neopixels .neopixel:hover { + stroke-width: 4px !important; + stroke:#fc3; +} + +#field-neopixels .colorbutton { + stroke:black; + stroke-width: 2px; + stroke-opacity: 1; +} + +#field-neopixels .colorbutton:hover { + stroke:#fc3; + stroke-width: 3px; +} + +#field-neopixels .colorbutton.active { + stroke:#fc3; + stroke-width: 4px !important; +} diff --git a/theme/site/collections/breadcrumb.overrides b/theme/site/collections/breadcrumb.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/collections/breadcrumb.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/collections/breadcrumb.variables b/theme/site/collections/breadcrumb.variables new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/collections/breadcrumb.variables @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/collections/form.overrides b/theme/site/collections/form.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/collections/form.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/collections/form.variables b/theme/site/collections/form.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/collections/form.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/collections/grid.overrides b/theme/site/collections/grid.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/collections/grid.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/collections/grid.variables b/theme/site/collections/grid.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/collections/grid.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/collections/menu.overrides b/theme/site/collections/menu.overrides new file mode 100644 index 00000000..3b98218c --- /dev/null +++ b/theme/site/collections/menu.overrides @@ -0,0 +1,8 @@ +/******************************* + Site Overrides +*******************************/ + + +.ui.menu.inverted .item { + text-transform: uppercase; +} \ No newline at end of file diff --git a/theme/site/collections/menu.variables b/theme/site/collections/menu.variables new file mode 100644 index 00000000..c71b0599 --- /dev/null +++ b/theme/site/collections/menu.variables @@ -0,0 +1,5 @@ +/******************************* + User Variable Overrides +*******************************/ + +@invertedItemTextColor: @white; \ No newline at end of file diff --git a/theme/site/collections/message.overrides b/theme/site/collections/message.overrides new file mode 100644 index 00000000..96091c36 --- /dev/null +++ b/theme/site/collections/message.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/collections/message.variables b/theme/site/collections/message.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/collections/message.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/collections/table.overrides b/theme/site/collections/table.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/collections/table.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/collections/table.variables b/theme/site/collections/table.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/collections/table.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/elements/button.overrides b/theme/site/elements/button.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/elements/button.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/elements/button.variables b/theme/site/elements/button.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/elements/button.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/elements/container.overrides b/theme/site/elements/container.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/elements/container.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/elements/container.variables b/theme/site/elements/container.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/elements/container.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/elements/divider.overrides b/theme/site/elements/divider.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/elements/divider.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/elements/divider.variables b/theme/site/elements/divider.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/elements/divider.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/elements/flag.overrides b/theme/site/elements/flag.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/elements/flag.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/elements/flag.variables b/theme/site/elements/flag.variables new file mode 100644 index 00000000..e3e125d6 --- /dev/null +++ b/theme/site/elements/flag.variables @@ -0,0 +1,3 @@ +/*------------------- + Flag Variables +--------------------*/ diff --git a/theme/site/elements/header.overrides b/theme/site/elements/header.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/elements/header.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/elements/header.variables b/theme/site/elements/header.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/elements/header.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/elements/icon.overrides b/theme/site/elements/icon.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/elements/icon.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/elements/icon.variables b/theme/site/elements/icon.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/elements/icon.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/elements/image.overrides b/theme/site/elements/image.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/elements/image.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/elements/image.variables b/theme/site/elements/image.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/elements/image.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/elements/input.overrides b/theme/site/elements/input.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/elements/input.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/elements/input.variables b/theme/site/elements/input.variables new file mode 100644 index 00000000..04b556f8 --- /dev/null +++ b/theme/site/elements/input.variables @@ -0,0 +1,6 @@ +/******************************* + User Variable Overrides +*******************************/ + +@invertedItemTextColor: @primaryColor; +@transparentInvertedColor: @primaryColor; \ No newline at end of file diff --git a/theme/site/elements/label.overrides b/theme/site/elements/label.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/elements/label.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/elements/label.variables b/theme/site/elements/label.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/elements/label.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/elements/list.overrides b/theme/site/elements/list.overrides new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/elements/list.overrides @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/elements/list.variables b/theme/site/elements/list.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/elements/list.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/elements/loader.overrides b/theme/site/elements/loader.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/elements/loader.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/elements/loader.variables b/theme/site/elements/loader.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/elements/loader.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/elements/rail.overrides b/theme/site/elements/rail.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/elements/rail.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/elements/rail.variables b/theme/site/elements/rail.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/elements/rail.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/elements/reveal.overrides b/theme/site/elements/reveal.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/elements/reveal.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/elements/reveal.variables b/theme/site/elements/reveal.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/elements/reveal.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/elements/segment.overrides b/theme/site/elements/segment.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/elements/segment.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/elements/segment.variables b/theme/site/elements/segment.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/elements/segment.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/elements/step.overrides b/theme/site/elements/step.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/elements/step.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/elements/step.variables b/theme/site/elements/step.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/elements/step.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/globals/reset.overrides b/theme/site/globals/reset.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/globals/reset.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/globals/reset.variables b/theme/site/globals/reset.variables new file mode 100644 index 00000000..cd955446 --- /dev/null +++ b/theme/site/globals/reset.variables @@ -0,0 +1,3 @@ +/******************************* + User Global Variables +*******************************/ diff --git a/theme/site/globals/site.overrides b/theme/site/globals/site.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/globals/site.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/globals/site.variables b/theme/site/globals/site.variables new file mode 100644 index 00000000..ac07ffb2 --- /dev/null +++ b/theme/site/globals/site.variables @@ -0,0 +1,90 @@ +/******************************* + User Global Variables +*******************************/ + +@importGoogleFonts: true; + +@fontName : 'Open Sans'; + +@emSize : 14px; +@fontSize : 13px; + +@primaryColor: @blue; +@secondaryColor: @pink; + +@red:#CC2936; +@yellow:#FFC914; +@teal:#08415C; +@violet:#C200C0; +@brown:#2E282A; +@grey:#999; + +/* Adafruit colors */ +@blue:#2EB7ED; +@pink:#FB48C7; + +@green: #40bf4a; /*#00922B;*/ +@purple:#8073E5; +@orange:#FFA702; + +@pageBackground: #ecf0f1; + +/******************************* + PXT Overrides +*******************************/ + +/*------------------- + Menu +--------------------*/ + +@mainMenuInvertedBackground: @blue; +@mainMenuTutorialBackground: @orange; + +@mainMenuBlocksJsToggleColor: @black; + +@tutorialSelectedMenuColor: @blue; + +/*------------------- + Layout +--------------------*/ + +@sideBarWidth: 22rem; +@simulatorWidth: 24rem; +@simulatorWidthSmall: 20rem; + +/*------------------- + Background +--------------------*/ + +@simulatorBackground: #2F2F2F; /*#313638;*/ +@editorToolsBackground: #2F2F2F; /*#1e1e1e;*/ +@blocklySvgColor: #4c4b4d; /*#1e1e1e;*/ + +/*------------------- + Full screen +--------------------*/ + +@fullscreenBackgroundGradientStart: @mainMenuInvertedBackground; +@fullscreenBackgroundGradientEnd: #fff; + +/*------------------- + Side Docs +--------------------*/ + +@sidedocsButtonsTop: (@mainMenuHeight + 1rem); +@sidedocsButtonsRight: 4.25rem; + +/*------------------- + Editor +--------------------*/ + +@blocklyToolboxColor: transparent; +@trashIconColor: @primaryColor; + + +/*------------------- + Blockly +--------------------*/ + +@blocklyRowWidthWide: 160px; +@blocklyRowWidthComputer: 140px; diff --git a/theme/site/modules/accordion.overrides b/theme/site/modules/accordion.overrides new file mode 100644 index 00000000..660e664b --- /dev/null +++ b/theme/site/modules/accordion.overrides @@ -0,0 +1,3 @@ +/******************************* + User Overrides +*******************************/ diff --git a/theme/site/modules/accordion.variables b/theme/site/modules/accordion.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/modules/accordion.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/modules/chatroom.overrides b/theme/site/modules/chatroom.overrides new file mode 100644 index 00000000..660e664b --- /dev/null +++ b/theme/site/modules/chatroom.overrides @@ -0,0 +1,3 @@ +/******************************* + User Overrides +*******************************/ diff --git a/theme/site/modules/chatroom.variables b/theme/site/modules/chatroom.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/modules/chatroom.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/modules/checkbox.overrides b/theme/site/modules/checkbox.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/modules/checkbox.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/modules/checkbox.variables b/theme/site/modules/checkbox.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/modules/checkbox.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/modules/dimmer.overrides b/theme/site/modules/dimmer.overrides new file mode 100644 index 00000000..660e664b --- /dev/null +++ b/theme/site/modules/dimmer.overrides @@ -0,0 +1,3 @@ +/******************************* + User Overrides +*******************************/ diff --git a/theme/site/modules/dimmer.variables b/theme/site/modules/dimmer.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/modules/dimmer.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/modules/dropdown.overrides b/theme/site/modules/dropdown.overrides new file mode 100644 index 00000000..660e664b --- /dev/null +++ b/theme/site/modules/dropdown.overrides @@ -0,0 +1,3 @@ +/******************************* + User Overrides +*******************************/ diff --git a/theme/site/modules/dropdown.variables b/theme/site/modules/dropdown.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/modules/dropdown.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/modules/embed.overrides b/theme/site/modules/embed.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/modules/embed.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/modules/embed.variables b/theme/site/modules/embed.variables new file mode 100644 index 00000000..e69de29b diff --git a/theme/site/modules/modal.overrides b/theme/site/modules/modal.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/modules/modal.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/modules/modal.variables b/theme/site/modules/modal.variables new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/modules/modal.variables @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/modules/nag.overrides b/theme/site/modules/nag.overrides new file mode 100644 index 00000000..660e664b --- /dev/null +++ b/theme/site/modules/nag.overrides @@ -0,0 +1,3 @@ +/******************************* + User Overrides +*******************************/ diff --git a/theme/site/modules/nag.variables b/theme/site/modules/nag.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/modules/nag.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/modules/popup.overrides b/theme/site/modules/popup.overrides new file mode 100644 index 00000000..660e664b --- /dev/null +++ b/theme/site/modules/popup.overrides @@ -0,0 +1,3 @@ +/******************************* + User Overrides +*******************************/ diff --git a/theme/site/modules/popup.variables b/theme/site/modules/popup.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/modules/popup.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/modules/progress.overrides b/theme/site/modules/progress.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/modules/progress.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/modules/progress.variables b/theme/site/modules/progress.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/modules/progress.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/modules/rating.overrides b/theme/site/modules/rating.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/modules/rating.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/modules/rating.variables b/theme/site/modules/rating.variables new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/modules/rating.variables @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/modules/search.overrides b/theme/site/modules/search.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/modules/search.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/modules/search.variables b/theme/site/modules/search.variables new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/modules/search.variables @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/modules/shape.overrides b/theme/site/modules/shape.overrides new file mode 100644 index 00000000..660e664b --- /dev/null +++ b/theme/site/modules/shape.overrides @@ -0,0 +1,3 @@ +/******************************* + User Overrides +*******************************/ diff --git a/theme/site/modules/shape.variables b/theme/site/modules/shape.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/modules/shape.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/modules/sidebar.overrides b/theme/site/modules/sidebar.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/modules/sidebar.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/modules/sidebar.variables b/theme/site/modules/sidebar.variables new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/modules/sidebar.variables @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/modules/sticky.overrides b/theme/site/modules/sticky.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/modules/sticky.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/modules/sticky.variables b/theme/site/modules/sticky.variables new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/modules/sticky.variables @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/modules/tab.overrides b/theme/site/modules/tab.overrides new file mode 100644 index 00000000..660e664b --- /dev/null +++ b/theme/site/modules/tab.overrides @@ -0,0 +1,3 @@ +/******************************* + User Overrides +*******************************/ diff --git a/theme/site/modules/tab.variables b/theme/site/modules/tab.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/modules/tab.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/modules/transition.overrides b/theme/site/modules/transition.overrides new file mode 100644 index 00000000..0b78a5f9 --- /dev/null +++ b/theme/site/modules/transition.overrides @@ -0,0 +1,216 @@ +/******************************* + Site Overrides +*******************************/ + + +/*-------------- + Rotate In +---------------*/ + +/* Inward */ +.transition.rotate { + animation-duration: 0.6s; + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); +} +.transition.rotate.in { + animation-name: rotateIn; +} +.transition[class*="rotate down left"].in { + animation-name: rotateInDownLeft; +} +.transition[class*="rotate down right"].in { + animation-name: rotateInDownRight; +} +.transition[class*="rotate up left"].in { + animation-name: rotateInUpLeft; +} +.transition[class*="rotate up right"].in { + animation-name: rotateInUpRight; +} + +/* Outward */ +.transition.rotate.out { + animation-name: rotateOut; +} +.transition[class*="rotate down left"].out { + animation-name: rotateOutDownLeft; +} +.transition[class*="rotate down right"].out { + animation-name: rotateOutDownRight; +} +.transition[class*="rotate up left"].out { + animation-name: rotateOutUpLeft; +} +.transition[class*="rotate up right"].out { + animation-name: rotateOutUpRight; +} + +/* In */ +@keyframes rotateIn { + from { + transform-origin: center; + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + to { + transform-origin: center; + transform: none; + opacity: 1; + } +} +@keyframes rotateInDownLeft { + from { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + to { + transform-origin: left bottom; + transform: none; + opacity: 1; + } +} +@keyframes rotateInDownRight { + from { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + transform-origin: right bottom; + transform: none; + opacity: 1; + } +} +@keyframes rotateInUpLeft { + from { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + transform-origin: left bottom; + transform: none; + opacity: 1; + } +} +@keyframes rotateInUpRight { + from { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + to { + transform-origin: right bottom; + transform: none; + opacity: 1; + } +} + +/* Out */ +@keyframes rotateOut { + from { + transform-origin: center; + opacity: 1; + } + + to { + transform-origin: center; + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} +@keyframes rotateOutDownLeft { + from { + transform-origin: left bottom; + opacity: 1; + } + + to { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} +@keyframes rotateOutDownRight { + from { + transform-origin: right bottom; + opacity: 1; + } + + to { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} +@keyframes rotateOutUpLeft { + from { + transform-origin: left bottom; + opacity: 1; + } + + to { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} +@keyframes rotateOutUpRight { + from { + transform-origin: right bottom; + opacity: 1; + } + + to { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + + + +/*-------------- + Roll in +---------------*/ + +/* Inward */ +.transition.roll { + animation-duration: 2s; + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); +} +.transition.roll.in { + animation-name: rollIn; +} +.transition.roll.out { + animation-name: rollOut; +} + +@keyframes rollIn { + from { + opacity: 0; + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + to { + opacity: 1; + transform: none; + } +} + +@keyframes rollOut { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } +} \ No newline at end of file diff --git a/theme/site/modules/transition.variables b/theme/site/modules/transition.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/modules/transition.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/modules/video.overrides b/theme/site/modules/video.overrides new file mode 100644 index 00000000..cba59efe --- /dev/null +++ b/theme/site/modules/video.overrides @@ -0,0 +1,3 @@ +/******************************* + Site Overrides +*******************************/ diff --git a/theme/site/modules/video.variables b/theme/site/modules/video.variables new file mode 100644 index 00000000..e69de29b diff --git a/theme/site/views/ad.overrides b/theme/site/views/ad.overrides new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/views/ad.overrides @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/views/ad.variables b/theme/site/views/ad.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/views/ad.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/views/card.overrides b/theme/site/views/card.overrides new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/views/card.overrides @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/views/card.variables b/theme/site/views/card.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/views/card.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/views/comment.overrides b/theme/site/views/comment.overrides new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/views/comment.overrides @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/views/comment.variables b/theme/site/views/comment.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/views/comment.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/views/feed.overrides b/theme/site/views/feed.overrides new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/views/feed.overrides @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/views/feed.variables b/theme/site/views/feed.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/views/feed.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/views/item.overrides b/theme/site/views/item.overrides new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/views/item.overrides @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/views/item.variables b/theme/site/views/item.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/views/item.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/views/statistic.overrides b/theme/site/views/statistic.overrides new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/views/statistic.overrides @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/site/views/statistic.variables b/theme/site/views/statistic.variables new file mode 100644 index 00000000..6f085f93 --- /dev/null +++ b/theme/site/views/statistic.variables @@ -0,0 +1,3 @@ +/******************************* + User Variable Overrides +*******************************/ diff --git a/theme/style.less b/theme/style.less new file mode 100644 index 00000000..a21b510a --- /dev/null +++ b/theme/style.less @@ -0,0 +1,149 @@ +/* Import all components */ +@import 'semantic'; +@import 'pxt'; +@import 'themes/default/globals/site.variables'; +@import 'themes/pxt/globals/site.variables'; +@import 'site/globals/site.variables'; +@import 'themes/default/collections/menu.variables'; + +@import 'fieldeditors'; + +/* Reference import */ +@import (reference) "semantic.less"; + +/******************************* + Add your custom CSS here +*******************************/ + +.ui.button.download-button { + &:extend(.ui.secondary.button all); +} + +.ui.button.editortools-btn { + &:extend(.ui.blue.button all); +} + +.projectname-input { + &:extend(.inverted all); +} + +.ui.button.getting-started-btn { + &:extend(.ui.green.button all); +} + +.ui.button.exit-tutorial-btn { + &:extend(.ui.blue.button all); +} + + +/* Remove shadow around blockly blocks */ +.blocklyPathDark, .blocklyPathLight { + display: none; +} + +/* Specifying rounded toolbox borders. */ +div.blocklyTreeRow { + border-radius: 3px; + margin-bottom: 3px !important; + border: 1px solid #1e1e1e; + border-left-width: 1px !important; +} +div.blocklyTreeRoot div div div div div.blocklyTreeRow { + border-left-width: 1px !important; +} + +/* Highlight category item */ +div.blocklyTreeRow.blocklyTreeSelected, div.blocklyTreeRoot div div div div div.blocklyTreeRow.blocklyTreeSelected { + border: 2px solid #fc3; + border-left-width: 2px !important; +} + +/* This removes any padding at the top of the toolbox */ +div.blocklyTreeRoot { + padding: 0px !important; +} + +/* Blockly Text */ +span.blocklyTreeLabel { + font-family: "Gotham SSm A","Gotham SSm B","Montserrat","Lucida Grande","Lucida Sans Unicode","Lucida Sans",Geneva,Verdana,sans-serif !important; + text-transform: uppercase !important; + font-size:1rem !important; +} + +svg.blocklySvg { + background: #00487C; /* For browsers that do not support gradients */ +} + +.blocklyFlyoutBackground { + fill: #282828 !important; +} +.monacoFlyout { + background: rgba(40, 40, 40, 0.9); +} + +.blocklyToolboxDiv, .monacoToolboxDiv { + padding: 0.5rem; + border-right: solid 1px #282828; + background-color: #383838 !important; +} + +.blocklyScrollbarHandle { + fill: #000 !important; + fill-opacity:.8; +} + +/* Editor menu toggle */ +.ui.menu .item.editor-menuitem { + background: fade(@black, 20%) !important; +} + +/* Search box */ +#blocklySearchArea { + margin: 0.5rem; +} +.blocklySearchInputField { + border-radius: 0.2rem !important; +} + +.sandboxfooter a:not(.thin) { + color:white !important; +} + +/* Scrollbars */ +::-webkit-scrollbar-thumb { + border-radius: 5px; + background-color: rgba(0, 0, 0, 0.8); + box-shadow: 0 0 1px rgba(0, 0, 0, 0.8); + -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.8); +} + +/* Mobile */ +@media only screen and (max-width: @largestMobileScreen) { + #filelist { + background: transparent; + } + div.blocklyTreeRow { + padding-bottom: 2rem !important; + } + #blocklyTrashIcon { + margin: 0.2rem; + } +} + +/* Tablet */ +@media only screen and (min-width: @tabletBreakpoint) and (max-width: @largestTabletScreen) { +} + +/* Small Monitor */ +@media only screen and (min-width: @computerBreakpoint) and (max-width: @largestSmallMonitor) { +} + +/* Large Monitor */ +@media only screen and (min-width: @largeMonitorBreakpoint) { +} +/* Mobile, Tablet AND thin screen */ +@media only screen and (max-width: @largestTabletScreen) and (max-height: @thinEditorBreakpoint) { + .sandboxfooter a:not(.thin) { + color: @black !important; + } +} \ No newline at end of file diff --git a/theme/theme.config b/theme/theme.config new file mode 100644 index 00000000..53510589 --- /dev/null +++ b/theme/theme.config @@ -0,0 +1,94 @@ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ + +/******************************* + Theme Selection +*******************************/ + +/* To override a theme for an individual element + specify theme name below +*/ + +/* Global */ +@site : 'pxt'; +@reset : 'default'; + +/* Elements */ +@button : 'pxt'; +@container : 'pxt'; +@divider : 'pxt'; +@flag : 'pxt'; +@header : 'pxt'; +@icon : 'default'; +@image : 'pxt'; +@input : 'pxt'; +@label : 'pxt'; +@list : 'pxt'; +@loader : 'pxt'; +@rail : 'pxt'; +@reveal : 'pxt'; +@segment : 'pxt'; +@step : 'pxt'; + +/* Collections */ +@breadcrumb : 'default'; +@form : 'default'; +@grid : 'pxt'; +@menu : 'pxt'; +@message : 'default'; +@table : 'default'; + +/* Modules */ +@accordion : 'default'; +@checkbox : 'default'; +@dimmer : 'default'; +@dropdown : 'default'; +@embed : 'default'; +@modal : 'default'; +@nag : 'default'; +@popup : 'default'; +@progress : 'default'; +@rating : 'default'; +@search : 'default'; +@shape : 'default'; +@sidebar : 'default'; +@sticky : 'default'; +@tab : 'default'; +@transition : 'default'; + +/* Views */ +@ad : 'default'; +@card : 'default'; +@comment : 'default'; +@feed : 'default'; +@item : 'default'; +@statistic : 'default'; + +/******************************* + Folders +*******************************/ + +/* Path to theme packages */ +@themesFolder : 'themes'; + +/* Path to site override folder */ +@siteFolder : 'site'; + + +/******************************* + Import Theme +*******************************/ + +@import "theme.less"; + +@fontPath : 'fonts'; + +/* End Config */ diff --git a/tslint.json b/tslint.json new file mode 100644 index 00000000..6d9bd5e2 --- /dev/null +++ b/tslint.json @@ -0,0 +1,56 @@ +{ + "rules": { + "class-name": true, + "comment-format": [ + true + ], + "indent": [ + true, + "spaces" + ], + "no-duplicate-variable": true, + "no-eval": true, + "no-internal-module": true, + "no-trailing-whitespace": true, + "no-var-keyword": true, + "one-line": [ + true, + "check-open-brace", + "check-whitespace" + ], + "quotemark": [ + true, + "double" + ], + "semicolon": [ + false, + "always" + ], + "triple-equals": [ + false, + "allow-null-check" + ], + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + } + ], + "variable-name": [ + true, + "ban-keywords" + ], + "whitespace": [ + true, + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type" + ] + } +} \ No newline at end of file