diff --git a/BlockTemplates.md b/BlockTemplates.md
deleted file mode 100644
index f382e50..0000000
--- a/BlockTemplates.md
+++ /dev/null
@@ -1,5 +0,0 @@
-**This describes work in progress. Use of this functionality is not yet recommended.**
-
-# Introduction
-
-[Creating new blocks in JavaScript](https://code.google.com/p/blockly/wiki/Tutorial_CreateYourFirstBlock) can be repetitive and error-prone, especially if the blocks have [mutators](https://code.google.com/p/blockly/wiki/CreatingMutators). The purpose of the block template system is to enable new blocks to be added with less work and worry.
\ No newline at end of file
diff --git a/CachingArguments.md b/CachingArguments.md
index e91401b..a4357c2 100644
--- a/CachingArguments.md
+++ b/CachingArguments.md
@@ -1,4 +1,4 @@
-**[Creating Custom Blocks](wiki/CustomBlocks): [Generating Code](wiki/GeneratingCode): Caching Arguments**
+**[Creating Custom Blocks](CustomBlocks): [Generating Code](GeneratingCode): Caching Arguments**
# Caching Arguments
diff --git a/CloudStorageWithAppEngine.md b/CloudStorageWithAppEngine.md
index b5d0c1e..a39100b 100644
--- a/CloudStorageWithAppEngine.md
+++ b/CloudStorageWithAppEngine.md
@@ -1,10 +1,10 @@
-**[Installation](wiki/Installation): Cloud Storage**
+**[Installation](Installation): Cloud Storage**
# Introduction
If your application is hosted on App Engine, a cloud storage service is available that allows users to save, load, share, and publish their programs.
-_Note that the [RealtimeCollaboration](wiki/RealtimeCollaboration) feature provides an alternate way to save, load, share, and publish programs. It does, however, currently require users to have a Google Account._
+_Note that the [RealtimeCollaboration](RealtimeCollaboration) feature provides an alternate way to save, load, share, and publish programs. It does, however, currently require users to have a Google Account._
## Setting up App Engine
@@ -28,7 +28,7 @@ Once Blockly is uploaded you can point a browser to the URL you created in step
## Talking to the Cloud
-Examine the source of the [storage demo](https://blockly-demo.appspot.com/static/demos/storage/index.html) at [demos/storage/index.html](https://code.google.com/p/blockly/source/browse/trunk/demos/storage/index.html) and note the following features. First, there is a script include that loads the cloud storage API:
+Examine the [storage demo](https://blockly-demo.appspot.com/static/demos/storage/index.html)'s source at [demos/storage/index.html](https://github.com/google/blockly/tree/master/demos/storage/index.html) and note the following features. First, there is a script include that loads the cloud storage API:
```
@@ -42,7 +42,7 @@ There are also these message definitions, which you should modify as desired:
BlocklyStorage.XML_ERROR = 'Could not load your saved file.\n'+
'Perhaps it was created with a different version of Blockly?';
```
-Translations into other languages can be found at [apps/json](https://code.google.com/p/blockly/source/browse/#svn%2Ftrunk%2Fapps%2Fjson).
+Translations into other languages can be found at [apps/json](https://github.com/google/blockly/tree/master/apps/json).
Saving the current blocks is a single call to ` BlocklyStorage.link() `:
diff --git a/ContributingCode.md b/ContributingCode.md
index 62e6b96..2fe96b3 100644
--- a/ContributingCode.md
+++ b/ContributingCode.md
@@ -38,7 +38,7 @@ svn ls https://blockly.googlecode.com/svn/trunk
and type 'p' to accept Server certificate (p)ermanently to access the https resource.
-[Install Closure library](https://code.google.com/p/blockly/wiki/Closure).
+[Install Closure library](Closure).
### Update the code
@@ -52,13 +52,13 @@ gclient sync
* Do some work.
* cd trunk
* ` gcl change `
- * [Run tests](wiki/UnitTesting).
+ * [Run tests](UnitTesting).
* ` gcl upload xxxx `
* Go to the url on codereview.appspot.com returned by ` gcl upload `.
* Click on "Publish+Mail Comments", fill in the reviewer field, and send.
* Get "LGTM" (Looks Good To Me) from reviewer.
* ` gclient sync `
- * [Run tests](wiki/UnitTesting).
+ * [Run tests](UnitTesting).
* ` gcl commit xxxx `
### Branching
@@ -73,4 +73,4 @@ To merge in changes from the main branch, run the following from the subdirector
```
svn merge https://blockly.googlecode.com/svn/trunk
-```
\ No newline at end of file
+```
diff --git a/CreatingMessageDescriptions.md b/CreatingMessageDescriptions.md
deleted file mode 100644
index c396c40..0000000
--- a/CreatingMessageDescriptions.md
+++ /dev/null
@@ -1,82 +0,0 @@
-# Introduction
-
-In order to translate the Blockly language, we need to add descriptions for every piece of text currently displayed in English. There are 343 such messages, which are too many for the core Blockly team to mark up themselves. We are looking for volunteers who are experienced with Blockly to help add descriptions to these messages.
-
-# Background
-
-Please read [The Blockly Language](https://translatewiki.net/wiki/Translating:Blockly#The_Blockly_Language) within [the Blockly translation instructions](https://translatewiki.net/wiki/Translating:Blockly#The_Blockly_Language) on Translatewiki. This describes each of the types of text that appear in the language file:
- * block text
- * block input text
- * tooltip
- * context menu
- * url
- * dropdown choice
- * prompt
- * button
-It is possible that there are other types I have not yet categorized.
-
-# Examples
-
-I have written descriptions for 43 messages. See https://code.google.com/p/blockly/source/browse/branches/i18n/language/en/messages.js.
-
-The general format is:
-```
-/** @desc - */
-Blockly. = goog.getMsg("");
-```
-
-For example, the following definition of MSG\_DUPLICATE\_BLOCK indicates that the English-language text "Duplicate" appears on a "context menu" and that the user selects it in order to "make a duplicate of the selected block".
-
-```
-/** @desc context menu - make a duplicate of the selected block */
-Blockly.MSG_DUPLICATE_BLOCK = goog.getMsg("Duplicate");
-```
-
-Descriptions can contain [wikitext](https://www.mediawiki.org/wiki/Help:Formatting), which will be properly displayed to the translator. Specifically, you can include links to further information, as in this example:
-
-```
-/** @desc tooltip - how if statements work (see [https://code.google.com/p/blockly/wiki/If_Then]) */
-Blockly.LANG_CONTROLS_IF_TOOLTIP_1 = goog.getMsg("If a value is true, then do some blocks");
-```
-
-Descriptions may also contain bold text, indicated by pairs of 3 single quotes, to show how a word might be used in a sentence:
-
-```
-/** @desc block text - if (as in: '''if''' there is a path to the right, turn right). */
-Blockly.LANG_CONTROLS_IF_MSG_IF = goog.getMsg("if");
-```
-
-Descriptions may not include double quotes(").
-
-# Sections
-
-| **Name** | **# messages** | **corresponding source code** | **author** | **status** |
-|:---------|:---------------|:------------------------------|:-----------|:-----------|
-| context menus | 12 | [block.js](https://code.google.com/p/blockly/source/browse/trunk/core/block.js) | Ellen | done |
-| variable renaming| 5 | [variables.js](https://code.google.com/p/blockly/source/browse/trunk/core/variables.js) | Ellen | done |
-| colour | 16 | [colours.js](https://code.google.com/p/blockly/source/browse/trunk/language/common/colour.js) | Ellen | done |
-| controls: if | 15 | [control.js](https://code.google.com/p/blockly/source/browse/trunk/language/common/control.js) | Ellen | done |
-| controls: repeat, while | 11 | [control.js](https://code.google.com/p/blockly/source/browse/trunk/language/common/control.js) | -- | -- |
-| controls: for, foreach, control flow | 19 | [control.js](https://code.google.com/p/blockly/source/browse/trunk/language/common/control.js) | -- | -- |
-| logic | 27 | [logic.js](https://code.google.com/p/blockly/source/browse/trunk/language/common/logic.js) | -- | -- |
-| math | 77 | [math.js](https://code.google.com/p/blockly/source/browse/trunk/language/common/math.js) | -- | -- |
-| text | 56 | [text.js](https://code.google.com/p/blockly/source/browse/trunk/language/common/text.js) | -- | -- |
-| lists | 70 | [lists.js](https://code.google.com/p/blockly/source/browse/trunk/language/common/lists.js) | -- | -- |
-| variables | 10 | [variables.js](https://code.google.com/p/blockly/source/browse/trunk/language/common/variables.js) | Alexandros | in progress |
-| procedures | 24 | [procedures.js](https://code.google.com/p/blockly/source/browse/trunk/language/common/procedures.js) | -- | -- |
-
-# Steps
-
-To volunteer:
- 1. Visit and read through the file [messages.js](https://code.google.com/p/blockly/source/browse/branches/i18n/language/en/messages.js) to see how descriptions are written.
- 1. Decide on a section you would like to volunteer for.
- 1. Write descriptions for a few of the messages.
- 1. Post a message to the [Blockly discussion group](https://groups.google.com/forum/?fromgroups#!forum/blockly) (or send it directly to me) with the above information and how long the work would take you.
-
-Tips for translating messages:
- * If you're not sure how the message is used, play around with the [code application](https://blockly-demo.appspot.com/static/apps/code/index.html) and/or view the source code.
- * If a message consists of two (or more) strings joined by a plus sign, please combine them into a single string.
- * You can make additions to [the Blockly translation instructions](https://translatewiki.net/wiki/Translating:Blockly#The_Blockly_Language).
- * If you run into trouble, ask for help.
-
-Also feel free to suggest improvements to the descriptions I wrote.
\ No newline at end of file
diff --git a/CustomBlocks.md b/CustomBlocks.md
index b587b96..10e0848 100644
--- a/CustomBlocks.md
+++ b/CustomBlocks.md
@@ -10,22 +10,22 @@ In most cases the easiest approach is to just find a really similar block which
The first step is to create a block; specifying its shape, labels, and connection points. This is done in the ` language/ ` directory.
-→ More info on [Defining Blocks](wiki/DefiningBlocks)...
+→ More info on [Defining Blocks](DefiningBlocks)...
Advanced blocks may dynamically change their shape in response to the user or other factors.
-→ More info on [Creating Mutators](wiki/CreatingMutators)...
+→ More info on [Creating Mutators](CreatingMutators)...
## Code Generation
The second step is to create the generator code to export the new block to a programming language (such as JavaScript, Python, or Dart). This is done in the ` generators/ ` directory.
-→ More info on [Generating Code](wiki/GeneratingCode)...
+→ More info on [Generating Code](GeneratingCode)...
To generate code that is both clean and correct, one must be mindful of the order of operations list for the given language.
-→ More info on [Operator Precedence](wiki/OperatorPrecedence)...
+→ More info on [Operator Precedence](OperatorPrecedence)...
Creating more complicated blocks requires the use of temporary variables and/or utility functions. This is particularly true when an input is used twice and needs to be cached.
-→ More info on [Caching Arguments](wiki/CachingArguments)...
\ No newline at end of file
+→ More info on [Caching Arguments](CachingArguments)...
\ No newline at end of file
diff --git a/DefiningBlocks.md b/DefiningBlocks.md
index 305c310..a67c7cd 100644
--- a/DefiningBlocks.md
+++ b/DefiningBlocks.md
@@ -1,4 +1,4 @@
-**[Creating Custom Blocks](wiki/CustomBlocks): Defining Blocks**
+**[Creating Custom Blocks](CustomBlocks): Defining Blocks**
Note that much of block creation can be done through the Blockly GUI using [Block Factory](https://blockly-demo.appspot.com/static/apps/blockfactory/index.html) instead of manually creating the code given below.
@@ -30,21 +30,21 @@ Blockly.Blocks['text_length'] = {
The ` init ` function creates the block's shape. In the context of this function the keyword ` this ` is the actual block being created. There are several functions commonly used in an ` init ` function:
- * [setHelpUrl](wiki/#setHelpUrl)
- * [setColour](wiki/#setColour)
- * [setOutput](wiki/#setOutput)
- * [setPreviousStatement](wiki/#setPreviousStatement)
- * [setNextStatement](wiki/#setNextStatement)
- * [appendDummyInput, appendValueInput, appendStatementInput ](wiki/#appendDummyInput,_appendValueInput,_appendStatementInput)
- * [setCheck](wiki/#setCheck)
- * [setAlign](wiki/#setAlign)
- * [appendField](wiki/#appendField)
- * [setInputsInline](wiki/#setInputsInline)
- * [setTooltip](wiki/#setTooltip)
- * [setMutator](wiki/#setMutator)
- * [setDeletable](wiki/#setDeletable)
- * [setEditable](wiki/#setEditable)
- * [setMovable](wiki/#setMovable)
+ * [setHelpUrl](#setHelpUrl)
+ * [setColour](#setColour)
+ * [setOutput](#setOutput)
+ * [setPreviousStatement](#setPreviousStatement)
+ * [setNextStatement](#setNextStatement)
+ * [appendDummyInput, appendValueInput, appendStatementInput ](#appendDummyInput,_appendValueInput,_appendStatementInput)
+ * [setCheck](#setCheck)
+ * [setAlign](#setAlign)
+ * [appendField](#appendField)
+ * [setInputsInline](#setInputsInline)
+ * [setTooltip](#setTooltip)
+ * [setMutator](#setMutator)
+ * [setDeletable](#setDeletable)
+ * [setEditable](#setEditable)
+ * [setMovable](#setMovable)
### setHelpUrl
@@ -140,7 +140,7 @@ Once an input is created and appended to the block, it may be configured using '
input.setCheck(Number);
```
-This optional function is used for type-checking of connected inputs. If given an argument of null, then this input may be connected to any block. See [setOutput](wiki/#setOutput) for details on the expected values.
+This optional function is used for type-checking of connected inputs. If given an argument of null, then this input may be connected to any block. See [setOutput](#setOutput) for details on the expected values.
#### setAlign
@@ -184,7 +184,7 @@ Optionally, the ` FieldTextInput ` constructor can also take a second argument w
Another field element is a drop-down menu. Just like the text input field, the drop-down menu is created separately, then appended to the input row. The ` FieldDropdown ` object is created with a list of menu options, or with a generator function.
-→ More info on [Drop-down Menus](wiki/DropDown)...
+→ More info on [Drop-down Menus](DropDown)...
```
var variable = new Blockly.FieldVariable('item');
@@ -258,7 +258,7 @@ Tooltips may also be defined as a function instead of a static string. This all

-Mutators allow advanced blocks to change shape, most notably as a result of users opening a dialog to add, remove or rearrange components. Creating a mutator is not trivial and is the subject of a separate page: [Creating Mutators](wiki/CreatingMutators).
+Mutators allow advanced blocks to change shape, most notably as a result of users opening a dialog to add, remove or rearrange components. Creating a mutator is not trivial and is the subject of a separate page: [Creating Mutators](CreatingMutators).
### setDeletable
diff --git a/DropDown.md b/DropDown.md
index 370dbd0..ba422b6 100644
--- a/DropDown.md
+++ b/DropDown.md
@@ -1,4 +1,4 @@
-**[Creating Custom Blocks](wiki/CustomBlocks): [Defining Blocks](wiki/DefiningBlocks): Drop-down Menus**
+**[Creating Custom Blocks](CustomBlocks): [Defining Blocks](DefiningBlocks): Drop-down Menus**
Drop-down menus can be somewhat complicated field elements used in creating blocks.
diff --git a/Future.md b/Future.md
index a592674..9fd6348 100644
--- a/Future.md
+++ b/Future.md
@@ -6,7 +6,7 @@ Blockly is in active development with changes landing every day. We are aware o
It is important that everyone be able to use Blockly. That means running in as many environments as possible:
- * [Translating Blockly](wiki/Translation) (or just some demo apps) into your language is extremely helpful. Less that 5% of the world [speaks English](https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers) natively. Help us reach the billions of people who are missing out.
+ * [Translating Blockly](Translation) (or just some demo apps) into your language is extremely helpful. Less that 5% of the world [speaks English](https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers) natively. Help us reach the billions of people who are missing out.
* Touch screen support (for Android and iOS tablets in particular) is critical. Currently Blockly kinda-sorta works, but we need to do much better.
* Good support for IE 10 and IE 9 (IE 8 is assumed to be a lost cause). The Google developers do not have easy access to Windows computers, so any help to improve IE is appreciated.
diff --git a/GeneratingCode.md b/GeneratingCode.md
index fecde3e..b6422cd 100644
--- a/GeneratingCode.md
+++ b/GeneratingCode.md
@@ -1,4 +1,4 @@
-**[Creating Custom Blocks](wiki/CustomBlocks): Generating Code**
+**[Creating Custom Blocks](CustomBlocks): Generating Code**
# Generating Code
@@ -24,9 +24,9 @@ Blockly.JavaScript['text_indexOf'] = function(block) {
The first task for any block's code generator is to collect all the arguments and field data. There are several functions commonly used for this task:
- * [getFieldValue](wiki/#getFieldValue)
- * [valueToCode](wiki/#valueToCode)
- * [statementToCode](wiki/#statementToCode)
+ * [getFieldValue](#getFieldValue)
+ * [valueToCode](#valueToCode)
+ * [statementToCode](#statementToCode)
### getFieldValue
diff --git a/InjectingFixedSize.md b/InjectingFixedSize.md
index 28fd060..05b6504 100644
--- a/InjectingFixedSize.md
+++ b/InjectingFixedSize.md
@@ -1,4 +1,4 @@
-**[Installation](wiki/Installation): Injecting Fixed-sized Blockly**
+**[Installation](Installation): Injecting Fixed-sized Blockly**
# Introduction
@@ -7,7 +7,7 @@ The simplest way to put Blockly into a webpage is to inject it into an empty 'di
* One can't have more than one instance of Blockly on the same page.
* Blockly cannot easily reflow as the window resizes.
-Both of these issues may be solved by [injecting Blockly into an iframe](wiki/InjectingResizable).
+Both of these issues may be solved by [injecting Blockly into an iframe](InjectingResizable).
## Injection
@@ -30,7 +30,7 @@ Add an empty div to the page and set its size:
```
-Add the structure of the toolbox (see [Defining the Toolbox](wiki/Toolbox) for more information):
+Add the structure of the toolbox (see [Defining the Toolbox](Toolbox) for more information):
```
diff --git a/Installation.md b/Installation.md
index 379c72d..cf56791 100644
--- a/Installation.md
+++ b/Installation.md
@@ -20,9 +20,9 @@ Once you have the code, point your browser at ` apps/maze/index.html ` and test
With your installation of Blockly verified as working, inject Blockly into a web page using either a fixed-size ` div ` or a resizable ` iframe `.
-→ More info on [injecting fixed-sized Blockly](wiki/InjectingFixedSize)...
+→ More info on [injecting fixed-sized Blockly](InjectingFixedSize)...
-→ More info on [injecting resizable Blockly](wiki/InjectingResizable)...
+→ More info on [injecting resizable Blockly](InjectingResizable)...
## Configuration
@@ -39,18 +39,18 @@ The ` Blockly.inject ` line contains as its second argument a dictionary of name
| ` rtl: ` | boolean | If ` true `, mirror the editor for Arabic or Hebrew locales. See [RTL demo](https://blockly-demo.appspot.com/static/demos/rtl/index.html). Defaults to ` false `. |
| ` scrollbars: ` | boolean | If ` false `, supress scrollbars that appear if the toolbox has categories. Defaults to ` true `. |
| ` sound: ` | boolean | If ` false `, don't play sounds (e.g. click and delete). Defaults to ` true `. |
-| ` toolbox: ` | XML nodes or string | Tree structure of categories and blocks available to the user. See [Defining the Toolbox](wiki/Toolbox) for more information. |
+| ` toolbox: ` | XML nodes or string | Tree structure of categories and blocks available to the user. See [Defining the Toolbox](Toolbox) for more information. |
| ` trashcan: ` | boolean | Displays or hides the trashcan. Defaults to ` true ` if the toolbox has categories, ` false ` otherwise. |
-Blockly's library of blocks is highly configurable. The blocks shown to the user can be customized so that users only see blocks that are relevant to the task. Browse the ` blocks/ ` directory for block categories that you want to include. The categories and blocks shown in the toolbox (the side menu) is specified using an [XML tree](wiki/Toolbox).
+Blockly's library of blocks is highly configurable. The blocks shown to the user can be customized so that users only see blocks that are relevant to the task. Browse the ` blocks/ ` directory for block categories that you want to include. The categories and blocks shown in the toolbox (the side menu) is specified using an [XML tree](Toolbox).
-Additionally, custom blocks need to be built to call your web application's API. An example is the [Maze application](https://blockly-demo.appspot.com/static/apps/maze/index.html) which has custom blocks for movement. More info on [Creating custom blocks](wiki/CustomBlocks)...
+Additionally, custom blocks need to be built to call your web application's API. An example is the [Maze application](https://blockly-demo.appspot.com/static/apps/maze/index.html) which has custom blocks for movement. More info on [Creating custom blocks](CustomBlocks)...
## Language Generators
Blockly is not a programming language, one cannot 'run' a Blockly program. Instead, Blockly can translate the user's program into JavaScript, Python, Dart, or some other language.
-→ More info on [Language Generators](wiki/LanguageGenerators)...
+→ More info on [Language Generators](LanguageGenerators)...
## Importing and Exporting Blocks
@@ -74,4 +74,4 @@ Restoring from an XML string to blocks is just as simple:
Blockly comes with an optional cloud-storage feature. It enables users to save, load, share, and publish their programs. If your project is hosted on App Engine you can take advantage of this service.
-→ More info on [Cloud Storage](wiki/CloudStorageWithAppEngine)...
+→ More info on [Cloud Storage](CloudStorageWithAppEngine)...
diff --git a/JSInterpreter.md b/JSInterpreter.md
index ac945a1..06a2d8a 100644
--- a/JSInterpreter.md
+++ b/JSInterpreter.md
@@ -1,8 +1,8 @@
-**[Installation](wiki/Installation): [Language Generators](wiki/LanguageGenerators): JavaScript Interpreter**
+**[Installation](Installation): [Language Generators](LanguageGenerators): JavaScript Interpreter**
## Eval is Evil
-The quickest way to run your user's blocks is to generate JavaScript, then push the resulting code through the browser's ` eval() ` function. This works very well for many simple applications. The [Language Generators](wiki/LanguageGenerators) page describes how to do this, along with a couple of hacks such as how to deal with infinite loops and how not to collide with existing variables.
+The quickest way to run your user's blocks is to generate JavaScript, then push the resulting code through the browser's ` eval() ` function. This works very well for many simple applications. The [Language Generators](LanguageGenerators) page describes how to do this, along with a couple of hacks such as how to deal with infinite loops and how not to collide with existing variables.
However, if you are serious about running the user's blocks properly, then the [JS Interpreter](https://github.com/NeilFraser/JS-Interpreter) is the way to go. This project is separate from Blockly, but was specifically written for Blockly.
diff --git a/Klingon.md b/Klingon.md
index ea44783..be98f3c 100644
--- a/Klingon.md
+++ b/Klingon.md
@@ -36,15 +36,15 @@ translations or corrections -- whether for Klingon, or other languages.
## How?
-Most of [Blockly's translations](wiki/Translation) are done by volunteers using
+Most of [Blockly's translations](Translation) are done by volunteers using
Translatewiki. Unfortunately, Klingon is not in their language matrix.
As a result, Klingon contributors need to edit two files manually:
-https://code.google.com/p/blockly/source/browse/trunk/msg/json/tlh.json
+https://github.com/google/blockly/tree/master/msg/json/tlh.json
and
-https://code.google.com/p/blockly/source/browse/trunk/apps/json/tlh.json
+https://github.com/google/blockly/tree/master/apps/json/tlh.json
See the ` en.json ` files in each directory for the English phrases (including
those not yet translated to Klingon), and the ` qqq.json ` files for descriptions.
diff --git a/OperatorPrecedence.md b/OperatorPrecedence.md
index c8db382..24938ab 100644
--- a/OperatorPrecedence.md
+++ b/OperatorPrecedence.md
@@ -1,4 +1,4 @@
-**[Creating Custom Blocks](wiki/CustomBlocks): [Generating Code](wiki/GeneratingCode): Operator Precedence**
+**[Creating Custom Blocks](CustomBlocks): [Generating Code](GeneratingCode): Operator Precedence**
Code generators are used to convert Blockly's programs into JavaScript, Python, Dart, etc. The most challenging issue when writing a code generator for a new block is handling the order of operations so that the resulting code executes as intended.
diff --git a/RealtimeCollaboration.md b/RealtimeCollaboration.md
index b057da6..c234ed1 100644
--- a/RealtimeCollaboration.md
+++ b/RealtimeCollaboration.md
@@ -1,7 +1,7 @@
### Introduction
The Blockly library supports realtime collaboration of Blockly programs similar to realtime collaboration of documents in Google Drive, i.e. multiple users can edit the same program at the same time, with all the users seeing each others changes in real time.
-Using Blockly's realtime collaboration feature will provide your users with a sharable link which they can send to a friend or colleague. That link contain the ID of a 'document' which is saved in Google Drive and stores the Blockly program that is being edited. Note that this implies that using Blockly's realtime collaboration feature also provides for persistent storage of a Blockly program (as an alternative to the mechanism described in [CloudStorageWithAppEngine](wiki/CloudStorageWithAppEngine)) and therefore is useful even if you don't necessarily care about realtime collaboration. Also note that another benefit of using the realtime collaboration feature will be the ability to 'undo' and 'redo' editing operations. 'Undo' and 'redo' are not currently supported due to a bug (in Blockly code) but hopefully that will soon be fixed.
+Using Blockly's realtime collaboration feature will provide your users with a sharable link which they can send to a friend or colleague. That link contain the ID of a 'document' which is saved in Google Drive and stores the Blockly program that is being edited. Note that this implies that using Blockly's realtime collaboration feature also provides for persistent storage of a Blockly program (as an alternative to the mechanism described in [CloudStorageWithAppEngine](CloudStorageWithAppEngine)) and therefore is useful even if you don't necessarily care about realtime collaboration. Also note that another benefit of using the realtime collaboration feature will be the ability to 'undo' and 'redo' editing operations. 'Undo' and 'redo' are not currently supported due to a bug (in Blockly code) but hopefully that will soon be fixed.
Blockly's realtime collaboration is built using [Google Drive's Realtime API](https://developers.google.com/drive/realtime/): a service provided by Google that enables 3rd party developers to incorporate realtime collaboration into their own web applications.
@@ -9,10 +9,10 @@ Blockly's realtime collaboration is built using [Google Drive's Realtime API](ht
By default realtime collaboration is currently disabled in Blockly. This wiki page tells you how to enable it. Note that these instructions are for the developer using Blockly for their web application, not for the end user.
-There are two major steps to take in order to enable realtime collaboration in Blockly. One is to [put the appropriate code in your application](wiki/#Code_to_enable_realtime_collaboration). The other is to use the [Google Developer Console](https://cloud.google.com/console/project) to [register your application](wiki/Registering_with_the_Google_Developer_Console) to use Google Drive's Realtime API.
+There are two major steps to take in order to enable realtime collaboration in Blockly. One is to [put the appropriate code in your application](#Code_to_enable_realtime_collaboration). The other is to use the [Google Developer Console](https://cloud.google.com/console/project) to [register your application](Registering_with_the_Google_Developer_Console) to use Google Drive's Realtime API.
### Code to enable realtime collaboration
-To enable realtime collaboration in your application's code add a 'realtime: true' option to your Blockly.inject() method call. There are also a set of 'realtimeOptions: ...' that you can add, as well. Here, for example, is the code in for this in [playground.html](https://code.google.com/p/blockly/source/browse/trunk/tests/playground.html) in the Blockly Playground application (which is part of the standard Blockly test codebase):
+To enable realtime collaboration in your application's code add a 'realtime: true' option to your Blockly.inject() method call. There are also a set of 'realtimeOptions: ...' that you can add, as well. Here, for example, is the code in for this in [playground.html](https://github.com/google/blockly/tree/master/tests/playground.html) in the Blockly Playground application (which is part of the standard Blockly test codebase):
```
function start() {
@@ -33,7 +33,7 @@ The clientId string (i.e 'YOUR CLIENT ID GOES HERE') needs to be replaced by th
The 'chatbox' option is used if you want to have a collaborative chat in you app. Within that option you must specify an 'elementId' suboption which tells the realtime code the id of a textarea that is defined in your app and which will be used for the chat. You can also specify the initial text to be placed in your chatbox by adding an 'initText' suboption. If you don't specify an 'initText' it will default to the value of Blockly.Msg.CHAT, which has the value _'Chat with your collaborator by typing in this box!'_ for english users but can be localized.
-The 'collabElementId' option is used if you want to view thumbnail images (with alt/hover text containing the users' name) of all the users (with available profiles that are accessible to the user) currently collaborating on a particular Blockly-based program. The value of the 'collabElementId' option should be the id of a div in your application where the thumbnails will be placed. See the [playground.html](https://code.google.com/p/blockly/source/browse/trunk/tests/playground.html) for an example of this.
+The 'collabElementId' option is used if you want to view thumbnail images (with alt/hover text containing the users' name) of all the users (with available profiles that are accessible to the user) currently collaborating on a particular Blockly-based program. The value of the 'collabElementId' option should be the id of a div in your application where the thumbnails will be placed. See the [playground.html](https://github.com/google/blockly/tree/master/tests/playground.html) for an example of this.
### Registering with the Google Developer Console
To register your application with the Google Developers Console, please use the instructions that can be found in the [activation section of the Google Drive Realtime API Quickstart documentation](https://developers.google.com/drive/realtime/realtime-quickstart#step_1_activate_the_drive_api).
diff --git a/Toolbox.md b/Toolbox.md
index 77c7329..6e7d7c1 100644
--- a/Toolbox.md
+++ b/Toolbox.md
@@ -1,4 +1,4 @@
-**[Installation](wiki/Installation): Defining the Toolbox**
+**[Installation](Installation): Defining the Toolbox**
# Introduction
diff --git a/Translation.md b/Translation.md
index e989580..9afb2f1 100644
--- a/Translation.md
+++ b/Translation.md
@@ -6,8 +6,8 @@ Our goal is for Blockly to be available in as many languages as possible, so stu
# Using Blockly
If you're not already a Blockly user, try it out. Some good starting places are:
- * [Puzzle](https://blockly-demo.appspot.com/blockly/apps/puzzle/index.html) (to learn the Blockly user interface)
- * [Maze](https://blockly-demo.appspot.com/blockly/apps/maze/index.html)
+ * [Puzzle](https://blockly-games.appspot.com/puzzle) (to learn the Blockly user interface)
+ * [Maze](https://blockly-games.appspot.com/maze)
* [Code](https://blockly-demo.appspot.com/blockly/apps/code/index.html) (meant for experienced programmers)
# Translatewiki
@@ -20,7 +20,7 @@ Use the [Getting started wizard](http://translatewiki.net/w/i.php?title=Special:
1. Creating an account.
1. Configuring your preferences. You may specify any languages at this step.
1. Creating your user page. You must specify (at least) "I have a moderate command of" "English" to do translations for Blockly. You should also specify at least one other language that you are able to do translations into.
- 1. Request translator permissions. Write a brief introduction, ideally information to give the reviewer reason to believe you're a genuine translator and not a vandal. For example, if you have already contributed translations to Blockly, link to the translated file and point out that it contains your name (assuming it does). Here are the [maze translations](https://code.google.com/p/blockly/source/browse/#svn%2Ftrunk%2Fapps%2Fmaze). Press "Send request". You then need to wait to be manually approved, which can take anywhere from a few minutes to a couple of hours (longest during nighttime in Central Europe). **You probably will not be notified that you were approved; just give it a try a little later.**
+ 1. Request translator permissions. Write a brief introduction, ideally information to give the reviewer reason to believe you're a genuine translator and not a vandal. Press "Send request". You then need to wait to be manually approved, which can take anywhere from a few minutes to a couple of hours (longest during nighttime in Central Europe). **You probably will not be notified that you were approved; just give it a try a little later.**
Optionally, personalize your user page. You can do this by clicking on your user name, which is shown on the top of the page once you have logged in. Once on your user page, the easiest way to modify it is by clicking on the "Edit with form" tab near the top of the page.
@@ -30,4 +30,4 @@ Visit [Translating:Blockly](http://translatewiki.net/wiki/Translating:Blockly),
## Start translating
-Start translating by clicking on the "Translate this project" link at the top of [Translating:Blockly](http://translatewiki.net/wiki/Translating:Blockly) or going directly to http://translatewiki.net/w/i.php?title=Special:Translate&group=out-blockly-0-all. You may have to click on "English" in the phrase "Translate to English" toward the upper right to change to your language.
\ No newline at end of file
+Start translating by clicking on the "Translate this project" link at the top of [Translating:Blockly](http://translatewiki.net/wiki/Translating:Blockly) or going directly to http://translatewiki.net/w/i.php?title=Special:Translate&group=out-blockly-0-all. You may have to click on "English" in the phrase "Translate to English" toward the upper right to change to your language.
diff --git a/TranslationForDevelopers.md b/TranslationForDevelopers.md
index 4e673e8..d01dab7 100644
--- a/TranslationForDevelopers.md
+++ b/TranslationForDevelopers.md
@@ -1,4 +1,4 @@
-This document provides what developers should know about Blockly translations. Translators should read [this document](https://code.google.com/p/blockly/wiki/Translation) instead.
+This document provides what developers should know about Blockly translations. Translators should read [this document](Translation) instead.
(TODO: Add table of contents.)
@@ -18,7 +18,7 @@ contact is Siebrand Mazeland.
# Applications and Tutorials
-The Blockly applications and tutorials (henceforth referred to as "apps") are built with "Soy", also known as [Google Closure templates](https://developers.google.com/closure/templates/), which has [translation tools](https://developers.google.com/closure/templates/docs/translation). Specifically, all messages appear in files whose name ends with the "soy" extension. Messages used by multiple apps are defined in [apps/common.soy](https://code.google.com/p/blockly/source/browse/trunk/apps/common.soy), and have the prefix "Apps." Messages used by only a single app are defined in that app's template.soy file, such as [apps/maze/template.soy](https://code.google.com/p/blockly/source/browse/trunk/apps/maze/template.soy) and prefixed with the name of the application, such as "Maze.".
+The Blockly applications and tutorials (henceforth referred to as "apps") are built with "Soy", also known as [Google Closure templates](https://developers.google.com/closure/templates/), which has [translation tools](https://developers.google.com/closure/templates/docs/translation). Specifically, all messages appear in files whose name ends with the "soy" extension. Messages used by multiple apps are defined in [apps/common.soy](https://github.com/google/blockly/tree/master/apps/common.soy), and have the prefix "Apps." Messages used by only a single app are defined in that app's template.soy file, such as [apps/maze/template.soy](https://github.com/google/blockly/tree/master/apps/maze/template.soy) and prefixed with the name of the application, such as "Maze.".
## The msg tag
Here is an example of a message definition:
@@ -36,7 +36,7 @@ Notes:
* The message documentation for the translator is defined through the "desc" attribute. This appears as the value in the qqq.json file.
* The English language text appears between the "msg" start and end tags. This appears as the value in the en.json file.
-A left brace or right brace can be included in an attribute value by using double braces to introduce and close the "msg" tags and writing "{lb}" [brace](wiki/left) for "{" or "{rb}" for "}", as in this definition:
+A left brace or right brace can be included in an attribute value by using double braces to introduce and close the "msg" tags and writing "{lb}" [brace](left) for "{" or "{rb}" for "}", as in this definition:
```
{{msg meaning="Puzzle.country1Language"
@@ -77,7 +77,7 @@ If a message is used by a JavaScript file, such as maze.js or blocks.js, it must
{/msg}
```
-By convention, the id of the span is the same as the "meaning" key but replaces periods with underscores. The message is referenced from code through the method ` BlocklyApps.getMsg() `, as in the example below from [apps/maze/blocks.js](https://code.google.com/p/blockly/source/browse/trunk/apps/maze/blocks.js):
+By convention, the id of the span is the same as the "meaning" key but replaces periods with underscores. The message is referenced from code through the method ` BlocklyApps.getMsg() `, as in the example below from [apps/maze/blocks.js](https://github.com/google/blockly/tree/master/apps/maze/blocks.js):
```
Blockly.Blocks['maze_moveForward'] = {
@@ -93,7 +93,7 @@ Blockly.Blocks['maze_moveForward'] = {
### Messages used multiple times
If a message is used multiple times within one or multiple template files, all "msg" tags should have the same "meaning" attribute and enclosed text, but only one should have the real description as the "desc" attribute. The others should have "IBID" (case-insensitive).
-If a message is used in more than one app, it should be defined within a span in [apps/common.soy](https://code.google.com/p/blockly/source/browse/trunk/apps/common.soy), and its meaning should be prefixed with "Apps.". For example, common.soy includes:
+If a message is used in more than one app, it should be defined within a span in [apps/common.soy](https://github.com/google/blockly/tree/master/apps/common.soy), and its meaning should be prefixed with "Apps.". For example, common.soy includes:
```
@@ -106,7 +106,7 @@ If a message is used in more than one app, it should be defined within a span in
```
-Here is a sample use from [apps/turtle/template.soy](https://code.google.com/p/blockly/source/browse/trunk/apps/turtle/template.soy):
+Here is a sample use from [apps/turtle/template.soy](https://github.com/google/blockly/tree/master/apps/turtle/template.soy):
```
{msg meaning="Apps.blocklyMessage" desc="IBID"}Blockly{/msg}
```
@@ -115,13 +115,13 @@ Here is a sample use from [apps/turtle/template.soy](https://code.google.com/p/b
### Building a single app in English
-Every app's template.soy file contains a comment near the top describing how to rebuild its English-language message file (apps/` * `/generated/en.js). For example, this command appears at the top of [apps/turtle/template.soy](https://code.google.com/p/blockly/source/browse/trunk/apps/turtle/template.soy):
+Every app's template.soy file contains a comment near the top describing how to rebuild its English-language message file (apps/` * `/generated/en.js). For example, this command appears at the top of [apps/turtle/template.soy](https://github.com/google/blockly/tree/master/apps/turtle/template.soy):
```
java -jar ../_soy/SoyToJsSrcCompiler.jar --outputPathFormat generated/en.js --srcs ../common.soy,template.soy
```
-When run in the apps/turtle directory, this rebuilds [apps/turtle/generated/en.js](https://code.google.com/p/blockly/source/browse/trunk/apps/turtle/generated/en.js).
+When run in the apps/turtle directory, this rebuilds [apps/turtle/generated/en.js](https://github.com/google/blockly/tree/master/apps/turtle/generated/en.js).
Emacs users might want to add the following to their .emacs file to automatically regenerate the appropriate en.js file whenever a template.soy file is saved:
```
@@ -135,7 +135,7 @@ Of course, if you have a different path to ` _soy ` or wish to generate "en\_us.
### Doing a full build
-Before checking in code, developers should do a full i18n build by following the instructions in comments at the top of [apps/common.soy](https://code.google.com/p/blockly/source/browse/trunk/apps/common.soy). The below diagram shows the build process. It is followed by a description of each step.
+Before checking in code, developers should do a full i18n build by following the instructions in comments at the top of [apps/common.soy](https://github.com/google/blockly/tree/master/apps/common.soy). The below diagram shows the build process. It is followed by a description of each step.

@@ -166,16 +166,16 @@ The ` id ` is some sort of hash value that changes whenever the message descript
#### xliff\_to\_json.py
-The script xliff_to_json.py takes ` extracted_msgs.xlf ` as input and generates three JSON files that use message "meanings" (such as `Maze.moveForward') as keys:
- * [qqq.json](https://code.google.com/p/blockly/source/browse/trunk/apps/json/qqq.json), where the values are the message documentation (translator instructions).
- * [en.json](https://code.google.com/p/blockly/source/browse/trunk/apps/json/en.json), where the values are the English-language messages (e.g., "move forward").
- * [keys.json](https://code.google.com/p/blockly/source/browse/trunk/apps/json/keys.json), where the values are ` id `s from ` extracted_msgs.xlf `, such as "4138774728570944645".
+The script xliff_to_json.py takes ` extracted_msgs.xlf ` as input and generates three JSON files that use message "meanings" (such as `Maze.moveForward') as keys:
+ * [qqq.json](https://github.com/google/blockly/tree/master/apps/json/qqq.json), where the values are the message documentation (translator instructions).
+ * [en.json](https://github.com/google/blockly/tree/master/apps/json/en.json), where the values are the English-language messages (e.g., "move forward").
+ * [keys.json](https://github.com/google/blockly/tree/master/apps/json/keys.json), where the values are ` id `s from ` extracted_msgs.xlf `, such as "4138774728570944645".
Note that these do not change the other languages' json files, which were generated by translatewiki. These files are automatically picked up by Siebrand Mazeland at translatewiki, who periodically checks in updated qqq.json and other languages' JSON files as blockly@translatewiki.net.
#### json\_to\_js.py
-Finally, the script json_to_js.py uses the JSON files and template files to generate JavaScript files for each app-language combination, such as [apps/maze/generated/es.js](https://code.google.com/p/blockly/source/browse/trunk/apps/maze/generated/es.js), the Spanish translation of the maze application.
+Finally, the script json_to_js.py uses the JSON files and template files to generate JavaScript files for each app-language combination, such as [apps/maze/generated/es.js](https://github.com/google/blockly/tree/master/apps/maze/generated/es.js), the Spanish translation of the maze application.
## Translation status
@@ -206,7 +206,7 @@ Because the core Blockly language may be used by developers who do not use Closu
### definitions and descriptions
-Messages are defined in the file [msg/messages.js](https://code.google.com/p/blockly/source/browse/trunk/msg/messages.js) using the following format:
+Messages are defined in the file [msg/messages.js](https://github.com/google/blockly/tree/master/msg/messages.js) using the following format:
```
///
Blockly.Msg. = '';
@@ -225,14 +225,14 @@ By convention, descriptions start with one of the terms listed in https://transl
The use of [MediaWiki markup](http://www.mediawiki.org/wiki/Help:Formatting) is encouraged, including external links to this Blockly wiki, Wikipedia, and saved programs illustrating the use of a block. Files may be [uploaded to translatewiki](https://translatewiki.net/wiki/Special:Upload) and referenced as shown in the following example:
```
/// block text - Title of blocks allowing users to find text. See
-/// [https://code.google.com/p/blockly/wiki/Text#Finding_text
-/// https://code.google.com/p/blockly/wiki/Text#Finding_text].
+/// [https://github.com/google/blockly/wiki/Text#Finding_text
+/// https://github.com/google/blockly/wiki/Text#Finding_text].
/// [[File:Blockly-find-text.png]]
Blockly.Msg.TEXT_INDEXOF_INPUT_INTEXT = 'in text';
```
This causes the picture to be displayed in-line for the translator.
-Developers are encouraged to read through [msg/messages.js](https://code.google.com/p/blockly/source/browse/trunk/msg/messages.js) and to use the [Translation](wiki/Translation) interface before creating their own messages.
+Developers are encouraged to read through [msg/messages.js](https://github.com/google/blockly/tree/master/msg/messages.js) and to use the [Translation](Translation) interface before creating their own messages.
### synonyms
@@ -252,16 +252,16 @@ Synonym definitions may appear anywhere in ` messages.js ` after the right-hand
Ideally, translators should be given sentences, rather than bits of pieces of text to be concatenated with data. This can sometimes be provided through message interpolation, as in this example:
-
+
```
-/// block title - Title of [https://code.google.com/p/blockly/wiki/Loops#count_with count with] blocks.
+/// block title - Title of [https://github.com/google/blockly/wiki/Loops#count_with count with] blocks.
Blockly.Msg.CONTROLS_FOR_INPUT_WITH = 'count with';
/// block text - Starting with a (usually lower) number in a range (%1),
/// ending with a (usually higher) number in a range (%2), and counting the
/// iterations by a number of steps (%3). As in
-/// [https://code.google.com/p/blockly/wiki/Loops#count_with
-/// https://code.google.com/p/blockly/wiki/Loops#count_with].
+/// [https://github.com/google/blockly/wiki/Loops#count_with
+/// https://github.com/google/blockly/wiki/Loops#count_with].
Blockly.Msg.CONTROLS_FOR_INPUT_FROM_TO_BY = 'from %1 to %2 by %3';
```
The relevant part of the definition of the 'controls\_for' block in blocks/loops.js is:
@@ -281,15 +281,15 @@ Note that the two messages could not have been combined into a single one becaus
## Build process
-Building consists of two steps: (1) generating JSON files and (2) generating JS files. They are built automatically by the main [build.py script](https://code.google.com/p/blockly/source/browse/trunk/build.py) but can also be built by executing the following two scripts.
+Building consists of two steps: (1) generating JSON files and (2) generating JS files. They are built automatically by the main [build.py script](https://github.com/google/blockly/tree/master/build.py) but can also be built by executing the following two scripts.
### Generating JSON files
-Translatewiki requires [en.json](https://code.google.com/p/blockly/source/browse/trunk/msg/json/en.json) and [qqq.json](https://code.google.com/p/blockly/source/browse/trunk/msg/json/qqq.json). We also require a file [synonyms.json](https://code.google.com/p/blockly/source/browse/trunk/msg/json/synonyms.json), to keep track of synonymous messages. These three files are generated by running the following command from the ` msg/ ` directory:
+Translatewiki requires [en.json](https://github.com/google/blockly/tree/master/msg/json/en.json) and [qqq.json](https://github.com/google/blockly/tree/master/msg/json/qqq.json). We also require a file [synonyms.json](https://github.com/google/blockly/tree/master/msg/json/synonyms.json), to keep track of synonymous messages. These three files are generated by running the following command from the ` msg/ ` directory:
```
../i18n/js_to_json.py
```
-The script [js\_to\_json.py](https://code.google.com/p/blockly/source/browse/trunk/i18n/js_to_json.py) contains the regular expressions matching lines in ` messages.js `, in case any question arises about syntax.
+The script [js\_to\_json.py](https://github.com/google/blockly/tree/master/i18n/js_to_json.py) contains the regular expressions matching lines in ` messages.js `, in case any question arises about syntax.
### Generating JavaScript files
@@ -297,14 +297,14 @@ The JSON files produced in the previous step, as well as any obtained from trans
```
../i18n/create_messages.py json/*.json
```
-This populates the directory [msg/js/](https://code.google.com/p/blockly/source/browse/#svn%2Ftrunk%2Fmsg%2Fjs).
+This populates the directory [msg/js/](https://github.com/google/blockly/tree/master/msg/js).
Any messages not defined in a language's .json file will have the original English-language text, as shown by this excerpt from zh-tw.js:
```
Blockly.Msg.CHANGE_VALUE_TITLE = "修改值:";
Blockly.Msg.COLLAPSE_ALL = "Collapse Blocks"; // untranslated
```
-The comment "untranslated" is added automatically by [create\_messages.py](https://code.google.com/p/blockly/source/browse/trunk/i18n/create_messages.py).
+The comment "untranslated" is added automatically by [create\_messages.py](https://github.com/google/blockly/tree/master/i18n/create_messages.py).
## Translation status
-The status of the translations can be found at "https://translatewiki.net/w/i.php?title=Special%3AMessageGroupStats&x=D&group=out-blockly-core&suppressempty=1".
\ No newline at end of file
+The status of the translations can be found at "https://translatewiki.net/w/i.php?title=Special%3AMessageGroupStats&x=D&group=out-blockly-core&suppressempty=1".
diff --git a/help/text-count-with.png b/count-with.png
similarity index 100%
rename from help/text-count-with.png
rename to count-with.png
diff --git a/help/Lists.md b/help/Lists.md
index e5827da..ac7e6a4 100644
--- a/help/Lists.md
+++ b/help/Lists.md
@@ -60,7 +60,7 @@ The value of an **is empty** block is **true** if its input is the empty list an

-Note the similarity to the ["is empty" block for text](https://code.google.com/p/blockly/wiki/Text#Checking_for_empty_text).
+Note the similarity to the ["is empty" block for text](Text#Checking_for_empty_text).
## length of
@@ -72,7 +72,7 @@ Note that the **length of** block tells you how many items are in the list, not

-Note the similarity to the ["length of" block for text](https://code.google.com/p/blockly/wiki/Text#Text_length).
+Note the similarity to the ["length of" block for text](Text#Text_length).
# Finding Items in a List
@@ -88,7 +88,7 @@ If the item is nowhere in the list, the result is in the value 0, as in this exa

-These blocks are analogous to [the ones for finding letters in text](https://code.google.com/p/blockly/wiki/Text#Finding_text).
+These blocks are analogous to [the ones for finding letters in text](Text#Finding_text).
# Getting Items from a List
@@ -159,7 +159,7 @@ The **in list ... set** block replaces the item at a specified location in a lis

-For the meaning of each of the dropdown options, see the [previous section](wiki/Lists#Getting_Items_from_a_List).
+For the meaning of each of the dropdown options, see the [previous section](Lists#Getting_Items_from_a_List).
The following example does two things:
1. The list **words** is created with 3 items: ["very", "very", "very"].
@@ -185,7 +185,7 @@ It inserts a new item into the list at the specified location, before the item p
## Printing a list
-The [print block](wiki/Text#Printing_text) in the Text category can print lists. The result of the following program is the shown alert box:
+The [print block](Text#Printing_text) in the Text category can print lists. The result of the following program is the shown alert box:

@@ -193,10 +193,10 @@ The [print block](wiki/Text#Printing_text) in the Text category can print lists.
## Doing something for each item in a list
-The [for-each block](wiki/Loops#for_each) in the Control category performs an operation on every item in a list. For example, these blocks individually print each item in the list:
+The [for-each block](Loops#for_each) in the Control category performs an operation on every item in a list. For example, these blocks individually print each item in the list:

This does not remove the items from the original list.
-See also the examples of the [loop termination blocks](wiki/Loops#Loop_Termination_Blocks).
\ No newline at end of file
+See also the examples of the [loop termination blocks](Loops#Loop_Termination_Blocks).
diff --git a/help/Logic.md b/help/Logic.md
index 05b62bd..0fe2a97 100644
--- a/help/Logic.md
+++ b/help/Logic.md
@@ -7,8 +7,8 @@
* **false**
Boolean values (also called _conditions_) are used in these control block, which contain examples::
- * [conditional blocks](wiki/IfElse)
- * [repeat blocks](wiki/Loops#repeat)
+ * [conditional blocks](IfElse)
+ * [repeat blocks](Loops#repeat)
One of the many examples from those pages is:
diff --git a/help/Loops.md b/help/Loops.md
index a37e633..7dcbd22 100644
--- a/help/Loops.md
+++ b/help/Loops.md
@@ -2,7 +2,7 @@
# Introduction and Terminology
-The **Control** category holds blocks that control whether other blocks placed in their **body** are run. (For example, in the below "repeat" block, the body contains the "print" block and its input.) There are two types of control blocks: [IfElse](wiki/IfElse) (described on their own page) and these, which control how many times the body is run and, in some cases, the value of a variable used within the body. These structures are called **loops** since the body is repeated (possibly) multiple times, reminiscent of a rope containing loops. Each pass through the loop is called an **iteration**. (How about our using the term "pass"?) For more information, see https://en.wikipedia.org/wiki/Control_flow#Loops.
+The **Control** category holds blocks that control whether other blocks placed in their **body** are run. (For example, in the below "repeat" block, the body contains the "print" block and its input.) There are two types of control blocks: [IfElse](IfElse) (described on their own page) and these, which control how many times the body is run and, in some cases, the value of a variable used within the body. These structures are called **loops** since the body is repeated (possibly) multiple times, reminiscent of a rope containing loops. Each pass through the loop is called an **iteration**. (How about our using the term "pass"?) For more information, see https://en.wikipedia.org/wiki/Control_flow#Loops.
# Blocks for Loop Creation
diff --git a/help/True_False.md b/help/True_False.md
index f2beb31..4a710fb 100644
--- a/help/True_False.md
+++ b/help/True_False.md
@@ -7,7 +7,7 @@ To access the **True False** Block, click **Logic**.
| **true** | Useful when combined with another block, like the **Repeat** block, to tell the program to do something whenever a condition is true.|
| **false** |Useful when combined with another block, like the **Repeat** block, to tell the program to do something whenever a condition is true.|
-**Tip**: Combine the **True False** block with the [Repeat](wiki/Repeat) block to write statements like:
+**Tip**: Combine the **True False** block with the [Repeat](Repeat) block to write statements like:
* **Repeat while** true.
* **Repeat until** false.
diff --git a/help/Variables.md b/help/Variables.md
index a258c9e..3a7f3d5 100644
--- a/help/Variables.md
+++ b/help/Variables.md
@@ -3,7 +3,7 @@
# Introduction
We use the term _variable_ the same as it is used in mathematics and in other programming languages: a named value that can be changed (varies). Variables can be created in several different ways.
- * Every [count with](https://code.google.com/p/blockly/wiki/Loops#count_with) and [for each](https://code.google.com/p/blockly/wiki/Loops#for_each) block uses a variable and defines its values. These values can only be used within the block. A traditional computer science term for these are [loop variables](https://en.wikipedia.org/wiki/Loop_variable).
+ * Every [count with](Loops#count_with) and [for each](Loops#for_each) block uses a variable and defines its values. These values can only be used within the block. A traditional computer science term for these are [loop variables](https://en.wikipedia.org/wiki/Loop_variable).
* User-defined functions (also known as "procedures") can define inputs, which creates variables that can be used only within the function. These are traditionally called "[parameters](https://en.wikipedia.org/wiki/Parameter)" or "arguments".
* Users may create variables at any time through the "set" block. These are traditionally called "[global variables](https://en.wikipedia.org/wiki/Global_variables)".
Blockly does not support [local variables](https://en.wikipedia.org/wiki/Local_variable).
@@ -46,4 +46,4 @@ Consider the following example code:

-The first row of blocks creates a variable named "age" and sets its initial value to the number 12. The second row of blocks gets the value 12, adds 1 to it, and stores the sum (13) into the variable. The final row displays the message: "Happy birthday! You are now 13"
\ No newline at end of file
+The first row of blocks creates a variable named "age" and sets its initial value to the number 12. The second row of blocks gets the value 12, adds 1 to it, and stores the sum (13) into the variable. The final row displays the message: "Happy birthday! You are now 13"