diff --git a/.eslintignore b/.eslintignore
deleted file mode 100644
index 5131e620167..00000000000
--- a/.eslintignore
+++ /dev/null
@@ -1,10 +0,0 @@
-*_compressed*.js
-*_uncompressed*.js
-/msg/*
-/core/css.js
-/tests/jsunit/*
-/tests/generators/*
-/generators/*
-/demos/*
-/accessible/*
-/appengine/*
\ No newline at end of file
diff --git a/.eslintrc b/.eslintrc
deleted file mode 100644
index bba9e1ba20e..00000000000
--- a/.eslintrc
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "rules": {
- "curly": ["error", "multi-line"],
- "eol-last": ["error"],
- "indent": ["error", 2, {"SwitchCase": 1}], # Blockly/Google use 2-space indents
- "linebreak-style": ["error", "unix"],
- "max-len": ["error", 120, 4],
- "no-trailing-spaces": ["error", { "skipBlankLines": true }],
- "no-unused-vars": ["error", {"args": "after-used", "varsIgnorePattern": "^_"}],
- "no-use-before-define": ["error"],
- "quotes": ["off"], # Blockly mixes single and double quotes
- "semi": ["error", "always"],
- "space-before-function-paren": ["error", "never"], # Blockly doesn't have space before function paren
- "strict": ["off"], # Blockly uses 'use strict' in files
- "no-cond-assign": ["off"], # Blockly often uses cond-assignment in loops
- "no-redeclare": ["off"], # Closure style allows redeclarations
- "valid-jsdoc": ["error", {"requireReturn": false}],
- "no-console": ["off"]
- },
- "env": {
- "browser": true
- },
- "globals": {
- "Blockly": true, # Blockly global
- "goog": true # goog closure libraries/includes
- },
- "extends": "eslint:recommended"
-}
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000000..176a458f94e
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+* text=auto
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
new file mode 100644
index 00000000000..d52d27df155
--- /dev/null
+++ b/.github/CODEOWNERS
@@ -0,0 +1 @@
+* @google/blockly-eng
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/.github/CONTRIBUTING.md
similarity index 87%
rename from CONTRIBUTING.md
rename to .github/CONTRIBUTING.md
index fcd866043f5..634b59bfad4 100644
--- a/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -1,6 +1,7 @@
# Contributing to Blockly
Want to contribute? Great!
+
- First, read this page (including the small print at the end).
- Second, please make pull requests against develop, not master. If your patch
needs to go into master immediately, include a note in your PR.
@@ -8,6 +9,7 @@ Want to contribute? Great!
For more information on style guide and other details, head over to the [Blockly Developers site](https://developers.google.com/blockly/guides/modify/contributing).
### Before you contribute
+
Before we can use your code, you must sign the
[Google Individual Contributor License Agreement](https://cla.developers.google.com/about/google-individual)
(CLA), which you can do online. The CLA is necessary mainly because you own the
@@ -19,22 +21,26 @@ the CLA until after you've submitted your code for review and a member has
approved it, but you must do it before we can put your code into our codebase.
### Larger changes
+
Before you start working on a larger contribution, you should get in touch with
us first through the issue tracker with your idea so that we can help out and
possibly guide you. Coordinating up front makes it much easier to avoid
frustration later on.
### Code reviews
+
All submissions, including submissions by project members, require review. We
use Github pull requests for this purpose.
### Browser compatibility
-We care strongly about making Blockly work on all browsers. As of 2017 we
-support IE 10 and 11, Edge, Chrome, Safari, and Firefox. We will not accept
-changes that only work on a subset of those browsers. You can check [caniuse.com](https://caniuse.com/)
+
+We care strongly about making Blockly work on all browsers. As of 2022 we
+support Edge, Chrome, Safari, and Firefox. We will not accept changes that only
+work on a subset of those browsers. You can check [caniuse.com](https://caniuse.com/)
for compatibility information.
### The small print
+
Contributions made by corporations are covered by a different agreement than
the one above, the
[Software Grant and Corporate Contributor License Agreement](https://cla.developers.google.com/about/google-corporate).
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml
new file mode 100644
index 00000000000..d346d87afe1
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.yaml
@@ -0,0 +1,58 @@
+name: Report a bug 🐛
+description: Report bugs in Blockly, so we can fix them.
+labels: 'issue: bug, issue: triage'
+body:
+ - type: markdown
+ attributes:
+ value: >
+ Thank you for taking the time to fill out a bug report!
+ If you have a question about how to use Blockly in your application,
+ please ask on the [forum](https://groups.google.com/forum/#!forum/blockly) instead of filing an issue.
+ - type: checkboxes
+ id: duplicates
+ attributes:
+ label: Check for duplicates
+ options:
+ - label: I have searched for similar issues before opening a new one.
+ - type: textarea
+ id: description
+ attributes:
+ label: Description
+ description: Please provide a clear and concise description of the bug.
+ placeholder: What happened? What did you expect to happen?
+ validations:
+ required: true
+ - type: textarea
+ id: repro
+ attributes:
+ label: Reproduction steps
+ description: What steps should we take to reproduce the issue?
+ value: |
+ 1.
+ 2.
+ 3.
+ - type: textarea
+ id: stack-trace
+ attributes:
+ label: Stack trace
+ description: If you saw an error message or stack trace, please include it here.
+ placeholder: The text in this section will be formatted automatically; no need to include backticks.
+ render: shell
+ - type: textarea
+ id: screenshots
+ attributes:
+ label: Screenshots
+ description: Screenshots can help us see the behavior you're describing. Please add a screenshot or gif, especially if you are describing a rendering or visual bug.
+ placeholder: Paste or drag-and-drop an image to upload it.
+ - type: dropdown
+ id: browsers
+ attributes:
+ label: Browsers
+ description: Please select all browsers you've observed this behavior on. If the bug isn't browser-specific, you can leave this blank.
+ multiple: true
+ options:
+ - Chrome desktop
+ - Safari desktop
+ - Firefox desktop
+ - Android mobile
+ - iOS mobile
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 00000000000..aa4bd749d99
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,7 @@
+contact_links:
+ - name: Ask a question ❓
+ url: https://groups.google.com/forum/#!forum/blockly
+ about: Go to the Blockly developer forum, where you can ask and answer questions.
+ - name: Report issues with plugins and examples 🧩
+ url: https://github.com/google/blockly-samples/issues/new/choose
+ about: File bugs or feature requests about plugins and samples in our blockly-samples repository.
diff --git a/.github/ISSUE_TEMPLATE/documentation.yaml b/.github/ISSUE_TEMPLATE/documentation.yaml
new file mode 100644
index 00000000000..e3a5b118821
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/documentation.yaml
@@ -0,0 +1,38 @@
+name: Report a documentation problem 📖
+description: Could our documentation be better? Tell us how.
+labels: 'issue: docs, issue: triage'
+body:
+ - type: markdown
+ attributes:
+ value: >
+ Thanks for helping us improve our developer site documentation!
+ Use this template to describe issues with the content on our
+ [developer site](https://developers.google.com/blockly/guides).
+ - type: input
+ id: link
+ attributes:
+ label: Location
+ description: >
+ A link to the page with the documentation you want us to be updated.
+ If no page exists, describe what the page should be, and where.
+ - type: checkboxes
+ id: type
+ attributes:
+ label: Type
+ description: What kind of content is it?
+ options:
+ - label: Text
+ - label: Image or Gif
+ - label: Other
+ - type: textarea
+ id: content
+ attributes:
+ label: Suggested content
+ description: Your suggestion for improved documentation. If it's helpful, also include the old content for comparison.
+ validations:
+ required: true
+ - type: textarea
+ id: context
+ attributes:
+ label: Additional context
+ description: Add any other context about the problem. If this is related to a specific pull request, link to it.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml
new file mode 100644
index 00000000000..04c3fdef6e2
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.yaml
@@ -0,0 +1,39 @@
+name: Make a feature request ✨
+description: Suggest an idea to make Blockly better.
+labels: 'issue: feature request, issue: triage'
+body:
+ - type: markdown
+ attributes:
+ value: >
+ Thank you for taking the time to fill out a feature request!
+ If you have a question about how to use Blockly in your application,
+ please ask on the [forum](https://groups.google.com/forum/#!forum/blockly) instead of filing an issue.
+ - type: checkboxes
+ id: duplicates
+ attributes:
+ label: Check for duplicates
+ options:
+ - label: I have searched for similar issues before opening a new one.
+ - type: textarea
+ id: problem
+ attributes:
+ label: Problem
+ description: Is your feature request related to a problem? Please describe.
+ placeholder: I'm always frustrated when...
+ - type: textarea
+ id: request
+ attributes:
+ label: Request
+ description: Describe your feature request and how it solves your problem.
+ validations:
+ required: true
+ - type: textarea
+ id: alternatives
+ attributes:
+ label: Alternatives considered
+ description: Describe any alternative solutions or features you've considered.
+ - type: textarea
+ id: context
+ attributes:
+ label: Additional context
+ description: Add any other context or screenshots about the feature request here.
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 00000000000..6a62a4d9d92
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,42 @@
+
+
+## The basics
+
+
+
+- [ ] I [validated my changes](https://developers.google.com/blockly/guides/contribute/core#making_and_verifying_a_change)
+
+## The details
+### Resolves
+
+
+Fixes
+
+### Proposed Changes
+
+
+
+### Reason for Changes
+
+
+
+### Test Coverage
+
+
+
+### Documentation
+
+
+
+### Additional Information
+
+
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 00000000000..42f0d297aea
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,27 @@
+# To get started with Dependabot version updates, you'll need to specify which
+# package ecosystems to update and where the package manifests are located.
+# Please see the documentation for all configuration options:
+# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
+
+version: 2
+updates:
+ - package-ecosystem: 'npm' # See documentation for possible values
+ directory: '/' # Location of package manifests
+ target-branch: 'develop'
+ schedule:
+ interval: 'weekly'
+ commit-message:
+ prefix: 'chore(deps)'
+ labels:
+ - 'PR: chore'
+ - 'PR: dependencies'
+ - package-ecosystem: 'github-actions' # See documentation for possible values
+ directory: '/'
+ target-branch: 'develop'
+ schedule:
+ interval: 'weekly'
+ commit-message:
+ prefix: 'chore(deps)'
+ labels:
+ - 'PR: chore'
+ - 'PR: dependencies'
diff --git a/.github/release.yml b/.github/release.yml
new file mode 100644
index 00000000000..a6b8dc3ef36
--- /dev/null
+++ b/.github/release.yml
@@ -0,0 +1,32 @@
+# release.yml
+
+changelog:
+ exclude:
+ labels:
+ - ignore-for-release
+ - 'PR: chore'
+ authors:
+ - dependabot
+ categories:
+ - title: Breaking changes 🛠
+ labels:
+ - breaking change
+ - title: Deprecations 🧹 - APIs that may be removed in future releases
+ labels:
+ - deprecation
+ - title: New features ✨
+ labels:
+ - 'PR: feature'
+ - title: Bug fixes 🐛
+ labels:
+ - 'PR: fix'
+ - title: Cleanup ♻️
+ labels:
+ - 'PR: docs'
+ - 'PR: refactor'
+ - title: Reverted changes ⎌
+ labels:
+ - 'PR: revert'
+ - title: Other changes
+ labels:
+ - '*'
diff --git a/.github/workflows/appengine_deploy.yml b/.github/workflows/appengine_deploy.yml
new file mode 100644
index 00000000000..938a16fc714
--- /dev/null
+++ b/.github/workflows/appengine_deploy.yml
@@ -0,0 +1,54 @@
+# Workflow that prepares files and deploys to appengine
+
+name: Deploy to App Engine
+
+# Controls when the workflow will run
+on:
+ # Allows you to run this workflow manually from the Actions tab
+ workflow_dispatch:
+
+jobs:
+ prepare:
+ name: Prepare
+ runs-on: ubuntu-latest
+
+ steps:
+ # Checks-out the repository under $GITHUB_WORKSPACE.
+ # When running manually this checks out the master branch.
+ - uses: actions/checkout@v4
+
+ - name: Prepare demo files
+ # Install all dependencies, then copy all the files needed for demos.
+ run: |
+ npm install
+ npm run prepareDemos
+
+ - name: Upload
+ uses: actions/upload-artifact@v4
+ with:
+ name: appengine_files
+ path: _deploy/
+
+ deploy:
+ name: Deploy
+ runs-on: ubuntu-latest
+ # The prepare step must succeed for this step to run.
+ needs: prepare
+ steps:
+ - name: Download prepared files
+ uses: actions/download-artifact@v4
+ with:
+ name: appengine_files
+ path: _deploy/
+
+ - name: Deploy to App Engine
+ uses: google-github-actions/deploy-appengine@v2.1.4
+ # For parameters see:
+ # https://github.com/google-github-actions/deploy-appengine#inputs
+ with:
+ working_directory: _deploy/
+ deliverables: app.yaml
+ project_id: ${{ secrets.GCP_PROJECT }}
+ credentials: ${{ secrets.GCP_SA_KEY }}
+ promote: false
+ version: vtest
diff --git a/.github/workflows/assign_reviewers.yml b/.github/workflows/assign_reviewers.yml
new file mode 100644
index 00000000000..33bd9e778a9
--- /dev/null
+++ b/.github/workflows/assign_reviewers.yml
@@ -0,0 +1,41 @@
+name: Assign requested reviewers
+
+# This workflow adds requested reviewers as assignees. If you remove a
+# requested reviewer, it will not remove them as an assignee.
+#
+# See https://github.com/google/blockly/issues/5643 for more
+# information on why this was added.
+#
+# N.B.: Runs with a read-write repo token. Do not check out the
+# submitted branch!
+on:
+ pull_request_target:
+ types: [review_requested]
+
+jobs:
+ requested-reviewer:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Assign requested reviewer
+ uses: actions/github-script@v7
+ with:
+ script: |
+ try {
+ if (context.payload.pull_request === undefined) {
+ throw new Error("Can't get pull_request payload. " +
+ 'Check a request reviewer event was triggered.');
+ }
+ const reviewers = context.payload.pull_request.requested_reviewers;
+ // Assignees takes in a list of logins rather than the
+ // reviewer object.
+ const reviewerNames = reviewers.map(reviewer => reviewer.login);
+ const {number:issue_number} = context.payload.pull_request;
+ github.rest.issues.addAssignees({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: issue_number,
+ assignees: reviewerNames
+ });
+ } catch (error) {
+ core.setFailed(error.message);
+ }
diff --git a/.github/workflows/browser_test.yml b/.github/workflows/browser_test.yml
new file mode 100644
index 00000000000..3675af7b042
--- /dev/null
+++ b/.github/workflows/browser_test.yml
@@ -0,0 +1,55 @@
+# This workflow will do a clean install, start the selenium server, and run
+# all of our browser based tests
+
+name: Run browser manually
+
+on:
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+jobs:
+ build:
+ timeout-minutes: 10
+ runs-on: ${{ matrix.os }}
+
+ strategy:
+ matrix:
+ # TODO (#2114): re-enable osx build.
+ # os: [ubuntu-latest, macos-latest]
+ os: [macos-latest]
+ node-version: [18.x, 20.x]
+ # See supported Node.js release schedule at
+ # https://nodejs.org/en/about/releases/
+
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ persist-credentials: false
+
+ - name: Reconfigure git to use HTTP authentication
+ run: >
+ git config --global url."https://github.com/".insteadOf
+ ssh://git@github.com/
+
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v4
+ with:
+ node-version: ${{ matrix.node-version }}
+
+ - name: Npm Install
+ run: npm install
+
+ - name: Linux Test Setup
+ if: runner.os == 'Linux'
+ run: source ./tests/scripts/setup_linux_env.sh
+
+ - name: Run Build
+ run: npm run build
+
+ - name: Run Test
+ run: npm run test:browser
+
+ env:
+ CI: true
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 00000000000..c4ab688f8fd
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,85 @@
+# This workflow will do a clean install, start the selenium server, and run
+# all of our tests.
+
+name: Node.js CI
+
+on: [pull_request]
+
+permissions:
+ contents: read
+
+jobs:
+ build:
+ timeout-minutes: 10
+ runs-on: ${{ matrix.os }}
+
+ strategy:
+ matrix:
+ # TODO (#2114): re-enable osx build.
+ # os: [ubuntu-latest, macos-latest]
+ os: [ubuntu-latest]
+ node-version: [18.x, 20.x, 22.x]
+ # See supported Node.js release schedule at
+ # https://nodejs.org/en/about/releases/
+
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ persist-credentials: false
+
+ - name: Reconfigure git to use HTTP authentication
+ run: >
+ git config --global url."https://github.com/".insteadOf
+ ssh://git@github.com/
+
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v4
+ with:
+ node-version: ${{ matrix.node-version }}
+
+ - name: Npm Clean Install
+ run: npm ci
+
+ - name: Linux Test Setup
+ if: runner.os == 'Linux'
+ run: source ./tests/scripts/setup_linux_env.sh
+
+ - name: Run
+ run: npm run test
+
+ env:
+ CI: true
+
+ lint:
+ timeout-minutes: 5
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Use Node.js 20.x
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20.x
+
+ - name: Npm Install
+ run: npm install
+
+ - name: Lint
+ run: npm run lint
+
+ format:
+ timeout-minutes: 5
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Use Node.js 20.x
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20.x
+
+ - name: Npm Install
+ run: npm install
+
+ - name: Check Format
+ run: npm run format:check
diff --git a/.github/workflows/conventional-label.yml b/.github/workflows/conventional-label.yml
new file mode 100644
index 00000000000..64289d98723
--- /dev/null
+++ b/.github/workflows/conventional-label.yml
@@ -0,0 +1,17 @@
+on:
+ pull_request_target:
+ types:
+ - opened
+ - edited
+name: conventional-release-labels
+jobs:
+ label:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: bcoe/conventional-release-labels@v1
+ with:
+ type_labels:
+ '{"feat": "PR: feature", "fix": "PR: fix", "breaking": "breaking
+ change", "chore": "PR: chore", "docs": "PR: docs", "refactor": "PR:
+ refactor", "revert": "PR: revert", "deprecate": "deprecation"}'
+ ignored_types: '[]'
diff --git a/.github/workflows/develop_freeze.yml b/.github/workflows/develop_freeze.yml
new file mode 100644
index 00000000000..395a34434dd
--- /dev/null
+++ b/.github/workflows/develop_freeze.yml
@@ -0,0 +1,26 @@
+# This workflow will comment on pull requests that are submitted while develop
+# is frozen during the week of release. Skips any pull requests that have the
+# label 'ignore-freeze'.
+# This workflow should be enabled only while develop is frozen.
+
+name: Develop Freeze PR Comment
+
+on:
+ # Trigger the workflow on pull request on develop branch
+ pull_request:
+ types:
+ - opened
+ - reopened
+ branches:
+ - develop
+
+jobs:
+ freeze-comment:
+ if: ${{ !contains(github.event.pull_request.labels.*.name, 'ignore-freeze') }}
+ runs-on: ubuntu-latest
+ steps:
+ - name: PR Comment
+ uses: github-actions-up-and-running/pr-comment@f1f8ab2bf00dce6880a369ce08758a60c61d6c0b
+ with:
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
+ message: 'Thanks for the PR! The develop branch is currently frozen in preparation for the release so it may not be addressed until after release week.'
diff --git a/.github/workflows/tag_module_cleanup.yml b/.github/workflows/tag_module_cleanup.yml
new file mode 100644
index 00000000000..d83d0e9371a
--- /dev/null
+++ b/.github/workflows/tag_module_cleanup.yml
@@ -0,0 +1,37 @@
+# For new pull requests against the goog_module branch, adds the 'type: cleanup'
+# label and sets the milestone to q3 2021 release.
+
+name: Tag module cleanup
+
+# Trigger on pull requests against goog_module branch only
+# Uses pull_request_target to get write permissions so that it can write labels.
+on:
+ pull_request_target:
+ branches:
+ - goog_module
+
+jobs:
+ tag-module-cleanup:
+ # Add the type: cleanup label
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/github-script@v7
+ with:
+ script: |
+ // Note that pull requests are considered issues and "shared"
+ // actions for both features, like manipulating labels and
+ // milestones are provided within the issues API.
+ await github.issues.update({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: context.issue.number,
+ // 2021 q3 release milestone.
+ // https://github.com/google/blockly/milestone/18
+ milestone: 18
+ })
+ await github.issues.addLabels({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: context.issue.number,
+ labels: ['type: cleanup']
+ })
diff --git a/.github/workflows/welcome_new_contributors.yml b/.github/workflows/welcome_new_contributors.yml
new file mode 100644
index 00000000000..37ca9ef89df
--- /dev/null
+++ b/.github/workflows/welcome_new_contributors.yml
@@ -0,0 +1,36 @@
+on:
+ pull_request_target:
+ types:
+ - opened
+name: Welcome new contributors
+jobs:
+ welcome:
+ runs-on: ubuntu-latest
+ permissions:
+ pull-requests: write
+ steps:
+ - uses: actions/first-interaction@v1
+ with:
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
+ pr-message: >
+ Welcome! It looks like this is your first pull request in Blockly,
+ so here are a couple of tips:
+
+ - You can find tips about contributing to Blockly and how to
+ validate your changes on our
+ [developer site](https://developers.google.com/blockly/guides/contribute/core#making_and_verifying_a_change).
+
+ - All contributors must sign the Google Contributor License
+ Agreement (CLA). If the google-cla bot leaves a comment on this
+ PR, make sure you follow the instructions.
+
+ - We use conventional commits to make versioning the package easier. Make sure your commit
+ message is in the [proper format](https://developers.google.com/blockly/guides/contribute/get-started/commits)
+ or [learn how to fix it](https://developers.google.com/blockly/guides/contribute/get-started/commits#fixing_non-conventional_commits).
+
+ - If any of the other checks on this PR fail, you can click on
+ them to learn why. It might be that your change caused a test
+ failure, or that you need to double-check the
+ [style guide](https://developers.google.com/blockly/guides/contribute/core/style_guide).
+
+ Thank you for opening this PR! A member of the Blockly team will review it soon.
diff --git a/.gitignore b/.gitignore
index 53eebc859d0..3c1938f17d9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,22 @@
node_modules
npm-debug.log
+build-debug.log
.DS_Store
.settings
.project
+*.gz
*.pyc
*.komodoproject
-/nbproject/private/
\ No newline at end of file
+/nbproject/private/
+tsdoc-metadata.json
+
+tests/compile/main_compressed.js
+tests/compile/main_compressed.js.map
+tests/compile/*compiler*.jar
+tests/screenshot/outputs/*
+local_build/*compiler*.jar
+local_build/local_*_compressed.js
+chromedriver
+build/
+dist/
+temp/
diff --git a/.jshintignore b/.jshintignore
deleted file mode 100644
index 9cc962747a8..00000000000
--- a/.jshintignore
+++ /dev/null
@@ -1,6 +0,0 @@
-node_modules/
-tests/
-demos/
-**/*_compressed.js
-**/*_uncompressed.js
-**/*_test.js
\ No newline at end of file
diff --git a/.npmrc b/.npmrc
index 214c29d1395..a4af34998fa 100644
--- a/.npmrc
+++ b/.npmrc
@@ -1 +1,2 @@
registry=https://registry.npmjs.org/
+legacy-peer-deps=true
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 00000000000..9d52f19fe6a
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,30 @@
+# Build Artifacts
+/msg/*
+/build/*
+/dist/*
+/typings/*
+/docs/*
+
+# Tests other than mocha unit tests
+/tests/blocks/*
+/tests/themes/*
+/tests/compile/*
+/tests/jsunit/*
+/tests/generators/*
+/tests/mocha/webdriver.js
+/tests/screenshot/*
+/tests/test_runner.js
+/tests/workspace_svg/*
+
+# Demos, scripts, misc
+/node_modules/*
+/demos/*
+/appengine/*
+/externs/*
+/closure/*
+/scripts/gulpfiles/*
+CHANGELOG.md
+PULL_REQUEST_TEMPLATE.md
+
+# Don't bother formatting JavaScript files we're about to migrate:
+/generators/**/*.js
diff --git a/.prettierrc.js b/.prettierrc.js
new file mode 100644
index 00000000000..84a85c1159e
--- /dev/null
+++ b/.prettierrc.js
@@ -0,0 +1,15 @@
+// This config attempts to match google-style code.
+
+module.exports = {
+ // Prefer single quotes, but minimize escaping.
+ singleQuote: true,
+ // Some properties must be quoted to preserve closure compiler behavior.
+ // Don't ever change whether properties are quoted.
+ quoteProps: 'preserve',
+ // Don't add spaces around braces for object literals.
+ bracketSpacing: false,
+ // Put HTML tag closing brackets on same line as last attribute.
+ bracketSameLine: true,
+ // Organise imports using a plugin.
+ 'plugins': ['prettier-plugin-organize-imports'],
+};
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index bbc6cfcb887..00000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-language: node_js
-matrix:
- include:
- - os: linux
- dist: trusty
- node_js: stable
- sudo: required
- addons:
- apt:
- packages:
- - google-chrome-stable
- - os: osx
- node_js: stable
- osx_image: xcode8.3
-
-before_install:
-- npm install google-closure-library
-- npm install webdriverio
-# Symlink closure library
-- ln -s $(npm root)/google-closure-library ../closure-library
-
-before_script:
- - export DISPLAY=:99.0
- - if [ "${TRAVIS_OS_NAME}" == "linux" ]; then ( scripts/setup_linux_env.sh ) fi
- - if [ "${TRAVIS_OS_NAME}" == "osx" ]; then ( scripts/setup_osx_env.sh ) fi
- - sleep 2
-
-script:
- - set -x
- - npm test
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 00000000000..cbe1c7ee290
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,77 @@
+# Changelog
+
+## [8.0.0](https://github.com/google/blockly/compare/blockly-v7.20211209.0...blockly-v8.0.0) (2022-03-31)
+
+
+### ⚠ BREAKING CHANGES
+
+* change paste to return the pasted thing to support keyboard nav (#5996)
+* **blocks:** ...and rename Blockly.blocks.all (blocks/all.js) to Blockly.libraryBlocks (blocks/blocks.js
+* * refactor(blocks): Make loopTypes a Set
+* allows previously internal constants to be configurable (#5897)
+* * refactor(blocks): Make loopTypes a Set
+* remove unused constants from internalConstants (#5889)
+
+### Features
+
+* add mocha failure messages to console output ([#5984](https://github.com/google/blockly/issues/5984)) ([7d250fa](https://github.com/google/blockly/commit/7d250fa9cfb30f95e7af523720b66c8b001df15c))
+* Allow developers to set a custom tooltip rendering function. ([#5956](https://github.com/google/blockly/issues/5956)) ([6841ccc](https://github.com/google/blockly/commit/6841ccc99fdbcc5f6d5a63bb36cb3b6ebd2be246))
+* **blocks:** Export block definitions ([#5908](https://github.com/google/blockly/issues/5908)) ([ffb8907](https://github.com/google/blockly/commit/ffb8907db8d0f11609c1fe14b2a450d3e639a871))
+* make mocha fail if it encounters 0 tests ([#5981](https://github.com/google/blockly/issues/5981)) ([0b2bf3a](https://github.com/google/blockly/commit/0b2bf3ae9d0c777f4d13d47692f5ae224dff1ec8))
+* **tests:** Add a test to validate `scripts/migration/renamings.js` ([#5980](https://github.com/google/blockly/issues/5980)) ([3c723f0](https://github.com/google/blockly/commit/3c723f0199b1f3b5eaac58f064b02d52b60d0ddb))
+* **tests:** Use official semver.org RegExp ([#5990](https://github.com/google/blockly/issues/5990)) ([afc4088](https://github.com/google/blockly/commit/afc4088ce278f97585f9ff5e65a921f7c4c65531))
+
+
+### Bug Fixes
+
+* Adds check for changedTouches ([#5869](https://github.com/google/blockly/issues/5869)) ([3f4f505](https://github.com/google/blockly/commit/3f4f5057919fdb4a329e9d2b15378c5c5831ae3b))
+* advanced playground and playground to work when hosted ([#6021](https://github.com/google/blockly/issues/6021)) ([364bf14](https://github.com/google/blockly/commit/364bf14ce6932f426591e3f53c1d066771ddcb8e))
+* always rename caller to legal name ([#6014](https://github.com/google/blockly/issues/6014)) ([c430800](https://github.com/google/blockly/commit/c4308007bc4b58d51adf1fda7b51ffa9f1d3f093))
+* **blocks:** correct the callType_ of procedures_defreturn ([#5974](https://github.com/google/blockly/issues/5974)) ([b34db5b](https://github.com/google/blockly/commit/b34db5bd01f7b532ebabc80264ca9fc804a76c75))
+* **build:** Correctly handle deep export paths in UMD wrapper ([#5945](https://github.com/google/blockly/issues/5945)) ([71ab146](https://github.com/google/blockly/commit/71ab146bc21aef9bdd6b2385c1df5f51e3ff5b58))
+* bumping a block after duplicate breaking undo ([#5844](https://github.com/google/blockly/issues/5844)) ([5204569](https://github.com/google/blockly/commit/5204569cff58c1ead7c15165a1351fa6a2ba2ad3))
+* change getCandidate_ and showInsertionMarker_ to be more dynamic ([#5722](https://github.com/google/blockly/issues/5722)) ([68d8113](https://github.com/google/blockly/commit/68d81132b851d20884ee9da41719fa62cdfce0ee))
+* change paste to return the pasted thing to support keyboard nav ([#5996](https://github.com/google/blockly/issues/5996)) ([20f1475](https://github.com/google/blockly/commit/20f1475afc1abf4b5e600219c2981150fc621ba5))
+* Change the truthy tests of width and height in WorkspaceSvg.setCachedParentSvgSize to actual comparisons with null so that zero value can be saved into the cache ([#5997](https://github.com/google/blockly/issues/5997)) ([fec44d9](https://github.com/google/blockly/commit/fec44d917e4b8475beba28e4769a50982425e887))
+* comments not being restored when dragging ([#6011](https://github.com/google/blockly/issues/6011)) ([85ce3b8](https://github.com/google/blockly/commit/85ce3b82c6c32e8a2a1608c6d604262ea0e5c38d))
+* convert the common renderer to an ES6 class ([#5978](https://github.com/google/blockly/issues/5978)) ([c1004be](https://github.com/google/blockly/commit/c1004be1f24debe1df1566e6067cf2f6769d51aa))
+* convert the Workspace class to an ES6 class ([#5977](https://github.com/google/blockly/issues/5977)) ([e2eaebe](https://github.com/google/blockly/commit/e2eaebec47b08a83eb36d0d04cefa254d1c5d666))
+* custom block context menus ([#5976](https://github.com/google/blockly/issues/5976)) ([8058df2](https://github.com/google/blockly/commit/8058df2a71dcecdc1190ae1d6f5dcccfafc980e8))
+* Don't throw if drag surface is empty. ([#5695](https://github.com/google/blockly/issues/5695)) ([769a25f](https://github.com/google/blockly/commit/769a25f4badffd2409ce19535344c98f5d8b01c9))
+* export Blockly.Names.NameType and Blockly.Input.Align correctly ([#6030](https://github.com/google/blockly/issues/6030)) ([2c15d00](https://github.com/google/blockly/commit/2c15d002ababcba7f34c526c05f231735e3e0169))
+* Export loopTypes from Blockly.blocks.loops ([#5900](https://github.com/google/blockly/issues/5900)) ([4f74210](https://github.com/google/blockly/commit/4f74210e74ef0b06216ab0f288268192674d69c9))
+* Export loopTypes from Blockly.blocks.loops ([#5900](https://github.com/google/blockly/issues/5900)) ([74ef1cb](https://github.com/google/blockly/commit/74ef1cbf521f7c6447ea9672ddbfe861d2292e5f))
+* Fix bug where workspace comments could not be created. ([#6024](https://github.com/google/blockly/issues/6024)) ([2cf8eb8](https://github.com/google/blockly/commit/2cf8eb87dcb029ba152b63b01ee7e4df431d1bb6))
+* Fix downloading screenshots on the playground. ([#6025](https://github.com/google/blockly/issues/6025)) ([ca6e590](https://github.com/google/blockly/commit/ca6e590101d511a8d98a5c5438af32ff6749e020))
+* fix keycodes type ([#5805](https://github.com/google/blockly/issues/5805)) ([0a96543](https://github.com/google/blockly/commit/0a96543a1179636e4efeb3c654c075952aca0c9f))
+* Fixed the label closure on demo/blockfactory ([#5833](https://github.com/google/blockly/issues/5833)) ([e8ea2e9](https://github.com/google/blockly/commit/e8ea2e9902fb9f642459e7341c3d59e19f359fca))
+* **generators:** Fix an operator precedence issue in the math_number_property generators to remove extra parentheses ([#5685](https://github.com/google/blockly/issues/5685)) ([a31003f](https://github.com/google/blockly/commit/a31003fab964e529152389029ec3126a3802851b))
+* incorrect module for event data in renamings database ([#6012](https://github.com/google/blockly/issues/6012)) ([e502eaa](https://github.com/google/blockly/commit/e502eaa6e1c88b2bb34e9a87917a15098b81cfa3))
+* Move [@alias](https://github.com/alias) onto classes instead of constructors ([#6003](https://github.com/google/blockly/issues/6003)) ([1647a32](https://github.com/google/blockly/commit/1647a3299ac48b5924f987015d8f3c47593922af))
+* move test helpers from samples into core ([#5969](https://github.com/google/blockly/issues/5969)) ([2edd228](https://github.com/google/blockly/commit/2edd22811752f05e16c68d593e5d1b809e24ed25))
+* move the dropdown div to a namespace instead of a class with only static properties ([#5979](https://github.com/google/blockly/issues/5979)) ([543cb8e](https://github.com/google/blockly/commit/543cb8e1b1c1a7fca5a1629f42f71c9b18e1a255))
+* msg imports in type definitions ([#5858](https://github.com/google/blockly/issues/5858)) ([07a75de](https://github.com/google/blockly/commit/07a75dee8de13b6c5a02959325a0155d413d6712))
+* opening/closing the mutators ([#6000](https://github.com/google/blockly/issues/6000)) ([243fc52](https://github.com/google/blockly/commit/243fc52a96e1089aad89ff6b642c6605d8f71afd))
+* playground access to Blockly ([9e1cda8](https://github.com/google/blockly/commit/9e1cda8f45cea1707c5a228d5ce79b4cd81566f8))
+* playground test blocks, text area listeners, and show/hide buttons ([#6015](https://github.com/google/blockly/issues/6015)) ([7abf3de](https://github.com/google/blockly/commit/7abf3de910a35e1a6086a3243570627a41e73339))
+* procedure param edits breaking undo ([#5845](https://github.com/google/blockly/issues/5845)) ([8a71f87](https://github.com/google/blockly/commit/8a71f879504503f4aec1140fe653d93602c664df))
+* re-expose HSV_VALUE and HSV_SATURATION as settable properties on Blockly ([#5821](https://github.com/google/blockly/issues/5821)) ([0e5f3ce](https://github.com/google/blockly/commit/0e5f3ce6074fbbb2923e9a62bffefeae0a813be8))
+* re-expose HSV_VALUE and HSV_SATURATION as settable properties on Blockly ([#5821](https://github.com/google/blockly/issues/5821)) ([6fc3316](https://github.com/google/blockly/commit/6fc3316309534270106050f0e1fecb7a09b8e62c))
+* revert "Delete events should animate when played ([#5919](https://github.com/google/blockly/issues/5919))" ([#6031](https://github.com/google/blockly/issues/6031)) ([c4a25eb](https://github.com/google/blockly/commit/c4a25eb3c432b0e8a9a18aae42839d163a177c48))
+* revert converting test helpers to es modules ([#5982](https://github.com/google/blockly/issues/5982)) ([01d4597](https://github.com/google/blockly/commit/01d45972d4df8b5e4afa4a19d93defb8961fea57))
+* setting null for a font style on a theme ([#5831](https://github.com/google/blockly/issues/5831)) ([835fb02](https://github.com/google/blockly/commit/835fb02343df0a4b9dab7704a4b3d8be8e9a497c))
+* **tests:** Enable --debug for test:compile:advanced; fix some errors ([#5959](https://github.com/google/blockly/issues/5959)) ([88334be](https://github.com/google/blockly/commit/88334bea80aa26c08705f16aba5e79dd708158f9))
+* **tests:** Enable `--debug` for `test:compile:advanced`; fix some errors (and demote the rest to warnings) ([#5983](https://github.com/google/blockly/issues/5983)) ([e11b583](https://github.com/google/blockly/commit/e11b5834e5e4e8fe991be32afb08eafa7c8adffd))
+* TypeScript exporting of the serialization functions ([#5890](https://github.com/google/blockly/issues/5890)) ([5d7c890](https://github.com/google/blockly/commit/5d7c890243ba7d0501514ba48778715097ce5a3b))
+* undo/redo for auto disabling if-return blocks ([#6018](https://github.com/google/blockly/issues/6018)) ([c7a359a](https://github.com/google/blockly/commit/c7a359a8424287f139752573a27a8a6eb97cb7b3))
+* update the playground to load compressed when hosted ([#5835](https://github.com/google/blockly/issues/5835)) ([2adf326](https://github.com/google/blockly/commit/2adf326c230589800880faa9599eca2ecc94d283))
+* Update typings for q1 2022 release ([#6051](https://github.com/google/blockly/issues/6051)) ([69f3d4a](https://github.com/google/blockly/commit/69f3d4ae89ce16a558443dd0a772e35b62c096d3))
+* Use correct namespace for svgMath functions ([#5813](https://github.com/google/blockly/issues/5813)) ([b8cc983](https://github.com/google/blockly/commit/b8cc983324338b2cbd536425c93ff3e7d512751e))
+* Use correct namespace for svgMath functions ([#5813](https://github.com/google/blockly/issues/5813)) ([025bab6](https://github.com/google/blockly/commit/025bab656669f99ebdb8b95bea39ebae296f1495))
+
+
+### Code Refactoring
+
+* allows previously internal constants to be configurable ([#5897](https://github.com/google/blockly/issues/5897)) ([4b5733e](https://github.com/google/blockly/commit/4b5733e7c85f2e196719550a3cfdcbcbd61739df))
+* **blocks:** Rename Blockly.blocks.* modules to Blockly.libraryBlocks.* ([#5953](https://github.com/google/blockly/issues/5953)) ([5078dcb](https://github.com/google/blockly/commit/5078dcbc6d4d48422313732e87191b29569b5eed))
+* remove unused constants from internalConstants ([#5889](https://github.com/google/blockly/issues/5889)) ([f0b1077](https://github.com/google/blockly/commit/f0b10776eb0657a5446adcfc62ad13f419c14271))
diff --git a/LICENSE b/LICENSE
index 6a1992987fe..d6456956733 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
Apache License
- Version 2.0, January 2011
+ Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
@@ -175,3 +175,28 @@
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/README.md b/README.md
index 457fb810f72..5a0f3b8f27b 100644
--- a/README.md
+++ b/README.md
@@ -1,17 +1,80 @@
-# Blockly [![Build Status]( https://travis-ci.org/google/blockly.svg?branch=master)](https://travis-ci.org/google/blockly)
+# Blockly
+Google's Blockly is a library that adds a visual code editor to web and mobile apps. The Blockly editor uses interlocking, graphical blocks to represent code concepts like variables, logical expressions, loops, and more. It allows users to apply programming principles without having to worry about syntax or the intimidation of a blinking cursor on the command line. All code is free and open source.
-Google's Blockly is a web-based, visual programming editor. Users can drag
-blocks together to build programs. All code is free and open source.
+![](https://developers.google.com/blockly/images/sample.png)
-**The project page is https://developers.google.com/blockly/**
+## Getting Started with Blockly
-![](https://developers.google.com/blockly/images/sample.png)
+Blockly has many resources for learning how to use the library. Start at our [Google Developers Site](https://developers.google.com/blockly) to read the documentation on how to get started, configure Blockly, and integrate it into your application. The developers site also contains links to:
-Blockly has an active [developer forum](https://groups.google.com/forum/#!forum/blockly). Please drop by and say hello. Show us your prototypes early; collectively we have a lot of experience and can offer hints which will save you time.
+- [Getting Started article](https://developers.google.com/blockly/guides/get-started/web)
+- [Getting Started codelab](https://blocklycodelabs.dev/codelabs/getting-started/index.html#0)
+- [More codelabs](https://blocklycodelabs.dev/)
+- [Demos and plugins](https://google.github.io/blockly-samples/)
Help us focus our development efforts by telling us [what you are doing with
Blockly](https://developers.google.com/blockly/registration). The questionnaire only takes
a few minutes and will help us better support the Blockly community.
-Want to contribute? Great! First, read [our guidelines for contributors](https://developers.google.com/blockly/guides/modify/contributing).
+### Installing Blockly
+
+Blockly is [available on npm](https://www.npmjs.com/package/blockly).
+
+```bash
+npm install blockly
+```
+
+For more information on installing and using Blockly, see the [Getting Started article](https://developers.google.com/blockly/guides/get-started/web).
+
+### Getting Help
+
+- [Report a bug](https://developers.google.com/blockly/guides/modify/contribute/write_a_good_issue) or file a feature request on GitHub
+- Ask a question, or search others' questions, on our [developer forum](https://groups.google.com/forum/#!forum/blockly). You can also drop by to say hello and show us your prototypes; collectively we have a lot of experience and can offer hints which will save you time. We actively monitor the forums and typically respond to questions within 2 working days.
+
+### blockly-samples
+
+We have a number of resources such as example code, demos, and plugins in another repository called [blockly-samples](https://github.com/google/blockly-samples/). A plugin is a self-contained piece of code that adds functionality to Blockly. Plugins can add fields, define themes, create renderers, and much more. For more information, see the [Plugins documentation](https://developers.google.com/blockly/guides/plugins/overview).
+
+## Contributing to Blockly
+
+Want to make Blockly better? We welcome contributions to Blockly in the form of pull requests, bug reports, documentation, answers on the forum, and more! Check out our [Contributing Guidelines](https://developers.google.com/blockly/guides/modify/contributing) for more information. You might also want to look for issues tagged "[Help Wanted](https://github.com/google/blockly/labels/help%20wanted)" which are issues we think would be great for external contributors to help with.
+
+## Releases
+
+We release by pushing the latest code to the master branch, followed by updating the npm package, our [docs](https://developers.google.com/blockly), and [demo pages](https://google.github.io/blockly-samples/). If there are breaking bugs, such as a crash when performing a standard action or a rendering issue that makes Blockly unusable, we will cherry-pick fixes to master between releases to fix them. The [releases page](https://github.com/google/blockly/releases) has a list of all releases.
+
+We use [semantic versioning](https://semver.org/). Releases that have breaking changes or are otherwise not backwards compatible will have a new major version. Patch versions are reserved for bug-fix patches between scheduled releases.
+
+We now have a [beta release on npm](https://www.npmjs.com/package/blockly?activeTab=versions). If you'd like to test the upcoming release, or try out a not-yet-released new API, you can use the beta channel with:
+
+```bash
+npm install blockly@beta
+```
+
+As it is a beta channel, it may be less stable, and the APIs there are subject to change.
+
+### Branches
+
+There are two main branches for Blockly.
+
+**[master](https://github.com/google/blockly)** - This is the (mostly) stable current release of Blockly.
+
+**[develop](https://github.com/google/blockly/tree/develop)** - This is where most of our work happens. Pull requests should always be made against develop. This branch will generally be usable, but may be less stable than the master branch. Once something is in develop we expect it to merge to master in the next release.
+
+**other branches:** - Larger changes may have their own branches until they are good enough for people to try out. These will be developed separately until we think they are almost ready for release. These branches typically get merged into develop immediately after a release to allow extra time for testing.
+
+### New APIs
+
+Once a new API is merged into master it is considered beta until the following release. We generally try to avoid changing an API after it has been merged to master, but sometimes we need to make changes after seeing how an API is used. If an API has been around for at least two releases we'll do our best to avoid breaking it.
+
+Unreleased APIs may change radically. Anything that is in `develop` but not `master` is subject to change without warning.
+
+## Issues and Milestones
+
+We typically triage all bugs within 1 week, which includes adding any appropriate labels and assigning it to a milestone. Please keep in mind, we are a small team so even feature requests that everyone agrees on may not be prioritized.
+
+## Good to Know
+
+- Cross-browser Testing Platform and Open Source <3 Provided by [Sauce Labs](https://saucelabs.com)
+- We test browsers using [BrowserStack](https://browserstack.com)
diff --git a/_config.yml b/_config.yml
new file mode 100644
index 00000000000..bd053b36b40
--- /dev/null
+++ b/_config.yml
@@ -0,0 +1 @@
+exclude: []
diff --git a/accessible/README.md b/accessible/README.md
deleted file mode 100644
index a69fa6667cf..00000000000
--- a/accessible/README.md
+++ /dev/null
@@ -1,54 +0,0 @@
-Accessible Blockly
-==================
-
-Google's Blockly is a web-based, visual programming editor that is accessible
-to blind users.
-
-The code in this directory renders a version of the Blockly toolbox and
-workspace that is fully keyboard-navigable, and compatible with most screen
-readers. It is optimized for NVDA on Firefox.
-
-In the future, Accessible Blockly may be modified to suit accessibility needs
-other than visual impairments. Note that deaf users are expected to continue
-using Blockly over Accessible Blockly.
-
-
-Using Accessible Blockly in Your Web App
-----------------------------------------
-The demo at blockly/demos/accessible covers the absolute minimum required to
-import Accessible Blockly into your web app. You will need to import the files
-in the same order as in the demo: utils.service.js will need to be the first
-Angular file imported.
-
-When the DOMContentLoaded event fires, call ng.platform.browser.bootstrap() on
-the main component to be loaded. This will usually be blocklyApp.AppComponent,
-but if you have another component that wraps it, use that one instead.
-
-
-Customizing the Sidebar and Audio
----------------------------------
-The Accessible Blockly workspace comes with a customizable sidebar.
-
-To customize the sidebar, you will need to declare an ACCESSIBLE_GLOBALS object
-in the global scope that looks like this:
-
- var ACCESSIBLE_GLOBALS = {
- mediaPathPrefix: null,
- customSidebarButtons: []
- };
-
-The value of mediaPathPrefix should be the location of the accessible/media
-folder.
-
-The value of 'customSidebarButtons' should be a list of objects, each
-representing buttons on the sidebar. Each of these objects should have the
-following keys:
- - 'text' (the text to display on the button)
- - 'action' (the function that gets run when the button is clicked)
- - 'id' (optional; the id of the button)
-
-
-Limitations
------------
-- We do not support having multiple Accessible Blockly apps in a single webpage.
-- Accessible Blockly does not support the use of shadow blocks.
diff --git a/accessible/app.component.js b/accessible/app.component.js
deleted file mode 100644
index c31fd4259bb..00000000000
--- a/accessible/app.component.js
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * AccessibleBlockly
- *
- * Copyright 2016 Google Inc.
- * https://developers.google.com/blockly/
- *
- * Licensed under the Apache License, Version 2.0 (the 'License');
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an 'AS IS' BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * @fileoverview Top-level component for the Accessible Blockly application.
- * @author madeeha@google.com (Madeeha Ghori)
- */
-
-goog.provide('blocklyApp.AppComponent');
-
-goog.require('Blockly');
-
-goog.require('blocklyApp.AudioService');
-goog.require('blocklyApp.BlockConnectionService');
-goog.require('blocklyApp.BlockOptionsModalComponent');
-goog.require('blocklyApp.BlockOptionsModalService');
-goog.require('blocklyApp.KeyboardInputService');
-goog.require('blocklyApp.NotificationsService');
-goog.require('blocklyApp.SidebarComponent');
-goog.require('blocklyApp.ToolboxModalComponent');
-goog.require('blocklyApp.ToolboxModalService');
-goog.require('blocklyApp.TranslatePipe');
-goog.require('blocklyApp.TreeService');
-goog.require('blocklyApp.UtilsService');
-goog.require('blocklyApp.VariableAddModalComponent');
-goog.require('blocklyApp.VariableModalService');
-goog.require('blocklyApp.VariableRenameModalComponent');
-goog.require('blocklyApp.VariableRemoveModalComponent');
-goog.require('blocklyApp.WorkspaceComponent');
-
-
-blocklyApp.workspace = new Blockly.Workspace();
-
-blocklyApp.AppComponent = ng.core.Component({
- selector: 'blockly-app',
- template: `
-